$D5C6/54726:   Additional attempts for read errors

Jump from $D5B8:

D5C6: 98        TYA
D5C7: 48        PHA
D5C8: A5 7F     LDA $7F         ; drive number
D5CA: 48        PHA
D5CB: BD 5B 02  LDA $025B,X
D5CE: 29 01     AND #$01        ; drive number
D5D0: 85 7F     STA $7F
D5D2: A8        TAY
D5D3: B9 CA FE  LDA $FECA,Y     ; bit model for drive
D5D6: 8D 6D 02  STA $026D
D5D9: 20 A6 D6  JSR $D6A6       ; read attempt
D5DC: C9 02     CMP #$02
D5DE: B0 03     BCS $D5E3       ; not ok?
D5E0: 4C 6D D6  JMP $D66D       ; done

Jump from $D5DE:

D5E3: BD 5B 02  LDA $025B,X     ; command code
D5E6: 29 F0     AND #$F0        ; isolate
D5E8: 48        PHA
D5E9: C9 90     CMP #$90        ; code for write
D5EB: D0 07     BNE $D5F4       ; no
D5ED: A5 7F     LDA $7F         ; drive number
D5EF: 09 B8     ORA #$B8
D5F1: 9D 5B 02  STA $025B,X

Jump from $D5EB:

D5F4: 24 6A     BIT $6A
D5F6: 70 39     BVS $D631
D5F8: A9 00     LDA #$00
D5FA: 8D 99 02  STA $0299       ; counter for searches next to track
D5FD: 8D 9A 02  STA $029A

Jump from $D623:

D600: AC 99 02  LDY $0299       ; counter
D603: AD 9A 02  LDA $029A
D606: 38        SEC
D607: F9 DB FE  SBC $FEDB,Y     ; constants for read attempts
D60A: 8D 9A 02  STA $029A
D60D: B9 DB FE  LDA $FEDB,Y
D610: 20 76 D6  JSR $D676       ; position head next to track
D613: EE 99 02  INC $0299       ; increment counter
D616: 20 A6 D6  JSR $D6A6       ; read attempt
D619: C9 02     CMP #$02        ; return message
D61B: 90 08     BCC $D625       ; smaller than 2, ok?
D61D: AC 99 02  LDY $0299       ; load counter
D620: B9 DB FE  LDA $FEDB,Y     ; get constants
D623: D0 DB     BNE $D600       ; not yet zero (table end)?

Jump from $D61B:

D625: AD 9A 02  LDA $029A
D628: 20 76 D6  JSR $D676       ; position head
D62B: B5 00     LDA $00,X
D62D: C9 02     CMP #$02        ; return message
D62F: 90 2B     BCC $D65C       ; ok?

Jump from $D5F6:

D631: 24 6A     BIT $6A
D633: 10 0F     BPL $D644

Jump from $D65A:

D635: 68        PLA             ; command code
D636: C9 90     CMP #$90        ; for writing?
D638: D0 05     BNE $D63F       ; no
D63A: 05 7F     ORA $7F         ; drive number
D63C: 9D 5B 02  STA $025B,X     ; command code in table

Jump from $D638, $D66B, $D5BF:

D63F: B5 00     LDA $00,X       ; return message
D641: 20 0A E6  JSR $E60A       ; set error message

Jump from $D633:

D644: 68        PLA
D645: 2C 98 02  BIT $0298
D648: 30 23     BMI $D66D
D64A: 48        PHA
D64B: A9 C0     LDA #$C0        ; command code for head positioning
D64D: 05 7F     ORA $7F         ; drive number
D64F: 95 00     STA $00,X       ; in command register

Jump from $D653:

D651: B5 00     LDA $00,X
D653: 30 FC     BMI $D651       ; wait for execution
D655: 20 A6 D6  JSR $D6A6       ; attempt command execution again
D658: C9 02     CMP #$02        ; return message
D65A: B0 D9     BCS $D635       ; incorrect?

Jump from $D62F:

D65C: 68        PLA
D65D: C9 90     CMP #$90        ; command code for writing
D65F: D0 0C     BNE $D66D       ; no
D661: 05 7F     ORA $7F         ; drive number
D663: 9D 5B 02  STA $025B,X     ; in table
D666: 20 A6 D6  JSR $D6A6       ; attempt execution again
D669: C9 02     CMP #$02        ; return message
D66B: B0 D2     BCS $D63F       ; error?

Jump from $D5E0, $D648, $D65F:

D66D: 68        PLA
D66E: 85 7F     STA $7F         ; get drive number back
D670: 68        PLA
D671: A8        TAY
D672: B5 00     LDA $00,X       ; error code
D674: 18        CLC             ; end-of-execution flag
D675: 60        RTS

    Previous Page / Next Page