$FAC7/64199:   Formatting

FAC7: A5 51     LDA $51         ; track number
FAC9: 10 2A     BPL $FAF5       ; formatting already in progress
FACB: A6 3D     LDX $3D         ; drive number
FACD: A9 60     LDA #$60        ; flag for head transport
FACF: 95 20     STA $20,X       ; set
FAD1: A9 01     LDA #$01
FAD3: 95 22     STA $22,X       ; set destination track
FAD5: 85 51     STA $51         ; running track number for format
FAD7: A9 A4     LDA #$A4        ; 164
FAD9: 85 4A     STA $4A         ; step counter for head transport
FADB: AD 00 1C  LDA $1C00
FADE: 29 FC     AND #$FC        ; stepper motor on
FAE0: 8D 00 1C  STA $1C00
FAE3: A9 0A     LDA #$0A        ; 10
FAE5: 8D 20 06  STA $0620       ; error counter
FAE8: A9 A0     LDA #$A0        ; $621/$622 = 4000
FAEA: 8D 21 06  STA $0621       ; initialize track capacity
FAED: A9 0F     LDA #$0F        ; 4000 < capacity < 2*4000 bytes
FAEF: 8D 22 06  STA $0622
FAF2: 4C 9C F9  JMP $F99C       ; back in job loop

Jump from $FAC9:

FAF5: A0 00     LDY #$00
FAF7: D1 32     CMP ($32),Y
FAF9: F0 05     BEQ $FB00
FAFB: 91 32     STA ($32),Y
FAFD: 4C 9C F9  JMP $F99C       ; to job loop

Jump from $FAF9:

FB00: AD 00 1C  LDA $1C00
FB03: 29 10     AND #$10        ; write protect?
FB05: D0 05     BNE $FB0C       ; no
FB07: A9 08     LDA #$08
FB09: 4C D3 FD  JMP $FDD3       ; 26, 'write protect on'

Jump from $FB05, $FBB3:

FB0C: 20 A3 FD  JSR $FDA3       ; write $FF to disk 10240 times
FB0F: 20 C3 FD  JSR $FDC3       ; code ($621/$622) times to disk
FB12: A9 55     LDA #$55        ; $55
FB14: 8D 01 1C  STA $1C01       ; to write head
FB17: 20 C3 FD  JSR $FDC3       ; and ($621/$622) times to disk
FB1A: 20 00 FE  JSR $FE00       ; switch to read
FB1D: 20 56 F5  JSR $F556       ; set timer, find $FF (SYNC)
FB20: A9 40     LDA #$40
FB22: 0D 0B 18  ORA $180B       ; timer 1 free running
FB25: 8D 0B 18  STA $180B
FB28: A9 62     LDA #$62        ; 98 cycles, about 0.1 ms
FB2A: 8D 06 18  STA $1806
FB2D: A9 00     LDA #$00
FB2F: 8D 07 18  STA $1807
FB32: 8D 05 18  STA $1805       ; start timer
FB35: A0 00     LDY #$00        ; counter to zero
FB37: A2 00     LDX #$00

Jump from $FB3C:

FB39: 2C 00 1C  BIT $1C00       ; SYNC found?
FB3C: 30 FB     BMI $FB39       ; no, wait

Jump from $FB41:

FB3E: 2C 00 1C  BIT $1C00       ; SYNC found?
FB41: 10 FB     BPL $FB3E       ; wait for SYNC

Jump from $FB52, $FB55:

FB43: AD 04 18  LDA $1804       ; reset interrupt flag timer

Jump from $FB4F:

FB46: 2C 00 1C  BIT $1C00       ; SYNC found?
FB49: 10 11     BPL $FB5C       ; not SYNC ($55)?
FB4B: AD 0D 18  LDA $180D       ; interrupt flag register
FB4E: 0A        ASL             ; shift timer flag
FB4F: 10 F5     BPL $FB46       ; timer not run down yet?
FB51: E8        INX             ; increment counter
FB52: D0 EF     BNE $FB43
FB54: C8        INY             ; increment hi-byte of counter
FB55: D0 EC     BNE $FB43
FB57: A9 02     LDA #$02        ; overflow, then error
FB59: 4C D3 FD  JMP $FDD3       ; 20, 'read error'

Jump from $FB49:

FB5C: 86 71     STX $71
FB5E: 84 72     STY $72
FB60: A2 00     LDX #$00
FB62: A0 00     LDY #$00        ; counter to zero again

Jump from $FB73, $FB76:

FB64: AD 04 18  LDA $1804       ; reset timer 1 interrupt flag

Jump from $FB70:

FB67: 2C 00 1C  BIT $1C00       ; SYNC found?
FB6A: 30 11     BMI $FB7D       ; yes
FB6C: AD 0D 18  LDA $180D       ; interrupt-flag register
FB6F: 0A        ASL             ; timer flag to bit 7
FB70: 10 F5     BPL $FB67       ; no, wait until timer run down
FB72: E8        INX
FB73: D0 EF     BNE $FB64       ; increment counter
FB75: C8        INY
FB76: D0 EC     BNE $FB64
FB78: A9 02     LDA #$02        ; overflow, then error
FB7A: 4C D3 FD  JMP $FDD3       ; 20, 'read error'

Jump from $FB6A:

FB7D: 38        SEC
FB7E: 8A        TXA
FB7F: E5 71     SBC $71         ; difference between counter
FB81: AA        TAX
FB82: 85 70     STA $70
FB84: 98        TYA             ; and value for $FF-storage
FB85: E5 72     SBC $72
FB87: A8        TAY             ; bring to $70/$71
FB88: 85 71     STA $71
FB8A: 10 0B     BPL $FB97       ; difference positive?
FB8C: 49 FF     EOR #$FF
FB8E: A8        TAY
FB8F: 8A        TXA
FB90: 49 FF     EOR #$FF        ; calculate absolute value of difference
FB92: AA        TAX
FB93: E8        INX
FB94: D0 01     BNE $FB97
FB96: C8        INY

Jump from $FB8A, $FB94:

FB97: 98        TYA
FB98: D0 04     BNE $FB9E
FB9A: E0 04     CPX #$04        ; difference less than 4 * 0.1 ms
FB9C: 90 18     BCC $FBB6       ; yes

Jump from $FB98:

FB9E: 06 70     ASL $70
FBA0: 26 71     ROL $71         ; double difference
FBA2: 18        CLC
FBA3: A5 70     LDA $70
FBA5: 6D 21 06  ADC $0621
FBA8: 8D 21 06  STA $0621       ; add to 4000
FBAB: A5 71     LDA $71
FBAD: 6D 22 06  ADC $0622
FBB0: 8D 22 06  STA $0622
FBB3: 4C 0C FB  JMP $FB0C       ; repeat until difference < 4 * 0.1 ms

Jump from $FB9C:

FBB6: A2 00     LDX #$00
FBB8: A0 00     LDY #$00        ; counter to zero
FBBA: B8        CLV

Jump from $FBC0, $FBC4, $FBC7:

FBBB: AD 00 1C  LDA $1C00       ; SYNC?
FBBE: 10 0E     BPL $FBCE       ; no
FBC0: 50 F9     BVC $FBBB       ; byte ready?
FBC2: B8        CLV
FBC3: E8        INX
FBC4: D0 F5     BNE $FBBB       ; increment counter
FBC6: C8        INY
FBC7: D0 F2     BNE $FBBB
FBC9: A9 03     LDA #$03        ; overflow, then error
FBCB: 4C D3 FD  JMP $FDD3       ; 21, 'read error'

Jump from $FBBE:

FBCE: 8A        TXA
FBCF: 0A        ASL             ; double counter
FBD0: 8D 25 06  STA $0625
FBD3: 98        TYA
FBD4: 2A        ROL
FBD5: 8D 24 06  STA $0624       ; and to $624/$625 as track capacity
FBD8: A9 BF     LDA #$BF
FBDA: 2D 0B 18  AND $180B
FBDD: 8D 0B 18  STA $180B
FBE0: A9 66     LDA #$66        ; 102
FBE2: 8D 26 06  STA $0626
FBE5: A6 43     LDX $43         ; number of sectors in this track
FBE7: A0 00     LDY #$00
FBE9: 98        TYA

Jump from $FBF3:

FBEA: 18        CLC
FBEB: 6D 26 06  ADC $0626
FBEE: 90 01     BCC $FBF1
FBF0: C8        INY

Jump from $FBEE:

FBF1: C8        INY
FBF2: CA        DEX
FBF3: D0 F5     BNE $FBEA       ; calculate number of bytes
FBF5: 49 FF     EOR #$FF
FBF7: 38        SEC
FBF8: 69 00     ADC #$00
FBFA: 18        CLC
FBFB: 6D 25 06  ADC $0625
FBFE: B0 03     BCS $FC03
FC00: CE 24 06  DEC $0624

Jump from $FBFE:

FC03: AA        TAX
FC04: 98        TYA
FC05: 49 FF     EOR #$FF
FC07: 38        SEC
FC08: 69 00     ADC #$00
FC0A: 18        CLC
FC0B: 6D 24 06  ADC $0624       ; result in A/X
FC0E: 10 05     BPL $FC15
FC10: A9 04     LDA #$04
FC12: 4C D3 FD  JMP $FDD3       ; 22, 'read error'

Jump from $FC0E:

FC15: A8        TAY
FC16: 8A        TXA
FC17: A2 00     LDX #$00

Jump from $FC22:

FC19: 38        SEC             ; total divided by number
FC1A: E5 43     SBC $43         ; of sectors ($43)
FC1C: B0 03     BCS $FC21
FC1E: 88        DEY
FC1F: 30 03     BMI $FC24

Jump from $FC1C:

FC21: E8        INX
FC22: D0 F5     BNE $FC19

Jump from $FC1F:

FC24: 8E 26 06  STX $0626       ; compare number of bytes per interval
FC27: E0 04     CPX #$04        ; with minimum value
FC29: B0 05     BCS $FC30       ; ok
FC2B: A9 05     LDA #$05
FC2D: 4C D3 FD  JMP $FDD3       ; 23, 'read error'

Jump from $FC29:

FC30: 18        CLC             ; remainder of division
FC31: 65 43     ADC $43         ; plus number of sectors
FC33: 8D 27 06  STA $0627       ; save
FC36: A9 00     LDA #$00
FC38: 8D 28 06  STA $0628       ; counter for sectors
FC3B: A0 00     LDY #$00        ; counter lo
FC3D: A6 3D     LDX $3D         ; drive number

Jump from $FC82:

FC3F: A5 39     LDA $39         ; constant 8, marker for header
FC41: 99 00 03  STA $0300,Y     ; in buffer
FC44: C8        INY
FC45: C8        INY
FC46: AD 28 06  LDA $0628       ; sector number
FC49: 99 00 03  STA $0300,Y     ; in buffer
FC4C: C8        INY
FC4D: A5 51     LDA $51         ; track number
FC4F: 99 00 03  STA $0300,Y     ; in buffer
FC52: C8        INY
FC53: B5 13     LDA $13,X       ; ID 2
FC55: 99 00 03  STA $0300,Y     ; in buffer
FC58: C8        INY
FC59: B5 12     LDA $12,X       ; ID 1
FC5B: 99 00 03  STA $0300,Y     ; in buffer
FC5E: C8        INY
FC5F: A9 0F     LDA #$0F        ; 15
FC61: 99 00 03  STA $0300,Y     ; in buffer
FC64: C8        INY
FC65: 99 00 03  STA $0300,Y     ; 15 in buffer
FC68: C8        INY
FC69: A9 00     LDA #$00
FC6B: 59 FA 02  EOR $02FA,Y
FC6E: 59 FB 02  EOR $02FB,Y
FC71: 59 FC 02  EOR $02FC,Y     ; generate checksum
FC74: 59 FD 02  EOR $02FD,Y
FC77: 99 F9 02  STA $02F9,Y
FC7A: EE 28 06  INC $0628       ; increment counter
FC7D: AD 28 06  LDA $0628       ; counter
FC80: C5 43     CMP $43         ; compare with number of sectors
FC82: 90 BB     BCC $FC3F       ; smaller, then continue
FC84: 98        TYA
FC85: 48        PHA
FC86: E8        INX
FC87: 8A        TXA

Jump from $FC8C:

FC88: 9D 00 05  STA $0500,X
FC8B: E8        INX
FC8C: D0 FA     BNE $FC88
FC8E: A9 03     LDA #$03        ; buffer pointer to $300
FC90: 85 31     STA $31
FC92: 20 30 FE  JSR $FE30
FC95: 68        PLA
FC96: A8        TAY
FC97: 88        DEY
FC98: 20 E5 FD  JSR $FDE5       ; copy buffer data
FC9B: 20 F5 FD  JSR $FDF5       ; copy data in buffer
FC9E: A9 05     LDA #$05
FCA0: 85 31     STA $31         ; buffer pointer to $500
FCA2: 20 E9 F5  JSR $F5E9       ; calculate parity for data buffer
FCA5: 85 3A     STA $3A         ; and save
FCA7: 20 8F F7  JSR $F78F
FCAA: A9 00     LDA #$00
FCAC: 85 32     STA $32
FCAE: 20 0E FE  JSR $FE0E

Jump from $FD1C:

FCB1: A9 FF     LDA #$FF
FCB3: 8D 01 1C  STA $1C01       ; to write head
FCB6: A2 05     LDX #$05        ; write $FF 5 times

Jump from $FCB8, $FCBC:

FCB8: 50 FE     BVC $FCB8       ; byte ready
FCBA: B8        CLV
FCBB: CA        DEX
FCBC: D0 FA     BNE $FCB8
FCBE: A2 0A     LDX #$0A        ; 10 times
FCC0: A4 32     LDY $32         ; buffer pointer

Jump from $FCC2, $FCCD:

FCC2: 50 FE     BVC $FCC2       ; byte ready?
FCC4: B8        CLV
FCC5: B9 00 03  LDA $0300,Y     ; data from buffer
FCC8: 8D 01 1C  STA $1C01       ; write
FCCB: C8        INY
FCCC: CA        DEX             ; 10 data written?
FCCD: D0 F3     BNE $FCC2
FCCF: A2 09     LDX #$09        ; 9 times

Jump from $FCD1, $FCDA:

FCD1: 50 FE     BVC $FCD1       ; byte ready?
FCD3: B8        CLV
FCD4: A9 55     LDA #$55        ; $55
FCD6: 8D 01 1C  STA $1C01       ; write
FCD9: CA        DEX
FCDA: D0 F5     BNE $FCD1       ; 9 times?
FCDC: A9 FF     LDA #$FF        ; $FF
FCDE: A2 05     LDX #$05        ; 5 times

Jump from $FCE0, $FCE7:

FCE0: 50 FE     BVC $FCE0       ; byte ready?
FCE2: B8        CLV
FCE3: 8D 01 1C  STA $1C01       ; to write head
FCE6: CA        DEX
FCE7: D0 F7     BNE $FCE0
FCE9: A2 BB     LDX #$BB

Jump from $FCEB, $FCF5:

FCEB: 50 FE     BVC $FCEB
FCED: B8        CLV
FCEE: BD 00 01  LDA $0100,X     ; area $1BB to $1FF
FCF1: 8D 01 1C  STA $1C01       ; save
FCF4: E8        INX
FCF5: D0 F4     BNE $FCEB
FCF7: A0 00     LDY #$00

Jump from $FCF9, $FD02:

FCF9: 50 FE     BVC $FCF9       ; byte ready?
FCFB: B8        CLV
FCFC: B1 30     LDA ($30),Y     ; 256 bytes of data
FCFE: 8D 01 1C  STA $1C01       ; write byte to disk
FD01: C8        INY
FD02: D0 F5     BNE $FCF9
FD04: A9 55     LDA #$55        ; $55
FD06: AE 26 06  LDX $0626       ; ($626) times

Jump from $FD09, $FD10:

FD09: 50 FE     BVC $FD09
FD0B: B8        CLV
FD0C: 8D 01 1C  STA $1C01       ; write
FD0F: CA        DEX
FD10: D0 F7     BNE $FD09
FD12: A5 32     LDA $32
FD14: 18        CLC
FD15: 69 0A     ADC #$0A        ; plus 10
FD17: 85 32     STA $32
FD19: CE 28 06  DEC $0628       ; decrement sector number
FD1C: D0 93     BNE $FCB1

Jump from $FD1E:

FD1E: 50 FE     BVC $FD1E       ; byte ready?
FD20: B8        CLV

Jump from $FD21:

FD21: 50 FE     BVC $FD21       ; byte ready?
FD23: B8        CLV
FD24: 20 00 FE  JSR $FE00       ; switch to reading
FD27: A9 C8     LDA #$C8        ; 200
FD29: 8D 23 06  STA $0623

Jump from $FD5B:

FD2C: A9 00     LDA #$00
FD2E: 85 30     STA $30
FD30: A9 03     LDA #$03        ; buffer pointer to $300
FD32: 85 31     STA $31
FD34: A5 43     LDA $43         ; number of sectors per track
FD36: 8D 28 06  STA $0628

Jump from $FD89:

FD39: 20 56 F5  JSR $F556       ; wait for SYNC
FD3C: A2 0A     LDX #$0A        ; 10 data
FD3E: A0 00     LDY #$00

Jump from $FD40, $FD4C:

FD40: 50 FE     BVC $FD40       ; byte ready?
FD42: B8        CLV
FD43: AD 01 1C  LDA $1C01       ; read byte
FD46: D1 30     CMP ($30),Y     ; compare with data in buffer
FD48: D0 0E     BNE $FD58       ; not equal, error
FD4A: C8        INY
FD4B: CA        DEX
FD4C: D0 F2     BNE $FD40
FD4E: 18        CLC
FD4F: A5 30     LDA $30
FD51: 69 0A     ADC #$0A        ; increment pointer by 10
FD53: 85 30     STA $30
FD55: 4C 62 FD  JMP $FD62

Jump from $FD48, $FD70, $FD80:

FD58: CE 23 06  DEC $0623       ; decrement counter for attempts
FD5B: D0 CF     BNE $FD2C       ; not yet zero?
FD5D: A9 06     LDA #$06        ; else error
FD5F: 4C D3 FD  JMP $FDD3       ; 24, 'read error'

Jump from $FD55:

FD62: 20 56 F5  JSR $F556       ; wait for SYNC
FD65: A0 BB     LDY #$BB

Jump from $FD67, $FD73:

FD67: 50 FE     BVC $FD67       ; byte ready?
FD69: B8        CLV
FD6A: AD 01 1C  LDA $1C01       ; read byte
FD6D: D9 00 01  CMP $0100,Y     ; compare with buffer contents
FD70: D0 E6     BNE $FD58       ; not equal, error
FD72: C8        INY
FD73: D0 F2     BNE $FD67       ; next byte
FD75: A2 FC     LDX #$FC

Jump from $FD77, $FD84:

FD77: 50 FE     BVC $FD77       ; byte ready?
FD79: B8        CLV
FD7A: AD 01 1C  LDA $1C01       ; read byte
FD7D: D9 00 05  CMP $0500,Y     ; compare with buffer contents
FD80: D0 D6     BNE $FD58       ; not equal, then error
FD82: C8        INY
FD83: CA        DEX             ; next byte
FD84: D0 F1     BNE $FD77
FD86: CE 28 06  DEC $0628       ; decrement sector counter
FD89: D0 AE     BNE $FD39       ; not yet zero?
FD8B: E6 51     INC $51         ; increment track number
FD8D: A5 51     LDA $51
FD8F: C9 24     CMP #$24        ; compare with 36, highest track number + 1
FD91: B0 03     BCS $FD96       ; greater, then formatting done
FD93: 4C 9C F9  JMP $F99C       ; continue

Jump from $FD91:

FD96: A9 FF     LDA #$FF
FD98: 85 51     STA $51         ; track number to $FF
FD9A: A9 00     LDA #$00
FD9C: 85 50     STA $50
FD9E: A9 01     LDA #$01
FDA0: 4C 69 F9  JMP $F969       ; ok

    Previous Page / Next Page