Fixed warmstart - only relocate on cold start!

This commit is contained in:
Bobbi Webber-Manners 2021-07-17 16:03:48 -04:00
parent 7bb65cdca8
commit 83c048b603
2 changed files with 29 additions and 10 deletions

Binary file not shown.

View File

@ -190,12 +190,14 @@ SETPRFX LDA GPFXCMD
:S1 RTS :S1 RTS
* Reset handler * Reset handler
* XFER to AUXMOS1 in aux, AuxZP on * XFER to AUXMOS ($C000) in aux, AuxZP on, LC on
RESET TSX RESET TSX
STX $0100 STX $0100
LDA #<AUXMOS1 LDA $C08B ; Rd/Wt LC, bank one
LDA $C08B
LDA #<AUXMOS
STA STRTL STA STRTL
LDA #>AUXMOS1 LDA #>AUXMOS
STA STRTH STA STRTH
SEC SEC
BIT $FF58 BIT $FF58
@ -518,6 +520,7 @@ ZP2 EQU $92
ROW EQU $94 ; Cursor row ROW EQU $94 ; Cursor row
COL EQU $95 ; Cursor column COL EQU $95 ; Cursor column
WARMSTRT EQU $9F ; Cold or warm start
FAULT EQU $FD ; Error message pointer FAULT EQU $FD ; Error message pointer
ESCFLAG EQU $FF ; Escape status ESCFLAG EQU $FF ; Escape status
BRKV EQU $202 ; BRK vector BRKV EQU $202 ; BRK vector
@ -533,6 +536,8 @@ BPUTV EQU $218 ; OSBPUT vector
GBPBV EQU $21A ; OSGBPB vector GBPBV EQU $21A ; OSGBPB vector
FINDV EQU $21C ; OSFIND vector FINDV EQU $21C ; OSFIND vector
MAGIC EQU $BC ; Arbitrary value
MOSSHIM MOSSHIM
ORG AUXMOS ; MOS shim implementation ORG AUXMOS ; MOS shim implementation
@ -550,6 +555,10 @@ MOSINIT
LDA $C08B ; LC RAM Rd/Wt, 1st 4K bank LDA $C08B ; LC RAM Rd/Wt, 1st 4K bank
LDA $C08B LDA $C08B
LDA WARMSTRT ; Don't relocate on restart
CMP #MAGIC
BEQ :NORELOC
LDA #<AUXMOS1 ; Relocate MOS shim LDA #<AUXMOS1 ; Relocate MOS shim
STA A1L STA A1L
LDA #>AUXMOS1 LDA #>AUXMOS1
@ -608,6 +617,7 @@ MOSINIT
INC A4H INC A4H
:S7 BRA :L2 :S7 BRA :L2
:NORELOC
:S8 STA $C00D ; 80 col on :S8 STA $C00D ; 80 col on
STA $C003 ; Alt charset off STA $C003 ; Alt charset off
STA $C055 ; PAGE2 STA $C055 ; PAGE2
@ -668,18 +678,27 @@ MOSINIT
LDA #>OSFIND LDA #>OSFIND
STA FINDV+1 STA FINDV+1
LDA #<HELLO2 LDA #<:HELLO
LDY #>HELLO2 LDY #>:HELLO
JSR PRSTR JSR PRSTR
LDA WARMSTRT
CMP #MAGIC
BNE :S9
LDA #<:OLDM
LDY #>:OLDM
JSR PRSTR
:S9 LDA #MAGIC ; So we do not reloc again
STA WARMSTRT
LDA #$01 LDA #$01
JMP AUXADDR ; Start Acorn ROM JMP AUXADDR ; Start Acorn ROM
* No return * No return
HELLO2 ASC 'AppleMOS v0.01' :HELLO ASC 'AppleMOS v0.01'
DB $0D,$0A DB $0D,$0A,$0D,$0A,$00
ASC '==============' :OLDM ASC '(Use OLD to recover any program)'
DB $0D,$0A,$00 DB $0D,$0A,$0D,$0A,$00
* Clear to EOL * Clear to EOL
CLREOL LDA ROW CLREOL LDA ROW
ASL ASL