diff --git a/src/4cade.a b/src/4cade.a index 7d953466a..2ec8ec1bf 100644 --- a/src/4cade.a +++ b/src/4cade.a @@ -41,7 +41,7 @@ FirstMover Reenter cld cli - +READ_RAM2_WRITE_RAM2 + jsr SwitchToBank2 jsr CloseHandles ; close any open handles to restore ProRWTS jsr SaveOrRestoreScreenHoles ; restore original screen hole contents ldx #5 @@ -71,6 +71,7 @@ RestoreStackNextTime bne - ldx $DFF0 ; restore stack pointer txs +SwitchToBank1 +READ_RAM1_WRITE_RAM1 rts ; and return to caller ResetVector ; 6 bytes, copied to $100 @@ -110,9 +111,6 @@ gGlobalPrefsStore !word $D100 gGamesListStore !word $FDFD ; SMC -SwitchToBank1 - +READ_RAM1_WRITE_RAM1 - rts SwitchToBank2 +READ_RAM2_WRITE_RAM2 rts diff --git a/src/constants.a b/src/constants.a index a00eba845..32b971528 100644 --- a/src/constants.a +++ b/src/constants.a @@ -9,7 +9,7 @@ ; D000..E5F4 - persistent data structures (per-game cheat categories, ; gGlobalPrefsStore, gGamesListStore) ; ...unused... -; ECBA..FFF9 - main program code +; ECDC..FFF9 - main program code ; FFFA..FFFF - NMI, reset, IRQ vectors ; ; LC RAM BANK 2 diff --git a/src/parse.prefs.a b/src/parse.prefs.a index 00960cedc..a95da3448 100644 --- a/src/parse.prefs.a +++ b/src/parse.prefs.a @@ -169,16 +169,15 @@ pref_set ldy #0 lda ($00),y beq + - tax tay + clc + adc $FE + tax - lda ($00),y dey sta ($FE),y bne - - txa - clc - adc $FE - sta $FE + stx $FE bcc + inc $FF + rts diff --git a/src/prodos.path.a b/src/prodos.path.a index d3b7fb664..2ee01d970 100644 --- a/src/prodos.path.a +++ b/src/prodos.path.a @@ -136,3 +136,7 @@ AddToPath stx gPathname @done rts + +!if >kTitleFile != >kCoverFile { + !error ">kTitleFile != >kCoverFile, uncomment LoadTitleOffscreen block in ui.offscreen and disable this check" +} diff --git a/src/ui.attract.mode.a b/src/ui.attract.mode.a index ac90c8904..1797c0bbc 100644 --- a/src/ui.attract.mode.a +++ b/src/ui.attract.mode.a @@ -18,7 +18,7 @@ ; out: never returns to caller (may JMP to other major modes) ;------------------------------------------------------------------------------ MegaAttractMode - +READ_RAM1_WRITE_RAM1 + jsr SwitchToBank1 ldx #$FF txs diff --git a/src/ui.browse.mode.a b/src/ui.browse.mode.a index 61ec88545..ba9149d98 100644 --- a/src/ui.browse.mode.a +++ b/src/ui.browse.mode.a @@ -23,6 +23,17 @@ BrowseMode jsr WaitForKeyFor30Seconds bit CLEARKBD +; indices into BrowseDispatchTable below +kBrowseSearch = 0 +kBrowsePrevious = 1 +kBrowseNext = 2 +kBrowseExitToSearch = 3 +kBrowseTab = 4 +kBrowseLaunch = 5 +kBrowseCredits = 6 +kBrowseCheat = 7 +kSoftBell = 8 + ldy #kNumBrowseKeys - dey bmi @noKeyMatch @@ -34,10 +45,14 @@ BrowseMode @noKeyMatch jsr IsSearchKey beq + - jsr SoftBell ; beep on invalid input - jmp @BrowseModeInputLoop ; and start over + ldx #kSoftBell ; beep on invalid input +!if kBrowseSearch > 0 { + +HIDE_NEXT_2_BYTES + ldx #kBrowseSearch +} else { ++ +} ; execution falls through here @BrowseDispatch ldy BrowseDispatchTableLo,x @@ -99,16 +114,6 @@ OnBrowseChanged ;------------------------------------------------------------------------------ -; indices into BrowseDispatchTable -kBrowseSearch = 0 -kBrowsePrevious = 1 -kBrowseNext = 2 -kBrowseExitToSearch = 3 -kBrowseTab = 4 -kBrowseLaunch = 5 -kBrowseCredits = 6 -kBrowseCheat = 7 - BrowseDispatchTableLo !byte OnBrowseSearch !byte >OnBrowsePrevious @@ -127,6 +133,7 @@ BrowseDispatchTableHi !byte >OnBrowseLaunch !byte >Credits !byte >OnBrowseCheat + !byte >SoftBell kNumBrowseKeys = 11 ; number of entries in next 2 tables (each) BrowseKeys diff --git a/src/ui.offscreen.a b/src/ui.offscreen.a index 36836ca63..ebb4a0073 100644 --- a/src/ui.offscreen.a +++ b/src/ui.offscreen.a @@ -46,11 +46,15 @@ GetOffscreenAddress ; out: all flags and registers clobbered ;------------------------------------------------------------------------------ LoadTitleOffscreen - +LDADDR kTitleFile - bne + ; Always branches, because Y is loaded - ; last with the high byte of the address, - ; which is never 0. I miss my 65c02. - +;;!if >kTitleFile = >kCoverFile { + lda #