base:freeload_v5.0_saver
no way to compare when less than two revisions
Differences
This shows you the differences between two versions of the page.
— | base:freeload_v5.0_saver [2015-04-17 04:32] (current) – created - external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== FreeLoad V5.0 Tape Saver ====== | ||
+ | This code was used to master freeload files to tape. | ||
+ | |||
+ | < | ||
+ | ; | ||
+ | ; * FREELOAD V5.0 Cassette mastering system By Paul Hughes * | ||
+ | ; | ||
+ | ; Rainbow Islands | ||
+ | ; | ||
+ | ; (C) Copyright 1984-1988 Paul Hughes | ||
+ | ; | ||
+ | ; Ported to DASM 09/11/04 by Paulie. | ||
+ | ; | ||
+ | |||
+ | processor 6502 | ||
+ | |||
+ | seg code | ||
+ | |||
+ | ; | ||
+ | |||
+ | AT EQU $80 | ||
+ | FROM EQU $FC | ||
+ | TO EQU $FE | ||
+ | |||
+ | ; | ||
+ | ; ZP | ||
+ | ; | ||
+ | TX EQU $20 | ||
+ | TY EQU $21 | ||
+ | |||
+ | BYTE EQU $BD | ||
+ | LODFLAG | ||
+ | START EQU $2B | ||
+ | TXTTAB | ||
+ | END EQU $2D | ||
+ | MSGFLAG | ||
+ | BCOUNT | ||
+ | BITIN EQU $03 | ||
+ | EADR EQU $AE | ||
+ | SADR EQU $C1 | ||
+ | CHKSUM | ||
+ | VERIFY | ||
+ | CHKSM2 | ||
+ | LSTART | ||
+ | LEND EQU $09 | ||
+ | HEDNUM | ||
+ | HEDBYT | ||
+ | HEDEND | ||
+ | |||
+ | ; | ||
+ | |||
+ | |||
+ | ; | ||
+ | ; S" | ||
+ | ; S" | ||
+ | ; | ||
+ | |||
+ | #if 0 ; :PH - Ignore the disk boot, just sys 49152 to fire it up for now | ||
+ | ORG $0316 | ||
+ | |||
+ | VECT dc.w $FE66 ; System Vectors | ||
+ | dc.w $FE47 | ||
+ | dc.w $F34A | ||
+ | dc.w $F291 | ||
+ | dc.w $F20E | ||
+ | dc.w $F250 | ||
+ | dc.w $F333 | ||
+ | dc.w $F157 | ||
+ | dc.w AUTO_START | ||
+ | dc.w $F6ED | ||
+ | dc.w $F13E | ||
+ | dc.w $F32F | ||
+ | dc.w $FE66 | ||
+ | dc.w $F4A5 | ||
+ | dc.w $F5ED | ||
+ | |||
+ | ORG $0363 | ||
+ | |||
+ | AUTO_START | ||
+ | LDA #$37 | ||
+ | STA $01 ; ROMS in | ||
+ | LDA #$F1 | ||
+ | STA $0327 ; Point Vector | ||
+ | LDA #$CA | ||
+ | STA $0326 | ||
+ | LDA #0 ; Messages OFF | ||
+ | STA $9D | ||
+ | | ||
+ | LDA #1 | ||
+ | LDX #8 | ||
+ | LDY #$FF | ||
+ | JSR $FFBA | ||
+ | LDA #FNLENGTH | ||
+ | LDX #FILENAME | ||
+ | LDY ^FILENAME | ||
+ | JSR $FFBD ; Set Header | ||
+ | LDY #$04 | ||
+ | LDX #0 | ||
+ | LDA #0 | ||
+ | JSR $FFD5 ; Load File | ||
+ | JMP SAVER_START | ||
+ | |||
+ | FILENAME | ||
+ | FNLENGTH | ||
+ | |||
+ | #endif | ||
+ | |||
+ | ; | ||
+ | ; FreeLoad Cassette Saver starts here... | ||
+ | ; | ||
+ | |||
+ | ORG $C000 | ||
+ | |||
+ | SAVER_START | ||
+ | STA $DD00 | ||
+ | LDA #$15 | ||
+ | STA $D018 | ||
+ | LDA #$1B | ||
+ | STA $D011 | ||
+ | |||
+ | JSR CLS | ||
+ | LDX #8 | ||
+ | STX $D020 | ||
+ | INX | ||
+ | STX $D021 | ||
+ | |||
+ | LDX #<INTRO | ||
+ | LDY #>INTRO | ||
+ | JSR SPRINT | ||
+ | |||
+ | WAIT_SPACE | ||
+ | JSR KEYSCAN | ||
+ | BCC WAIT_SPACE | ||
+ | |||
+ | JSR CLS | ||
+ | LDX #< | ||
+ | LDY #> | ||
+ | JSR SPRINT | ||
+ | |||
+ | SELECT_MODE | ||
+ | LDA #56 ; " | ||
+ | JSR KEYSCAN | ||
+ | BCS GOT_MODE | ||
+ | INX | ||
+ | LDA #59 ; " | ||
+ | JSR KEYSCAN | ||
+ | BCC SELECT_MODE | ||
+ | |||
+ | GOT_MODE | ||
+ | |||
+ | ; | ||
+ | ; SETUP - creates the slow loading turbo loader file (huh!) | ||
+ | ; | ||
+ | |||
+ | SETUP SEI | ||
+ | LDY #$33 ; Copy in the Kernal vectors | ||
+ | VECToR | ||
+ | STA SAVVEC,Y | ||
+ | DEY | ||
+ | BPL VECToR | ||
+ | |||
+ | LDX #< | ||
+ | LDY #>UNUSED | ||
+ | STX SAVVEC+$02 | ||
+ | STY SAVVEC+$03 | ||
+ | STX SAVVEC+$16 | ||
+ | STY SAVVEC+$17 | ||
+ | STX SAVVEC+$24 | ||
+ | STY SAVVEC+$25 | ||
+ | STX SAVVEC+$2E | ||
+ | STY SAVVEC+$2F | ||
+ | |||
+ | LDX #< | ||
+ | LDY #>ANMIVC | ||
+ | STX SAVVEC+$18 | ||
+ | STY SAVVEC+$19 | ||
+ | |||
+ | JSR CLS | ||
+ | LDA #1 ; Ensure that | ||
+ | STA 646 ; Record & Play message is printed | ||
+ | JSR $E544 ; in white | ||
+ | |||
+ | LDA #1 ; Set the cassette device up | ||
+ | TAX | ||
+ | TAY | ||
+ | JSR SETLFS | ||
+ | |||
+ | LDA # | ||
+ | LDX #<FLNAME | ||
+ | LDY #>FLNAME | ||
+ | JSR SETNAM | ||
+ | |||
+ | LDA #0 | ||
+ | STA MSGFLAG | ||
+ | |||
+ | LDX #<UNUSED | ||
+ | LDY #> | ||
+ | STX SADR | ||
+ | STY SADR+1 | ||
+ | LDX #<UNUSD2 | ||
+ | LDY #>UNUSD2 | ||
+ | STX EADR | ||
+ | STY EADR+1 | ||
+ | LDA #3 ; Unrelocatable save | ||
+ | JSR HEADER | ||
+ | |||
+ | LDX #<LOADER | ||
+ | LDY #> | ||
+ | STX SADR | ||
+ | STY SADR+1 | ||
+ | LDX #<LODEND | ||
+ | LDY #>LODEND | ||
+ | STX EADR | ||
+ | STY EADR+1 | ||
+ | JSR SAVE | ||
+ | LDA #1 ; Close all output channels | ||
+ | JSR CLOSE | ||
+ | |||
+ | ; | ||
+ | |||
+ | LDY # | ||
+ | LDX #0 | ||
+ | |||
+ | NEXTSAVE | ||
+ | STX TX | ||
+ | |||
+ | LDA FLNAM, | ||
+ | STA NUMBA | ||
+ | |||
+ | LDA WHICHDISK, | ||
+ | BEQ NODISKCHANGE | ||
+ | |||
+ | | ||
+ | TAY | ||
+ | LDA WHICHMES,Y | ||
+ | STA MESCH+1 | ||
+ | LDA WHICHMES+1, | ||
+ | STA MESCH+2 | ||
+ | |||
+ | JSR CLS | ||
+ | |||
+ | LDY #$27 | ||
+ | MESCH LDA $FFFF, | ||
+ | AND #$3F | ||
+ | STA $0400+01*40, | ||
+ | DEY | ||
+ | BPL MESCH | ||
+ | |||
+ | WAIT_SPACE_2 | ||
+ | JSR KEYSCAN | ||
+ | BCC WAIT_SPACE_2 | ||
+ | |||
+ | LDX TX | ||
+ | LDY TY | ||
+ | |||
+ | NODISKCHANGE | ||
+ | LDX TX | ||
+ | LDY TY | ||
+ | LDA FILEDATA,X | ||
+ | STA START | ||
+ | LDA FILEDATA+1, | ||
+ | STA START+1 | ||
+ | LDA FILEDATA+2, | ||
+ | STA END | ||
+ | LDA FILEDATA+3, | ||
+ | STA END+1 | ||
+ | STX TX | ||
+ | STY TY | ||
+ | |||
+ | LDA WHICH_MODE | ||
+ | BEQ DOTURBO | ||
+ | |||
+ | ; | ||
+ | |||
+ | JSR CLS ; Manual mastering mode | ||
+ | |||
+ | LDX #< | ||
+ | LDY #> | ||
+ | JSR SPRINT | ||
+ | |||
+ | WAIT_SPACE_3 | ||
+ | JSR KEYSCAN | ||
+ | BCC WAIT_SPACE_3 | ||
+ | |||
+ | ; | ||
+ | |||
+ | DOTURBO | ||
+ | LDX TX | ||
+ | LDY TY | ||
+ | | ||
+ | INX | ||
+ | INX | ||
+ | INX | ||
+ | DEY | ||
+ | BMI ALLDONE | ||
+ | JMP NEXTSAVE | ||
+ | |||
+ | ; | ||
+ | |||
+ | ALLDONE | ||
+ | |||
+ | LDX #< | ||
+ | LDY #> | ||
+ | JSR SPRINT | ||
+ | |||
+ | LDX #8 | ||
+ | STX $D020 | ||
+ | INX | ||
+ | STX $D021 | ||
+ | |||
+ | WAIT_SPACE_4 | ||
+ | JSR KEYSCAN | ||
+ | BCC WAIT_SPACE_4 | ||
+ | |||
+ | FINISHED | ||
+ | |||
+ | ; | ||
+ | |||
+ | CLS LDY #0 ; Clear screen & attributes | ||
+ | CLR LDA #$20 | ||
+ | STA $0400,Y | ||
+ | STA $0500,Y | ||
+ | STA $0600,Y | ||
+ | STA $0700,Y | ||
+ | LDA #1 | ||
+ | STA $D800,Y | ||
+ | STA $D900,Y | ||
+ | STA $DA00,Y | ||
+ | STA $DB00,Y | ||
+ | INY | ||
+ | BNE CLR | ||
+ | RTS | ||
+ | |||
+ | ; | ||
+ | |||
+ | GETFILE | ||
+ | |||
+ | LDX #8 | ||
+ | STX $D020 | ||
+ | INX | ||
+ | STX $D021 | ||
+ | |||
+ | LDX #< | ||
+ | LDY #> | ||
+ | JSR SPRINT | ||
+ | |||
+ | LDA NUMBA | ||
+ | AND #$3F | ||
+ | STA $0400+17 | ||
+ | |||
+ | LDA #8 ; Set up disk device | ||
+ | TAX | ||
+ | LDY #0 | ||
+ | JSR $FFBA | ||
+ | LDA #1 ; Point to filename | ||
+ | LDX #<NUMBA | ||
+ | LDY #>NUMBA | ||
+ | JSR $FFBD | ||
+ | LDA #0 | ||
+ | LDX #< | ||
+ | LDY #>$1000 | ||
+ | JSR $FFD5 | ||
+ | RTS | ||
+ | |||
+ | ; | ||
+ | ; Messages & other such bunf | ||
+ | ; | ||
+ | TEXT | ||
+ | |||
+ | INTRO dc.b AT, | ||
+ | dc.b AT, | ||
+ | dc.b AT, | ||
+ | dc.b AT, | ||
+ | |||
+ | MASTER_MODE | ||
+ | dc.b AT, | ||
+ | dc.b AT, | ||
+ | dc.b AT, | ||
+ | |||
+ | LOAD_MES | ||
+ | |||
+ | ALL_DONE | ||
+ | dc.b AT, | ||
+ | |||
+ | WAIT_MES | ||
+ | |||
+ | DISK2 dc.b " FLIP THIS DISK ...... THEN PRESS SPACE " | ||
+ | |||
+ | ; | ||
+ | ;Saver variables | ||
+ | |||
+ | WHICH_MODE | ||
+ | NUMBA dc.b 0 | ||
+ | TEMP dc.w 0 | ||
+ | WHICHMES | ||
+ | DUMMY dc.b 0 | ||
+ | |||
+ | ; | ||
+ | ; Freeload file data | ||
+ | ; | ||
+ | ; WHICHDISK & FLNAM are read backwards ! | ||
+ | ; | ||
+ | HOWMANY | ||
+ | |||
+ | FILEDATA | ||
+ | dc.w $4000, | ||
+ | dc.w $0800, | ||
+ | dc.w $B43E, | ||
+ | dc.w $4000, | ||
+ | dc.w $C800, | ||
+ | dc.w $E000, | ||
+ | dc.w $0C40, | ||
+ | dc.w $C800, | ||
+ | dc.w $E000, | ||
+ | dc.w $0200, | ||
+ | dc.w $0800, | ||
+ | dc.w $B43E, | ||
+ | dc.w $0400, | ||
+ | |||
+ | FLNAM dc.b " | ||
+ | |||
+ | WHICHDISK | ||
+ | |||
+ | STARTUP | ||
+ | |||
+ | ; | ||
+ | ; TURBO - Blasts streams of data to the cassette | ||
+ | ; | ||
+ | |||
+ | |||
+ | TURBO JSR SENDHEADER | ||
+ | LDA START ; Send the correct file header | ||
+ | JSR SENDBYTE | ||
+ | LDA START+1 | ||
+ | JSR SENDBYTE | ||
+ | LDA END | ||
+ | JSR SENDBYTE | ||
+ | LDA END+1 | ||
+ | JSR SENDBYTE | ||
+ | STY CHKSM2 | ||
+ | |||
+ | LDA END ; Send the data from $1000 | ||
+ | SEC | ||
+ | SBC START | ||
+ | STA TEMP | ||
+ | LDA END+1 | ||
+ | SBC START+1 | ||
+ | STA TEMP+1 | ||
+ | LDA #<$1000 | ||
+ | STA START | ||
+ | LDA #>$1000 | ||
+ | STA START+1 | ||
+ | LDA START | ||
+ | CLC | ||
+ | ADC TEMP | ||
+ | STA END ; Point the start to $1000 | ||
+ | LDA START+1 | ||
+ | ADC TEMP+1 | ||
+ | STA END+1 | ||
+ | |||
+ | LDY START | ||
+ | LDA #0 | ||
+ | STA START | ||
+ | SAVELOOP | ||
+ | JSR SENDBYTE | ||
+ | INY | ||
+ | BNE SAVE2 | ||
+ | INC START+1 | ||
+ | INC $D020 ; Change border colour every page | ||
+ | SAVE2 CPY END | ||
+ | LDA START+1 | ||
+ | SBC END+1 | ||
+ | BCC SAVELOOP | ||
+ | LDA CHKSM2 | ||
+ | JSR SENDBYTE | ||
+ | JSR SENDBIT | ||
+ | LDA #$1B | ||
+ | STA $D011 ; Enable the screen | ||
+ | LDA #$37 | ||
+ | STA $01 | ||
+ | CLI | ||
+ | JSR IOINIT | ||
+ | RTS | ||
+ | |||
+ | ; | ||
+ | ; SENDHEADER - Sends header byte stream followed header termination bytes | ||
+ | ; | ||
+ | |||
+ | SENDHEADER | ||
+ | LDA #5 | ||
+ | STA 1 ; Cassette motor on, ROM's out | ||
+ | LDA #$0B | ||
+ | STA $D011 | ||
+ | LDY #0 | ||
+ | JSR DELAY ; Let tape get to full speed | ||
+ | JSR DELAY | ||
+ | JSR DELAY | ||
+ | LDA #<$00A0 | ||
+ | STA $DD04 | ||
+ | LDA #>$00A0 | ||
+ | STA $DD05 | ||
+ | LDA #$19 | ||
+ | STA $DD0E | ||
+ | |||
+ | LDY #HEDNUM | ||
+ | SENDHEAD | ||
+ | JSR SENDBYTE | ||
+ | DEY | ||
+ | BNE SENDHEAD | ||
+ | LDA # | ||
+ | JSR SENDBYTE | ||
+ | RTS | ||
+ | |||
+ | ; | ||
+ | ; SENDBYTE - Gets byte to be sent, then shifts out each bit | ||
+ | ; | ||
+ | |||
+ | SENDBYTE | ||
+ | EOR CHKSM2 | ||
+ | STA CHKSM2 | ||
+ | LDA #8 | ||
+ | STA BCOUNT | ||
+ | GETBIT | ||
+ | JSR SENDBIT | ||
+ | DEC BCOUNT | ||
+ | BNE GETBIT | ||
+ | RTS | ||
+ | |||
+ | ; | ||
+ | ; SENDBIT - set CIA timer clock values, then sends tape pulse | ||
+ | ; | ||
+ | |||
+ | SENDBIT | ||
+ | BCC BIT1 | ||
+ | LDX #$FF ; Timing for a ' | ||
+ | BIT1 STX $DD04 | ||
+ | LDA #$00 | ||
+ | STA $DD05 | ||
+ | LDA #$01 | ||
+ | WAIT BIT $DD0D ; Wait for NMI | ||
+ | BEQ WAIT | ||
+ | LDA $01 | ||
+ | EOR #$08 | ||
+ | STA $01 ; Send Pulse to tape | ||
+ | |||
+ | LDA $D020 ; Does the mindless border | ||
+ | EOR #5 | ||
+ | STA $D020 ; flashing | ||
+ | |||
+ | LDA #$19 | ||
+ | STA $DD0E ; Start timer counting down | ||
+ | LDA #$01 | ||
+ | WAIT2 BIT $DD0D ; Wait for NMI | ||
+ | BEQ WAIT2 | ||
+ | LDA $01 | ||
+ | EOR #$08 | ||
+ | STA $01 ; Stop sending Pulse | ||
+ | LDA #$19 | ||
+ | STA $DD0E ; Stop the timer | ||
+ | RTS | ||
+ | |||
+ | ; | ||
+ | |||
+ | DELAY DEX | ||
+ | BNE DELAY ; Delay to allow tape to reach | ||
+ | DEY | ||
+ | BNE DELAY | ||
+ | HERE | ||
+ | |||
+ | ; | ||
+ | ; SPRINT - Prints text pointed to in X&Y | ||
+ | ; | ||
+ | |||
+ | SPRINT | ||
+ | STY FROM+1 | ||
+ | |||
+ | PRINT_LOOP | ||
+ | LDA (FROM),Y | ||
+ | BMI GET_COORDS | ||
+ | BNE NOT_FINISH | ||
+ | RTS | ||
+ | NOT_FINISH | ||
+ | STA (TO),Y | ||
+ | INC FROM | ||
+ | BNE SKIP_C | ||
+ | INC FROM+1 | ||
+ | SKIP_C | ||
+ | BNE PRINT_LOOP | ||
+ | INC TO+1 | ||
+ | JMP PRINT_LOOP | ||
+ | ; | ||
+ | GET_COORDS | ||
+ | LDA (FROM),Y | ||
+ | STA X_TEMP | ||
+ | INY | ||
+ | ; LAX (FROM),Y | ||
+ | LDA (FROM),y | ||
+ | TAX | ||
+ | LDA SCR_TABLE_L, | ||
+ | CLC | ||
+ | ADC X_TEMP | ||
+ | STA TO | ||
+ | LDA SCR_TABLE_H, | ||
+ | ADC #0 ; eeeeeyuk !! | ||
+ | STA TO+1 | ||
+ | LDA FROM | ||
+ | CLC | ||
+ | ADC #3 | ||
+ | STA FROM | ||
+ | BCC PRINT_LOOP | ||
+ | INC FROM+1 | ||
+ | JMP PRINT_LOOP | ||
+ | |||
+ | ; | ||
+ | X_TEMP | ||
+ | |||
+ | SCREEN_BASE | ||
+ | |||
+ | SCR_TABLE_L | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | dc.b < | ||
+ | |||
+ | SCR_TABLE_H | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | dc.b > | ||
+ | |||
+ | ; | ||
+ | ; KEYSCAN - Entered with desired key in A, Carry set if pressed. | ||
+ | ; | ||
+ | |||
+ | KEYSCAN | ||
+ | PHA | ||
+ | LSR | ||
+ | LSR | ||
+ | LSR | ||
+ | TAY | ||
+ | LDA COLUMN,Y | ||
+ | STA $DC00 | ||
+ | PLA | ||
+ | AND #7 | ||
+ | TAY | ||
+ | LDA $DC01 | ||
+ | AND ROW,Y | ||
+ | BNE NOT_PRESS | ||
+ | LDA #$FF | ||
+ | STA $DC00 | ||
+ | LDA $DC01 | ||
+ | AND ROW,Y | ||
+ | BEQ NOT_PRESS | ||
+ | SEC | ||
+ | BCS GOT_KEY | ||
+ | NOT_PRESS | ||
+ | GOT_KEY | ||
+ | LDA #$FF | ||
+ | STA $DC00 | ||
+ | LDA #$7F | ||
+ | STA $DC01 | ||
+ | RTS | ||
+ | |||
+ | ; | ||
+ | KEYT dc.b 0 | ||
+ | COLUMN | ||
+ | ROW HEX 0102040810204080 | ||
+ | ; | ||
+ | ; | ||
+ | ; LOADER - Suprisingly enough this bit handles the cassette loading ! | ||
+ | ; | ||
+ | |||
+ | LOADER | ||
+ | LDA #5 ; ROMS's out cassette motor on | ||
+ | STA 1 | ||
+ | LDA #$1F ; Clear any spurious interrupts | ||
+ | STA $DC0D | ||
+ | LDA $DC0D | ||
+ | LDA #<$0368 | ||
+ | STA $DC04 ; Set CIA #1 Timer A countdown time | ||
+ | LDA #>$0368 | ||
+ | STA $DC05 | ||
+ | LDA #$90 | ||
+ | STA $DC0D | ||
+ | LDA #<CASBUF | ||
+ | STA $FFFE ; Point the interrupt vector to loader | ||
+ | LDA #>CASBUF | ||
+ | STA $FFFF | ||
+ | LDA #0 | ||
+ | STA LODFLAG | ||
+ | STA BITIN | ||
+ | |||
+ | LEXIT NOP ; Modifies from NOP-CLI-RTS | ||
+ | JMP ASeCURE | ||
+ | ; | ||
+ | RESTOAR | ||
+ | STA 1 | ||
+ | LDA CHKSUM | ||
+ | CMP VERIFY | ||
+ | BNE LODERR | ||
+ | RTS | ||
+ | |||
+ | LODERR | ||
+ | |||
+ | SeCURE | ||
+ | STA $FFFA ; Set timer in single shot mode | ||
+ | LDA #>APRIMR | ||
+ | STA $FFFB ; Start NMI but don't clear it | ||
+ | LDA #$01 | ||
+ | STA $DD05 ; This screws up Freeze Frame IIIb | ||
+ | LDA #$81 | ||
+ | STA $DD0D | ||
+ | LDA #$99 | ||
+ | STA $DD0E | ||
+ | HOLD BNE HOLD | ||
+ | |||
+ | ORG LOADER-UNUSED+IERRoR | ||
+ | SAVVEC | ||
+ | ORG LOADER-UNUSED+UNUSD2 | ||
+ | LODEND | ||
+ | |||
+ | FLNAME | ||
+ | dc.b " | ||
+ | dc.b $1F ; Blue text | ||
+ | |||
+ | LODIRQ | ||
+ | TYA | ||
+ | PHA | ||
+ | |||
+ | LDA $D020 ; Flash the screen | ||
+ | EOR #5 | ||
+ | STA $D020 | ||
+ | |||
+ | LDA $DC05 | ||
+ | LDY #$19 ; Trigger the counters | ||
+ | STY $DC0E | ||
+ | EOR #$02 | ||
+ | LSR | ||
+ | | ||
+ | ROL BITIN | ||
+ | LDA BITIN | ||
+ | BITDEC | ||
+ | BITDEF | ||
+ | BYTGOT | ||
+ | BNE EXIT | ||
+ | LDA # | ||
+ | STA ABITDC | ||
+ | |||
+ | EX1 LDA #$FE ; Get next sequence of BITS | ||
+ | STA BITIN | ||
+ | EXIT LDA $DC0D ; Acknowledge NMI | ||
+ | PLA | ||
+ | TAY | ||
+ | PLA | ||
+ | NMIVEC | ||
+ | |||
+ | ; | ||
+ | |||
+ | BYTGT1 | ||
+ | BEQ EX1 ; Confirmed Header Byte | ||
+ | CMP # | ||
+ | BEQ BYTGT2 | ||
+ | BNE BYTGT7 | ||
+ | |||
+ | BYTGT2 | ||
+ | STA ABITDC | ||
+ | LDA #0 ; Clear the checksum | ||
+ | STA CHKSUM | ||
+ | BEQ EX1 ; Branch Always ! | ||
+ | |||
+ | BYTGT3 | ||
+ | INC ABYTG3 | ||
+ | LDA ABYTG3 | ||
+ | CMP #LSTART+4 | ||
+ | BNE EX1 | ||
+ | LDA # | ||
+ | STA ABITDC | ||
+ | BNE EX1 | ||
+ | |||
+ | BYTGT4 | ||
+ | STA (LSTART), | ||
+ | EOR CHKSUM | ||
+ | STA CHKSUM | ||
+ | INC LSTART | ||
+ | BNE BYTGT5 | ||
+ | INC LSTART+1 | ||
+ | INC $D020 | ||
+ | |||
+ | BYTGT5 | ||
+ | CMP LEND | ||
+ | LDA LSTART+1 | ||
+ | SBC LEND+1 | ||
+ | BCC EX1 ; No | ||
+ | LDA # | ||
+ | STA ABITDC | ||
+ | BNE EX1 | ||
+ | |||
+ | BYTGT6 | ||
+ | LDA #$FF ; Signal to FREELOAD that a load | ||
+ | STA LODFLAG | ||
+ | LDA #LSTART | ||
+ | STA ABYTG3 | ||
+ | |||
+ | BYTGT7 | ||
+ | STA ABITDC | ||
+ | BNE EX1 | ||
+ | |||
+ | PRIMARY | ||
+ | LDA #$58 | ||
+ | STA ALECLI | ||
+ | LDA #$1B | ||
+ | STA $D011 ; Screen on | ||
+ | |||
+ | PAUSE LDA LODFLAG | ||
+ | BEQ PAUSE ; the FREELOAD program in | ||
+ | |||
+ | ; JSR ARESTR | ||
+ | |||
+ | LDA #< | ||
+ | STA ALEJMP | ||
+ | LDA #> | ||
+ | STA ALEJMP+1 | ||
+ | JMP UNUSED | ||
+ | |||
+ | FILEND | ||
+ | |||
+ | ; | ||
+ | ;VARIABLES - Lots & lots of 'em | ||
+ | ; | ||
+ | |||
+ | VICCR1 | ||
+ | C1TIMA | ||
+ | C2TIMA | ||
+ | C1ICR EQU $DC0D | ||
+ | C2ICR EQU $DD0D | ||
+ | C1CRA EQU $DC0E | ||
+ | C2CRA EQU $DD0E | ||
+ | UNUSED | ||
+ | UNUSD2 | ||
+ | IERRoR | ||
+ | CASBUF | ||
+ | IOINIT | ||
+ | SETLFS | ||
+ | SETNAM | ||
+ | HEADER | ||
+ | SAVE EQU $F867 | ||
+ | CLOSE EQU $FFC3 | ||
+ | READY EQU $A474 | ||
+ | |||
+ | ; All these EQUates are used to relocate the Loader to $02A7 | ||
+ | |||
+ | APRIMR | ||
+ | ABYTG3 | ||
+ | ANMIVC | ||
+ | ABITDC | ||
+ | ALECLI | ||
+ | ALEJMP | ||
+ | ARESTR | ||
+ | ASeCURE | ||
+ | |||
+ | FINISH | ||
+ | |||
+ | ; | ||
+ | ; Finito, all is now done ...... Sleep ! | ||
+ | ; | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
base/freeload_v5.0_saver.txt · Last modified: 2015-04-17 04:32 by 127.0.0.1