turboDisk
From C64-Wiki
Jump to navigationJump to search
"turboDisk" is the official name of the fast disk access technology used inside the GEOS operating system for Commodore computers. It allowed users of that system to achieve much faster disk access than the stock operating system permitted.
Source[edit | edit source]
Below is the source to the Disk Drive portion of turboDisk that is uploaded and executed inside the various disk drives while turboDisk is in operation. Annotations, and explanations will be added as they become available.
1541 Disk Drive turboDisk[edit | edit source]
M-W at 0400 4c c0 04 4c aa 04 4c 53 05 4c 3b 05 4c 3e 05 4c 49 05 ea ea 60 ea ea 60 ea ea 60 4c 24 05 20 00 05 88 b1 70 aa 4a 4a 4a 4a 85 73 8a 29 0f aa a9 00 8d 00 18 a9 04 2c 00 18 f0 fb 8e 00 18 ea ea 8a 0a 29 0f 8d 00 18 48 68 a5 73 8d 00 18 ea ea ea 0a 29 0f 8d 00 18 98 d0 c7 20 69 04 a2 02 8e 00 18 a9 04 2c 00 18 f0 fb 60 a0 00 20 00 05 88 a9 04 2c 00 18 f0 fb ea ea 24 70 ad 00 18 0a ea 24 70 0d 00 18 ea 0a 0a 0a 0a 85 74 ad 00 18 0a 24 70 48 68 0d 00 18 29 0f 05 74 91 70 98 d0 cf a9 04 2c 00 18 f0 fb 4c fa 04 20 00 05 68 68 a0 00 84 33 a9 ec 8d 0c 1c 20 1b 05 68 85 49 58 60 78 a5 49 48 a0 00 88 d0 fd 20 09 05 f0 fb 20 fa 04 20 09 05 f0 07 20 1b 05 58 20 f4 04 78 a9 05 85 71 a9 10 85 70 a0 04 20 6c 04 20 14 05 20 0f 05 4c d1 04 20 09 05 d0 fb 60 a9 02 8d 00 18 60 20 f4 04 a9 00 8d 00 18 60 a9 04 2c 00 18 60 4c 00 10 00 00 ad 00 1c 09 08 d0 05 a9 f7 2d 00 1c 8d 00 1c 60 a5 1c f0 09 a9 00 85 22 20 8c 06 f0 05 a9 00 85 1c 2c a9 03 4c 4b 05 a9 00 2c a9 02 48 20 e3 06 68 a8 20 fd 06 a5 00 8d 00 03 a0 01 4c fd 06 20 f4 06 20 6a 04 20 5f 05 4c 49 05 ad 00 1c 29 10 d0 05 a9 08 85 00 60 20 c6 05 b0 fa a9 10 20 3c 06 20 e9 f5 85 3a 20 8f f7 ba 86 49 20 10 f5 a2 08 50 fe b8 ca 10 fa 8e 03 1c a9 ce 8d 0c 1c 8a a2 05 8d 01 1c b8 50 fe b8 ca d0 fa a0 bb b9 00 01 50 fe b8 8d 01 1c c8 d0 f4 b1 30 50 fe b8 8d 01 1c c8 d0 f5 50 fe a9 ee 8d 0c 1c 8c 03 1c 84 50 60 20 8c 06 f0 20 a5 22 38 ed 12 05 f0 15 a2 ff b0 06 49 ff 69 01 a2 01 20 f2 05 ad 12 05 85 22 20 ce 06 a9 01 2c a9 03 85 00 c9 02 60 0a a8 86 4a ad 00 1c 29 fe 85 70 a9 1e 85 71 a5 70 18 65 4a 45 70 29 03 45 70 85 70 8d 00 1c a5 71 20 33 06 a5 71 c0 05 90 08 c9 11 90 0a e9 02 d0 06 c9 1c b0 02 69 04 85 71 88 d0 d2 84 4a a9 4b 8d 05 18 ad 05 18 d0 fb 60 85 45 a9 ee 8d 0c 1c a9 05 85 33 a9 12 85 32 a9 03 85 31 a9 00 85 30 a2 01 86 00 ca 8e ab 02 8e fe 02 86 3f 60 a0 00 84 3e 84 3d 88 84 48 ad 00 1c 09 04 8d 00 1c a9 20 24 20 85 20 d0 e6 a2 01 8a 20 f2 05 a2 ff a9 01 20 f2 05 a9 ff 4c 33 06 20 61 06 a5 1c d0 09 a4 00 88 d0 04 a5 22 d0 31 20 7a 06 a9 04 85 70 a9 30 20 3c 06 ba ca ca 86 49 20 b1 f3 a5 18 85 22 a4 00 88 f0 0c c6 70 30 0c a6 70 20 d3 06 38 b0 de 84 1c a8 60 a9 00 85 22 60 20 4b f2 85 43 ad 00 1c 29 9f 1d df 06 8d 00 1c 60 00 20 40 60 20 c6 05 b0 0b a9 00 20 3c 06 ba 86 49 20 d1 f4 60 a9 03 85 71 a9 00 85 70 60 20 f4 06 4c 1e 04 a5 70 18 65 4a 45 70 29 03 45 70 85 70 8d 00 1c a5 71 20 4e 06 a5 71 c0 05 90 08 c9 11 M-E at 0400, CRC 266b * = 0400 ; Program starts at memory location $0400 ; Jump table for main routines 0400 4C C0 04 JMP $04C0 ; Jump to main initialization routine 0403 4C AA 04 JMP $04AA ; Jump to loader exit routine 0406 4C 53 05 JMP $0553 ; Jump to load file routine 0409 4C 3B 05 JMP $053B ; Jump to send command routine 040C 4C 3E 05 JMP $053E ; Jump to execute command routine 040F 4C 49 05 JMP $0549 ; Jump to status return routine ; Small utility routines - probably placeholders or dummy routines 0412 EA NOP ; No operation 0413 EA NOP ; No operation 0414 60 RTS ; Return from subroutine 0415 EA NOP ; No operation 0416 EA NOP ; No operation 0417 60 RTS ; Return from subroutine 0418 EA NOP ; No operation 0419 EA NOP ; No operation 041A 60 RTS ; Return from subroutine 041B 4C 24 05 JMP $0524 ; Jump to disk error handling routine ; Data transmission routine - sends data to the computer 041E 20 00 05 JSR $0500 ; Wait for interface to be ready 0421 88 DEY ; Decrement Y counter 0422 B1 70 LDA ($70),Y ; Load byte from memory pointer at $70 0424 AA TAX ; Transfer accumulator to X 0425 4A LSR A ; Shift right (divide by 2) 0426 4A LSR A ; Shift right (divide by 4) 0427 4A LSR A ; Shift right (divide by 8) 0428 4A LSR A ; Shift right (divide by 16) - get high nibble 0429 85 73 STA $73 ; Store high nibble in $73 042B 8A TXA ; Get original byte back 042C 29 0F AND #$0F ; Mask out high nibble - keep low nibble 042E AA TAX ; Store low nibble in X 042F A9 00 LDA #$00 ; Clear handshake signal 0431 8D 00 18 STA $1800 ; Store to I/O port for serial communication 0434 A9 04 LDA #$04 ; Check for ready signal 0436 2C 00 18 BIT $1800 ; Test bits with I/O port 0439 F0 FB BEQ $0436 ; Loop until ready ; Send low nibble first 043B 8E 00 18 STX $1800 ; Send low nibble to I/O port 043E EA NOP ; Timing delay 043F EA NOP ; Timing delay 0440 8A TXA ; Get low nibble back 0441 0A ASL A ; Shift left 0442 29 0F AND #$0F ; Mask to keep shifted nibble 0444 8D 00 18 STA $1800 ; Send to I/O port 0447 48 PHA ; Push to stack (timing delay) 0448 68 PLA ; Pull from stack (timing delay) ; Send high nibble 0449 A5 73 LDA $73 ; Get high nibble 044B 8D 00 18 STA $1800 ; Send to I/O port 044E EA NOP ; Timing delay 044F EA NOP ; Timing delay 0450 EA NOP ; Timing delay 0451 0A ASL A ; Shift left 0452 29 0F AND #$0F ; Mask high bits 0454 8D 00 18 STA $1800 ; Send to I/O port 0457 98 TYA ; Check if we're done 0458 D0 C7 BNE $0421 ; If Y is not zero, continue with next byte ; Finalize transmission 045A 20 69 04 JSR $0469 ; Call return from subroutine 045D A2 02 LDX #$02 ; Set signal value 045F 8E 00 18 STX $1800 ; Send to I/O port 0462 A9 04 LDA #$04 ; Ready check value 0464 2C 00 18 BIT $1800 ; Test I/O port 0467 F0 FB BEQ $0464 ; Loop until ready 0469 60 RTS ; Return from subroutine ; Data receiving routine - reads data from the computer 046A A0 00 LDY #$00 ; Initialize Y counter to 0 046C 20 00 05 JSR $0500 ; Wait for interface to be ready 046F 88 DEY ; Decrement Y (wraps to 255 on first pass) 0470 A9 04 LDA #$04 ; Ready check value 0472 2C 00 18 BIT $1800 ; Test I/O port 0475 F0 FB BEQ $0472 ; Loop until ready 0477 EA NOP ; Timing delay 0478 EA NOP ; Timing delay ; Read first nibble 0479 24 70 BIT $70 ; Memory timing delay 047B AD 00 18 LDA $1800 ; Read from I/O port 047E 0A ASL A ; Shift left 047F EA NOP ; Timing delay 0480 24 70 BIT $70 ; Memory timing delay 0482 0D 00 18 ORA $1800 ; Combine with next read 0485 EA NOP ; Timing delay 0486 0A ASL A ; Shift left 0487 0A ASL A ; Shift left 0488 0A ASL A ; Shift left 0489 0A ASL A ; Shift left to position high nibble 048A 85 74 STA $74 ; Store in temporary location ; Read second nibble 048C AD 00 18 LDA $1800 ; Read from I/O port 048F 0A ASL A ; Shift left 0490 24 70 BIT $70 ; Memory timing delay 0492 48 PHA ; Push to stack (timing delay) 0493 68 PLA ; Pull from stack (timing delay) 0494 0D 00 18 ORA $1800 ; Combine with next read 0497 29 0F AND #$0F ; Mask to keep low nibble 0499 05 74 ORA $74 ; Combine with high nibble 049B 91 70 STA ($70),Y ; Store complete byte at memory location 049D 98 TYA ; Check if we're done 049E D0 CF BNE $046F ; If Y is not zero, continue with next byte ; Finalize receive 04A0 A9 04 LDA #$04 ; Ready check value 04A2 2C 00 18 BIT $1800 ; Test I/O port 04A5 F0 FB BEQ $04A2 ; Loop until ready 04A7 4C FA 04 JMP $04FA ; Jump to signal completion ; Exit routine 04AA 20 00 05 JSR $0500 ; Wait for interface to be ready 04AD 68 PLA ; Pull return address (discard) 04AE 68 PLA ; Pull return address (discard) 04AF A0 00 LDY #$00 ; Clear Y 04B1 84 33 STY $33 ; Clear memory location $33 04B3 A9 EC LDA #$EC ; Set control register value 04B5 8D 0C 1C STA $1C0C ; Store to VIA control register 04B8 20 1B 05 JSR $051B ; Restore I/O port state 04BB 68 PLA ; Pull processor status 04BC 85 49 STA $49 ; Store to memory 04BE 58 CLI ; Clear interrupt flag 04BF 60 RTS ; Return from subroutine ; Main initialization routine 04C0 78 SEI ; Set interrupt flag (disable interrupts) 04C1 A5 49 LDA $49 ; Get processor status 04C3 48 PHA ; Push to stack 04C4 A0 00 LDY #$00 ; Clear Y 04C6 88 DEY ; Decrement Y (wraps to 255) 04C7 D0 FD BNE $04C6 ; Delay loop ; Check for drive readiness 04C9 20 09 05 JSR $0509 ; Check interface status 04CC F0 FB BEQ $04C9 ; Loop until ready 04CE 20 FA 04 JSR $04FA ; Initialize signal 04D1 20 09 05 JSR $0509 ; Check interface status 04D4 F0 07 BEQ $04DD ; Branch if not ready ; Interface is ready - initialize 04D6 20 1B 05 JSR $051B ; Restore I/O port state 04D9 58 CLI ; Clear interrupt flag 04DA 20 F4 04 JSR $04F4 ; Wait for interface to be busy 04DD 78 SEI ; Set interrupt flag ; Setup memory pointer and read initial data 04DE A9 05 LDA #$05 ; Set high byte of memory pointer 04E0 85 71 STA $71 ; Store to pointer high byte 04E2 A9 10 LDA #$10 ; Set low byte of memory pointer 04E4 85 70 STA $70 ; Store to pointer low byte 04E6 A0 04 LDY #$04 ; Set data length 04E8 20 6C 04 JSR $046C ; Read data from computer ; Jump to loaded code 04EB 20 14 05 JSR $0514 ; Set I/O port state 04EE 20 0F 05 JSR $050F ; Jump to loaded code at $1000 04F1 4C D1 04 JMP $04D1 ; Jump back to check interface ; Interface status routines 04F4 20 09 05 JSR $0509 ; Check interface status 04F7 D0 FB BNE $04F4 ; Loop until busy 04F9 60 RTS ; Return from subroutine ; Signal routines 04FA A9 02 LDA #$02 ; Signal value 04FC 8D 00 18 STA $1800 ; Send to I/O port 04FF 60 RTS ; Return from subroutine ; Wait for interface to be ready 0500 20 F4 04 JSR $04F4 ; Wait for interface to be busy 0503 A9 00 LDA #$00 ; Clear signal 0505 8D 00 18 STA $1800 ; Send to I/O port 0508 60 RTS ; Return from subroutine ; Check interface status 0509 A9 04 LDA #$04 ; Status check value 050B 2C 00 18 BIT $1800 ; Test I/O port 050E 60 RTS ; Return from subroutine ; Jump to loaded code 050F 4C 00 10 JMP $1000 ; Jump to code at $1000 0512 00 BRK ; Break (this appears to be data, not code) 0513 00 BRK ; Break (this appears to be data, not code) ; I/O port control routines 0514 AD 00 1C LDA $1C00 ; Read VIA port B 0517 09 08 ORA #$08 ; Set bit 3 0519 D0 05 BNE $0520 ; Always branch 051B A9 F7 LDA #$F7 ; Bit pattern: 11110111 051D 2D 00 1C AND $1C00 ; Clear bit 3 of VIA port B 0520 8D 00 1C STA $1C00 ; Store to VIA port B 0523 60 RTS ; Return from subroutine ; Disk error handling 0524 A5 1C LDA $1C ; Check error flag 0526 F0 09 BEQ $0531 ; If zero, no error 0528 A9 00 LDA #$00 ; Clear A 052A 85 22 STA $22 ; Store to memory 052C 20 8C 06 JSR $068C ; Call disk status routine 052F F0 05 BEQ $0536 ; Branch if status ok 0531 A9 00 LDA #$00 ; Clear A 0533 85 1C STA $1C ; Clear error flag 0535 2C A9 03 BIT $03A9 ; Test memory location (but appears to be data) 0538 4C 4B 05 JMP $054B ; Jump to status return ; Command routines 053B A9 00 LDA #$00 ; Clear A 053D 2C A9 02 BIT $02A9 ; Test memory location (but appears to be data) 0540 48 PHA ; Push to stack 0541 20 E3 06 JSR $06E3 ; Call disk command routine 0544 68 PLA ; Pull from stack 0545 A8 TAY ; Transfer to Y 0546 20 FD 06 JSR $06FD ; Call data transmission routine 0549 A5 00 LDA $00 ; Get status 054B 8D 00 03 STA $0300 ; Store to status location 054E A0 01 LDY #$01 ; Set Y to 1 0550 4C FD 06 JMP $06FD ; Jump to data transmission routine ; Load file routine 0553 20 F4 06 JSR $06F4 ; Initialize memory pointer 0556 20 6A 04 JSR $046A ; Receive data from computer 0559 20 5F 05 JSR $055F ; Check disk status 055C 4C 49 05 JMP $0549 ; Jump to status return ; Disk status check 055F AD 00 1C LDA $1C00 ; Read VIA port B 0562 29 10 AND #$10 ; Test bit 4 (disk ready) 0564 D0 05 BNE $056B ; Branch if ready 0566 A9 08 LDA #$08 ; Error code for not ready 0568 85 00 STA $00 ; Store to status 056A 60 RTS ; Return from subroutine ; Disk access routines - the rest of the code handles ; various disk operations, drive control, and data transfer 056B 20 C6 05 JSR $05C6 ; Call disk status check 056E B0 FA BCS $056A ; Branch if error 0570 A9 10 LDA #$10 ; Control code 0572 20 3C 06 JSR $063C ; Call disk control routine ; The remaining code handles disk operations, buffer management, ; and the fast transfer protocol that makes this a "turbo" disk routine ; Initialize disk operations 0575 20 E9 F5 JSR $F5E9 ; Call Kernal routine to initialize 0578 85 3A STA $3A ; Store result in zero page 057A 20 8F F7 JSR $F78F ; Call Kernal routine for buffer setup 057D BA TSX ; Transfer stack pointer to X 057E 86 49 STX $49 ; Save stack pointer 0580 20 10 F5 JSR $F510 ; Initialize drive timing ; Timing setup for drive operation 0583 A2 08 LDX #$08 ; Set counter to 8 0585 50 FE BVC $0585 ; Wait for overflow clear (active loop) 0587 B8 CLV ; Clear overflow flag 0588 CA DEX ; Decrement counter 0589 10 FA BPL $0585 ; Loop until counter < 0 ; Set up VIA timers and control registers 058B 8E 03 1C STX $1C03 ; Store X to VIA timer control 058E A9 CE LDA #$CE ; Control register value 0590 8D 0C 1C STA $1C0C ; Set VIA control register 0593 8A TXA ; Get X value 0594 A2 05 LDX #$05 ; Set delay counter ; Timing loop for drive synchronization 0596 8D 01 1C STA $1C01 ; Write to VIA port A 0599 B8 CLV ; Clear overflow flag 059A 50 FE BVC $059A ; Wait for overflow clear 059C B8 CLV ; Clear overflow flag again 059D CA DEX ; Decrement counter 059E D0 FA BNE $059A ; Loop until counter = 0 ; Fast data transfer loop - copy data to/from drive memory 05A0 A0 BB LDY #$BB ; Start with offset $BB 05A2 B9 00 01 LDA $0100,Y ; Get byte from page 1 buffer 05A5 50 FE BVC $05A5 ; Wait for overflow clear 05A7 B8 CLV ; Clear overflow flag 05A8 8D 01 1C STA $1C01 ; Write to VIA port A 05AB C8 INY ; Increment index 05AC D0 F4 BNE $05A2 ; Loop until Y wraps (256 bytes) ; Second transfer loop (different memory source) 05AE B1 30 LDA ($30),Y ; Get byte from memory pointer 05B0 50 FE BVC $05B0 ; Wait for overflow clear 05B2 B8 CLV ; Clear overflow flag 05B3 8D 01 1C STA $1C01 ; Write to VIA port A 05B6 C8 INY ; Increment index 05B7 D0 F5 BNE $05AE ; Loop until Y wraps (256 bytes) ; Finalize transfer 05B9 50 FE BVC $05B9 ; Wait for overflow clear 05BB A9 EE LDA #$EE ; End of transfer value 05BD 8D 0C 1C STA $1C0C ; Store to VIA control register 05C0 8C 03 1C STY $1C03 ; Reset timer 05C3 84 50 STY $50 ; Store Y for later use 05C5 60 RTS ; Return from subroutine ; Disk status check routine 05C6 20 8C 06 JSR $068C ; Check disk controller status 05C9 F0 20 BEQ $05EB ; Branch if no error 05CB A5 22 LDA $22 ; Get previous status 05CD 38 SEC ; Set carry flag for subtraction 05CE ED 12 05 SBC $0512 ; Subtract current status 05D1 F0 15 BEQ $05E8 ; Branch if same as before ; Track adjustment calculation 05D3 A2 FF LDX #$FF ; Set direction negative 05D5 B0 06 BCS $05DD ; Branch if positive difference 05D7 49 FF EOR #$FF ; Complement A 05D9 69 01 ADC #$01 ; Add 1 (two's complement) 05DB A2 01 LDX #$01 ; Set direction positive 05DD 20 F2 05 JSR $05F2 ; Call track adjustment routine 05E0 AD 12 05 LDA $0512 ; Get current status 05E3 85 22 STA $22 ; Update status 05E5 20 CE 06 JSR $06CE ; Update disk controller 05E8 A9 01 LDA #$01 ; Success code 05EA 2C A9 03 BIT $03A9 ; Test memory (no effect, likely data) 05ED 85 00 STA $00 ; Set status 05EF C9 02 CMP #$02 ; Compare with 2 05F1 60 RTS ; Return from subroutine ; Track stepping routine - moves the disk head 05F2 0A ASL A ; Multiply by 2 05F3 A8 TAY ; Transfer to Y as counter 05F4 86 4A STX $4A ; Store direction 05F6 AD 00 1C LDA $1C00 ; Get VIA port B 05F9 29 FE AND #$FE ; Clear bit 0 05FB 85 70 STA $70 ; Store temporarily 05FD A9 1E LDA #$1E ; Constant for timing 05FF 85 71 STA $71 ; Store in memory ; Stepper motor control loop 0601 A5 70 LDA $70 ; Get current value 0603 18 CLC ; Clear carry 0604 65 4A ADC $4A ; Add direction 0606 45 70 EOR $70 ; XOR with previous 0608 29 03 AND #$03 ; Mask bits 0-1 060A 45 70 EOR $70 ; XOR back 060C 85 70 STA $70 ; Store result 060E 8D 00 1C STA $1C00 ; Write to stepper control 0611 A5 71 LDA $71 ; Get timing constant 0613 20 33 06 JSR $0633 ; Delay routine ; Adjust stepper timing based on track position 0616 A5 71 LDA $71 ; Get timing value 0618 C0 05 CPY #$05 ; Compare with 5 061A 90 08 BCC $0624 ; Branch if less 061C C9 11 CMP #$11 ; Compare with $11 061E 90 0A BCC $062A ; Branch if less 0620 E9 02 SBC #$02 ; Subtract 2 0622 D0 06 BNE $062A ; Branch if not zero 0624 C9 1C CMP #$1C ; Compare with $1C 0626 B0 02 BCS $062A ; Branch if greater or equal 0628 69 04 ADC #$04 ; Add 4 062A 85 71 STA $71 ; Store updated timing 062C 88 DEY ; Decrement counter 062D D0 D2 BNE $0601 ; Loop until counter reaches zero 062F 84 4A STY $4A ; Reset direction 0631 A9 4B LDA #$4B ; Constant for final timing ; Delay subroutine using VIA timer 0633 8D 05 18 STA $1805 ; Set timer value 0636 AD 05 18 LDA $1805 ; Read timer 0639 D0 FB BNE $0636 ; Loop until timer expires 063B 60 RTS ; Return from subroutine ; Disk controller command routine 063C 85 45 STA $45 ; Store command code 063E A9 EE LDA #$EE ; VIA control value 0640 8D 0C 1C STA $1C0C ; Set VIA control register 0643 A9 05 LDA #$05 ; High byte memory address 0645 85 33 STA $33 ; Set memory pointer high 0647 A9 12 LDA #$12 ; Low byte memory address 0649 85 32 STA $32 ; Set memory pointer low 064B A9 03 LDA #$03 ; Buffer number 064D 85 31 STA $31 ; Set buffer number 064F A9 00 LDA #$00 ; Zero value 0651 85 30 STA $30 ; Clear work area 0653 A2 01 LDX #$01 ; Set status value 0655 86 00 STX $00 ; Store status 0657 CA DEX ; X = 0 0658 8E AB 02 STX $02AB ; Clear memory location 065B 8E FE 02 STX $02FE ; Clear another location 065E 86 3F STX $3F ; Clear work register 0660 60 RTS ; Return from subroutine ; Controller initialization routine 0661 A0 00 LDY #$00 ; Y = 0 0663 84 3E STY $3E ; Clear work register 0665 84 3D STY $3D ; Clear another register 0667 88 DEY ; Y = 255 0668 84 48 STY $48 ; Set register for maximum value 066A AD 00 1C LDA $1C00 ; Get VIA port B 066D 09 04 ORA #$04 ; Set bit 2 066F 8D 00 1C STA $1C00 ; Update VIA port B 0672 A9 20 LDA #$20 ; Test value 0674 24 20 BIT $20 ; Test with memory 0676 85 20 STA $20 ; Store back to memory 0678 D0 E6 BNE $0660 ; Branch if not zero (always) ; Disk head calibration routine 067A A2 01 LDX #$01 ; Forward direction 067C 8A TXA ; A = 1 067D 20 F2 05 JSR $05F2 ; Step track forward 0680 A2 FF LDX #$FF ; Backward direction 0682 A9 01 LDA #$01 ; Step size 0684 20 F2 05 JSR $05F2 ; Step track backward 0687 A9 FF LDA #$FF ; Maximum delay 0689 4C 33 06 JMP $0633 ; Jump to delay routine ; Disk controller status check 068C 20 61 06 JSR $0661 ; Initialize controller 068F A5 1C LDA $1C ; Get error flag 0691 D0 09 BNE $069C ; Branch if error 0693 A4 00 LDY $00 ; Get status 0695 88 DEY ; Decrement 0696 D0 04 BNE $069C ; Branch if not zero 0698 A5 22 LDA $22 ; Get track position 069A D0 31 BNE $06CD ; Branch if not zero ; Reset controller and handle errors 069C 20 7A 06 JSR $067A ; Calibrate head 069F A9 04 LDA #$04 ; Retry count 06A1 85 70 STA $70 ; Store retry counter 06A3 A9 30 LDA #$30 ; Controller command 06A5 20 3C 06 JSR $063C ; Execute command 06A8 BA TSX ; Get stack pointer 06A9 CA DEX ; Decrement 06AA CA DEX ; Decrement again 06AB 86 49 STX $49 ; Save stack pointer ; Call disk routines in ROM 06AD 20 B1 F3 JSR $F3B1 ; Call ROM disk routine 06B0 A5 18 LDA $18 ; Get current track 06B2 85 22 STA $22 ; Store current track 06B4 A4 00 LDY $00 ; Get status 06B6 88 DEY ; Decrement 06B7 F0 0C BEQ $06C5 ; Branch if zero (good status) 06B9 C6 70 DEC $70 ; Decrement retry counter 06BB 30 0C BMI $06C9 ; Branch if negative (out of retries) 06BD A6 70 LDX $70 ; Get retry counter 06BF 20 D3 06 JSR $06D3 ; Call retry routine 06C2 38 SEC ; Set carry flag 06C3 B0 DE BCS $06A3 ; Always branch to retry ; Successful operation 06C5 84 1C STY $1C ; Clear error flag 06C7 A8 TAY ; Transfer A to Y 06C8 60 RTS ; Return from subroutine ; Failed operation 06C9 A9 00 LDA #$00 ; Zero value 06CB 85 22 STA $22 ; Clear track position 06CD 60 RTS ; Return from subroutine ; Update disk controller 06CE 20 4B F2 JSR $F24B ; Call ROM drive routine 06D1 85 43 STA $43 ; Store result 06D3 AD 00 1C LDA $1C00 ; Get VIA port B 06D6 29 9F AND #$9F ; Clear bits 5-6 06D8 1D DF 06 ORA $06DF,X ; OR with table value indexed by X 06DB 8D 00 1C STA $1C00 ; Update VIA port B 06DE 60 RTS ; Return from subroutine ; Motor control table 06DF 00 BRK ; Value 0 (motor off) 06E0 20 40 60 JSR $6040 ; Values for different motor states (data, not code) ; Execute disk command 06E3 20 C6 05 JSR $05C6 ; Check disk status 06E6 B0 0B BCS $06F3 ; Branch if error 06E8 A9 00 LDA #$00 ; Command code 06EA 20 3C 06 JSR $063C ; Execute command 06ED BA TSX ; Get stack pointer 06EE 86 49 STX $49 ; Save stack pointer 06F0 20 D1 F4 JSR $F4D1 ; Call ROM disk routine 06F3 60 RTS ; Return from subroutine ; Initialize memory pointer for file operations 06F4 A9 03 LDA #$03 ; High byte 06F6 85 71 STA $71 ; Set pointer high byte 06F8 A9 00 LDA #$00 ; Low byte 06FA 85 70 STA $70 ; Set pointer low byte 06FC 60 RTS ; Return from subroutine ; File data transmission routine 06FD 20 F4 06 JSR $06F4 ; Initialize pointer 0700 4C 1E 04 JMP $041E ; Jump to transmission routine ; Alternative stepper motor control routine 0703 A5 70 LDA $70 ; Get current value 0705 18 CLC ; Clear carry 0706 65 4A ADC $4A ; Add direction 0708 45 70 EOR $70 ; XOR with previous 070A 29 03 AND #$03 ; Mask bits 0-1 070C 45 70 EOR $70 ; XOR back 070E 85 70 STA $70 ; Store result 0710 8D 00 1C STA $1C00 ; Write to stepper control 0713 A5 71 LDA $71 ; Get timing value 0715 20 4E 06 JSR $064E ; Alternative timing routine 0718 A5 71 LDA $71 ; Get timing again 071A C0 05 CPY #$05 ; Compare Y with 5 071C 90 08 BCC $0726 ; Branch if less than 5 071E C9 11 CMP #$11 ; Compare with $11 0720 .END ; End of code
1571 Disk Drive turboDisk[edit | edit source]
M-W at 0400
4c c4 04 4c aa 04 4c 65 05 4c 4d 05 4c 50 05 4c 5b 05 ea ea 60 ea ea 60 ea ea 60 4c 35 05 20 11
05 88 b1 70 aa 4a 4a 4a 4a 85 73 8a 29 0f aa a9 00 8d 00 18 a9 04 2c 00 18 f0 fb 8e 00 18 ea ea
8a 0a 29 0f 8d 00 18 48 68 a5 73 8d 00 18 ea ea ea 0a 29 0f 8d 00 18 98 d0 c7 20 69 04 a2 02 8e
00 18 a9 04 2c 00 18 f0 fb 60 a0 00 20 11 05 88 a9 04 2c 00 18 f0 fb ea ea 24 70 ad 00 18 0a ea
24 70 0d 00 18 ea 0a 0a 0a 0a 85 74 ad 00 18 0a 24 70 48 68 0d 00 18 29 0f 05 74 91 70 98 d0 cf
a9 04 2c 00 18 f0 fb 4c 0b 05 20 11 05 68 68 a0 00 84 33 a9 ec 8d 0c 1c 20 2c 05 68 85 49 38 66
3b 4c 4e 90 ad 0f 18 29 20 f0 06 38 66 3b 20 32 90 78 a5 49 48 a0 00 88 d0 fd 20 1a 05 f0 fb 20
0b 05 20 1a 05 f0 07 20 2c 05 58 20 05 05 78 a9 05 85 71 a9 21 85 70 a0 04 20 6c 04 20 25 05 20
20 05 4c e2 04 20 1a 05 d0 fb 60 a9 02 8d 00 18 60 20 05 05 a9 00 8d 00 18 60 a9 04 2c 00 18 60
4c 00 10 00 00 ad 00 1c 09 08 d0 05 a9 f7 2d 00 1c 8d 00 1c 60 a9 00 85 22 20 2a 07 a5 00 c9 02
b0 06 ad 03 03 29 80 2c a9 03 4c 5d 05 a9 00 2c a9 02 48 20 2a 07 68 a8 20 44 07 a5 00 8d 00 03
a0 01 4c 44 07 20 3b 07 20 6a 04 20 71 05 4c 5b 05 ad 00 1c 29 10 d0 05 a9 08 85 00 60 20 d8 05
b0 fa a9 10 20 57 06 20 e9 f5 85 3a 20 8f f7 ba 86 49 20 10 f5 a2 08 50 fe b8 ca 10 fa 8e 03 1c
a9 ce 8d 0c 1c 8a a2 05 8d 01 1c b8 50 fe b8 ca d0 fa a0 bb b9 00 01 50 fe b8 8d 01 1c c8 d0 f4
b1 30 50 fe b8 8d 01 1c c8 d0 f5 50 fe a9 ee 8d 0c 1c 8c 03 1c 84 50 60 20 cf 06 f0 29 20 a7 06
a5 22 38 ed 23 05 f0 1b a2 ff b0 06 49 ff 69 01 a2 01 20 0d 06 ad 23 05 85 22 c9 24 90 02 e9 23
20 15 07 a9 01 2c a9 03 85 00 c9 02 60 0a a8 86 4a ad 00 1c 29 fe 85 70 a9 1e 85 71 a5 70 18 65
4a 45 70 29 03 45 70 85 70 8d 00 1c a5 71 20 4e 06 a5 71 c0 05 90 08 c9 11 90 0a e9 02 d0 06 c9
1c b0 02 69 04 85 71 88 d0 d2 84 4a a9 4b 8d 05 18 ad 05 18 d0 fb 60 85 45 a9 ee 8d 0c 1c a9 05
85 33 a9 23 85 32 a9 03 85 31 a9 00 85 30 a2 01 86 00 ca 8e ab 02 8e fe 02 86 3f 60 a0 00 84 3e
84 3d 88 84 48 ad 00 1c 09 04 8d 00 1c a9 20 24 20 85 20 d0 e6 a2 01 8a 20 0d 06 a2 ff a9 01 20
0d 06 a9 ff 4c 4e 06 ad 23 05 c9 24 a5 22 b0 09 c9 24 90 0e e9 23 18 90 07 c9 24 b0 03 69 23 38
85 22 ad 0f 18 29 fb 90 02 09 84 8d 0f 18 60 20 7c 06 a5 1c d0 09 a4 00 88 d0 04 a5 22 d0 35 18
20 c2 06 20 95 06 a9 04 85 70 a9 30 20 57 06 ba ca ca 86 49 20 b1 f3 a5 18 85 22 a4 00 88 f0 0c
c6 70 30 0c a6 70 20 1a 07 38 b0 de 84 1c a8 60 a9 00 85 22 60 20 4b f2 85 43 ad 00 1c 29 9f 1d
26 07 8d 00 1c 60 00 20 40 60 20 d8 05 b0 0b a9 00 20 57 06 ba 86 49 20 d1 f4 60 a9 03 85 71 a9
00 85 70 60 20 3b 07 4c 1e 04 00 67 63 41 61 c3 52 95 2d 52 8a 6d 94 a2 00 00 08 00 00 00 00 17
M-E at 0400, CRC 7021
* = 0400
0400 4C C4 04 JMP $04C4
0403 4C AA 04 JMP $04AA
0406 4C 65 05 JMP $0565
0409 4C 4D 05 JMP $054D
040C 4C 50 05 JMP $0550
040F 4C 5B 05 JMP $055B
0412 EA NOP
0413 EA NOP
0414 60 RTS
0415 EA NOP
0416 EA NOP
0417 60 RTS
0418 EA NOP
0419 EA NOP
041A 60 RTS
041B 4C 35 05 JMP $0535
041E 20 11 05 JSR $0511
0421 88 DEY
0422 B1 70 LDA ($70),Y
0424 AA TAX
0425 4A LSR A
0426 4A LSR A
0427 4A LSR A
0428 4A LSR A
0429 85 73 STA $73
042B 8A TXA
042C 29 0F AND #$0F
042E AA TAX
042F A9 00 LDA #$00
0431 8D 00 18 STA $1800
0434 A9 04 LDA #$04
0436 2C 00 18 BIT $1800
0439 F0 FB BEQ $0436
043B 8E 00 18 STX $1800
043E EA NOP
043F EA NOP
0440 8A TXA
0441 0A ASL A
0442 29 0F AND #$0F
0444 8D 00 18 STA $1800
0447 48 PHA
0448 68 PLA
0449 A5 73 LDA $73
044B 8D 00 18 STA $1800
044E EA NOP
044F EA NOP
0450 EA NOP
0451 0A ASL A
0452 29 0F AND #$0F
0454 8D 00 18 STA $1800
0457 98 TYA
0458 D0 C7 BNE $0421
045A 20 69 04 JSR $0469
045D A2 02 LDX #$02
045F 8E 00 18 STX $1800
0462 A9 04 LDA #$04
0464 2C 00 18 BIT $1800
0467 F0 FB BEQ $0464
0469 60 RTS
046A A0 00 LDY #$00
046C 20 11 05 JSR $0511
046F 88 DEY
0470 A9 04 LDA #$04
0472 2C 00 18 BIT $1800
0475 F0 FB BEQ $0472
0477 EA NOP
0478 EA NOP
0479 24 70 BIT $70
047B AD 00 18 LDA $1800
047E 0A ASL A
047F EA NOP
0480 24 70 BIT $70
0482 0D 00 18 ORA $1800
0485 EA NOP
0486 0A ASL A
0487 0A ASL A
0488 0A ASL A
0489 0A ASL A
048A 85 74 STA $74
048C AD 00 18 LDA $1800
048F 0A ASL A
0490 24 70 BIT $70
0492 48 PHA
0493 68 PLA
0494 0D 00 18 ORA $1800
0497 29 0F AND #$0F
0499 05 74 ORA $74
049B 91 70 STA ($70),Y
049D 98 TYA
049E D0 CF BNE $046F
04A0 A9 04 LDA #$04
04A2 2C 00 18 BIT $1800
04A5 F0 FB BEQ $04A2
04A7 4C 0B 05 JMP $050B
04AA 20 11 05 JSR $0511
04AD 68 PLA
04AE 68 PLA
04AF A0 00 LDY #$00
04B1 84 33 STY $33
04B3 A9 EC LDA #$EC
04B5 8D 0C 1C STA $1C0C
04B8 20 2C 05 JSR $052C
04BB 68 PLA
04BC 85 49 STA $49
04BE 38 SEC
04BF 66 3B ROR $3B
04C1 4C 4E 90 JMP $904E
04C4 AD 0F 18 LDA $180F
04C7 29 20 AND #$20
04C9 F0 06 BEQ $04D1
04CB 38 SEC
04CC 66 3B ROR $3B
04CE 20 32 90 JSR $9032
04D1 78 SEI
04D2 A5 49 LDA $49
04D4 48 PHA
04D5 A0 00 LDY #$00
04D7 88 DEY
04D8 D0 FD BNE $04D7
04DA 20 1A 05 JSR $051A
04DD F0 FB BEQ $04DA
04DF 20 0B 05 JSR $050B
04E2 20 1A 05 JSR $051A
04E5 F0 07 BEQ $04EE
04E7 20 2C 05 JSR $052C
04EA 58 CLI
04EB 20 05 05 JSR $0505
04EE 78 SEI
04EF A9 05 LDA #$05
04F1 85 71 STA $71
04F3 A9 21 LDA #$21
04F5 85 70 STA $70
04F7 A0 04 LDY #$04
04F9 20 6C 04 JSR $046C
04FC 20 25 05 JSR $0525
04FF 20 20 05 JSR $0520
0502 4C E2 04 JMP $04E2
0505 20 1A 05 JSR $051A
0508 D0 FB BNE $0505
050A 60 RTS
050B A9 02 LDA #$02
050D 8D 00 18 STA $1800
0510 60 RTS
0511 20 05 05 JSR $0505
0514 A9 00 LDA #$00
0516 8D 00 18 STA $1800
0519 60 RTS
051A A9 04 LDA #$04
051C 2C 00 18 BIT $1800
051F 60 RTS
0520 4C 00 10 JMP $1000
0523 00 BRK
0524 00 BRK
0525 AD 00 1C LDA $1C00
0528 09 08 ORA #$08
052A D0 05 BNE $0531
052C A9 F7 LDA #$F7
052E 2D 00 1C AND $1C00
0531 8D 00 1C STA $1C00
0534 60 RTS
0535 A9 00 LDA #$00
0537 85 22 STA $22
0539 20 2A 07 JSR $072A
053C A5 00 LDA $00
053E C9 02 CMP #$02
0540 B0 06 BCS $0548
0542 AD 03 03 LDA $0303
0545 29 80 AND #$80
0547 2C A9 03 BIT $03A9
054A 4C 5D 05 JMP $055D
054D A9 00 LDA #$00
054F 2C A9 02 BIT $02A9
0552 48 PHA
0553 20 2A 07 JSR $072A
0556 68 PLA
0557 A8 TAY
0558 20 44 07 JSR $0744
055B A5 00 LDA $00
055D 8D 00 03 STA $0300
0560 A0 01 LDY #$01
0562 4C 44 07 JMP $0744
0565 20 3B 07 JSR $073B
0568 20 6A 04 JSR $046A
056B 20 71 05 JSR $0571
056E 4C 5B 05 JMP $055B
0571 AD 00 1C LDA $1C00
0574 29 10 AND #$10
0576 D0 05 BNE $057D
0578 A9 08 LDA #$08
057A 85 00 STA $00
057C 60 RTS
057D 20 D8 05 JSR $05D8
0580 B0 FA BCS $057C
0582 A9 10 LDA #$10
0584 20 57 06 JSR $0657
0587 20 E9 F5 JSR $F5E9
058A 85 3A STA $3A
058C 20 8F F7 JSR $F78F
058F BA TSX
0590 86 49 STX $49
0592 20 10 F5 JSR $F510
0595 A2 08 LDX #$08
0597 50 FE BVC $0597
0599 B8 CLV
059A CA DEX
059B 10 FA BPL $0597
059D 8E 03 1C STX $1C03
05A0 A9 CE LDA #$CE
05A2 8D 0C 1C STA $1C0C
05A5 8A TXA
05A6 A2 05 LDX #$05
05A8 8D 01 1C STA $1C01
05AB B8 CLV
05AC 50 FE BVC $05AC
05AE B8 CLV
05AF CA DEX
05B0 D0 FA BNE $05AC
05B2 A0 BB LDY #$BB
05B4 B9 00 01 LDA $0100,Y
05B7 50 FE BVC $05B7
05B9 B8 CLV
05BA 8D 01 1C STA $1C01
05BD C8 INY
05BE D0 F4 BNE $05B4
05C0 B1 30 LDA ($30),Y
05C2 50 FE BVC $05C2
05C4 B8 CLV
05C5 8D 01 1C STA $1C01
05C8 C8 INY
05C9 D0 F5 BNE $05C0
05CB 50 FE BVC $05CB
05CD A9 EE LDA #$EE
05CF 8D 0C 1C STA $1C0C
05D2 8C 03 1C STY $1C03
05D5 84 50 STY $50
05D7 60 RTS
05D8 20 CF 06 JSR $06CF
05DB F0 29 BEQ $0606
05DD 20 A7 06 JSR $06A7
05E0 A5 22 LDA $22
05E2 38 SEC
05E3 ED 23 05 SBC $0523
05E6 F0 1B BEQ $0603
05E8 A2 FF LDX #$FF
05EA B0 06 BCS $05F2
05EC 49 FF EOR #$FF
05EE 69 01 ADC #$01
05F0 A2 01 LDX #$01
05F2 20 0D 06 JSR $060D
05F5 AD 23 05 LDA $0523
05F8 85 22 STA $22
05FA C9 24 CMP #$24
05FC 90 02 BCC $0600
05FE E9 23 SBC #$23
0600 20 15 07 JSR $0715
0603 A9 01 LDA #$01
0605 2C A9 03 BIT $03A9
0608 85 00 STA $00
060A C9 02 CMP #$02
060C 60 RTS
060D 0A ASL A
060E A8 TAY
060F 86 4A STX $4A
0611 AD 00 1C LDA $1C00
0614 29 FE AND #$FE
0616 85 70 STA $70
0618 A9 1E LDA #$1E
061A 85 71 STA $71
061C A5 70 LDA $70
061E 18 CLC
061F 65 4A ADC $4A
0621 45 70 EOR $70
0623 29 03 AND #$03
0625 45 70 EOR $70
0627 85 70 STA $70
0629 8D 00 1C STA $1C00
062C A5 71 LDA $71
062E 20 4E 06 JSR $064E
0631 A5 71 LDA $71
0633 C0 05 CPY #$05
0635 90 08 BCC $063F
0637 C9 11 CMP #$11
0639 90 0A BCC $0645
063B E9 02 SBC #$02
063D D0 06 BNE $0645
063F C9 1C CMP #$1C
0641 B0 02 BCS $0645
0643 69 04 ADC #$04
0645 85 71 STA $71
0647 88 DEY
0648 D0 D2 BNE $061C
064A 84 4A STY $4A
064C A9 4B LDA #$4B
064E 8D 05 18 STA $1805
0651 AD 05 18 LDA $1805
0654 D0 FB BNE $0651
0656 60 RTS
0657 85 45 STA $45
0659 A9 EE LDA #$EE
065B 8D 0C 1C STA $1C0C
065E A9 05 LDA #$05
0660 85 33 STA $33
0662 A9 23 LDA #$23
0664 85 32 STA $32
0666 A9 03 LDA #$03
0668 85 31 STA $31
066A A9 00 LDA #$00
066C 85 30 STA $30
066E A2 01 LDX #$01
0670 86 00 STX $00
0672 CA DEX
0673 8E AB 02 STX $02AB
0676 8E FE 02 STX $02FE
0679 86 3F STX $3F
067B 60 RTS
067C A0 00 LDY #$00
067E 84 3E STY $3E
0680 84 3D STY $3D
0682 88 DEY
0683 84 48 STY $48
0685 AD 00 1C LDA $1C00
0688 09 04 ORA #$04
068A 8D 00 1C STA $1C00
068D A9 20 LDA #$20
068F 24 20 BIT $20
0691 85 20 STA $20
0693 D0 E6 BNE $067B
0695 A2 01 LDX #$01
0697 8A TXA
0698 20 0D 06 JSR $060D
069B A2 FF LDX #$FF
069D A9 01 LDA #$01
069F 20 0D 06 JSR $060D
06A2 A9 FF LDA #$FF
06A4 4C 4E 06 JMP $064E
06A7 AD 23 05 LDA $0523
06AA C9 24 CMP #$24
06AC A5 22 LDA $22
06AE B0 09 BCS $06B9
06B0 C9 24 CMP #$24
06B2 90 0E BCC $06C2
06B4 E9 23 SBC #$23
06B6 18 CLC
06B7 90 07 BCC $06C0
06B9 C9 24 CMP #$24
06BB B0 03 BCS $06C0
06BD 69 23 ADC #$23
06BF 38 SEC
06C0 85 22 STA $22
06C2 AD 0F 18 LDA $180F
06C5 29 FB AND #$FB
06C7 90 02 BCC $06CB
06C9 09 84 ORA #$84
06CB 8D 0F 18 STA $180F
06CE 60 RTS
06CF 20 7C 06 JSR $067C
06D2 A5 1C LDA $1C
06D4 D0 09 BNE $06DF
06D6 A4 00 LDY $00
06D8 88 DEY
06D9 D0 04 BNE $06DF
06DB A5 22 LDA $22
06DD D0 35 BNE $0714
06DF 18 CLC
06E0 20 C2 06 JSR $06C2
06E3 20 95 06 JSR $0695
06E6 A9 04 LDA #$04
06E8 85 70 STA $70
06EA A9 30 LDA #$30
06EC 20 57 06 JSR $0657
06EF BA TSX
06F0 CA DEX
06F1 CA DEX
06F2 86 49 STX $49
06F4 20 B1 F3 JSR $F3B1
06F7 A5 18 LDA $18
06F9 85 22 STA $22
06FB A4 00 LDY $00
06FD 88 DEY
06FE F0 0C BEQ $070C
0700 C6 70 DEC $70
0702 30 0C BMI $0710
0704 A6 70 LDX $70
0706 20 1A 07 JSR $071A
0709 38 SEC
070A B0 DE BCS $06EA
070C 84 1C STY $1C
070E A8 TAY
070F 60 RTS
0710 A9 00 LDA #$00
0712 85 22 STA $22
0714 60 RTS
0715 20 4B F2 JSR $F24B
0718 85 43 STA $43
071A AD 00 1C LDA $1C00
071D 29 9F AND #$9F
071F 1D 26 07 ORA $0726,X
0722 8D 00 1C STA $1C00
0725 60 RTS
0726 00 BRK
0727 20 40 60 JSR $6040
072A 20 D8 05 JSR $05D8
072D B0 0B BCS $073A
072F A9 00 LDA #$00
0731 20 57 06 JSR $0657
0734 BA TSX
0735 86 49 STX $49
0737 20 D1 F4 JSR $F4D1
073A 60 RTS
073B A9 03 LDA #$03
073D 85 71 STA $71
073F A9 00 LDA #$00
0741 85 70 STA $70
0743 60 RTS
0744 20 3B 07 JSR $073B
0747 4C 1E 04 JMP $041E
1581 Disk Drive turboDisk[edit | edit source]
m-w: 0300 #20
4c fc 03 4c ea 03 4c d9 04 4c c1 04 4c c4 04 4c cf 04 ea ea 60 ea ea 60 ea ea 60 4c a6 04 1f 17
1d 15 1b 13 19 11 1e 16 1c 14 1a 12 18 10 00 08 02 0a 04 0c 06 0e 01 09 03 0b 05 0d 07 0f 00 80
20 a0 40 c0 60 e0 10 90 30 b0 50 d0 70 f0 20 48 04 88 84 fe b1 fc a8 29 0f aa a9 10 8d 01 40 a9
04 2c 01 40 f0 fb bd 1e 03 8d 01 40 ea ea ea 0a 29 0f 09 10 8d 01 40 98 4a 4a 4a 4a a8 ea b9 1e
03 8d 01 40 20 e9 03 0a 29 0f 09 10 8d 01 40 a4 fe d0 be 20 e9 03 20 4b 04 4c da 03 a0 00 20 48
04 84 fb 20 e9 03 a9 04 2c 01 40 f0 fb 20 e4 03 ad 01 40 0a 20 e7 03 0d 01 40 29 0f aa 20 e8 03
ad 01 40 0a 20 e7 03 0d 01 40 29 0f a8 bd 2e 03 19 3e 03 a4 fb 88 91 fc d0 c7 a9 04 2c 01 40 f0
fb 4c 42 04 ea ea ea ea ea 60 ad 7e 04 f0 03 20 72 04 20 7f 04 20 48 04 68 68 58 60 78 a9 00 8d
7e 04 a2 02 a0 00 88 d0 fd ca d0 fa 20 51 04 f0 fb 20 42 04 20 51 04 f0 0c 20 5c 04 b0 07 20 7f
04 58 20 3c 04 78 a9 04 85 fd a9 58 85 fc a0 04 20 9e 03 20 8c 04 20 57 04 4c 14 04 20 51 04 d0
fb 60 a9 12 8d 01 40 60 20 3c 04 a9 10 8d 01 40 60 a9 04 2c 01 40 60 4c 00 10 00 00 ad 7e 04 f0
1b a2 00 a0 00 20 51 04 d0 02 38 60 88 d0 f6 ca d0 f3 a2 04 20 6c ff a9 00 8d 7e 04 18 60 00 38
20 99 04 ad 00 40 29 bf 8d 00 40 60 38 20 99 04 ad 00 40 09 40 8d 00 40 18 ad 02 40 29 bf 90 02
09 40 8d 02 40 60 a5 25 f0 12 a9 b0 20 16 05 c9 02 b0 03 a9 00 2c a9 01 85 25 a9 03 85 06 4c cf
04 a9 00 2c a9 02 48 20 fd 04 68 a8 20 24 05 a5 06 8d 00 07 a0 01 4c 24 05 20 1b 05 20 9c 03 20
e5 04 4c cf 04 a9 00 8d fa 01 2c 01 40 70 08 a9 08 8d fa 01 85 06 60 a9 90 8d 7e 04 2c a9 80 ae
5a 04 86 13 ec 2a 05 f0 08 8e 2a 05 a2 00 8e 7e 04 ae 5b 04 86 14 a2 04 4c 54 ff a9 07 85 fd a9
00 85 fc 60 20 1b 05 4c 4e 03 00 a9 08 85 00 60 20 d8 05 b0 fa a9 10 20 57 06 20 e9 f5 85 3a 20
M-E at 0300, CRC 3dea
* = 0300
0300 4C FC 03 JMP $03FC
0303 4C EA 03 JMP $03EA
0306 4C D9 04 JMP $04D9
0309 4C C1 04 JMP $04C1
030C 4C C4 04 JMP $04C4
030F 4C CF 04 JMP $04CF
0312 EA NOP
0313 EA NOP
0314 60 RTS
0315 EA NOP
0316 EA NOP
0317 60 RTS
0318 EA NOP
0319 EA NOP
031A 60 RTS
031B 4C A6 04 JMP $04A6
031E .END
0340 20 A0 40 JSR $40A0
0343 C0 60 CPY #$60
0345 E0 10 CPX #$10
0347 90 30 BCC $0379
0349 B0 50 BCS $039B
034B D0 70 BNE $03BD
034D F0 20 BEQ $036F
034E 20 48 04 JSR $0448
0351 88 DEY
0352 84 FE STY $FE
0354 B1 FC LDA ($FC),Y
0356 A8 TAY
0357 29 0F AND #$0F
0359 AA TAX
035A A9 10 LDA #$10
035C 8D 01 40 STA $4001
035F A9 04 LDA #$04
0361 2C 01 40 BIT $4001
0364 F0 FB BEQ $0361
0366 BD 1E 03 LDA $031E,X
0369 8D 01 40 STA $4001
036C EA NOP
036D EA NOP
036E EA NOP
036F 0A ASL A
0370 29 0F AND #$0F
0372 09 10 ORA #$10
0374 8D 01 40 STA $4001
0377 98 TYA
0378 4A LSR A
0379 4A LSR A
037A 4A LSR A
037B 4A LSR A
037C A8 TAY
037D EA NOP
037E B9 1E 03 LDA $031E,Y
0381 8D 01 40 STA $4001
0384 20 E9 03 JSR $03E9
0387 0A ASL A
0388 29 0F AND #$0F
038A 09 10 ORA #$10
038C 8D 01 40 STA $4001
038F A4 FE LDY $FE
0391 D0 BE BNE $0351
0393 20 E9 03 JSR $03E9
0396 20 4B 04 JSR $044B
0399 4C DA 03 JMP $03DA
039C A0 00 LDY #$00
039E 20 48 04 JSR $0448
03A1 84 FB STY $FB
03A3 20 E9 03 JSR $03E9
03A6 A9 04 LDA #$04
03A8 2C 01 40 BIT $4001
03AB F0 FB BEQ $03A8
03AD 20 E4 03 JSR $03E4
03B0 AD 01 40 LDA $4001
03B3 0A ASL A
03B4 20 E7 03 JSR $03E7
03B7 0D 01 40 ORA $4001
03BA 29 0F AND #$0F
03BC AA TAX
03BD 20 E8 03 JSR $03E8
03C0 AD 01 40 LDA $4001
03C3 0A ASL A
03C4 20 E7 03 JSR $03E7
03C7 0D 01 40 ORA $4001
03CA 29 0F AND #$0F
03CC A8 TAY
03CD BD 2E 03 LDA $032E,X
03D0 19 3E 03 ORA $033E,Y
03D3 A4 FB LDY $FB
03D5 88 DEY
03D6 91 FC STA ($FC),Y
03D8 D0 C7 BNE $03A1
03DA A9 04 LDA #$04
03DC 2C 01 40 BIT $4001
03DF F0 FB BEQ $03DC
03E1 4C 42 04 JMP $0442
03E4 EA NOP
03E5 EA NOP
03E6 EA NOP
03E7 EA NOP
03E8 EA NOP
03E9 60 RTS
03EA AD 7E 04 LDA $047E
03ED F0 03 BEQ $03F2
03EF 20 72 04 JSR $0472
03F2 20 7F 04 JSR $047F
03F5 20 48 04 JSR $0448
03F8 68 PLA
03F9 68 PLA
03FA 58 CLI
03FB 60 RTS
03FC 78 SEI
03FD A9 00 LDA #$00
03FF 8D 7E 04 STA $047E
0402 A2 02 LDX #$02
0404 A0 00 LDY #$00
0406 88 DEY
0407 D0 FD BNE $0406
0409 CA DEX
040A D0 FA BNE $0406
040C 20 51 04 JSR $0451
040F F0 FB BEQ $040C
0411 20 42 04 JSR $0442
0414 20 51 04 JSR $0451
0417 F0 0C BEQ $0425
0419 20 5C 04 JSR $045C
041C B0 07 BCS $0425
041E 20 7F 04 JSR $047F
0421 58 CLI
0422 20 3C 04 JSR $043C
0425 78 SEI
0426 A9 04 LDA #$04
0428 85 FD STA $FD
042A A9 58 LDA #$58
042C 85 FC STA $FC
042E A0 04 LDY #$04
0430 20 9E 03 JSR $039E
0433 20 8C 04 JSR $048C
0436 20 57 04 JSR $0457
0439 4C 14 04 JMP $0414
043C 20 51 04 JSR $0451
043F D0 FB BNE $043C
0441 60 RTS
0442 A9 12 LDA #$12
0444 8D 01 40 STA $4001
0447 60 RTS
0448 20 3C 04 JSR $043C
044B A9 10 LDA #$10
044D 8D 01 40 STA $4001
0450 60 RTS
0451 A9 04 LDA #$04
0453 2C 01 40 BIT $4001
0456 60 RTS
0457 4C 00 10 JMP $1000
045A 00 BRK
045B 00 BRK
045C AD 7E 04 LDA $047E
045F F0 1B BEQ $047C
0461 A2 00 LDX #$00
0463 A0 00 LDY #$00
0465 20 51 04 JSR $0451
0468 D0 02 BNE $046C
046A 38 SEC
046B 60 RTS
046C 88 DEY
046D D0 F6 BNE $0465
046F CA DEX
0470 D0 F3 BNE $0465
0472 A2 04 LDX #$04
0474 20 6C FF JSR $FF6C
0477 A9 00 LDA #$00
0479 8D 7E 04 STA $047E
047C 18 CLC
047D 60 RTS
047E 00 BRK
047F 38 SEC
0480 20 99 04 JSR $0499
0483 AD 00 40 LDA $4000
0486 29 BF AND #$BF
0488 8D 00 40 STA $4000
048B 60 RTS
048C 38 SEC
048D 20 99 04 JSR $0499
0490 AD 00 40 LDA $4000
0493 09 40 ORA #$40
0495 8D 00 40 STA $4000
0498 18 CLC
0499 AD 02 40 LDA $4002
049C 29 BF AND #$BF
049E 90 02 BCC $04A2
04A0 09 40 ORA #$40
04A2 8D 02 40 STA $4002
04A5 60 RTS
04A6 A5 25 LDA $25
04A8 F0 12 BEQ $04BC
04AA A9 B0 LDA #$B0
04AC 20 16 05 JSR $0516
04AF C9 02 CMP #$02
04B1 B0 03 BCS $04B6
04B3 A9 00 LDA #$00
04B5 2C A9 01 BIT $01A9
04B8 85 25 STA $25
04BA A9 03 LDA #$03
04BC 85 06 STA $06
04BE 4C CF 04 JMP $04CF
04C1 A9 00 LDA #$00
04C3 2C A9 02 BIT $02A9
04C6 48 PHA
04C7 20 FD 04 JSR $04FD
04CA 68 PLA
04CB A8 TAY
04CC 20 24 05 JSR $0524
04CF A5 06 LDA $06
04D1 8D 00 07 STA $0700
04D4 A0 01 LDY #$01
04D6 4C 24 05 JMP $0524
04D9 20 1B 05 JSR $051B
04DC 20 9C 03 JSR $039C
04DF 20 E5 04 JSR $04E5
04E2 4C CF 04 JMP $04CF
04E5 A9 00 LDA #$00
04E7 8D FA 01 STA $01FA
04EA 2C 01 40 BIT $4001
04ED 70 08 BVS $04F7
04EF A9 08 LDA #$08
04F1 8D FA 01 STA $01FA
04F4 85 06 STA $06
04F6 60 RTS
04F7 A9 90 LDA #$90
04F9 8D 7E 04 STA $047E
04FC 2C A9 80 BIT $80A9
04FF AE 5A 04 LDX $045A
0502 86 13 STX $13
0504 EC 2A 05 CPX $052A
0507 F0 08 BEQ $0511
0509 8E 2A 05 STX $052A
050C A2 00 LDX #$00
050E 8E 7E 04 STX $047E
0511 AE 5B 04 LDX $045B
0514 86 14 STX $14
0516 A2 04 LDX #$04
0518 4C 54 FF JMP $FF54
051B A9 07 LDA #$07
051D 85 FD STA $FD
051F A9 00 LDA #$00
0521 85 FC STA $FC
0523 60 RTS
0524 20 1B 05 JSR $051B
0527 4C 4E 03 JMP $034E
052A 00 BRK
052B A9 08 LDA #$08
052D 85 00 STA $00
052F 60 RTS
0530 20 D8 05 JSR $05D8
0533 B0 FA BCS $052F
0535 A9 10 LDA #$10
0537 20 57 06 JSR $0657
053A 20 E9 F5 JSR $F5E9
053D 85 3A STA $3A
053F 20 00 00 JSR $0000
0542 .END
CMD HD Disk Drive turboDisk[edit | edit source]
m-w: 0500 #20
4c 54 06 4c 48 06 4c 0d 07 4c ed 06 4c f0 06 4c 03 07 ea ea 60 4c 41 07 ea ea 60 ea ea 60 00 1f
17 1d 15 1b 13 19 11 1e 16 1c 14 1a 12 18 10 00 08 02 0a 04 0c 06 0e 01 09 03 0b 05 0d 07 0f 00
80 20 a0 40 c0 60 e0 10 90 30 b0 50 d0 70 f0 2c 1e 05 30 4e 20 a4 06 88 84 fe b1 fc a8 29 0f aa
a9 10 8d 00 80 a9 04 2c 00 80 f0 fb bd 1f 05 8d 00 80 ea ea ea 0a 29 0f 09 10 8d 00 80 98 4a 4a
4a 4a a8 ea b9 1f 05 8d 00 80 20 47 06 0a 29 0f 09 10 8d 00 80 a4 fe d0 be 20 47 06 20 ac 06 4c
38 06 20 c8 05 88 b1 fc 2c 01 88 70 fb 8d 00 88 ad 02 88 09 80 8d 02 88 29 7f 2c 01 88 50 fb 8d
02 88 98 d0 e0 a2 92 2c a2 82 ad 02 88 8e 03 88 8d 02 88 60 2c 01 88 70 fb ae 00 88 ad 02 88 09
80 8d 02 88 29 7f 2c 01 88 50 fb 8d 02 88 8a 88 91 fc d0 e0 60 a0 00 2c 1e 05 30 d8 20 a4 06 84
fb 20 47 06 a9 04 2c 00 80 f0 fb 20 42 06 ad 00 80 0a 20 45 06 0d 00 80 29 0f aa 20 46 06 ad 00
80 0a 20 45 06 0d 00 80 29 0f a8 bd 2f 05 19 3f 05 a4 fb 88 91 fc d0 c7 a9 04 2c 00 80 f0 fb 4c
95 06 ea ea ea ea ea 60 20 a4 06 a5 49 29 bf 85 49 4c 30 ff 78 a2 02 a0 00 88 d0 fd ca d0 fa 20
bb 06 f0 fb 20 90 06 20 bb 06 f0 07 20 d1 06 58 20 8a 06 78 a9 06 85 fd a9 cd 85 fc a0 04 20 f7
05 20 de 06 20 cc 06 4c 67 06 20 bb 06 d0 fb 60 2c 1e 05 30 06 a9 12 8d 00 80 60 ad 02 88 29 7f
8d 02 88 60 20 8a 06 2c 1e 05 30 06 a9 10 8d 00 80 60 ad 02 88 09 80 8d 02 88 60 2c 1e 05 30 06
a9 04 2c 00 80 60 a9 40 2c 01 88 60 4c 00 10 00 00 a5 49 29 fe 85 49 ad 00 8f 09 01 d0 0b a5 49
09 41 85 49 a9 be 2d 00 8f 8d 00 8f 60 a9 00 2c a9 02 48 20 2e 07 68 a8 a5 69 85 fd a5 68 85 fc
20 4f 05 a5 20 8d 00 03 a0 01 4c 55 07 20 4c 07 20 f5 05 20 19 07 4c 03 07 a9 00 8d fa 01 2c 00
8f 30 08 a9 08 8d fa 01 85 20 60 a9 90 2c a9 aa ae cf 06 8e 00 28 ae d0 06 8e 01 28 a2 00 4c 4e
ff ad d6 2b 8d 00 03 a0 01 4c 55 07 a9 03 85 fd a9 00 85 fc 60 20 4c 07 4c 4f 05 1c b0 02 69 04
M-E at 0500, CRC 115
* = 0500
0500 4C 54 06 JMP $0654
0503 4C 48 06 JMP $0648
0506 4C 0D 07 JMP $070D
0509 4C ED 06 JMP $06ED
050C 4C F0 06 JMP $06F0
050F 4C 03 07 JMP $0703
0512 EA NOP
0513 EA NOP
0514 60 RTS
0515 4C 41 07 JMP $0741
0541 20 A0 40 JSR $40A0 // free ram
0544 C0 60 CPY #$60
0546 E0 10 CPX #$10
0548 90 30 BCC $057A
054A B0 50 BCS $059C
054C D0 70 BNE $05BE
054E F0 2C BEQ $057C
054F 2C 1E 05 BIT $051E
0552 30 4E BMI $05A2
0554 20 A4 06 JSR $06A4
0557 88 DEY
0558 84 FE STY $FE
055A B1 FC LDA ($FC),Y
055C A8 TAY
055D 29 0F AND #$0F
055F AA TAX
0560 A9 10 LDA #$10
0562 8D 00 80 STA $8000
0565 A9 04 LDA #$04
0567 2C 00 80 BIT $8000
056A F0 FB BEQ $0567
056C BD 1F 05 LDA $051F,X
056F 8D 00 80 STA $8000
0572 EA NOP
0573 EA NOP
0574 EA NOP
0575 0A ASL A
0576 29 0F AND #$0F
0578 09 10 ORA #$10
057A 8D 00 80 STA $8000
057D 98 TYA
057E 4A LSR A
057F 4A LSR A
0580 4A LSR A
0581 4A LSR A
0582 A8 TAY
0583 EA NOP
0584 B9 1F 05 LDA $051F,Y
0587 8D 00 80 STA $8000
058A 20 47 06 JSR $0647
058D 0A ASL A
058E 29 0F AND #$0F
0590 09 10 ORA #$10
0592 8D 00 80 STA $8000
0595 A4 FE LDY $FE
0597 D0 BE BNE $0557
0599 20 47 06 JSR $0647
059C 20 AC 06 JSR $06AC
059F 4C 38 06 JMP $0638
05A2 20 C8 05 JSR $05C8
05A5 88 DEY
05A6 B1 FC LDA ($FC),Y
05A8 2C 01 88 BIT $8801 // parallel io
05AB 70 FB BVS $05A8
05AD 8D 00 88 STA $8800 // parallel io
05B0 AD 02 88 LDA $8802 // parallel io
05B3 09 80 ORA #$80
05B5 8D 02 88 STA $8802 // parallel io
05B8 29 7F AND #$7F
05BA 2C 01 88 BIT $8801 // parallel io
05BD 50 FB BVC $05BA
05BF 8D 02 88 STA $8802 // parallel io
05C2 98 TYA
05C3 D0 E0 BNE $05A5
05C5 A2 92 LDX #$92
05C7 2C A2 82 BIT $82A2
05CA AD 02 88 LDA $8802 // parallel io
05CD 8E 03 88 STX $8803 // parallel io
05D0 8D 02 88 STA $8802 // parallel io
05D3 60 RTS
------------------------------------------- END
------------------------------------------- BEGIN
05D4 2C 01 88 BIT $8801 // parallel io
05D7 70 FB BVS $05D4
05D9 AE 00 88 LDX $8800 // parallel io
05DC AD 02 88 LDA $8802 // parallel io
05DF 09 80 ORA #$80
05E1 8D 02 88 STA $8802 // parallel io
05E4 29 7F AND #$7F
05E6 2C 01 88 BIT $8801 // parallel io
05E9 50 FB BVC $05E6
05EB 8D 02 88 STA $8802 // parallel io
05EE 8A TXA
05EF 88 DEY
05F0 91 FC STA ($FC),Y
05F2 D0 E0 BNE $05D4
05F4 60 RTS
------------------------------------------- END
------------------------------------------- BEGIN
05F5 A0 00 LDY #$00
05F7 2C 1E 05 BIT $051E
05FA 30 D8 BMI $05D4
05FC 20 A4 06 JSR $06A4
05FF 84 FB STY $FB
0601 20 47 06 JSR $0647
0604 A9 04 LDA #$04
0606 2C 00 80 BIT $8000 // serial io
0609 F0 FB BEQ $0606
060B 20 42 06 JSR $0642
060E AD 00 80 LDA $8000 // serial io
0611 0A ASL A
0612 20 45 06 JSR $0645
0615 0D 00 80 ORA $8000 // serial io
0618 29 0F AND #$0F
061A AA TAX
061B 20 46 06 JSR $0646
061E AD 00 80 LDA $8000 // serial io
0621 0A ASL A
0622 20 45 06 JSR $0645
0625 0D 00 80 ORA $8000 // serial io
0628 29 0F AND #$0F
062A A8 TAY
062B BD 2F 05 LDA $052F,X
062E 19 3F 05 ORA $053F,Y
0631 A4 FB LDY $FB
0633 88 DEY
0634 91 FC STA ($FC),Y
0636 D0 C7 BNE $05FF
0638 A9 04 LDA #$04
063A 2C 00 80 BIT $8000 // serial io
063D F0 FB BEQ $063A
063F 4C 95 06 JMP $0695
0642 EA NOP
0643 EA NOP
0644 EA NOP
0645 EA NOP
0646 EA NOP
0647 60 RTS
------------------------------------------- END
------------------------------------------- BEGIN
0648 20 A4 06 JSR $06A4
064B A5 49 LDA $49
064D 29 BF AND #$BF
064F 85 49 STA $49
0651 4C 30 FF JMP $FF30
------------------------------------------- END
------------------------------------------- first jump
0654 78 SEI
0655 A2 02 LDX #$02 //< a delay?! >
0657 A0 00 LDY #$00
0659 88 DEY
065A D0 FD BNE $0659
065C CA DEX
065D D0 FA BNE $0659 // >end of delay>
065F 20 BB 06 JSR $06BB
0662 F0 FB BEQ $065F
0664 20 90 06 JSR $0690
0667 20 BB 06 JSR $06BB
066A F0 07 BEQ $0673
066C 20 D1 06 JSR $06D1
066F 58 CLI // allow interrupts for a sec
0670 20 8A 06 JSR $068A
0673 78 SEI
0674 A9 06 LDA #$06
0676 85 FD STA $FD
0678 A9 CD LDA #$CD
067A 85 FC STA $FC // load address $06cd into $fd
067C A0 04 LDY #$04
067E 20 F7 05 JSR $05F7
0681 20 DE 06 JSR $06DE
0684 20 CC 06 JSR $06CC
0687 4C 67 06 JMP $0667
-------------------------------------------
068A 20 BB 06 JSR $06BB //
068D D0 FB BNE $068A
068F 60 RTS
------------------------------------------- END
-------------------------------------------
0690 2C 1E 05 BIT $051E // <-- from the delay
0693 30 06 BMI $069B
0695 A9 12 LDA #$12
0697 8D 00 80 STA $8000
069A 60 RTS // >back to the delay>
069B AD 02 88 LDA $8802 // parallel io
069E 29 7F AND #$7F
06A0 8D 02 88 STA $8802
06A3 60 RTS // and returning
------------------------------------------- END OF:
------------------------------------------- BEGIN
06A4 20 8A 06 JSR $068A
06A7 2C 1E 05 BIT $051E
06AA 30 06 BMI $06B2
06AC A9 10 LDA #$10
06AE 8D 00 80 STA $8000 // serial IO
06B1 60 RTS
06B2 AD 02 88 LDA $8802 // parallel IO
06B5 09 80 ORA #$80
06B7 8D 02 88 STA $8802 // parallel IO
06BA 60 RTS
------------------------------------------- END
-------------------------------------------
06BB 2C 1E 05 BIT $051E // <-- from the delay
06BE 30 06 BMI $06C6
06C0 A9 04 LDA #$04
06C2 2C 00 80 BIT $8000 // serial IO
06C5 60 RTS // >back to the delay>
06C6 A9 40 LDA #$40
06C8 2C 01 88 BIT $8801 // paralle IO
06CB 60 RTS
------------------------------------------- END
------------------------------------------- BEGIN
06CC 4C 00 10 JMP $1000
06CE 10 00 BPL $06D0
06CF 00 BRK
06D0 00 BRK
------------------------------------------- END
------------------------------------------- real work
06D1 A5 49 LDA $49 //
06D3 29 FE AND #$FE // make low bit of $49 0
06D5 85 49 STA $49 // for good
06D7 AD 00 8F LDA $8F00 // set low bit of LED IO byte
06DA 09 01 ORA #$01
06DC D0 0B BNE $06E9 // if $8f00 WAS not 0, save, rts
06DE A5 49 LDA $49 // if $8f00 WAS 0,
06E0 09 41 ORA #$41 // set lots of bits on $49
06E2 85 49 STA $49 // and save it
06E4 A9 BE LDA #$BE // and set lots of bits on LED IO byte
06E6 2D 00 8F AND $8F00 // by anding with the low bit LED IO byte
06E9 8D 00 8F STA $8F00 // and save it LED IO byte
06EC 60 RTS // > we are done >>>>>>>>>>>>>>>>>>>
------------------------------------------- done w/ real work
------------------------------------------- BEGIN
06ED A9 00 LDA #$00
06EF 2C A9 02 BIT $02A9
06F0 A9 02 LDA #$02
06F2 48 PHA
06F3 20 2E 07 JSR $072E
06F6 68 PLA
06F7 A8 TAY
06F8 A5 69 LDA $69 // store $6869 in $fc
06FA 85 FD STA $FD
06FC A5 68 LDA $68
06FE 85 FC STA $FC
0700 20 4F 05 JSR $054F
0703 A5 20 LDA $20
0705 8D 00 03 STA $0300
0708 A0 01 LDY #$01
070A 4C 55 07 JMP $0755
------------------------------------------- END
------------------------------------------- BEGIN
070D 20 4C 07 JSR $074C
0710 20 F5 05 JSR $05F5
0713 20 19 07 JSR $0719
0716 4C 03 07 JMP $0703
------------------------------------------- END
------------------------------------------- BEGIN
0719 A9 00 LDA #$00
071B 8D FA 01 STA $01FA // processor stack
071E 2C 00 8F BIT $8F00 // LED io
0721 30 08 BMI $072B
0723 A9 08 LDA #$08
0725 8D FA 01 STA $01FA // processor stack
0728 85 20 STA $20 // native mode job queue
072A 60 RTS
------------------------------------------- END
------------------------------------------- BEGIN
072B A9 90 LDA #$90
072E A9 AA LDA #$AA
0730 AE CF 06 LDX $06CF
0733 8E 00 28 STX $2800 // native mode job queue, tns vars
0736 AE D0 06 LDX $06D0
0739 8E 01 28 STX $2801 // native mode job queue, tns vars
073C A2 00 LDX #$00
073E 4C 4E FF JMP $FF4E // jump into the OS
------------------------------------------- END
------------------------------------------- BEGIN
0741 AD D6 2B LDA $2BD6 // DOS variables
0744 8D 00 03 STA $0300 // DOS Buffers
0747 A0 01 LDY #$01
0749 4C 55 07 JMP $0755
------------------------------------------- END
------------------------------------------- setting vector 0300 in $FC
074C A9 03 LDA #$03 // why are they doing this, what good is it?
074E 85 FD STA $FD
0750 A9 00 LDA #$00
0752 85 FC STA $FC
0754 60 RTS
------------------------------------------- END OF: setting vector 0300 in $FC
------------------------------------------- BEGIN
0755 20 4C 07 JSR $074C
0758 4C 4F 05 JMP $054F
------------------------------------------- END