shave some bytes

This commit is contained in:
4am 2019-10-08 13:31:41 -04:00
parent 436522857a
commit e57eaaa3fa
5 changed files with 84 additions and 75 deletions

View File

@ -92,7 +92,6 @@ ResetVector ; 6 bytes, copied to $100
!source "src/ui.overlay.a"
!source "src/ui.offscreen.a"
!source "src/ui.attract.mode.a"
!source "src/ui.attract.dhgr.a"
!source "src/ui.attract.shr.a"
!source "src/ui.attract.gr.a"
@ -109,8 +108,12 @@ ResetVector ; 6 bytes, copied to $100
!source "src/parse.prefs.a" ; \__ execution falls through
!source "src/glue.prorwts2.a" ; /
; add new files above here so ui.common stays last
!source "src/ui.common.a"
; add new files above here so ui.wait stays last
!source "src/ui.attract.dhgr.a" ; \-- execution falls through
!source "src/ui.wait.a" ; /
gAttractModeStore
gFXStore
gDFXStore

View File

@ -9,7 +9,7 @@
; D000..E611 - persistent data structures (per-game cheat categories,
; gGlobalPrefsStore, gGamesListStore)
; ...unused...
; EC01..FFF9 - main program code
; EC04..FFF9 - main program code
; FFFA..FFFF - NMI, reset, IRQ vectors
;
; LC RAM BANK 2

View File

@ -146,4 +146,4 @@ DHGRActionCallback
+ !word $FDFD
+LDADDR $6000
jmp ExecuteTransitionAndWait
; /!\ execution falls through to ui.wait/ExecuteTransitionAndWait

View File

@ -10,9 +10,6 @@
; - BlankDHGR
; - IsSearchKey
; - IsUpDownOrRightArrow
; - ExecuteTransitionAndWait
; - WaitForKeyFor30Seconds
; - CoverFade
;
;------------------------------------------------------------------------------
@ -172,71 +169,3 @@ IsUpDownOrRightArrow
beq @done
cmp #$8A ; down arrow
@done rts
;------------------------------------------------------------------------------
; ExecuteTransitionAndWait
; call transition effect code (address passed in) and wait a period of time
; or until the user presses a key
;
; in: A/Y = address of transition effect code
; out: all flags and registers clobbered
;------------------------------------------------------------------------------
ExecuteTransitionAndWait
+STAY @j+1
@j jsr $FDFD ; SMC call transition effect code
ldx #$20 ; picture is showing so now we wait
- lda #0
jsr WaitForKeyWithTimeout
bmi +
dex
bpl -
+ lda KBD
cmp #$95
bne ConvenientlyPlacedRTS
bit CLEARKBD
ConvenientlyPlacedRTS
rts
; /!\ keep this last in the file to ensure it doesn't cross a page boundary /!\
;------------------------------------------------------------------------------
; WaitForKeyFor30Seconds
; does what it says on the tin
;
; in: none
; out: if user presses a key before the timer runs out, exits with A = key
; and X/Y preserved
; otherwise exits via MegaAttractMode and everything is clobbered
;------------------------------------------------------------------------------
WaitForKeyFor30Seconds
lda #$16 ; initialize timeout counters
sta Timeout
sta Timeout+1
sta Timeout+2
@loop
lda KBD
bmi ConvenientlyPlacedRTS
inc RNDSEED+1 ; these are only ever incremented, never
bne + ; reset (may be used as a pseudorandom
inc RNDSEED ; seed)
+
dec Timeout
bne @loop
dec Timeout+1
bne @loop
dec Timeout+2
bne @loop
; /!\ execution falls through here to CoverFade
CoverFade
jsr LoadCoverOffscreen
jsr ShowOtherPage
lda OffscreenPage
bne +
jsr LoadCoverOffscreen
jsr ShowOtherPage
+ jsr LoadFile ; load transition effect code at $6000
!word kFXDirectory
!word kCoverFadeFile
!word $6000
jsr $6000 ; call transition effect
jmp MegaAttractMode ; exit via mega attract mode

77
src/ui.wait.a Normal file
View File

@ -0,0 +1,77 @@
;License:MIT
;(c) 2018-9 by 4am
;
; UI functions for doing things then waiting, or waiting then doing things
;
; - ExecuteTransitionAndWait
; - WaitForKeyFor30Seconds
; - CoverFade
; /!\ execution falls through here from ui.attract.dhgr/DHGRActionCallback
;------------------------------------------------------------------------------
; ExecuteTransitionAndWait
; call transition effect code (address passed in) and wait a period of time
; or until the user presses a key
;
; in: A/Y = address of transition effect code
; out: all flags and registers clobbered
;------------------------------------------------------------------------------
ExecuteTransitionAndWait
+STAY @j+1
@j jsr $FDFD ; SMC call transition effect code
ldx #$20 ; picture is showing so now we wait
- lda #0
jsr WaitForKeyWithTimeout
bmi +
dex
bpl -
+ lda KBD
cmp #$95
bne ConvenientlyPlacedRTS
bit CLEARKBD
ConvenientlyPlacedRTS
rts
; /!\ keep this last in the file to ensure it doesn't cross a page boundary /!\
;------------------------------------------------------------------------------
; WaitForKeyFor30Seconds
; does what it says on the tin
;
; in: none
; out: if user presses a key before the timer runs out, exits with A = key
; and X/Y preserved
; otherwise exits via MegaAttractMode and everything is clobbered
;------------------------------------------------------------------------------
WaitForKeyFor30Seconds
lda #$16 ; initialize timeout counters
sta Timeout
sta Timeout+1
sta Timeout+2
@loop
lda KBD
bmi ConvenientlyPlacedRTS
inc RNDSEED+1 ; these are only ever incremented, never
bne + ; reset (may be used as a pseudorandom
inc RNDSEED ; seed)
+
dec Timeout
bne @loop
dec Timeout+1
bne @loop
dec Timeout+2
bne @loop
; /!\ execution falls through here to CoverFade
CoverFade
jsr LoadCoverOffscreen
jsr ShowOtherPage
lda OffscreenPage
bne +
jsr LoadCoverOffscreen
jsr ShowOtherPage
+ jsr LoadFile ; load transition effect code at $6000
!word kFXDirectory
!word kCoverFadeFile
!word $6000
jsr $6000 ; call transition effect
jmp MegaAttractMode ; exit via mega attract mode