4sports/src/ui.browse.mode.a

199 lines
5.6 KiB
Plaintext
Raw Normal View History

2021-02-16 06:01:22 +00:00
;license:MIT
;(c) 2018-2020 by 4am
;
; Browse Mode - main UI
;
; Public functions
; - BrowseMode
;
;------------------------------------------------------------------------------
; BrowseMode
; main entry point for Browse Mode, which allows the user to browse the game
; catalog in alphabetical order and launch games
;
; in: none
; out: never returns to caller (may JMP to other major modes)
;------------------------------------------------------------------------------
BrowseMode
ldx #$FF
txs
@BrowseModeInputLoop
jsr WaitForKeyFor30Seconds
bit CLEARKBD
; indices into BrowseDispatchTable below
kBrowseSearch = 0
kBrowsePrevious = 1
kBrowseNext = 2
kBrowseExitToSearch = 3
kBrowseTab = 4
kBrowseLaunch = 5
kBrowseHelp = 6
kBrowseCredits = 7
kBrowseCheat = 8
kSoftBell = 9 ; must match kInputError
kBrowseJoystick = 10
kBrowseQuit = 11
2022-08-23 02:04:55 +00:00
kBrowseSHR = 12
2021-02-16 06:01:22 +00:00
ldy #kNumBrowseKeys
- dey
bmi @noKeyMatch
cmp BrowseKeys,y
bne -
ldx BrowseKeyDispatch,y
bne @BrowseDispatch ; always branches
@noKeyMatch
jsr IsSearchKey
2022-08-23 02:04:55 +00:00
!if kBrowseSearch > 0 {
2021-02-16 06:01:22 +00:00
bne @BrowseDispatch
ldx #kBrowseSearch
2022-08-23 02:04:55 +00:00
}
2021-02-16 06:01:22 +00:00
; execution falls through here
@BrowseDispatch
ldy BrowseDispatchTableLo,x
sty @j+1
ldy BrowseDispatchTableHi,x
sty @j+2
@j jsr $FDFD ; SMC
jmp @BrowseModeInputLoop
2022-08-23 02:04:55 +00:00
;------------------------------------------------------------------------------
; internal functions
2021-02-16 06:01:22 +00:00
OnBrowseSearch
sta InputBuffer
lda #$01
sta InputLength
jmp SearchMode
OnBrowsePrevious
2022-08-23 02:04:55 +00:00
jsr AnyGameSelected
; A/Y = gGameToLaunch
bcs @goToLastGame ; if no game selected, select last game
tax ; X/Y = gGameToLaunch
tya ; set up first comparison in CPX16 macro
+CPX16_0_NE @notFirstGame ; if first game selected, select last game
@goToLastGame
2021-02-16 06:01:22 +00:00
+LDX16 GameCount
@notFirstGame
+DEX16
jmp notLastGame
OnBrowseNext
+LDX16 gGameToLaunch
+INX16
2022-08-23 02:04:55 +00:00
+CPX16ADDR_NE GameCount, notLastGame
2021-02-16 06:01:22 +00:00
ldx #0
ldy #0
notLastGame
+STX16 gGameToLaunch
jmp OnBrowseChanged
2022-08-23 02:04:55 +00:00
ReloadIndexAndLaunch
jsr ReloadSearchIndex
2021-02-16 06:01:22 +00:00
OnBrowseLaunch
jsr PlayGame
jsr BlankHGR
jmp ForceBrowseChanged
OnBrowseCheat
jsr ToggleCheat
beq ForceBrowseChanged ; always branches because Z=1 on exit from ToggleCheat
OnBrowseTab
jsr MiniAttractMode
2022-12-28 18:46:17 +00:00
jsr HGRMode
2021-02-16 06:01:22 +00:00
cmp #$8D
2022-08-23 02:04:55 +00:00
beq ReloadIndexAndLaunch
2021-02-16 06:01:22 +00:00
; execution falls through here
ForceBrowseChanged
2022-08-23 02:04:55 +00:00
jsr ReloadSearchIndex
2021-02-16 06:01:22 +00:00
bit CLEARKBD
; execution falls through here
OnBrowseChanged
; in: gGameToLaunch = game index (word)
2022-08-23 02:04:55 +00:00
; gSearchStore populated
2021-02-16 06:01:22 +00:00
jsr SwitchToBank2
jsr EnableAcceleratorAndSwitchToBank1
jsr LoadGameTitleOffscreen
jsr DrawUIWithoutDots
jmp MaybeAnimateTitle
BrowseCreditsWrapper
jsr Credits
jmp ForceBrowseChanged
BrowseHelpWrapper
jsr Help
jmp ForceBrowseChanged
BrowseDispatchTableLo
!byte <OnBrowseSearch
!byte <OnBrowsePrevious
!byte <OnBrowseNext
!byte <SearchMode
!byte <OnBrowseTab
!byte <OnBrowseLaunch
!byte <BrowseHelpWrapper
!byte <BrowseCreditsWrapper
!byte <OnBrowseCheat
!byte <SoftBell
!byte <Joystick
!byte <OnQuit
2022-08-23 02:04:55 +00:00
!byte <AllSHRSlideshow
2021-02-16 06:01:22 +00:00
BrowseDispatchTableHi
!byte >OnBrowseSearch
!byte >OnBrowsePrevious
!byte >OnBrowseNext
!byte >SearchMode
!byte >OnBrowseTab
!byte >OnBrowseLaunch
!byte >BrowseHelpWrapper
!byte >BrowseCreditsWrapper
!byte >OnBrowseCheat
!byte >SoftBell
!byte >Joystick
!byte >OnQuit
2022-08-23 02:04:55 +00:00
!byte >AllSHRSlideshow
2021-02-16 06:01:22 +00:00
2022-08-23 02:04:55 +00:00
kNumBrowseKeys = 15
2021-02-16 06:01:22 +00:00
; number of entries in next 2 tables (each)
BrowseKeys
2022-08-23 02:04:55 +00:00
!byte $80 ; Ctrl-@ = SHR-only slideshow
2021-02-16 06:01:22 +00:00
!byte $83 ; Ctrl-C = toggle cheat mode
!byte $81 ; Ctrl-A = about
!byte $AF ; '/' = help
!byte $BF ; '?' = help
!byte $A0 ; Space = mini attract mode
!byte $89 ; TAB = mini attract mode
2022-08-23 02:04:55 +00:00
!byte $90 ; Ctrl-P = launch joystick calibration program
!byte $91 ; Ctrl-Q = quit
2021-02-16 06:01:22 +00:00
!byte $9B ; Esc = switch to search mode
2022-08-23 02:04:55 +00:00
!byte $8D ; ENTER = launch current game
2021-02-16 06:01:22 +00:00
!byte $8B ; up arrow = previous
2022-08-23 02:04:55 +00:00
!byte $8A ; down arrow = next
2021-02-16 06:01:22 +00:00
!byte $88 ; left arrow = previous
2022-08-23 02:04:55 +00:00
!byte $95 ; right arrow = next
2021-02-16 06:01:22 +00:00
BrowseKeyDispatch
2022-08-23 02:04:55 +00:00
!byte kBrowseSHR
2021-02-16 06:01:22 +00:00
!byte kBrowseCheat
!byte kBrowseCredits
!byte kBrowseHelp
!byte kBrowseHelp
!byte kBrowseTab
!byte kBrowseTab
2022-08-23 02:04:55 +00:00
!byte kBrowseJoystick
!byte kBrowseQuit
2021-02-16 06:01:22 +00:00
!byte kBrowseExitToSearch
2022-08-23 02:04:55 +00:00
!byte kBrowseLaunch
2021-02-16 06:01:22 +00:00
!byte kBrowsePrevious
2022-08-23 02:04:55 +00:00
!byte kBrowseNext
2021-02-16 06:01:22 +00:00
!byte kBrowsePrevious
2022-08-23 02:04:55 +00:00
!byte kBrowseNext
2021-02-16 06:01:22 +00:00
GameCount
!word 0