BOOT = $09 POKMSK = $10 BRKKEY = $11 ICAX5Z = $2E ICAX6Z = $2F STATUS = $30 CHKSUM = $31 BUFRLO = $32 BUFRHI = $33 BFENLO = $34 BFENHI = $35 LTEMP = $36 COLDST = $0244 BASICF = $03F8 COLBK = $D01A IRQST = $D20E SKSTAT = $D20F PORTB = $D301 PACTL = $D302 PBCTL = $D303 DMACTL = $D400 NMIEN = $D40E *= $400 THEAD =* THEAD_TYPE =* * = * + 1 THEAD_NAME_LEN = 10 THEAD_NAME =* * = * + THEAD_NAME_LEN THEAD_START =* THEAD_STLO =* * = * + 1 THEAD_STHI =* * = * + 1 THEAD_LENGTH =* THEAD_LENLO =* * = * + 1 THEAD_LENHI =* * = * + 1 THEAD_RUN =* THEAD_RUNLO =* * = * + 1 THEAD_RUNHI =* * = * + 1 THEAD_END =* *= $5AC BOOTST: .BYTE 0 .BYTE (ENDBOOT-BOOTST+127)/128 .WORD *-2 .WORD BOOT_INIT LDA #$3C STA PACTL CLC RTS BRK BOOT_INIT: ;display the Turbo2000 message LDX #DISPMSG JSR $C642 LDA #$01 STA BOOT STA BASICF LDA #$FF STA PORTB LDA #$00 STA COLDST ;beeps LOADNOW: LDA #$01 JSR $FDFC ;set buffer to load 17 bytes of header FINDHEAD: LDA #>THEAD STA BUFRHI STA BFENHI LDA #(THEAD_NAME - 1) JSR $C642 ;cassette beep LDA #$01 JSR $FDFC ;load program's body LDA #$FF JSR LOADBLK BCS RUNNOW ;display boot error message JSR $C63E JMP LOADNOW RUNNOW: JMP (THEAD_RUN) DISPMSG: .BYTE "TURBO 2000", $9B LOADBLK: ;store header type STA LTEMP ;TODO LDA #$34 STA PACTL STA PBCTL ;disable all IRQs except for BREAK LDA #$80 STA POKMSK STA IRQST ;reset values, disable NMI, Antic CLC LDY #$00 STY STATUS STY CHKSUM STY NMIEN STY DMACTL PHP L0650: BNE L06C2 L0652: JSR L06DB BCC L0650 LDA #$00 STA ICAX5Z STA LTEMP+1 L065D: LDY #$B4 JSR L06D6 BCC L0650 CPY #$D8 BCC L0652 INC ICAX5Z BNE L065D DEC LTEMP+1 L066E: LDY #$D1 JSR L06DB BCC L0650 CPY #$DE BCS L066E JSR L06DB BCC L06C2 LDY #$C6 JMP L069D L0683: PLP BNE L068E LDA LTEMP EOR ICAX6Z BNE L06C3 BEQ L069A L068E: LDY #$00 LDA ICAX6Z STA (BUFRLO),Y INC BUFRLO BNE L069A INC BUFRHI L069A: LDY #$C8 PHP L069D: LDA #$01 STA ICAX6Z L06A1: JSR L06D6 BCC L06C2 CPY #$E3 ROL ICAX6Z LDY #$C6 BCC L06A1 LDA CHKSUM EOR ICAX6Z STA CHKSUM LDA BUFRLO CMP BFENLO LDA BUFRHI SBC BFENHI BCC L0683 LDA #$00 CMP CHKSUM L06C2: PLA ;restore screen L06C3: LDA #$C0 STA NMIEN STA POKMSK STA IRQST ;TODO LDA #$3C STA PACTL STA PBCTL RTS L06D6: JSR L06DB BCC L06FF L06DB: LDX #$04 SLOWLOOP: DEX BNE SLOWLOOP LDA STATUS LSR AND LTEMP+1 STA COLBK L06E8: INY BEQ L06FE LDA BRKKEY BEQ L06FC LDA SKSTAT AND #$10 CMP STATUS BEQ L06E8 STA STATUS SEC RTS L06FC: DEC BRKKEY L06FE: CLC L06FF: RTS ENDBOOT: .END