     $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