$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 |