Rainbow Arts 1st Edition CD turboloader... 02A7 A5 02 LDA $02 <- Wait for pilot tone 02A9 C9 A0 CMP #$A0 02AB D0 FA BNE $02A7 Was not the pilot tone 02AD A9 07 LDA #$07 02AF 85 04 STA $04 02B1 A2 05 LDX #$05 02B3 86 05 STX $05 02B5 20 D2 02 JSR $02D2 02B8 C9 A0 CMP #$A0 02BA D0 EB BNE $02A7 Where's the pilot tone 02BC CA DEX 02BD D0 F6 BNE $02B5 Better be sure it's the pilot tone 02BF 20 D2 02 JSR $02D2 02C2 C9 A0 CMP #$A0 02C4 F0 F9 BEQ $02BF The pilot tone just keeps on coming 02C6 60 RTS 02C7 78 SEI <- Load error 02C8 8D 20 D0 STA $D020 02CB A9 17 LDA #$37 02CD 85 01 STA $01 02CF 6C FC FF JMP ($FFFC) 02D2 A5 05 LDA $05 02D4 10 FC BPL $02D2 Wait for byte to be ready 02D6 A9 00 LDA #$00 02D8 85 05 STA $05 02DA A5 03 LDA $03 02DC 60 RTS 02DD 48 PHA <- IRQ 02DE 8A TXA 02DF 48 PHA 02E0 AD 0D DC LDA $DC0D Store timer B interrupt flag 02E3 A2 19 LDX #$19 02E5 8E 0F DC STX $DC0F Reset timer B one-shot 02E8 4A LSR 02E9 4A LSR 02EA 66 02 ROR $02 Add interrupt bit to byte 02EC C6 04 DEC $04 02EE 10 0C BPL $02FC Full byte? 02F0 A9 07 LDA #$07 02F2 85 04 STA $04 02F4 A5 02 LDA $02 02F6 85 03 STA $03 02F8 A9 80 LDA #$80 Signal we have byte ready 02FA 85 05 STA $05 02FC 68 PLA 02FD AA TAX 02FE 68 PLA 02FF 40 RTI 0351 AD 11 D0 LDA $D011 <- Loader start 0354 8D B9 03 STA $03B9 0357 78 SEI Disable interrupts 0358 A9 00 LDA #$00 035A 8D 11 D0 STA $D011 Disable screen 035D 85 09 STA $09 035F A9 7F LDA #$7F 0361 8D 0D DC STA $DC0D Disable CIA A interrupts 0364 A9 DD LDA #$DD 0366 8D FE FF STA $FFFE 0369 A9 02 LDA #$02 036B 8D FF FF STA $FFFF Set IRQ to $02DD 036E A9 15 LDA #$35 0370 85 01 STA $01 Disable tape motor 0372 A9 90 LDA #$90 0374 8D 0D DC STA $DC0D Set tape read interrupt 0377 A9 69 LDA #$69 0379 8D 06 DC STA $DC06 037C A9 00 LDA #$00 037E 8D 07 DC STA $DC07 Set timer B threshold to 0x0D 0381 A9 19 LDA #$19 0383 8D 0F DC STA $DC0F Timer B one-shot 0386 AD 0D DC LDA $DC0D 0389 58 CLI Enable interrupts 038A 20 A7 02 JSR $02A7 -> Wait for pilot tone 038D C9 48 CMP #$48 038F D0 F9 BNE $038A Wait for sync byte 0391 86 07 STX $07 Clear block counter 0393 A2 0A LDX #$0A Count from 0x0A to 0x00 0395 20 D2 02 JSR $02D2 0398 86 03 STX $03 039A C5 03 CMP $03 039C D0 EC BNE $038A 039E CA DEX 039F 10 F4 BPL $0395 Countdown from sync 03A1 20 D2 02 JSR $02D2 03A4 C5 09 CMP $09 03A6 D0 E2 BNE $038A Countdown failed 03A8 20 D2 02 JSR $02D2 03AB 85 08 STA $08 Amount of 256 byte blocks to load 03AD 20 BD 03 JSR $03BD -> Read file 03B0 78 SEI Disable interrupts 03B1 A9 17 LDA #$37 03B3 85 01 STA $01 03B5 20 84 FF JSR $FF84 Clear timers, etc. 03B8 A9 00 LDA #$00 03BA 4C 18 08 JMP $0818 -> Start loaded program 03BD 20 D2 02 JSR $02D2 Read file 03C0 C5 07 CMP $07 03C2 D0 30 BNE $03F4 Are we on the correct block 03C4 20 D2 02 JSR $02D2 03C7 85 0A STA $0A Address lo 03C9 20 D2 02 JSR $02D2 03CC 85 0B STA $0B Address hi 03CE A0 00 LDY #$00 03D0 84 06 STY $06 Clear checksum 03D2 20 D2 02 JSR $02D2 Get byte 03D5 EE 20 D0 INC $D020 03D8 91 0A STA ($0A),Y Store byte into memory 03DA 45 06 EOR $06 03DC 85 06 STA $06 03DE CE 20 D0 DEC $D020 03E1 C8 INY 03E2 D0 EE BNE $03D2 Next byte please 03E4 20 D2 02 JSR $02D2 03E7 C5 06 CMP $06 03E9 D0 0C BNE $03F7 Checksum failed 03EB E6 07 INC $07 03ED A5 07 LDA $07 03EF C5 08 CMP $08 03F1 D0 CA BNE $03BD More blocks to go 03F3 60 RTS 03F4 A9 01 LDA #$01 03F6 2C A9 02 BIT $02A9 03F9 4C C7 02 JMP $02C7 -> Load error