2023-11-16 18:19:54 -05:00

106 lines
1.7 KiB
Plaintext

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