]> git.sur5r.net Git - cc65/commitdiff
Fixed bugs in the geos-cbm DIO sector-number converter functions.
authorGreg King <gregdk@users.sf.net>
Thu, 27 Aug 2015 08:02:26 +0000 (04:02 -0400)
committerGreg King <gregdk@users.sf.net>
Fri, 23 Feb 2018 21:12:12 +0000 (16:12 -0500)
* The 16-bit comparison code actually didn't compare the high byte.
* This implementation supports only the 1541, 1571, and 1581; but, it didn't exclude the other drive types that GEOS supports.
* Two error code numbers were swapped.
* A 1571 converter didn't catch sector numbers that are too high.
* A 1581 converter didn't catch sector numbers that are too high.

libsrc/geos-cbm/disk/dio_cts.s
libsrc/geos-cbm/disk/dio_stc.s

index 8be34364105b18ccc097a36654bf391ef8661915..043e1f8d807082db00717e1b26399ff3f607db9e 100644 (file)
@@ -1,6 +1,6 @@
 ;
-; Maciej 'YTM/Elysium' Witkowiak
-; 2.7.2001
+; 2001-07-02, Maciej 'YTM/Elysium' Witkowiak
+; 2015-08-26, Greg King
 ;
 ;
 ; unsigned char __fastcall__ dio_phys_to_log (dhandle_t handle,
@@ -59,7 +59,7 @@ _dio_phys_to_log:
         lda (ptr3),y
         tay
         lda driveType,y
-        and #%00000011          ; this is for RamDrive compatibility
+        and #%00001111          ; remove ramDisk flags
         cmp #DRV_1541
         beq dio_cts1541
         cmp #DRV_1571
@@ -67,7 +67,7 @@ _dio_phys_to_log:
         cmp #DRV_1581
         beq dio_cts1581
             
-        lda #DEV_NOT_FOUND      ; unknown device
+        lda #INCOMPATIBLE       ; unsupported device
         ldx #0
         beq ret
 
@@ -91,7 +91,7 @@ _inv_data:
         lda #INV_TRACK
         .byte $2c
 _inv_hand:
-        lda #INCOMPATIBLE
+        lda #DEV_NOT_FOUND
         ldx #0
         beq ret
 
index 586e3f3db0ad6ada710dfa004c00bfdcb46bf4af..7398edb639148194cec584db33cc6d6e1ed0f965 100644 (file)
@@ -1,6 +1,6 @@
 ;
-; Maciej 'YTM/Elysium' Witkowiak
-; 2.7.2001
+; 2001-07-02, Maciej 'YTM/Elysium' Witkowiak
+; 2015-08-27, Greg King
 ;
 ; unsigned char __fastcall__ dio_log_to_phys (dhandle_t handle,
 ;                                             unsigned *sectnum,        /* input */
@@ -55,7 +55,7 @@ _dio_log_to_phys:
         lda (ptr3),y
         tay 
         lda driveType,y
-        and #%00000011          ; this is for RamDrive compatibility
+        and #%00001111          ; remove ramDisk flags
         cmp #DRV_1541
         beq dio_stc1541
         cmp #DRV_1571
@@ -63,7 +63,7 @@ _dio_log_to_phys:
         cmp #DRV_1581
         beq dio_stc1581
             
-        lda #DEV_NOT_FOUND      ; unknown device
+        lda #INCOMPATIBLE       ; unsupported device
         ldx #0
         beq _ret
 
@@ -86,7 +86,7 @@ _inv_data:
         lda #INV_TRACK
         .byte $2c
 _inv_hand:
-        lda #INCOMPATIBLE
+        lda #DEV_NOT_FOUND
         ldx #0
         beq _ret
 
@@ -102,8 +102,8 @@ _loop41:
         bne _nxt
         lda tmp1
         cmp sectab_1541_l+1,x
-        bcc _found
-_nxt:   inx 
+_nxt:   bcc _found
+        inx
         cpx #35
         bne _loop41
         beq _inv_data
@@ -124,12 +124,11 @@ dio_stc1571:
 ; - fall down to 1541
         lda tmp2
         cmp #>683
-        bne _cnt71
+        bne _if71
         lda tmp1
         cmp #<683
-        bcc dio_stc1541
+_if71:  bcc dio_stc1541
             
-_cnt71:     
         lda tmp1
         sec 
         sbc #<683
@@ -138,6 +137,8 @@ _cnt71:
         sbc #>683
         sta tmp2
         jsr dio_stc1541         ; will fall through here
+        tay
+        bne _ret                ; result beyond track 70
             
         ldy #diopp_track
         lda (ptr1),y
@@ -166,7 +167,7 @@ _sub81: lda tmp1
         sbc #0
         sta tmp2
         inx 
-        cpx #81
+        cpx #80
         bne _loop81
         beq _inv_data