0000-10000 root ;----------------------------------------------------------------------------------------- ; The Z8000_Schematics.pdf file reveals a number of interesting facts about ; what, how and why for this chip. ; ; p13,p35: ; Pin 40 on the 6508 is not phase-2 clock, as the datasheet I have indicates, ; but a "Set Overflow" pin. The code contains a number of "BVC ." ; instructions which under normal circumstances would either do nothing or ; stall the CPU in a loop from which only an interrupt or reset could ; dislodge it. ; ; p34: ; Memory map: ; 0000 6508 I/O port data direction register ; ; 0001 6508 I/O port ; (p13: only b7 used, to send INTEN) ; ; 0002-003f 6508 RAM ; ; 4000 W0MLSSSS Drive 0 control lines ; W Write protect, 1=protected ; 0 Track 0 detect, 1=on track 0 ; M Motor On, 1=motor on ; L LED, 1=LED on ; SSSS Stepper control ; ; 4001 As 4000, for drive 1 ; ; 4002 SMWEHPGG Control lines ; S Rd: Sync detect, 1=detected ; S Wr: Sync generate, 1=generate ; M MFM mode, 0=GCR ; W Write gate, 1=on ; E Erase gate, 1=on ; H Head select, 0=lower ; P PCSS/PCSD enable, 0=drive 0 ; GG GCR density region, 00=GCR 16 (2.66us) ; ; 4003 8716 PCSS register select ; (from p26:) ; 0xfb LD2 (b7=1: rd, b7=0: wr) ; 0xfd LD1 ; 0xfe LD0 ; 0xf7 FIFO_MOVE ; 0xef Rd_Status ; 0x80 DMADONE ; 0x40 BYTERDY ; 0x20 ERROR ; 0x1f RESERVED ; 0x9f IRQ_HIGH ; 0xbf VI_GND ; 0xde (or 0xdf ?) Single-step (one word) ; 0x7f Reset ; 0xff Power_On ; ; 4004 Data to and from disk ; ; 4005 Data with PCSD select ; ; 4006 8717 PCSD register select ; ; 4007 TRWCSCPS Control lines ; T Testmode, 1=test mode ; R Read enable ; W Write current ; C CRC error R/O ; S Set CRC ; C Clear CRC ; P Precomp ; S Set Overflow R/O ; ; 400c UWNCQQQQ Test ; U delta ; T Flux change R/O ; N Write data R/O ; C Shift reg clock R/O ; QQQQ State R/O ; ; e000-f000 ROM select ; ; p36: On-disk format: ; ; 1.7.1 ID FIELD ; SYNC SECTOR TRACK GAP1 ; BITS 40 10 10 120 ; ; SYNC 40 bits of 1's for synchronization ; SECTOR Sector (0-15) with bit 4 as parity (even) ; TRACK Track (0-79) with bit 7 as parity (even) ; GAP1 Time required to turn on write gate ; ; Real world On-disk format: ; ; SYNC 4 bytes ; AM_ID 1 byte (=0x08) ; CYLINDER 1 byte ; SECTOR 1 byte ; CHECKSUM 1 byte (=EOR(AM_ID, CYLINDER, SECTOR)) ; GAP1 14 bytes (=0x00) ; ; p36: On-disk format: ; ; 1.7.2 DATA FIELD ; SYNC AM DATA CHECKSUM GAP2 ; BITS 40 10 5120 10 120 ; ; SYNC 40 bits of 1's for synchronization ; AM Addres mark = hex 88 ; DATA 512 bytes of data ; CHECKSUM Exclusive OR of data bytes and checksum = 0 ; GAP2 Variable determined by drive speed. ; ; Real world On-disk format: ; ; SYNC 4 bytes ; AM_DATA 1 byte (=0x07) ; DATA 512 bytes ; CHECKSUM 1 byte (=EOR(AM_DATA, DATA)) ; GAP2 X bytes (=0x00) ; ; p36: On-disk format: ; ; 1.7.4 GCR DATA RATES/FORMATTED CAPACITY ; ; Track Region Bit Time Sect/track Sect/reg ; 1-39 2.16 16 624 ; 40-53 2.33 15 210 ; 54-64 2.50 14 154 ; 65-80 2.66 13 208 ; ; Derived memory map: ; CMDADR: ; 0004-0005 Host address (0004=0x00, 0005=0x08) ; ; 0007 TMP ; 0009 Current drive 0/1 ; ; 000a WriteProt status, Drive 0 ; 000b WriteProt status, Drive 1 ; W_______ Write Protected ; _CC_____ WP Changed ; ; 000c Cur_Cyl, Drive 0 ; 000d Cur_Cyl, Drive 1 ; ; 000e ______ss Drive 0 ; ss Stepper-phase ; 000f ______ss Drive 1 (as 0x000e) ; ; 0016 Cylinder ; 0017 StepsNeeded ; 0018 Sector(?) ; 0019 Nsect ; 001a Retry ; 001b Retries left ; 001e Floppy Region ; ; 0024 Address Mark for ID field ; 0025 Address Mark for DATA field ; ; Format floppy, probably: ; 04 uu 00 00 01 00 08 04 00 00 00 00 ff 00 00 00 ; -- -- ----- -- ; | | | | ; | | | +-- Number of blocks ; | | | ; | | +-- Block number ; | | ; | +-- Unit/Drive number: mask: 0x30 ; | ; +--- CMD byte ; ; 0028 cCMD ; 0029 _dd_____ cUNIT ; dd Drive number ; xxxx ; 002a cBLK_H ; 002b cBLK_L ; 002c cBLK_N ; 002d ; 002e cDMAADR_1 ; 002f cDMAADR_2 ;----------------------------------------------------------------------------------------- e000 78 |x | RESET: SEI e001 d8 | | CLD e002 a2 00 | | LDX #00 e004 a0 02 | | LDY #02 e006-e0fd segment e006-e00d bb e006 98 | | TYA e007 99 00 00 | | STA 0000,Y e00a c8 | | INY e00b d0 f9 | | BNE e006 ; >:NE:e006 >:NNE:e00d e00d-e00f bb e00d a0 02 | | LDY #02 e00f-e015 bb e00f 98 | | TYA e010 d9 00 00 | | CMP 0000,Y e013 d0 33 | 3 | BNE ram_err ; >:NE:e048 >:NNE:e015 e015-e01f bb e015 a9 55 | U | LDA #55 e017 99 00 00 | | STA 0000,Y e01a d9 00 00 | | CMP 0000,Y e01d d0 29 | ) | BNE ram_err ; >:NE:e048 >:NNE:e01f e01f-e028 bb e01f 0a | | ASL A e020 99 00 00 | | STA 0000,Y e023 d9 00 00 | | CMP 0000,Y e026 d0 20 | | BNE ram_err ; >:NE:e048 >:NNE:e028 e028-e030 bb e028 a9 00 | | LDA #00 e02a 99 00 00 | | STA 0000,Y e02d c8 | | INY e02e d0 df | | BNE e00f ; >:NE:e00f >:NNE:e030 e030-e034 bb e030 e8 | | INX e031 4c 75 e0 |Lu | JMP good_ram ; >:T:e075 e034 e8 | | INX ; <===== BRUTE FORCE DISCOVERY e035 a9 e0 | | LDA #e0 e037 85 03 | | STA 03 e039 18 | | CLC e03a-e03f bb e03a 71 02 |q | ADC (02,Y) e03c c8 | | INY e03d d0 fb | | BNE e03a ; >:NE:e03a >:NNE:e03f e03f-e043 bb e03f e6 03 | | INC 03 e041 d0 f7 | | BNE e03a ; >:NE:e03a >:NNE:e043 e043-e048 bb e043 69 ff |i | ADC #ff e045 4c 75 e0 |Lu | JMP good_ram ; >:T:e075 e048-e049 bb ;----------------------------------------------------------------------------------------- ; RAM error, flash bit(s) (LED?) to tell the world ; e048 9a | | ram_err: TXS e049-e04a bb e049 ba | | TSX e04a-e053 bb e04a a9 10 | | LDA #10 e04c 8d 00 40 | @ | STA 4000 e04f 8d 01 40 | @ | STA 4001 e052 98 | | TYA e053-e054 bb e053 18 | | CLC e054-e058 bb e054 69 01 |i | ADC #01 e056 d0 fc | | BNE e054 ; >:NE:e054 >:NNE:e058 e058-e05b bb e058 88 | | DEY e059 d0 f8 | | BNE e053 ; >:NE:e053 >:NNE:e05b e05b-e063 bb e05b a9 00 | | LDA #00 e05d 8d 00 40 | @ | STA 4000 e060 8d 01 40 | @ | STA 4001 e063-e064 bb e063 98 | | TYA e064-e065 bb e064 18 | | CLC e065-e069 bb e065 69 01 |i | ADC #01 e067 d0 fc | | BNE e065 ; >:NE:e065 >:NNE:e069 e069-e06c bb e069 88 | | DEY e06a d0 f8 | | BNE e064 ; >:NE:e064 >:NNE:e06c e06c-e06f bb e06c ca | | DEX e06d 10 db | | BPL e04a ; >:PL:e04a >:NPL:e06f e06f-e073 bb e06f e0 f4 | | CPX #f4 e071 d0 f0 | | BNE e063 ; >:NE:e063 >:NNE:e073 e073-e075 bb e073 f0 d4 | | BEQ e049 ; >:EQ:e049 >:NEQ:e075 e075-e0c2 bb good_ram: e075 a2 ff | | LDX #ff e077 9a | | TXS e078 a9 05 | | LDA #05 e07a 85 1a | | STA zRETRY e07c a9 08 | | LDA #08 e07e a2 00 | | LDX #00 e080 85 05 | | STA CMDADR_2 e082 86 04 | | STX CMDADR_1 e084 a9 00 | | LDA #00 e086 8d 02 40 | @ | STA 4002 e089 8e 00 40 | @ | STX 4000 e08c 8e 01 40 | @ | STX 4001 e08f a9 40 | @ | LDA #40 e091 85 01 | | STA 01 e093 85 00 | | STA 00 e095 a2 00 | | LDX #00 e097 86 29 | ) | STX cUNIT e099 20 e0 e7 | | JSR StartMotor(X) ; C:T:e7e0 e09c 20 37 e6 | 7 | JSR Recalibrate() ; C:T:e637 e09f a2 01 | | LDX #01 e0a1 a9 20 | | LDA #20 e0a3 85 29 | ) | STA cUNIT e0a5 20 e0 e7 | | JSR StartMotor(X) ; C:T:e7e0 e0a8 20 37 e6 | 7 | JSR Recalibrate() ; C:T:e637 e0ab 20 3f e1 | ? | JSR MotorsOff() ; C:T:e13f e0ae ad 01 40 | @ | LDA 4001 e0b1 29 ef |) | AND #ef e0b3 8d 01 40 | @ | STA 4001 e0b6 a9 07 | | LDA #07 e0b8 85 25 | % | STA cAM_DATA e0ba a9 08 | | LDA #08 e0bc 85 24 | $ | STA cAM_ID e0be a5 01 | | LDA 01 e0c0 30 03 |0 | BMI e0c5 ; >:MI:e0c5 >:NMI:e0c2 e0c2-e0c5 bb e0c2 4c 4d e1 |LM | IRQ: JMP IRQ ; >:T:e14d e0c5-e0d7 bb e0c5 ad 02 40 | @ | LDA 4002 e0c8 09 04 | | ORA #04 e0ca 8d 02 40 | @ | STA 4002 e0cd a9 7f | | LDA #7f e0cf 8d 03 40 | @ | STA 4003 e0d2 a9 ff | | LDA #ff e0d4 8d 03 40 | @ | STA 4003 e0d7-e0e8 bb e0d7 a5 01 | | LDA 01 e0d9 09 40 | @ | ORA #40 e0db 85 01 | | STA 01 e0dd ad 02 40 | @ | LDA 4002 e0e0 29 fb |) | AND #fb e0e2 8d 02 40 | @ | STA 4002 e0e5 58 |X | CLI e0e6 a2 01 | | LDX #01 e0e8-e0f3 bb e0e8 bd 00 40 | @ | LDA 4000,X e0eb 29 ef |) | AND #ef e0ed 9d 00 40 | @ | STA 4000,X e0f0 ca | | DEX e0f1 10 f5 | | BPL e0e8 ; >:PL:e0e8 >:NPL:e0f3 e0f3-e0f7 bb e0f3 a9 03 | | LDA #03 e0f5 85 15 | | STA zTMO_H e0f7-e0fd bb IdleLoop: e0f7 20 fd e0 | | JSR IdleMotor ; C:T:e0fd e0fa 4c f7 e0 |L | JMP IdleLoop ; >:T:e0f7 e0fd-e12d segment e0fd-e103 bb IdleMotor: e0fd a5 14 | | LDA zTMO_L e0ff 05 15 | | ORA zTMO_H e101 f0 08 | | BEQ e10b ; >:EQ:e10b >:NEQ:e103 e103-e107 bb e103 c6 14 | | DEC zTMO_L e105 d0 07 | | BNE e10e ; >:NE:e10e >:NNE:e107 e107-e10b bb e107 c6 15 | | DEC zTMO_H e109 d0 03 | | BNE e10e ; >:NE:e10e >:NNE:e10b e10b-e10e bb e10b 20 3f e1 | ? | JSR MotorsOff() ; C:T:e13f e10e-e116 bb e10e 20 d3 e7 | | JSR delay_6000() ; C:T:e7d3 e111 20 a2 e7 | | JSR UpdateDriveStatus() ; C:T:e7a2 e114 a2 01 | | LDX #01 e116-e11c bb e116 b5 0a | | LDA dSTATUS,X e118 29 20 |) | AND #20 e11a f0 0d | | BEQ e129 ; >:EQ:e129 >:NEQ:e11c e11c-e129 bb e11c b5 0a | | LDA dSTATUS,X e11e 29 df |) | AND #df e120 95 0a | | STA dSTATUS,X e122 20 e0 e7 | | JSR StartMotor(X) ; C:T:e7e0 e125 a9 04 | | LDA #04 e127 85 15 | | STA zTMO_H e129-e12c bb e129 ca | | DEX e12a 10 ea | | BPL e116 ; >:PL:e116 >:NPL:e12c e12c-e12d bb e12c 60 |` | RTS ; R:T:None e12d-e13f segment e12d-e130 bb e12d 20 fd e0 | | JSR IdleMotor ; C:T:e0fd e130-e136 bb e130 a5 01 | | LDA 01 e132 29 80 |) | AND #80 e134 f0 f7 | | BEQ e12d ; >:EQ:e12d >:NEQ:e136 e136-e13f bb e136 ad 02 40 | @ | LDA 4002 e139 09 04 | | ORA #04 e13b 8d 02 40 | @ | STA 4002 e13e 60 |` | RTS ; R:T:None e13f-e14d segment e13f-e141 bb MotorsOff(): e13f a2 01 | | LDX #01 e141-e14c bb e141 bd 00 40 | @ | LDA 4000,X e144 29 df |) | AND #df e146 9d 00 40 | @ | STA 4000,X e149 ca | | DEX e14a 10 f5 | | BPL e141 ; >:PL:e141 >:NPL:e14c e14c-e14d bb e14c 60 |` | RTS ; R:T:None e14d-e1e7 segment e14d-e16a bb ;----------------------------------------------------------------------------------------- ; Read cmd from host ; e14d a2 ff | | IRQ: LDX #ff e14f 9a | | TXS e150 20 30 e1 | 0 | JSR e130 ; C:T:e130 e153 a5 01 | | LDA 01 e155 29 bf |) | AND #bf e157 85 01 | | STA 01 e159 a9 9f | | LDA #9f e15b 8d 03 40 | @ | STA 4003 e15e 20 44 e2 | D | JSR DMA_Rd_Addr(CMDADR) ; C:T:e244 e161 a2 0e | | LDX #0e e163 20 64 e2 | d | JSR A=DMA_Single(X) ; C:T:e264 e166 c9 ff | | CMP #ff e168 f0 03 | | BEQ e16d ; >:EQ:e16d >:NEQ:e16a e16a-e16d bb e16a 4c d7 e0 |L | JMP e0d7 ; >:T:e0d7 e16d-e171 bb e16d a2 08 | | LDX #08 e16f a0 00 | | LDY #00 e171-e177 bb e171 20 64 e2 | d | JSR A=DMA_Single(X) ; C:T:e264 e174 99 28 00 | ( | STA cCMD,Y e177-e184 bb e177 e8 | | INX e178 ad 06 40 | @ | LDA 4006 e17b c8 | | INY e17c 99 28 00 | ( | STA cCMD,Y e17f c8 | | INY e180 c0 08 | | CPY #08 e182 d0 ed | | BNE e171 ; >:NE:e171 >:NNE:e184 e184-e187 bb e184 ac 8a e2 | | LDY e28a e187-e18e bb e187 b9 8a e2 | | LDA e28a,Y e18a c5 28 | ( | CMP cCMD e18c f0 58 | X | BEQ goto(e291[Y-1]) ; >:EQ:e1e6 >:NEQ:e18e e18e-e191 bb e18e 88 | | DEY e18f d0 f6 | | BNE e187 ; >:NE:e187 >:NNE:e191 e191-e195 bb Error_0x75: e191 a9 75 | u | LDA #75 e193 d0 02 | | BNE Error_A ; >:NE:e197 >:NNE:e195 e195-e197 bb Error_0x80: e195 a9 80 | | LDA #80 e197-e1e6 bb e197 48 |H | Error_A: PHA e198 20 47 e2 | G | JSR DMA_Wr_Addr(CMDADR) ; C:T:e247 e19b a9 de | | LDA #de e19d 8d 03 40 | @ | STA 4003 e1a0 a2 0e | | LDX #0e e1a2 8e 06 40 | @ | STX 4006 e1a5 a9 f7 | | LDA #f7 e1a7 8d 03 40 | @ | STA 4003 e1aa 68 |h | PLA e1ab 8d 06 40 | @ | STA 4006 e1ae a5 29 | ) | LDA cUNIT e1b0 8d 06 40 | @ | STA 4006 e1b3 20 78 e2 | x | JSR DMA_Start() ; C:T:e278 e1b6 e8 | | INX e1b7 a9 fe | | LDA #fe e1b9 8d 03 40 | @ | STA 4003 e1bc 8e 06 40 | @ | STX 4006 e1bf a9 f7 | | LDA #f7 e1c1 8d 03 40 | @ | STA 4003 e1c4 a5 2a | * | LDA cBLK_H e1c6 8d 06 40 | @ | STA 4006 e1c9 a5 2b | + | LDA cBLK_L e1cb 8d 06 40 | @ | STA 4006 e1ce 20 78 e2 | x | JSR DMA_Start() ; C:T:e278 e1d1 a9 fb | | LDA #fb e1d3 8d 03 40 | @ | STA 4003 e1d6 a9 ff | | LDA #ff e1d8 8d 06 40 | @ | STA 4006 e1db 8d 03 40 | @ | STA 4003 e1de a0 bf | | LDY #bf e1e0 8c 03 40 | @ | STY 4003 e1e3 4c d7 e0 |L | JMP e0d7 ; >:T:e0d7 e1e6-e1e7 bb goto(e291[Y-1]): e1e6 88 | | DEY ; >:?:e436 >:?:e2a6 >:?:e32c >:?:e8fb >:?:e8ce ; >:?:e8b0 e1e7 98 | | TYA e1e8 0a | | ASL A e1e9 a8 | | TAY e1ea b9 91 e2 | | LDA e291,Y e1ed 85 02 | | STA 02 e1ef b9 92 e2 | | LDA e292,Y e1f2 85 03 | | STA 03 e1f4 6c 02 00 |l | JMP (0002) ; >:T:None e1f7-e200 segment e1f7-e200 bb SaveDMAadr: e1f7 a5 2e | . | LDA cDMAADR_1 e1f9 85 31 | 1 | STA DMAADR_1_SAVE e1fb a5 2f | / | LDA cDMAADR_2 e1fd 85 30 | 0 | STA DMAADR_2_SAVE e1ff 60 |` | RTS ; R:T:None e200-e244 segment e200-e208 bb RestoreDMAadr: e200 a5 31 | 1 | LDA DMAADR_1_SAVE e202 85 2e | . | STA cDMAADR_1 e204 a5 30 | 0 | LDA DMAADR_2_SAVE e206 85 2f | / | STA cDMAADR_2 e208-e210 bb e208 ad 07 40 | @ | LDA 4007 e20b 09 40 | @ | ORA #40 e20d 38 |8 | SEC e20e b0 06 | | BCS e216 ; >:CS:e216 >:NCS:e210 e210-e216 bb ConfigDMAadr: e210 ad 07 40 | @ | LDA 4007 e213 29 bf |) | AND #bf e215 18 | | CLC e216-e244 bb e216 8d 07 40 | @ | STA 4007 e219 a9 7f | | LDA #7f e21b 8d 03 40 | @ | STA 4003 e21e a9 fb | | LDA #fb e220 8d 03 40 | @ | STA 4003 e223 a5 2e | . | LDA cDMAADR_1 e225 6a |j | ROR A e226 8d 06 40 | @ | STA 4006 e229 a9 fd | | LDA #fd e22b 8d 03 40 | @ | STA 4003 e22e a5 2f | / | LDA cDMAADR_2 e230 6a |j | ROR A e231 8d 06 40 | @ | STA 4006 e234 a9 fe | | LDA #fe e236 8d 03 40 | @ | STA 4003 e239 a9 00 | | LDA #00 e23b 8d 06 40 | @ | STA 4006 e23e a9 f7 | | LDA #f7 e240 8d 03 40 | @ | STA 4003 e243 60 |` | RTS ; R:T:None e244-e264 segment e244-e247 bb DMA_Rd_Addr(CMDADR): e244 38 |8 | SEC e245 b0 01 | | BCS e248 ; >:CS:e248 >:NCS:e247 e247-e248 bb DMA_Wr_Addr(CMDADR): e247 18 | | CLC e248-e264 bb e248 a9 7f | | LDA #7f e24a 8d 03 40 | @ | STA 4003 e24d a9 fb | | LDA #fb e24f 8d 03 40 | @ | STA 4003 e252 a5 05 | | LDA CMDADR_2 e254 6a |j | ROR A e255 8d 06 40 | @ | STA 4006 e258 a9 fd | | LDA #fd e25a 8d 03 40 | @ | STA 4003 e25d a5 04 | | LDA CMDADR_1 e25f 6a |j | ROR A e260 8d 06 40 | @ | STA 4006 e263 60 |` | RTS ; R:T:None e264-e278 segment e264-e278 bb A=DMA_Single(X): e264 a9 7f | | LDA #7f e266 8d 03 40 | @ | STA 4003 e269 a9 de | | LDA #de e26b 8d 03 40 | @ | STA 4003 e26e 8e 06 40 | @ | STX 4006 e271 20 78 e2 | x | JSR DMA_Start() ; C:T:e278 e274 ad 06 40 | @ | LDA 4006 e277 60 |` | RTS ; R:T:None e278-e28a segment e278-e284 bb DMA_Start(): e278 a9 ef | | LDA #ef e27a 8d 03 40 | @ | STA 4003 e27d ad 06 40 | @ | LDA 4006 e280 29 40 |)@ | AND #40 e282 f0 f4 | | BEQ DMA_Start() ; >:EQ:e278 >:NEQ:e284 e284-e28a bb e284 a9 f7 | | LDA #f7 e286 8d 03 40 | @ | STA 4003 e289 60 |` | RTS ; R:T:None e28a-e29d consts ;----------------------------------------------------------------------------------------- ; Command byte dispatch table e28a 06 | | .BYTE 0x06 ; Number of commands in table e28b 04 | | .BYTE 0x04 ; Command FORMAT e28c 08 | | .BYTE 0x08 ; Command READ e28d 0a | | .BYTE 0x0a ; Command WRITE e28e 0f | | .BYTE 0x0f ; Command MOVCMD e28f e3 | | .BYTE 0xe3 ; Command FILL e290 de | | .BYTE 0xde ; Command GOTO e291 36 e4 |6 | .WORD 0xe436 ; Command FORMAT e293 a6 e2 | | .WORD 0xe2a6 ; Command READ e295 2c e3 |, | .WORD 0xe32c ; Command WRITE e297 fb e8 | | .WORD 0xe8fb ; Command MOVCMD e299 ce e8 | | .WORD 0xe8ce ; Command FILL e29b b0 e8 | | .WORD 0xe8b0 ; Command GOTO e29d-e30d segment e29d-e29f bb e29d a9 91 | | LDA #91 e29f-e2a3 bb e29f c6 1b | | DEC zTRIES_LEFT e2a1 d0 10 | | BNE e2b3 ; >:NE:e2b3 >:NNE:e2a3 e2a3-e2a6 bb e2a3 4c 97 e1 |L | Error_A: JMP Error_A ; >:T:e197 e2a6-e2ac bb CMD_READ: e2a6 20 23 e3 | # | JSR WriteGateOff() ; C:T:e323 e2a9 20 17 e6 | | JSR CheckMediaChange() ; C:T:e617 e2ac-e2af bb e2ac 20 ab e6 | | JSR StartDrive() ; C:T:e6ab e2af-e2b3 bb .ReadTry: e2af a5 1a | | LDA zRETRY e2b1 85 1b | | STA zTRIES_LEFT e2b3-e2c9 bb e2b3 20 10 e2 | | JSR ConfigDMAadr ; C:T:e210 e2b6 20 2b e8 | + | JSR FindSector() ; C:T:e82b e2b9 20 85 e8 | | JSR WaitSync() ; C:T:e885 e2bc 50 fe |P | BVCLOOP e2be b8 | | CLV e2bf ad 04 40 | @ | LDA 4004 e2c2 48 |H | PHA e2c3 45 25 |E% | EOR cAM_DATA e2c5 29 0f |) | AND #0f e2c7 f0 05 | | BEQ e2ce ; >:EQ:e2ce >:NEQ:e2c9 e2c9-e2ce bb e2c9 68 |h | PLA e2ca a9 93 | | LDA #93 e2cc d0 d1 | | BNE e29f ; >:NE:e29f >:NNE:e2ce e2ce-e2d1 bb e2ce a2 00 | | LDX #00 e2d0 68 |h | PLA e2d1-e2e0 bb e2d1 50 fe |P | BVCLOOP e2d3 b8 | | CLV e2d4 4d 05 40 |M @ | EOR 4005 e2d7 50 fe |P | BVCLOOP e2d9 b8 | | CLV e2da 4d 05 40 |M @ | EOR 4005 e2dd e8 | | INX e2de d0 f1 | | BNE e2d1 ; >:NE:e2d1 >:NNE:e2e0 e2e0-e2e7 bb e2e0 50 fe |P | BVCLOOP e2e2 4d 04 40 |M @ | EOR 4004 e2e5 d0 b6 | | BNE e29d ; >:NE:e29d >:NNE:e2e7 e2e7-e2f3 bb e2e7 a5 ef | | LDA ef e2e9 8d 03 40 | @ | STA 4003 e2ec ad 06 40 | @ | LDA 4006 e2ef 29 20 |) | AND #20 e2f1 d0 00 | | BNE e2f3 ; >:NE:e2f3 >:NNE:e2f3 e2f3-e2f7 bb e2f3 c6 2c | , | DEC cBLK_N e2f5 f0 13 | | BEQ Error_0x80 ; >:EQ:e30a >:NEQ:e2f7 e2f7-e2fd bb e2f7 a5 2d | - | LDA 2d e2f9 29 20 |) | AND #20 e2fb f0 05 | | BEQ e302 ; >:EQ:e302 >:NEQ:e2fd e2fd-e302 bb e2fd a9 bf | | LDA #bf e2ff 8d 03 40 | @ | STA 4003 e302-e307 bb e302 20 0d e3 | | JSR NextSector() ; C:T:e30d e305 d0 a8 | | BNE .ReadTry ; >:NE:e2af >:NNE:e307 e307-e30a bb e307 4c ac e2 |L | JMP e2ac ; >:T:e2ac e30a-e30d bb Error_0x80: e30a 4c 95 e1 |L | JMP Error_0x80 ; >:T:e195 e30d-e323 segment e30d-e311 bb NextSector(): e30d e6 2b | + | INC cBLK_L e30f d0 02 | | BNE e313 ; >:NE:e313 >:NNE:e311 e311-e313 bb e311 e6 2a | * | INC cBLK_H e313-e31c bb e313 18 | | CLC e314 a5 2f | / | LDA cDMAADR_2 e316 69 02 |i | ADC #02 e318 85 2f | / | STA cDMAADR_2 e31a 90 02 | | BCC e31e ; >:CC:e31e >:NCC:e31c e31c-e31e bb e31c e6 2e | . | INC cDMAADR_1 e31e-e323 bb e31e e6 18 | | INC zSECTOR e320 c6 19 | | DEC zNSECT e322 60 |` | RTS ; R:T:None e323-e32c segment e323-e32c bb WriteGateOff(): e323 ad 02 40 | @ | LDA 4002 e326 29 df |) | AND #df e328 8d 02 40 | @ | STA 4002 e32b 60 |` | RTS ; R:T:None e32c-e436 segment e32c-e32f bb CMD_WRITE: e32c 20 23 e3 | # | JSR WriteGateOff() ; C:T:e323 e32f-e33d bb e32f a5 1a | | LDA zRETRY e331 85 33 | 3 | STA 33 e333 a9 01 | | LDA #01 e335 85 21 | ! | STA 21 e337 20 f7 e1 | | JSR SaveDMAadr ; C:T:e1f7 e33a 20 ab e6 | | JSR StartDrive() ; C:T:e6ab e33d-e348 bb e33d 20 09 e6 | | JSR CheckWriteProt() ; C:T:e609 e340 20 08 e2 | | JSR e208 ; C:T:e208 e343 20 2b e8 | + | JSR FindSector() ; C:T:e82b e346 a0 0d | | LDY #0d e348-e351 bb e348 50 fe |P | BVCLOOP e34a b8 | | CLV e34b ad 04 40 | @ | LDA 4004 e34e 88 | | DEY e34f d0 f7 | | BNE e348 ; >:NE:e348 >:NNE:e351 e351-e358 bb e351 a5 25 | % | LDA cAM_DATA e353 20 7d e6 | } | JSR WriteSync() ; C:T:e67d e356 a0 00 | | LDY #00 e358-e369 bb e358 50 fe |P | BVCLOOP e35a b8 | | CLV e35b 4d 05 40 |M @ | EOR 4005 e35e 50 fe |P | BVCLOOP e360 b8 | | CLV e361 4d 05 40 |M @ | EOR 4005 e364 c8 | | INY e365 c0 0c | | CPY #0c e367 d0 ef | | BNE e358 ; >:NE:e358 >:NNE:e369 e369-e373 bb e369 48 |H | PHA e36a ad 02 40 | @ | LDA 4002 e36d 09 10 | | ORA #10 e36f 8d 02 40 | @ | STA 4002 e372 68 |h | PLA e373-e382 bb e373 50 fe |P | BVCLOOP e375 b8 | | CLV e376 4d 05 40 |M @ | EOR 4005 e379 50 fe |P | BVCLOOP e37b b8 | | CLV e37c 4d 05 40 |M @ | EOR 4005 e37f c8 | | INY e380 d0 f1 | | BNE e373 ; >:NE:e373 >:NNE:e382 e382-e390 bb e382 50 fe |P | BVCLOOP e384 b8 | | CLV e385 8d 04 40 | @ | STA 4004 e388 20 63 e5 | c | JSR WriteEraseGateOff() ; C:T:e563 e38b 20 13 e3 | | JSR e313 ; C:T:e313 e38e f0 08 | | BEQ e398 ; >:EQ:e398 >:NEQ:e390 e390-e395 bb e390 20 13 e3 | | JSR e313 ; C:T:e313 e393 f0 03 | | BEQ e398 ; >:EQ:e398 >:NEQ:e395 e395-e398 bb e395 4c 3d e3 |L= | JMP e33d ; >:T:e33d e398-e39c bb e398 c6 21 | ! | DEC 21 e39a 30 37 |07 | BMI e3d3 ; >:MI:e3d3 >:NMI:e39c e39c-e3a7 bb e39c 20 ab e6 | | JSR StartDrive() ; C:T:e6ab e39f 20 00 e2 | | JSR RestoreDMAadr ; C:T:e200 e3a2 20 13 e3 | | JSR e313 ; C:T:e313 e3a5 f0 2c | , | BEQ e3d3 ; >:EQ:e3d3 >:NEQ:e3a7 e3a7-e3aa bb e3a7 4c 3d e3 |L= | JMP e33d ; >:T:e33d e3aa-e3b0 bb e3aa a9 83 | | LDA #83 e3ac c6 1b | | DEC zTRIES_LEFT e3ae d0 20 | | BNE e3d0 ; >:NE:e3d0 >:NNE:e3b0 e3b0-e3b4 bb e3b0 c6 33 | 3 | DEC 33 e3b2 d0 03 | | BNE e3b7 ; >:NE:e3b7 >:NNE:e3b4 e3b4-e3b7 bb e3b4 4c 97 e1 |L | Error_A: JMP Error_A ; >:T:e197 e3b7-e3cb bb e3b7 a9 01 | | LDA #01 e3b9 85 19 | | STA zNSECT e3bb 18 | | CLC e3bc a5 2c | , | LDA cBLK_N e3be 65 32 |e2 | ADC 32 e3c0 85 2c | , | STA cBLK_N e3c2 38 |8 | SEC e3c3 a5 2b | + | LDA cBLK_L e3c5 e5 32 | 2 | SBC 32 e3c7 85 2b | + | STA cBLK_L e3c9 b0 02 | | BCS e3cd ; >:CS:e3cd >:NCS:e3cb e3cb-e3cd bb e3cb c6 2a | * | DEC cBLK_H e3cd-e3d0 bb e3cd 4c 3d e3 |L= | JMP e33d ; >:T:e33d e3d0-e3d3 bb e3d0 4c e1 e3 |L | JMP e3e1 ; >:T:e3e1 e3d3-e3dd bb e3d3 20 00 e2 | | JSR RestoreDMAadr ; C:T:e200 e3d6 a9 00 | | LDA #00 e3d8 85 32 | 2 | STA 32 e3da 20 ab e6 | | JSR StartDrive() ; C:T:e6ab e3dd-e3e1 bb e3dd a5 1a | | LDA zRETRY e3df 85 1b | | STA zTRIES_LEFT e3e1-e3f4 bb e3e1 20 08 e2 | | JSR e208 ; C:T:e208 e3e4 20 2b e8 | + | JSR FindSector() ; C:T:e82b e3e7 20 85 e8 | | JSR WaitSync() ; C:T:e885 e3ea 50 fe |P | BVCLOOP e3ec b8 | | CLV e3ed ad 04 40 | @ | LDA 4004 e3f0 c5 25 | % | CMP cAM_DATA e3f2 d0 b6 | | BNE e3aa ; >:NE:e3aa >:NNE:e3f4 e3f4-e3f8 bb e3f4 85 1d | | STA 1d e3f6 a0 00 | | LDY #00 e3f8-e403 bb e3f8 ad 06 40 | @ | LDA 4006 e3fb 50 fe |P | BVCLOOP e3fd b8 | | CLV e3fe cd 04 40 | @ | CMP 4004 e401 d0 a7 | | BNE e3aa ; >:NE:e3aa >:NNE:e403 e403-e412 bb e403 45 1d |E | EOR 1d e405 85 1d | | STA 1d e407 ad 06 40 | @ | LDA 4006 e40a 50 fe |P | BVCLOOP e40c b8 | | CLV e40d cd 04 40 | @ | CMP 4004 e410 d0 98 | | BNE e3aa ; >:NE:e3aa >:NNE:e412 e412-e419 bb e412 45 1d |E | EOR 1d e414 85 1d | | STA 1d e416 c8 | | INY e417 d0 df | | BNE e3f8 ; >:NE:e3f8 >:NNE:e419 e419-e421 bb e419 50 fe |P | BVCLOOP e41b b8 | | CLV e41c cd 04 40 | @ | CMP 4004 e41f d0 89 | | BNE e3aa ; >:NE:e3aa >:NNE:e421 e421-e427 bb e421 e6 32 | 2 | INC 32 e423 c6 2c | , | DEC cBLK_N e425 f0 0c | | BEQ Error_0x80 ; >:EQ:e433 >:NEQ:e427 e427-e42c bb e427 20 0d e3 | | JSR NextSector() ; C:T:e30d e42a d0 b1 | | BNE e3dd ; >:NE:e3dd >:NNE:e42c e42c-e433 bb e42c a5 1a | | LDA zRETRY e42e 85 33 | 3 | STA 33 e430 4c 2f e3 |L/ | JMP e32f ; >:T:e32f e433-e436 bb Error_0x80: e433 4c 95 e1 |L | JMP Error_0x80 ; >:T:e195 e436-e563 segment e436-e450 bb CMD_FORMAT: e436 20 23 e3 | # | JSR WriteGateOff() ; C:T:e323 e439 a9 00 | | LDA #00 e43b 85 2b | + | STA cBLK_L e43d 85 2a | * | STA cBLK_H e43f a5 29 | ) | LDA cUNIT e441 29 20 |) | AND #20 e443 85 29 | ) | STA cUNIT e445 20 ab e6 | | JSR StartDrive() ; C:T:e6ab e448 a6 09 | | LDX zCURDRV e44a 20 37 e6 | 7 | JSR Recalibrate() ; C:T:e637 e44d 20 09 e6 | | JSR CheckWriteProt() ; C:T:e609 e450-e456 bb e450 a5 1e | | LDA zREGION e452 c5 1f | | CMP 1f e454 f0 05 | | BEQ e45b ; >:EQ:e45b >:NEQ:e456 e456-e45b bb e456 85 1f | | STA 1f e458 20 88 e5 | | JSR CalibrateSpeed() ; C:T:e588 e45b-e468 bb e45b a6 1e | | LDX zREGION e45d bd cf e7 | | LDA SECTRK,X e460 85 19 | | STA zNSECT e462 20 2e e6 | . | JSR WriteEraseGateOn() ; C:T:e62e e465 a9 00 | | LDA #00 e467 aa | | TAX e468-e471 bb e468 8d 04 40 | @ | STA 4004 e46b 50 fe |P | BVCLOOP e46d b8 | | CLV e46e e8 | | INX e46f d0 f7 | | BNE e468 ; >:NE:e468 >:NNE:e471 e471-e499 bb .FmtSector: e471 a5 24 | $ | LDA cAM_ID e473 20 7d e6 | } | JSR WriteSync() ; C:T:e67d e476 50 fe |P | BVCLOOP e478 b8 | | CLV e479 a6 09 | | LDX zCURDRV e47b b5 0c | | LDA dCYLINDER,X e47d 8d 04 40 | @ | STA 4004 e480 50 fe |P | BVCLOOP e482 b8 | | CLV e483 a5 18 | | LDA zSECTOR e485 8d 04 40 | @ | STA 4004 e488 50 fe |P | BVCLOOP e48a b8 | | CLV e48b 55 0c |U | EOR dCYLINDER,X e48d 45 24 |E$ | EOR cAM_ID e48f 8d 04 40 | @ | STA 4004 e492 50 fe |P | BVCLOOP .WriteGAP1: e494 b8 | | CLV e495 a2 0e | | LDX #0e e497 a9 00 | | LDA #00 e499-e4a2 bb e499 8d 04 40 | @ | STA 4004 e49c 50 fe |P | BVCLOOP e49e b8 | | CLV e49f ca | | DEX e4a0 d0 f7 | | BNE e499 ; >:NE:e499 >:NNE:e4a2 e4a2-e4aa bb e4a2 a5 25 | % | LDA cAM_DATA e4a4 20 7d e6 | } | JSR WriteSync() ; C:T:e67d .WriteDATA: e4a7 a2 00 | | LDX #00 e4a9 8a | | TXA e4aa-e4b9 bb e4aa 50 fe |P | BVCLOOP e4ac b8 | | CLV e4ad 8d 04 40 | @ | STA 4004 e4b0 50 fe |P | BVCLOOP e4b2 b8 | | CLV e4b3 8d 04 40 | @ | STA 4004 e4b6 ca | | DEX e4b7 d0 f1 | | BNE e4aa ; >:NE:e4aa >:NNE:e4b9 e4b9-e4ca bb e4b9 50 fe |P | BVCLOOP e4bb b8 | | CLV e4bc a5 25 | % | LDA cAM_DATA e4be 8d 04 40 | @ | STA 4004 e4c1 50 fe |P | BVCLOOP e4c3 b8 | | CLV e4c4 a2 02 | | LDX #02 e4c6 c6 19 | | DEC zNSECT e4c8 f0 02 | | BEQ e4cc ; >:EQ:e4cc >:NEQ:e4ca e4ca-e4cc bb .WriteGAP2: e4ca a6 20 | | LDX zGAP2LEN e4cc-e4ce bb e4cc a9 00 | | LDA #00 e4ce-e4d7 bb e4ce 8d 04 40 | @ | STA 4004 e4d1 50 fe |P | BVCLOOP e4d3 b8 | | CLV e4d4 ca | | DEX e4d5 d0 f7 | | BNE e4ce ; >:NE:e4ce >:NNE:e4d7 e4d7-e4dd bb e4d7 e6 18 | | INC zSECTOR e4d9 a5 19 | | LDA zNSECT e4db f0 03 | | BEQ e4e0 ; >:EQ:e4e0 >:NEQ:e4dd e4dd-e4e0 bb .FmtSector: e4dd 4c 71 e4 |Lq | JMP .FmtSector ; >:T:e471 e4e0-e4ea bb e4e0 20 63 e5 | c | JSR WriteEraseGateOff() ; C:T:e563 e4e3 ad 02 40 | @ | LDA 4002 e4e6 29 08 |) | AND #08 e4e8 d0 0f | | BNE e4f9 ; >:NE:e4f9 >:NNE:e4ea e4ea-e4f9 bb e4ea ad 02 40 | @ | LDA 4002 e4ed 09 08 | | ORA #08 e4ef 8d 02 40 | @ | STA 4002 e4f2 a9 00 | | LDA #00 e4f4 85 18 | | STA zSECTOR e4f6 4c 5b e4 |L[ | JMP e45b ; >:T:e45b e4f9-e4fd bb e4f9 a5 1a | | LDA zRETRY e4fb 85 1b | | STA zTRIES_LEFT e4fd-e507 bb e4fd 20 ab e6 | | JSR StartDrive() ; C:T:e6ab e500 a6 1e | | LDX zREGION e502 bd cf e7 | | LDA SECTRK,X e505 85 19 | | STA zNSECT e507-e517 bb e507 20 2b e8 | + | JSR FindSector() ; C:T:e82b e50a 20 85 e8 | | JSR WaitSync() ; C:T:e885 e50d 50 fe |P | BVCLOOP e50f b8 | | CLV e510 ad 04 40 | @ | LDA 4004 e513 c5 25 | % | CMP cAM_DATA e515 d0 40 | @ | BNE e557 ; >:NE:e557 >:NNE:e517 e517-e51b bb e517 a2 01 | | LDX #01 e519 a0 02 | | LDY #02 e51b-e524 bb e51b 50 fe |P | BVCLOOP e51d b8 | | CLV e51e 4d 04 40 |M @ | EOR 4004 e521 ca | | DEX e522 d0 f7 | | BNE e51b ; >:NE:e51b >:NNE:e524 e524-e527 bb e524 88 | | DEY e525 10 f4 | | BPL e51b ; >:PL:e51b >:NPL:e527 e527-e52a bb e527 aa | | TAX e528 d0 2d | - | BNE e557 ; >:NE:e557 >:NNE:e52a e52a-e530 bb e52a e6 18 | | INC zSECTOR e52c c6 19 | | DEC zNSECT e52e d0 d7 | | BNE e507 ; >:NE:e507 >:NNE:e530 e530-e53c bb e530 a6 1e | | LDX zREGION e532 bd cf e7 | | LDA SECTRK,X e535 18 | | CLC e536 65 2b |e+ | ADC cBLK_L e538 85 2b | + | STA cBLK_L e53a 90 02 | | BCC e53e ; >:CC:e53e >:NCC:e53c e53c-e53e bb e53c e6 2a | * | INC cBLK_H e53e-e545 bb e53e ad 02 40 | @ | LDA 4002 e541 29 08 |) | AND #08 e543 f0 b8 | | BEQ e4fd ; >:EQ:e4fd >:NEQ:e545 e545-e54b bb e545 a5 2a | * | LDA cBLK_H e547 c9 09 | | CMP #09 e549 d0 06 | | BNE e551 ; >:NE:e551 >:NNE:e54b e54b-e551 bb e54b a5 2b | + | LDA cBLK_L e54d c9 25 | % | CMP #25 e54f 90 0f | | BCC Error_0x80 ; >:CC:e560 >:NCC:e551 e551-e557 bb e551 20 ab e6 | | JSR StartDrive() ; C:T:e6ab e554 4c 50 e4 |LP | JMP e450 ; >:T:e450 e557-e55d bb e557 a9 83 | | LDA #83 e559 c6 1b | | DEC zTRIES_LEFT e55b d0 a0 | | BNE e4fd ; >:NE:e4fd >:NNE:e55d e55d-e560 bb e55d 4c 97 e1 |L | Error_A: JMP Error_A ; >:T:e197 e560-e563 bb Error_0x80: e560 4c 95 e1 |L | JMP Error_0x80 ; >:T:e195 e563-e588 segment e563-e576 bb WriteEraseGateOff(): e563 ad 04 40 | @ | LDA 4004 e566 50 fe |P | BVCLOOP e568 b8 | | CLV e569 ad 04 40 | @ | LDA 4004 e56c 50 fe |P | BVCLOOP e56e b8 | | CLV e56f ad 02 40 | @ | LDA 4002 e572 29 df |) | AND #df e574 a0 1f | | LDY #1f e576-e582 bb e576 8d 04 40 | @ | STA 4004 e579 8d 02 40 | @ | STA 4002 e57c 50 fe |P | BVCLOOP e57e b8 | | CLV e57f 88 | | DEY e580 d0 f4 | | BNE e576 ; >:NE:e576 >:NNE:e582 e582-e588 bb e582 29 ef |) | AND #ef e584 8d 02 40 | @ | STA 4002 e587 60 |` | RTS ; R:T:None e588-e609 segment e588-e591 bb ;----------------------------------------------------------------------------------------- ; From p36: ; 1.7.3 GAP 2 DETERMINATION ; During format gap 2 must allow for 2% speed variation at the end of ; each sector, so that fast running drives will not write over the beginning ; of the next sector. This 2% is for drives thar are running at the correct ; speed, so this figure must be adjusted for the drive speed at the time of ; format. Compensating for motor speed error in format will allow gap 2 to ; be 2% vs. 4% if the format speed is not known. This will generate another ; 2% of disk space for storage and will check the drive for an out of ; specification speed. The format will perform a speed check to by writing ; 38*256 bytes of GCR 0 (210.773ms or 105%) followed by 4 bytes of sync. ; The gcr 0 bytes are then counted until sync is found. This number is the ; total number of bytes that can be written on track 1 at the current speed. ; A minimum gap 2 of 12 bytes is selected for a drive that is running 2% ; fast and this is incremented by 1 byte for every 16 bytes/track extra. ; The same procedure is followed for all four of the density regions. ; CalibrateSpeed(): e588 20 2e e6 | . | JSR WriteEraseGateOn() ; C:T:e62e e58b a0 01 | | LDY #01 e58d a2 26 | & | LDX #26 e58f a9 00 | | LDA #00 e591-e59a bb e591 8d 04 40 | @ | STA 4004 e594 50 fe |P | BVCLOOP e596 b8 | | CLV e597 88 | | DEY e598 d0 f7 | | BNE e591 ; >:NE:e591 >:NNE:e59a e59a-e59d bb e59a ca | | DEX e59b d0 f4 | | BNE e591 ; >:NE:e591 >:NNE:e59d e59d-e5ac bb e59d 8d 04 40 | @ | STA 4004 e5a0 a2 04 | | LDX #04 e5a2 ad 02 40 | @ | LDA 4002 e5a5 09 80 | | ORA #80 e5a7 8d 02 40 | @ | STA 4002 e5aa a0 ff | | LDY #ff e5ac-e5b5 bb e5ac 8c 04 40 | @ | STY 4004 e5af 50 fe |P | BVCLOOP e5b1 b8 | | CLV e5b2 ca | | DEX e5b3 d0 f7 | | BNE e5ac ; >:NE:e5ac >:NNE:e5b5 e5b5-e5c4 bb e5b5 29 7f |) | AND #7f e5b7 8d 02 40 | @ | STA 4002 e5ba 20 63 e5 | c | JSR WriteEraseGateOff() ; C:T:e563 e5bd 20 85 e8 | | JSR WaitSync() ; C:T:e885 e5c0 a0 00 | | LDY #00 e5c2 84 07 | | STY zTMP e5c4-e5c9 bb e5c4 ad 02 40 | @ | LDA 4002 e5c7 30 fb |0 | BMI e5c4 ; >:MI:e5c4 >:NMI:e5c9 e5c9-e5cb bb e5c9 a2 09 | | LDX #09 e5cb-e5cd bb e5cb 70 06 |p | BVS e5d3 ; >:VS:e5d3 >:NVS:e5cd e5cd-e5d0 bb e5cd ca | | DEX e5ce d0 fb | | BNE e5cb ; >:NE:e5cb >:NNE:e5d0 e5d0-e5d3 bb e5d0 4c e5 e5 |L | JMP e5e5 ; >:T:e5e5 e5d3-e5db bb e5d3 b8 | | CLV e5d4 ad 04 40 | @ | LDA 4004 e5d7 e6 07 | | INC zTMP e5d9 d0 ee | | BNE e5c9 ; >:NE:e5c9 >:NNE:e5db e5db-e5e0 bb e5db c8 | | INY e5dc c0 26 | & | CPY #26 e5de d0 e9 | | BNE e5c9 ; >:NE:e5c9 >:NNE:e5e0 e5e0-e5e5 bb .Error_0x74: e5e0 a9 74 | t | LDA #74 e5e2 4c 97 e1 |L | JMP Error_A ; >:T:e197 e5e5-e5f6 bb e5e5 38 |8 | SEC e5e6 8a | | TXA e5e7 a6 1e | | LDX zREGION e5e9 fd 75 e6 | u | SBC e675,X e5ec 85 07 | | STA zTMP e5ee 98 | | TYA e5ef fd 79 e6 | y | SBC e679,X e5f2 85 08 | | STA 08 e5f4 90 ea | | BCC .Error_0x74 ; >:CC:e5e0 >:NCC:e5f6 e5f6-e5fc bb e5f6 a9 0f | | LDA #0f e5f8 85 20 | | STA zGAP2LEN e5fa a5 07 | | LDA zTMP e5fc-e5fd bb e5fc 38 |8 | SEC e5fd-e604 bb e5fd e6 20 | | INC zGAP2LEN e5ff fd cf e7 | | SBC SECTRK,X e602 b0 f9 | | BCS e5fd ; >:CS:e5fd >:NCS:e604 e604-e608 bb e604 c6 08 | | DEC 08 e606 10 f4 | | BPL e5fc ; >:PL:e5fc >:NPL:e608 e608-e609 bb e608 60 |` | RTS ; R:T:None e609-e62e segment e609-e612 bb CheckWriteProt(): e609 a6 09 | | LDX zCURDRV e60b bd 00 40 | @ | LDA 4000,X e60e 29 80 |) | AND #80 e610 f0 05 | | BEQ CheckMediaChange() ; >:EQ:e617 >:NEQ:e612 e612-e617 bb e612 a9 f7 | | LDA #f7 e614 4c 97 e1 |L | JMP Error_A ; >:T:e197 e617-e622 bb CheckMediaChange(): e617 20 a2 e7 | | JSR UpdateDriveStatus() ; C:T:e7a2 e61a a6 09 | | LDX zCURDRV e61c b5 0a | | LDA dSTATUS,X e61e 29 40 |)@ | AND #40 e620 f0 0b | | BEQ e62d ; >:EQ:e62d >:NEQ:e622 e622-e62d bb e622 b5 0a | | LDA dSTATUS,X e624 29 bf |) | AND #bf e626 95 0a | | STA dSTATUS,X e628 a9 76 | v | LDA #76 e62a 4c 97 e1 |L | JMP Error_A ; >:T:e197 e62d-e62e bb e62d 60 |` | RTS ; R:T:None e62e-e637 segment e62e-e637 bb WriteEraseGateOn(): e62e ad 02 40 | @ | LDA 4002 e631 09 30 | 0 | ORA #30 e633 8d 02 40 | @ | STA 4002 e636 60 |` | RTS ; R:T:None e637-e675 segment e637-e647 bb Recalibrate(): e637 86 09 | | STX zCURDRV e639 20 e0 e7 | | JSR StartMotor(X) ; C:T:e7e0 e63c 09 10 | | ORA #10 e63e 9d 00 40 | @ | STA 4000,X e641 a0 04 | | LDY #04 e643 84 1f | | STY 1f e645 84 07 | | STY zTMP e647-e653 bb e647 f6 0e | | INC dSTEPPHASE,X e649 20 f9 e7 | | JSR StepDrive(X) ; C:T:e7f9 e64c 20 d3 e7 | | JSR delay_6000() ; C:T:e7d3 e64f c6 07 | | DEC zTMP e651 d0 f4 | | BNE e647 ; >:NE:e647 >:NNE:e653 e653-e662 bb e653 d6 0e | | DEC dSTEPPHASE,X e655 20 f9 e7 | | JSR StepDrive(X) ; C:T:e7f9 e658 20 d3 e7 | | JSR delay_6000() ; C:T:e7d3 e65b bd 00 40 | @ | LDA 4000,X e65e 29 40 |)@ | AND #40 e660 d0 f1 | | BNE e653 ; >:NE:e653 >:NNE:e662 e662-e668 bb e662 b5 0e | | LDA dSTEPPHASE,X e664 29 03 |) | AND #03 e666 d0 eb | | BNE e653 ; >:NE:e653 >:NNE:e668 e668-e675 bb e668 95 0c | | STA dCYLINDER,X e66a a9 03 | | LDA #03 e66c 85 1e | | STA zREGION e66e 0d 02 40 | @ | ORA 4002 e671 8d 02 40 | @ | STA 4002 e674 60 |` | RTS ; R:T:None e675 46 72 a0 cc |Fr | .BYTE 0x46, 0x72, 0xa0, 0xcc e679 1c 1e 20 22 | " | .BYTE 0x1c, 0x1e, 0x20, 0x22 e67d-e6ab segment e67d-e6ab bb WriteSync(): e67d 48 |H | PHA e67e ad 02 40 | @ | LDA 4002 e681 09 a0 | | ORA #a0 e683 8d 02 40 | @ | STA 4002 e686 a0 ff | | LDY #ff e688 8c 04 40 | @ | STY 4004 e68b 50 fe |P | BVCLOOP e68d b8 | | CLV e68e 8c 04 40 | @ | STY 4004 e691 29 7f |) | AND #7f e693 aa | | TAX e694 50 fe |P | BVCLOOP e696 b8 | | CLV e697 8c 04 40 | @ | STY 4004 e69a 50 fe |P | BVCLOOP e69c b8 | | CLV e69d 8c 04 40 | @ | STY 4004 e6a0 50 fe |P | BVCLOOP e6a2 b8 | | CLV e6a3 8e 02 40 | @ | STX 4002 e6a6 68 |h | PLA e6a7 8d 04 40 | @ | STA 4004 e6aa 60 |` | RTS ; R:T:None e6ab-e7a2 segment e6ab-e6b6 bb StartDrive(): e6ab a5 29 | ) | LDA cUNIT e6ad 4a |J | LSR A e6ae 4a |J | LSR A e6af 4a |J | LSR A e6b0 4a |J | LSR A e6b1 4a |J | LSR A e6b2 c9 02 | | CMP #02 e6b4 90 05 | | BCC e6bb ; >:CC:e6bb >:NCC:e6b6 e6b6-e6bb bb e6b6 a9 f1 | | LDA #f1 e6b8 4c 97 e1 |L | JMP Error_A ; >:T:e197 e6bb-e6dd bb e6bb 85 09 | | STA zCURDRV e6bd aa | | TAX .StartMotor: e6be 20 e0 e7 | | JSR StartMotor(X) ; C:T:e7e0 e6c1 bd 00 40 | @ | LDA 4000,X e6c4 09 10 | | ORA #10 e6c6 9d 00 40 | @ | STA 4000,X .StopOtherMotor: e6c9 8a | | TXA e6ca 49 01 |I | EOR #01 e6cc aa | | TAX e6cd bd 00 40 | @ | LDA 4000,X e6d0 29 ef |) | AND #ef e6d2 9d 00 40 | @ | STA 4000,X e6d5 a2 03 | | LDX #03 e6d7 a5 29 | ) | LDA cUNIT e6d9 29 0f |) | AND #0f e6db d0 18 | | BNE e6f5 ; >:NE:e6f5 >:NNE:e6dd e6dd-e6e3 bb .FindRegion: e6dd a4 2a | * | LDY cBLK_H e6df a5 2b | + | LDA cBLK_L e6e1 85 07 | | STA zTMP e6e3-e6f2 bb e6e3 38 |8 | SEC e6e4 a5 07 | | LDA zTMP e6e6 fd c3 e7 | | SBC SECREGL,X e6e9 85 07 | | STA zTMP e6eb 98 | | TYA e6ec fd bf e7 | | SBC SECREGH,X e6ef a8 | | TAY e6f0 90 08 | | BCC e6fa ; >:CC:e6fa >:NCC:e6f2 e6f2-e6f5 bb e6f2 ca | | DEX e6f3 10 ee | | BPL e6e3 ; >:PL:e6e3 >:NPL:e6f5 e6f5-e6fa bb e6f5 a9 21 | ! | LDA #21 e6f7 4c 97 e1 |L | JMP Error_A ; >:T:e197 e6fa-e70f bb e6fa a5 07 | | LDA zTMP e6fc 7d c3 e7 |} | ADC SECREGL,X e6ff 85 07 | | STA zTMP e701 98 | | TYA e702 7d bf e7 |} | ADC SECREGH,X e705 a8 | | TAY e706 86 1e | | STX zREGION .FindCylinder: e708 bd c7 e7 | | LDA REGCYL,X e70b 85 16 | | STA zCYLINDER e70d a5 07 | | LDA zTMP e70f-e710 bb e70f 38 |8 | SEC e710-e717 bb e710 e6 16 | | INC zCYLINDER e712 fd cb e7 | | SBC SECCYL,X e715 b0 f9 | | BCS e710 ; >:CS:e710 >:NCS:e717 e717-e71a bb e717 88 | | DEY e718 10 f5 | | BPL e70f ; >:PL:e70f >:NPL:e71a e71a-e71f bb .FindHead: e71a 7d cf e7 |} | ADC SECTRK,X e71d 10 0d | | BPL .HeadUpper ; >:PL:e72c >:NPL:e71f e71f-e72c bb e71f 7d cf e7 |} | ADC SECTRK,X e722 85 18 | | STA zSECTOR .HeadLower: e724 ad 02 40 | @ | LDA 4002 e727 29 f7 |) | AND #f7 e729 4c 33 e7 |L3 | JMP .Nblocks ; >:T:e733 e72c-e733 bb .HeadUpper: e72c 85 18 | | STA zSECTOR e72e ad 02 40 | @ | LDA 4002 e731 09 08 | | ORA #08 e733-e742 bb .Nblocks: e733 8d 02 40 | @ | STA 4002 e736 38 |8 | SEC e737 bd cf e7 | | LDA SECTRK,X e73a e5 18 | | SBC zSECTOR e73c 85 19 | | STA zNSECT e73e c5 2c | , | CMP cBLK_N e740 90 06 | | BCC .CfgRegion ; >:CC:e748 >:NCC:e742 e742-e746 bb e742 a5 2c | , | LDA cBLK_N e744 f0 02 | | BEQ .CfgRegion ; >:EQ:e748 >:NEQ:e746 e746-e748 bb e746 85 19 | | STA zNSECT e748-e75d bb .CfgRegion: e748 ad 02 40 | @ | LDA 4002 e74b 29 fc |) | AND #fc e74d 05 1e | | ORA zREGION e74f 8d 02 40 | @ | STA 4002 .StepToCyl: e752 a6 09 | | LDX zCURDRV e754 38 |8 | SEC e755 a5 16 | | LDA zCYLINDER e757 f5 0c | | SBC dCYLINDER,X e759 85 17 | | STA zSTEPS e75b f0 2f | / | BEQ e78c ; >:EQ:e78c >:NEQ:e75d e75d-e766 bb e75d 20 a2 e7 | | JSR UpdateDriveStatus() ; C:T:e7a2 e760 a6 09 | | LDX zCURDRV e762 a5 17 | | LDA zSTEPS e764 f0 23 | # | BEQ e789 ; >:EQ:e789 >:NEQ:e766 e766-e769 bb e766 0a | | ASL A e767 b0 09 | | BCS e772 ; >:CS:e772 >:NCS:e769 e769-e772 bb e769 c6 17 | | DEC zSTEPS e76b f6 0c | | INC dCYLINDER,X e76d f6 0e | | INC dSTEPPHASE,X e76f 4c 78 e7 |Lx | JMP e778 ; >:T:e778 e772-e778 bb e772 e6 17 | | INC zSTEPS e774 d6 0c | | DEC dCYLINDER,X e776 d6 0e | | DEC dSTEPPHASE,X e778-e781 bb e778 20 f9 e7 | | JSR StepDrive(X) ; C:T:e7f9 e77b a5 17 | | LDA zSTEPS e77d 29 7f |) | AND #7f e77f d0 08 | | BNE e789 ; >:NE:e789 >:NNE:e781 e781-e783 bb e781 a9 05 | | LDA #05 e783-e787 bb e783 c5 12 | | CMP 12 e785 90 02 | | BCC e789 ; >:CC:e789 >:NCC:e787 e787-e789 bb e787 85 12 | | STA 12 e789-e78c bb e789 20 d3 e7 | | JSR delay_6000() ; C:T:e7d3 e78c-e790 bb e78c a5 12 | | LDA 12 e78e f0 05 | | BEQ .StepDoneQ ; >:EQ:e795 >:NEQ:e790 e790-e792 bb e790 c6 12 | | DEC 12 e792-e795 bb e792 4c 5d e7 |L] | JMP e75d ; >:T:e75d e795-e799 bb .StepDoneQ: e795 a5 17 | | LDA zSTEPS e797 d0 c4 | | BNE e75d ; >:NE:e75d >:NNE:e799 e799-e7a2 bb e799 a6 09 | | .OnCyl: LDX zCURDRV e79b b5 0a | | LDA dSTATUS,X e79d 09 10 | | ORA #10 e79f 95 0a | | STA dSTATUS,X e7a1 60 |` | RTS ; R:T:None e7a2-e7bf segment e7a2-e7a4 bb UpdateDriveStatus(): e7a2 a2 01 | | LDX #01 e7a4-e7b1 bb e7a4 bd 00 40 | @ | LDA 4000,X e7a7 29 80 |) | AND #80 e7a9 85 07 | | STA zTMP e7ab 55 0a |U | EOR dSTATUS,X e7ad 29 80 |) | AND #80 e7af f0 0a | | BEQ e7bb ; >:EQ:e7bb >:NEQ:e7b1 e7b1-e7bb bb e7b1 a9 60 | ` | LDA #60 e7b3 15 0a | | ORA dSTATUS,X e7b5 29 7f |) | AND #7f e7b7 05 07 | | ORA zTMP e7b9 95 0a | | STA dSTATUS,X e7bb-e7be bb e7bb ca | | DEX e7bc 10 e6 | | BPL e7a4 ; >:PL:e7a4 >:NPL:e7be e7be-e7bf bb e7be 60 |` | RTS ; R:T:None e7bf-e7d3 tbl ;----------------------------------------------------------------------------------------- ; Table of floppy regions e7bf 01 01 01 04 | | SECREGH: .BYTE 0x01, 0x01, 0x01, 0x04 ; # sect/region (H) e7c3 6c 34 a4 e0 |l4 | SECREGL: .BYTE 0x6c, 0x34, 0xa4, 0xe0 ; # sect/region (L) e7c7 3f 34 26 ff |?4& | REGCYL: .BYTE 0x3f, 0x34, 0x26, 0xff ; # Region starts after cylinder e7cb 1a 1c 1e 20 | | SECCYL: .BYTE 0x1a, 0x1c, 0x1e, 0x20 ; # sect/cylinder e7cf 0d 0e 0f 10 | | SECTRK: .BYTE 0x0d, 0x0e, 0x0f, 0x10 ; # sect/track e7d3-e7e0 segment e7d3-e7d5 bb delay_6000(): e7d3 a0 04 | | LDY #04 e7d5-e7d7 bb e7d5 a9 2a | * | LDA #2a e7d7-e7dc bb e7d7 18 | | CLC e7d8 69 01 |i | ADC #01 e7da d0 fb | | BNE e7d7 ; >:NE:e7d7 >:NNE:e7dc e7dc-e7df bb e7dc 88 | | DEY e7dd d0 f6 | | BNE e7d5 ; >:NE:e7d5 >:NNE:e7df e7df-e7e0 bb e7df 60 |` | RTS ; R:T:None e7e0-e7f9 segment e7e0-e7e7 bb StartMotor(X): e7e0 bd 00 40 | @ | LDA 4000,X e7e3 29 20 |) | AND #20 e7e5 d0 0e | | BNE e7f5 ; >:NE:e7f5 >:NNE:e7e7 e7e7-e7f5 bb e7e7 85 13 | | STA 13 e7e9 a9 a6 | | LDA #a6 e7eb 85 12 | | STA 12 e7ed bd 00 40 | @ | LDA 4000,X e7f0 09 20 | | ORA #20 e7f2 9d 00 40 | @ | STA 4000,X e7f5-e7f9 bb e7f5 bd 00 40 | @ | LDA 4000,X e7f8 60 |` | RTS ; R:T:None e7f9-e80a segment e7f9-e80a bb StepDrive(X): e7f9 b5 0e | | LDA dSTEPPHASE,X e7fb 29 03 |) | AND #03 e7fd a8 | | TAY e7fe bd 00 40 | @ | LDA 4000,X e801 29 f0 |) | AND #f0 e803 19 0a e8 | | ORA e80a,Y e806 9d 00 40 | @ | STA 4000,X e809 60 |` | RTS ; R:T:None ; ; Stepper phase table: 0101,0110,1010,1001 e80a 05 06 0a 09 | | .BYTE 0x05, 0x06, 0x0a, 0x09 e80e-e885 segment e80e-e812 bb .TryAgain: e80e c6 1c | | DEC 1c e810 d0 21 | ! | BNE e833 ; >:NE:e833 >:NNE:e812 e812-e818 bb e812 a9 ff | | LDA #ff e814 c5 27 | ' | CMP 27 e816 f0 0e | | BEQ .Error_0x94 ; >:EQ:e826 >:NEQ:e818 e818-e826 bb e818 85 27 | ' | STA 27 e81a a6 09 | | LDX zCURDRV e81c 20 37 e6 | 7 | JSR Recalibrate() ; C:T:e637 e81f a9 40 | @ | LDA #40 e821 85 1c | | STA 1c e823 4c 7f e8 |L | JMP e87f ; >:T:e87f e826-e82b bb .Error_0x94: e826 a9 94 | | LDA #94 e828 4c 97 e1 |L | JMP Error_A ; >:T:e197 e82b-e833 bb FindSector(): e82b a0 00 | | LDY #00 e82d 84 27 | ' | STY 27 e82f a0 40 | @ | LDY #40 e831 84 1c | | STY 1c e833-e844 bb e833 20 85 e8 | | JSR WaitSync() ; C:T:e885 e836 50 fe |P | BVCLOOP e838 b8 | | CLV e839 ad 04 40 | @ | LDA 4004 e83c 85 1d | | STA 1d e83e 45 24 |E$ | EOR cAM_ID e840 29 0f |) | AND #0f e842 d0 ca | | BNE .TryAgain ; >:NE:e80e >:NNE:e844 e844-e850 bb e844 a6 09 | | LDX zCURDRV e846 50 fe |P | BVCLOOP e848 b8 | | CLV e849 ad 04 40 | @ | LDA 4004 e84c d5 0c | | CMP dCYLINDER,X e84e d0 19 | | BNE .SeekMistake ; >:NE:e869 >:NNE:e850 e850-e85e bb e850 45 1d |E | EOR 1d e852 85 1d | | STA 1d e854 a5 18 | | LDA zSECTOR e856 50 fe |P | BVCLOOP e858 b8 | | CLV e859 cd 04 40 | @ | CMP 4004 e85c d0 b0 | | BNE .TryAgain ; >:NE:e80e >:NNE:e85e e85e-e868 bb e85e 45 1d |E | EOR 1d e860 50 fe |P | BVCLOOP e862 b8 | | CLV e863 cd 04 40 | @ | CMP 4004 e866 d0 a6 | | BNE .TryAgain ; >:NE:e80e >:NNE:e868 e868-e869 bb e868 60 |` | RTS ; R:T:None e869-e86d bb .SeekMistake: e869 85 07 | | STA zTMP e86b 45 1d |E | EOR 1d e86d-e87b bb e86d 50 fe |P | BVCLOOP e86f b8 | | CLV e870 4d 04 40 |M @ | EOR 4004 e873 50 fe |P | BVCLOOP e875 b8 | | CLV e876 cd 04 40 | @ | CMP 4004 e879 d0 93 | | BNE .TryAgain ; >:NE:e80e >:NNE:e87b e87b-e87f bb e87b a5 07 | | LDA zTMP e87d 95 0c | | STA dCYLINDER,X e87f-e885 bb e87f 20 ab e6 | | JSR StartDrive() ; C:T:e6ab e882 4c 0e e8 |L | JMP .TryAgain ; >:T:e80e e885-e8b0 segment e885-e889 bb WaitSync(): e885 a0 00 | | LDY #00 e887 84 26 | & | STY 26 e889-e88b bb e889 a2 00 | | LDX #00 e88b-e890 bb e88b 2c 02 40 |, @ | BIT 4002 e88e 30 1b |0 | BMI e8ab ; >:MI:e8ab >:NMI:e890 e890-e893 bb e890 ca | | DEX e891 d0 f8 | | BNE e88b ; >:NE:e88b >:NNE:e893 e893-e896 bb e893 88 | | DEY e894 d0 f3 | | BNE e889 ; >:NE:e889 >:NNE:e896 e896-e89c bb e896 a9 ff | | LDA #ff e898 c5 26 | & | CMP 26 e89a f0 0a | | BEQ e8a6 ; >:EQ:e8a6 >:NEQ:e89c e89c-e8a6 bb e89c 85 26 | & | STA 26 e89e a6 09 | | LDX zCURDRV e8a0 20 37 e6 | 7 | JSR Recalibrate() ; C:T:e637 e8a3 4c 89 e8 |L | JMP e889 ; >:T:e889 e8a6-e8ab bb e8a6 a9 92 | | LDA #92 e8a8 4c 97 e1 |L | JMP Error_A ; >:T:e197 e8ab-e8b0 bb e8ab ad 04 40 | @ | LDA 4004 e8ae b8 | | CLV e8af 60 |` | RTS ; R:T:None e8b0-e8bc segment e8b0-e8b6 bb CMD_GOTO: e8b0 a5 29 | ) | LDA cUNIT e8b2 c9 d0 | | CMP #d0 e8b4 f0 03 | | BEQ e8b9 ; >:EQ:e8b9 >:NEQ:e8b6 e8b6-e8b9 bb Error_0x75: e8b6 4c 91 e1 |L | JMP Error_0x75 ; >:T:e191 e8b9-e8bc bb e8b9 6c 2a 00 |l* | JMP (cBLK_H) ; >:T:None e8bc-e8c5 segment e8bc-e8c5 bb e8bc a5 2e | . | LDA cDMAADR_1 e8be a0 00 | | LDY #00 e8c0 91 2c | , | STA (2c,Y) e8c2 4c 91 e1 |L | JMP Error_0x75 ; >:T:e191 e8c5-e8ce segment e8c5-e8ce bb e8c5 a0 00 | | LDY #00 e8c7 b1 2c | , | LDA (2c,Y) e8c9 85 29 | ) | STA cUNIT e8cb 4c 91 e1 |L | JMP Error_0x75 ; >:T:e191 e8ce-e8fb segment e8ce-e8de bb CMD_FILL: e8ce 20 23 e3 | # | JSR WriteGateOff() ; C:T:e323 e8d1 20 09 e6 | | JSR CheckWriteProt() ; C:T:e609 e8d4 20 ab e6 | | JSR StartDrive() ; C:T:e6ab e8d7 20 2e e6 | . | JSR WriteEraseGateOn() ; C:T:e62e e8da a2 14 | | LDX #14 e8dc a0 00 | | LDY #00 e8de-e8f1 bb e8de a5 2c | , | LDA cBLK_N e8e0 8d 04 40 | @ | STA 4004 e8e3 50 fe |P | BVCLOOP e8e5 b8 | | CLV e8e6 a5 2d | - | LDA 2d e8e8 8d 04 40 | @ | STA 4004 e8eb 50 fe |P | BVCLOOP e8ed b8 | | CLV e8ee 88 | | DEY e8ef d0 ed | | BNE e8de ; >:NE:e8de >:NNE:e8f1 e8f1-e8f4 bb e8f1 ca | | DEX e8f2 d0 ea | | BNE e8de ; >:NE:e8de >:NNE:e8f4 e8f4-e8f7 bb e8f4 20 63 e5 | c | JSR WriteEraseGateOff() ; C:T:e563 e8f7-e8f8 bb e8f7 58 |X | CLI e8f8-e8fb bb e8f8 4c f8 e8 |L | JMP e8f8 ; >:T:e8f8 e8fb-e906 segment e8fb-e906 bb CMD_MOVCMD: e8fb a5 2e | . | LDA cDMAADR_1 e8fd 85 05 | | STA CMDADR_2 e8ff a5 2f | / | LDA cDMAADR_2 e901 85 04 | | STA CMDADR_1 e903 4c 95 e1 |L | JMP Error_0x80 ; >:T:e195 e906 05 20 | | ORA zGAP2LEN ; <===== BRUTE FORCE DISCOVERY e908 36 e9 |6 | ROL e9,X e90a 38 |8 | SEC e90b 60 |` | RTS ; R:T:None e90c 18 | | CLC ; <===== BRUTE FORCE DISCOVERY e90d 60 |` | RTS ; R:T:None e90e-e936 segment e90e-e916 bb e90e a9 9a | | LDA #9a e910 85 34 | 4 | STA 34 e912 a9 02 | | LDA #02 e914 85 35 | 5 | STA 35 e916-e91f bb e916 ad 08 40 | @ | LDA 4008 e919 85 07 | | STA zTMP e91b 29 01 |) | AND #01 e91d f0 12 | | BEQ e931 ; >:EQ:e931 >:NEQ:e91f e91f-e926 bb e91f 20 83 e7 | | JSR e783 ; C:T:e783 e922 c6 34 | 4 | DEC 34 e924 d0 f0 | | BNE e916 ; >:NE:e916 >:NNE:e926 e926-e92a bb e926 c6 35 | 5 | DEC 35 e928 d0 ec | | BNE e916 ; >:NE:e916 >:NNE:e92a e92a-e931 bb e92a 20 36 e9 | 6 | JSR e936 ; C:T:e936 e92d 38 |8 | SEC e92e a5 07 | | LDA zTMP e930 60 |` | RTS ; R:T:None e931-e936 bb e931 06 07 | | ASL zTMP e933 a5 07 | | LDA zTMP e935 60 |` | RTS ; R:T:None e936-e948 segment e936-e93e bb e936 48 |H | PHA e937 a9 d8 | | LDA #d8 e939 8d 08 40 | @ | STA 4008 e93c a2 05 | | LDX #05 e93e-e941 bb e93e ca | | DEX e93f d0 fd | | BNE e93e ; >:NE:e93e >:NNE:e941 e941-e948 bb e941 a9 d0 | | LDA #d0 e943 8d 08 40 | @ | STA 4008 e946 68 |h | PLA e947 60 |` | RTS ; R:T:None e948 85 07 | | STA zTMP ; <===== BRUTE FORCE DISCOVERY e94a a2 00 | | LDX #00 e94c-e962 segment e94c-e951 bb e94c bd 62 e9 | b | LDA e962,X e94f f0 0e | | BEQ e95f ; >:EQ:e95f >:NEQ:e951 e951-e958 bb e951 25 07 |% | AND zTMP e953 dd 62 e9 | b | CMP e962,X e956 f0 03 | | BEQ e95b ; >:EQ:e95b >:NEQ:e958 e958-e95b bb e958 e8 | | INX e959 d0 f1 | | BNE e94c ; >:NE:e94c >:NNE:e95b e95b-e95f bb e95b bd 68 e9 | h | LDA e968,X e95e 60 |` | RTS ; R:T:None e95f-e962 bb e95f a9 80 | | LDA #80 e961 60 |` | RTS ; R:T:None e962 10 40 04 08 20 | @ | .BYTE 0x10, 0x40, 0x04, 0x08, 0x20 e967 00 | | .BYTE 0x00 e968 94 f7 dd 91 dd | | .BYTE 0x94, 0xf7, 0xdd, 0x91, 0xdd e96d a9 ee | | LDA #ee ; <===== BRUTE FORCE DISCOVERY e96f 4c 77 e1 |Lw | JMP e177 ; >:T:e177 e972 a9 ee | | LDA #ee ; <===== BRUTE FORCE DISCOVERY e974 4c 77 e1 |Lw | JMP e177 ; >:T:e177 e977 a9 ee | | LDA #ee ; <===== BRUTE FORCE DISCOVERY e979 4c 77 e1 |Lw | JMP e177 ; >:T:e177 e97c-e989 segment e97c-e983 bb e97c 48 |H | PHA e97d 20 0e e9 | | JSR e90e ; C:T:e90e e980 68 |h | PLA e981 b0 03 | | BCS e986 ; >:CS:e986 >:NCS:e983 e983-e986 bb e983 8d 08 40 | @ | STA 4008 e986-e989 bb e986 4c f7 e8 |L | JMP e8f7 ; >:T:e8f7 e989 a9 ee | | LDA #ee ; <===== BRUTE FORCE DISCOVERY e98b 4c 77 e1 |Lw | JMP e177 ; >:T:e177 e98e a9 ee | | LDA #ee ; <===== BRUTE FORCE DISCOVERY e990 4c 77 e1 |Lw | JMP e177 ; >:T:e177 e993 86 22 | " | STX 22 ; <===== BRUTE FORCE DISCOVERY e995 84 23 | # | STY 23 e997 aa | | TAX e998 d0 05 | | BNE e99f ; >:NE:e99f >:NNE:e99a e99a-e99f segment e99a-e99f bb e99a a9 ee | | LDA #ee e99c 4c 77 e1 |Lw | JMP e177 ; >:T:e177 e99f-ea33 segment e99f-e9b8 bb e99f 85 07 | | STA zTMP e9a1 0a | | ASL A e9a2 85 35 | 5 | STA 35 e9a4 85 37 | 7 | STA 37 e9a6 a0 00 | | LDY #00 e9a8 84 34 | 4 | STY 34 e9aa 84 36 | 6 | STY 36 e9ac 84 38 | 8 | STY 38 e9ae 84 3a | : | STY 3a e9b0 a0 02 | | LDY #02 e9b2 84 39 | 9 | STY 39 e9b4 84 3b | ; | STY 3b e9b6 a0 09 | | LDY #09 e9b8-e9c6 bb e9b8 46 3b |F; | LSR 3b e9ba 66 3a |f: | ROR 3a e9bc 46 37 |F7 | LSR 37 e9be 66 36 |f6 | ROR 36 e9c0 a5 23 | # | LDA 23 e9c2 c5 35 | 5 | CMP 35 e9c4 90 0f | | BCC e9d5 ; >:CC:e9d5 >:NCC:e9c6 e9c6-e9c8 bb e9c6 d0 2a | * | BNE e9f2 ; >:NE:e9f2 >:NNE:e9c8 e9c8-e9ce bb e9c8 a5 22 | " | LDA 22 e9ca c5 34 | 4 | CMP 34 e9cc 90 07 | | BCC e9d5 ; >:CC:e9d5 >:NCC:e9ce e9ce-e9d0 bb e9ce d0 22 | " | BNE e9f2 ; >:NE:e9f2 >:NNE:e9d0 e9d0-e9d5 bb e9d0 a9 00 | | LDA #00 e9d2 4c 2e ea |L. | JMP ea2e ; >:T:ea2e e9d5-e9f2 bb e9d5 a5 34 | 4 | LDA 34 e9d7 38 |8 | SEC e9d8 e5 36 | 6 | SBC 36 e9da 85 34 | 4 | STA 34 e9dc a5 35 | 5 | LDA 35 e9de e5 37 | 7 | SBC 37 e9e0 85 35 | 5 | STA 35 e9e2 a5 38 | 8 | LDA 38 e9e4 38 |8 | SEC e9e5 e5 3a | : | SBC 3a e9e7 85 38 | 8 | STA 38 e9e9 a5 39 | 9 | LDA 39 e9eb e5 3b | ; | SBC 3b e9ed 85 39 | 9 | STA 39 e9ef 4c 0c ea |L | JMP ea0c ; >:T:ea0c e9f2-ea0c bb e9f2 a5 34 | 4 | LDA 34 e9f4 18 | | CLC e9f5 65 36 |e6 | ADC 36 e9f7 85 34 | 4 | STA 34 e9f9 a5 35 | 5 | LDA 35 e9fb 65 37 |e7 | ADC 37 e9fd 85 35 | 5 | STA 35 e9ff a5 38 | 8 | LDA 38 ea01 18 | | CLC ea02 65 3a |e: | ADC 3a ea04 85 38 | 8 | STA 38 ea06 a5 39 | 9 | LDA 39 ea08 65 3b |e; | ADC 3b ea0a 85 39 | 9 | STA 39 ea0c-ea0f bb ea0c 88 | | DEY ea0d d0 a9 | | BNE e9b8 ; >:NE:e9b8 >:NNE:ea0f ea0f-ea1c bb ea0f a5 22 | " | LDA 22 ea11 38 |8 | SEC ea12 e5 34 | 4 | SBC 34 ea14 aa | | TAX ea15 a5 23 | # | LDA 23 ea17 e5 35 | 5 | SBC 35 ea19 8a | | TXA ea1a b0 12 | | BCS ea2e ; >:CS:ea2e >:NCS:ea1c ea1c-ea20 bb ea1c 65 07 |e | ADC zTMP ea1e 10 05 | | BPL ea25 ; >:PL:ea25 >:NPL:ea20 ea20-ea25 bb ea20 a9 dd | | LDA #dd ea22 4c 77 e1 |Lw | JMP e177 ; >:T:e177 ea25-ea2b bb ea25 a4 39 | 9 | LDY 39 ea27 a6 38 | 8 | LDX 38 ea29 d0 01 | | BNE ea2c ; >:NE:ea2c >:NNE:ea2b ea2b-ea2c bb ea2b 88 | | DEY ea2c-ea2e bb ea2c ca | | DEX ea2d 60 |` | RTS ; R:T:None ea2e-ea33 bb ea2e a4 39 | 9 | LDY 39 ea30 a6 38 | 8 | LDX 38 ea32 60 |` | RTS ; R:T:None ea33 4c 3c ea |L< | JMP ea3c ; <===== BRUTE FORCE DISCOVERY ; >:T:ea3c ea36 4c b9 ea |L | JMP eab9 ; <===== BRUTE FORCE DISCOVERY ; >:T:eab9 ea39 4c 71 eb |Lq | JMP eb71 ; <===== BRUTE FORCE DISCOVERY ; >:T:eb71 ea3c-ea9c segment ea3c-ea52 bb ea3c a2 00 | | LDX #00 ea3e 86 09 | | STX zCURDRV ea40 a9 05 | | LDA #05 ea42 85 02 | | STA 02 ea44 a9 00 | | LDA #00 ea46 85 03 | | STA 03 ea48 20 0d eb | | JSR eb0d ; C:T:eb0d ea4b 20 4e eb | N | JSR eb4e ; C:T:eb4e ea4e a2 00 | | LDX #00 ea50 a4 03 | | LDY 03 ea52-ea5b bb ea52 8c 04 40 | @ | STY 4004 ea55 50 fe |P | BVCLOOP ea57 b8 | | CLV ea58 ca | | DEX ea59 d0 f7 | | BNE ea52 ; >:NE:ea52 >:NNE:ea5b ea5b-ea74 bb ea5b 8c 04 40 | @ | STY 4004 ea5e 50 fe |P | BVCLOOP ea60 b8 | | CLV ea61 29 1b |) | AND #1b ea63 8d 02 40 | @ | STA 4002 ea66 a9 00 | | LDA #00 ea68 85 34 | 4 | STA 34 ea6a 85 35 | 5 | STA 35 ea6c 85 36 | 6 | STA 36 ea6e 85 38 | 8 | STA 38 ea70 85 39 | 9 | STA 39 ea72 85 3a | : | STA 3a ea74-ea79 bb ea74 ad 02 40 | @ | LDA 4002 ea77 10 fb | | BPL ea74 ; >:PL:ea74 >:NPL:ea79 ea79-ea7f bb ea79 ad 04 40 | @ | LDA 4004 ea7c b8 | | CLV ea7d a0 00 | | LDY #00 ea7f-ea8c bb ea7f 50 fe |P | BVCLOOP ea81 b8 | | CLV ea82 ad 04 40 | @ | LDA 4004 ea85 99 00 fd | | STA fd00,Y ea88 c5 03 | | CMP 03 ea8a d0 18 | | BNE eaa4 ; >:NE:eaa4 >:NNE:ea8c ea8c-ea8f bb ea8c c8 | | INY ea8d d0 f0 | | BNE ea7f ; >:NE:ea7f >:NNE:ea8f ea8f-ea93 bb ea8f e6 34 | 4 | INC 34 ea91 d0 06 | | BNE ea99 ; >:NE:ea99 >:NNE:ea93 ea93-ea97 bb ea93 e6 35 | 5 | INC 35 ea95 d0 02 | | BNE ea99 ; >:NE:ea99 >:NNE:ea97 ea97-ea99 bb ea97 e6 36 | 6 | INC 36 ea99-ea9c bb ea99 4c 74 ea |Lt | JMP ea74 ; >:T:ea74 ea9c 20 69 eb | i | JSR eb69 ; <===== BRUTE FORCE DISCOVERY ; C:T:eb69 ea9f a2 00 | | LDX #00 eaa1-eaa4 segment eaa1-eaa4 bb eaa1 4c a1 ea |L | JMP eaa1 ; >:T:eaa1 eaa4-eab1 segment eaa4-eaa8 bb eaa4 e6 38 | 8 | INC 38 eaa6 d0 06 | | BNE eaae ; >:NE:eaae >:NNE:eaa8 eaa8-eaac bb eaa8 e6 39 | 9 | INC 39 eaaa d0 02 | | BNE eaae ; >:NE:eaae >:NNE:eaac eaac-eaae bb eaac e6 3a | : | INC 3a eaae-eab1 bb eaae 4c 8f ea |L | JMP ea8f ; >:T:ea8f eab1 20 69 eb | i | JSR eb69 ; <===== BRUTE FORCE DISCOVERY ; C:T:eb69 eab4 84 ee | | STY ee eab6 4c a4 ea |L | JMP eaa4 ; >:T:eaa4 eab9-eb0d segment eab9-eacd bb eab9 a2 00 | | LDX #00 eabb 86 09 | | STX zCURDRV eabd a9 05 | | LDA #05 eabf 85 02 | | STA 02 eac1 a9 00 | | LDA #00 eac3 85 03 | | STA 03 eac5 20 0d eb | | JSR eb0d ; C:T:eb0d eac8 20 4e eb | N | JSR eb4e ; C:T:eb4e eacb a0 00 | | LDY #00 eacd-ead9 bb eacd b9 00 fd | | LDA fd00,Y ead0 8d 04 40 | @ | STA 4004 ead3 50 fe |P | BVCLOOP ead5 b8 | | CLV ead6 c8 | | INY ead7 d0 f4 | | BNE eacd ; >:NE:eacd >:NNE:ead9 ead9-eae7 bb ead9 8d 04 40 | @ | STA 4004 eadc 50 fe |P | BVCLOOP eade b8 | | CLV eadf ad 02 40 | @ | LDA 4002 eae2 29 1b |) | AND #1b eae4 8d 02 40 | @ | STA 4002 eae7-eaec bb eae7 ad 02 40 | @ | LDA 4002 eaea 10 fb | | BPL eae7 ; >:PL:eae7 >:NPL:eaec eaec-eaf2 bb eaec ad 04 40 | @ | LDA 4004 eaef b8 | | CLV eaf0 a0 00 | | LDY #00 eaf2-eafa bb eaf2 ad 04 40 | @ | LDA 4004 eaf5 d9 00 fd | | CMP fd00,Y eaf8 d0 0b | | BNE eb05 ; >:NE:eb05 >:NNE:eafa eafa-eafd bb eafa c8 | | INY eafb d0 f5 | | BNE eaf2 ; >:NE:eaf2 >:NNE:eafd eafd-eb00 bb eafd 20 69 eb | i | JSR eb69 ; C:T:eb69 eb00-eb05 bb eb00 a2 00 | | LDX #00 eb02 4c 00 eb |L | JMP eb00 ; >:T:eb00 eb05-eb0d bb eb05 20 69 eb | i | JSR eb69 ; C:T:eb69 eb08 a2 ff | | LDX #ff eb0a 4c 05 eb |L | JMP eb05 ; >:T:eb05 eb0d-eb39 segment eb0d-eb2c bb eb0d 20 0e e3 | | JSR e30e ; C:T:e30e eb10 20 5c e7 | \ | JSR e75c ; C:T:e75c eb13 20 92 e7 | | JSR e792 ; C:T:e792 eb16 20 39 eb | 9 | JSR eb39 ; C:T:eb39 eb19 ad 02 40 | @ | LDA 4002 eb1c 29 bc |) | AND #bc eb1e 09 20 | | ORA #20 eb20 8d 02 40 | @ | STA 4002 eb23 ad 04 40 | @ | LDA 4004 eb26 a2 29 | ) | LDX #29 eb28 a0 00 | | LDY #00 eb2a a9 ee | | LDA #ee eb2c-eb35 bb eb2c 50 fe |P | BVCLOOP eb2e b8 | | CLV eb2f 8d 04 40 | @ | STA 4004 eb32 88 | | DEY eb33 d0 f7 | | BNE eb2c ; >:NE:eb2c >:NNE:eb35 eb35-eb38 bb eb35 ca | | DEX eb36 d0 f4 | | BNE eb2c ; >:NE:eb2c >:NNE:eb38 eb38-eb39 bb eb38 60 |` | RTS ; R:T:None eb39-eb4e segment eb39-eb3f bb eb39 a5 12 | | LDA 12 eb3b 05 13 | | ORA 13 eb3d d0 01 | | BNE eb40 ; >:NE:eb40 >:NNE:eb3f eb3f-eb40 bb eb3f 60 |` | RTS ; R:T:None eb40-eb44 bb eb40 a5 12 | | LDA 12 eb42 d0 02 | | BNE eb46 ; >:NE:eb46 >:NNE:eb44 eb44-eb46 bb eb44 c6 13 | | DEC 13 eb46-eb4e bb eb46 c6 12 | | DEC 12 eb48 20 83 e7 | | JSR e783 ; C:T:e783 eb4b 4c 39 eb |L9 | JMP eb39 ; >:T:eb39 eb4e-eb69 segment eb4e-eb5a bb eb4e ad 02 40 | @ | LDA 4002 eb51 09 80 | | ORA #80 eb53 8d 02 40 | @ | STA 4002 eb56 a6 02 | | LDX 02 eb58 a0 ff | | LDY #ff eb5a-eb63 bb eb5a 8c 04 40 | @ | STY 4004 eb5d 50 fe |P | BVCLOOP eb5f b8 | | CLV eb60 ca | | DEX eb61 d0 f7 | | BNE eb5a ; >:NE:eb5a >:NNE:eb63 eb63-eb69 bb eb63 29 7f |) | AND #7f eb65 8d 02 40 | @ | STA 4002 eb68 60 |` | RTS ; R:T:None eb69-eb71 segment eb69-eb71 bb eb69 48 |H | PHA eb6a a9 00 | | LDA #00 eb6c 8d 00 40 | @ | STA 4000 eb6f 68 |h | PLA eb70 60 |` | RTS ; R:T:None eb71-ebfc segment eb71-eb8c bb eb71 a9 24 | $ | LDA #24 eb73 85 02 | | STA 02 eb75 a2 00 | | LDX #00 eb77 86 09 | | STX zCURDRV eb79 20 fc eb | | JSR ebfc ; C:T:ebfc eb7c a9 f0 | | LDA #f0 eb7e 20 7c e9 | | | JSR e97c ; C:T:e97c eb81 a9 00 | | LDA #00 eb83 8d 0b 40 | @ | STA 400b eb86 b8 | | CLV eb87 20 19 ec | | JSR ec19 ; C:T:ec19 eb8a a6 02 | | LDX 02 eb8c-eb8e bb eb8c a0 7f | | LDY #7f eb8e-eb97 bb eb8e 50 fe |P | BVCLOOP eb90 8c 0b 40 | @ | STY 400b eb93 b8 | | CLV eb94 88 | | DEY eb95 10 f7 | | BPL eb8e ; >:PL:eb8e >:NPL:eb97 eb97-eb9a bb eb97 ca | | DEX eb98 d0 f2 | | BNE eb8c ; >:NE:eb8c >:NNE:eb9a eb9a-eba1 bb eb9a ad 08 40 | @ | LDA 4008 eb9d 29 01 |) | AND #01 eb9f d0 f9 | | BNE eb9a ; >:NE:eb9a >:NNE:eba1 eba1-eba9 bb eba1 85 34 | 4 | STA 34 eba3 85 35 | 5 | STA 35 eba5 85 38 | 8 | STA 38 eba7 85 39 | 9 | STA 39 eba9-ebac bb eba9 20 36 e9 | 6 | JSR e936 ; C:T:e936 ebac-ebb3 bb ebac ad 08 40 | @ | LDA 4008 ebaf 29 81 |) | AND #81 ebb1 d0 f9 | | BNE ebac ; >:NE:ebac >:NNE:ebb3 ebb3-ebb9 bb ebb3 a9 e0 | | LDA #e0 ebb5 8d 08 40 | @ | STA 4008 ebb8 b8 | | CLV ebb9-ebc3 bb ebb9 50 fe |P | BVCLOOP ebbb ad 0b 40 | @ | LDA 400b ebbe b8 | | CLV ebbf c9 a1 | | CMP #a1 ebc1 d0 f6 | | BNE ebb9 ; >:NE:ebb9 >:NNE:ebc3 ebc3-ebcd bb ebc3 50 fe |P | BVCLOOP ebc5 ad 0b 40 | @ | LDA 400b ebc8 b8 | | CLV ebc9 c9 a1 | | CMP #a1 ebcb f0 f6 | | BEQ ebc3 ; >:EQ:ebc3 >:NEQ:ebcd ebcd-ebd4 bb ebcd a0 7f | | LDY #7f ebcf a6 02 | | LDX 02 ebd1 4c db eb |L | JMP ebdb ; >:T:ebdb ebd4-ebd6 bb ebd4 a0 7f | | LDY #7f ebd6-ebdb bb ebd6 50 fe |P | BVCLOOP ebd8 ad 0b 40 | @ | LDA 400b ebdb-ebe4 bb ebdb 85 07 | | STA zTMP ebdd ea | | NOP ebde ea | | NOP ebdf ea | | NOP ebe0 c4 07 | | CPY zTMP ebe2 f0 09 | | BEQ ebed ; >:EQ:ebed >:NEQ:ebe4 ebe4-ebe8 bb ebe4 e6 34 | 4 | INC 34 ebe6 d0 0b | | BNE ebf3 ; >:NE:ebf3 >:NNE:ebe8 ebe8-ebed bb ebe8 e6 35 | 5 | INC 35 ebea 4c f3 eb |L | JMP ebf3 ; >:T:ebf3 ebed-ebf0 bb ebed 88 | | DEY ebee 10 e6 | | BPL ebd6 ; >:PL:ebd6 >:NPL:ebf0 ebf0-ebf3 bb ebf0 ca | | DEX ebf1 d0 e1 | | BNE ebd4 ; >:NE:ebd4 >:NNE:ebf3 ebf3-ebf7 bb ebf3 e6 38 | 8 | INC 38 ebf5 d0 b2 | | BNE eba9 ; >:NE:eba9 >:NNE:ebf7 ebf7-ebfc bb ebf7 e6 39 | 9 | INC 39 ebf9 4c a9 eb |L | JMP eba9 ; >:T:eba9 ebfc-ec19 segment ebfc-ec0e bb ebfc 20 5c e7 | \ | JSR e75c ; C:T:e75c ebff 20 92 e7 | | JSR e792 ; C:T:e792 ec02 20 39 eb | 9 | JSR eb39 ; C:T:eb39 ec05 20 1d e3 | | JSR e31d ; C:T:e31d ec08 a5 01 | | LDA 01 ec0a 29 df |) | AND #df ec0c 85 01 | | STA 01 ec0e-ec18 bb ec0e 20 36 e9 | 6 | JSR e936 ; C:T:e936 ec11 ad 08 40 | @ | LDA 4008 ec14 29 81 |) | AND #81 ec16 d0 f6 | | BNE ec0e ; >:NE:ec0e >:NNE:ec18 ec18-ec19 bb ec18 60 |` | RTS ; R:T:None ec19-ec27 segment ec19-ec1d bb ec19 a2 05 | | LDX #05 ec1b a9 f5 | | LDA #f5 ec1d-ec26 bb ec1d 50 fe |P | BVCLOOP ec1f 8d 0b 40 | @ | STA 400b ec22 b8 | | CLV ec23 ca | | DEX ec24 d0 f7 | | BNE ec1d ; >:NE:ec1d >:NNE:ec26 ec26-ec27 bb ec26 60 |` | RTS ; R:T:None ec27 00 00 00 00 00 00 00 00 | | .Fill 00[136c] ff93 4c 6d e8 |Lm | JMP e86d ; <===== BRUTE FORCE DISCOVERY ; >:T:e86d ff96 4c 64 e8 |Ld | JMP e864 ; <===== BRUTE FORCE DISCOVERY ; >:T:e864 ff99 4c 5b e8 |L[ | JMP e85b ; <===== BRUTE FORCE DISCOVERY ; >:T:e85b ff9c 00 e0 | | .WORD 0xe000 ff9e 2d e1 |- | .WORD 0xe12d ffa0 00 00 00 00 00 00 00 00 | | .Fill 00[53] fff3 4c ce e8 |L | JMP CMD_FILL ; >:T:e8ce fff6 4c c5 e8 |L | JMP e8c5 ; >:T:e8c5 fff9 4c bc e8 |L | JMP e8bc ; >:T:e8bc fffc 00 e0 | | .WORD 0xe000 ; RESET fffe 4d e1 |M | .WORD 0xe14d ; IRQ