1
0
mirror of https://github.com/cc65/cc65.git synced 2025-01-01 03:30:20 +00:00

Fixed bugs in the geos-cbm DIO sector-number converter functions.

* 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.
This commit is contained in:
Greg King 2015-08-27 04:02:26 -04:00
parent 8476360e9f
commit 6fd56bf9b6
2 changed files with 17 additions and 16 deletions

View File

@ -1,6 +1,6 @@
; ;
; Maciej 'YTM/Elysium' Witkowiak ; 2001-07-02, Maciej 'YTM/Elysium' Witkowiak
; 2.7.2001 ; 2015-08-26, Greg King
; ;
; ;
; unsigned char __fastcall__ dio_phys_to_log (dhandle_t handle, ; unsigned char __fastcall__ dio_phys_to_log (dhandle_t handle,
@ -59,7 +59,7 @@ _dio_phys_to_log:
lda (ptr3),y lda (ptr3),y
tay tay
lda driveType,y lda driveType,y
and #%00000011 ; this is for RamDrive compatibility and #%00001111 ; remove ramDisk flags
cmp #DRV_1541 cmp #DRV_1541
beq dio_cts1541 beq dio_cts1541
cmp #DRV_1571 cmp #DRV_1571
@ -67,7 +67,7 @@ _dio_phys_to_log:
cmp #DRV_1581 cmp #DRV_1581
beq dio_cts1581 beq dio_cts1581
lda #DEV_NOT_FOUND ; unknown device lda #INCOMPATIBLE ; unsupported device
ldx #0 ldx #0
beq ret beq ret
@ -91,7 +91,7 @@ _inv_data:
lda #INV_TRACK lda #INV_TRACK
.byte $2c .byte $2c
_inv_hand: _inv_hand:
lda #INCOMPATIBLE lda #DEV_NOT_FOUND
ldx #0 ldx #0
beq ret beq ret

View File

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