PAGE SBTTL "--- MACHINE COLDSTART: CBM PLUS/4 ---" ORG ZIP ; --------- ; COLDSTART ; --------- COLD: SEI ; DISABLE INTERRUPTS LDA #6 ; DISABLE FUNCTION KEYS 7-1 STA FKEY ; LEAVE "HELP" (F8) ALONE COLD0: LDA #0 JSR FUNCT DEC FKEY LDA FKEY BPL COLD0 LDA #$C0 ; COPY $C000-$FCFF TO RAM STA I+HI ; SET UP MSB TAX ; INIT PAGE COUNTER LDA #0 ; SET UP LSB STA I+LO TAY ; INIT PAGE INDEX COLD1: LDA (I),Y ; COPY ROM STA (I),Y ; INTO RAM INY BNE COLD1 INC I+HI ; NEXT PAGE INX CPX #$FD BCC COLD1 LDA #$FF ; COPY $FF40-$FFFF STA I+HI LDY #$40 COLD2: LDA (I),Y STA (I),Y INY BNE COLD2 STA ROMOUT ; DISABLE ROMS LDA #$3F ; PATCH THIS KERNAL ROUTINE STA $07E1 ; TO PREVENT ROM INTERFERENCE ; LDA #LOW WARM1 ; CHANGE THE HARDWARE RESET VECTOR ; STA $FFFC ; TO POINT TO WARMSTART ; LDA #HIGH WARM1 ; STA $FFFD CLI ; RE-ENABLE INTERRUPTS LDA #%00110001 ; GRAY STA BGCOL0 ; BACKGROUND STA BORDER ; AND BORDER LDA #$0E JSR CHROUT ; USE UPPER/LOWER CHARS LDA #$08 JSR CHROUT ; DISABLE CHARSET CHANGES LDA #0 JSR SETMSG ; DISABLE KERNAL MESSAGES JMP WARM1 ; BRANCH ALWAYS ; --------------- ; WARMSTART ENTRY ; --------------- SLOAD: DB "The story is loading ..." DB EOL SLOADL EQU $-SLOAD WARM1: CLD LDX #$FF TXS ; RESET MACHINE STACK JSR CLALL ; CLOSE EVERYTHING JSR CLS ; CLEAR SCREEN, ETC. LDY #8 ; POSITION "STORY LOADING" MESSAGE LDX #11 ; AT (8,11) CLC JSR PLOT LDX #LOW SLOAD LDA #HIGH SLOAD LDY #SLOADL JSR DLINE ; "THE STORY IS LOADING ..." LDA #8 ; MAKE BOOT DRIVE JSR DOPEN ; AND OPEN IT ; LDA FAST ; FAST-READ AVAILABLE? ; BEQ WARM2 ; NO, SKIP AHEAD ; JSR FINIT ; ELSE INIT FAST-READ ; FALL THROUGH TO ZIP WARMSTART AT "WARM2" END