2019-06-26 02:44:39 +00:00
|
|
|
;license:MIT
|
|
|
|
;(c) 2018-9 by 4am
|
|
|
|
;
|
|
|
|
; common UI functions
|
|
|
|
;
|
|
|
|
; Public functions
|
2019-07-03 22:31:50 +00:00
|
|
|
; - GetOffscreenAddress
|
|
|
|
; - DrawSearchBarOffscreen
|
|
|
|
; - ShowOtherPage
|
|
|
|
; - ToggleOffscreenPage
|
|
|
|
; - ResetInputTimeout
|
2019-06-26 02:44:39 +00:00
|
|
|
; - SoftBell
|
|
|
|
; - Home
|
|
|
|
; - BlankHGR
|
|
|
|
; - BlankDHGR
|
2019-07-03 22:31:50 +00:00
|
|
|
|
|
|
|
; Public variables
|
|
|
|
; - OffscreenPage
|
|
|
|
; - UILine1
|
|
|
|
; - UILine2
|
|
|
|
; - VisibleGameCount (set during init)
|
2019-06-26 02:44:39 +00:00
|
|
|
;
|
|
|
|
|
|
|
|
!zone {
|
2019-07-03 22:31:50 +00:00
|
|
|
OffscreenPage
|
|
|
|
!byte 1 ; 0 = currently showing HGR page 2
|
|
|
|
; (so offscreen is page 1 @ $2000)
|
|
|
|
; 1 = currently showing HGR page 1
|
|
|
|
; (so offscreen is page 2 @ $4000)
|
|
|
|
|
|
|
|
UILine1
|
|
|
|
!byte 0,0,0,0,0,0,0,0,0,0
|
|
|
|
!byte 0,0,0,0,0,0,0,0,0,0
|
|
|
|
!byte 0,0,0,0,0,0,0,0,0,0
|
|
|
|
!byte 0,0,0,0,0,0,0,0,0,0
|
|
|
|
|
|
|
|
UILine2
|
|
|
|
!text "["
|
|
|
|
!byte $7F
|
|
|
|
!text " "
|
|
|
|
!text "] "
|
|
|
|
VisibleGameCount
|
|
|
|
!text "000"
|
|
|
|
!text " games"
|
|
|
|
|
|
|
|
GetOffscreenAddress
|
|
|
|
; in: none
|
|
|
|
; out: A = high byte of offscreen HGR page (#$20 or #$40)
|
|
|
|
; preserves X/Y
|
|
|
|
lda OffscreenPage
|
|
|
|
beq +
|
|
|
|
lda #$40
|
|
|
|
rts
|
|
|
|
+ lda #$20
|
|
|
|
rts
|
|
|
|
|
|
|
|
DrawSearchBarOffscreen
|
|
|
|
; clobbers all
|
|
|
|
LDA #22 ; draw visible search bar
|
|
|
|
sta VTAB
|
|
|
|
lda OffscreenPage
|
|
|
|
ror ; draw on offscreen page
|
|
|
|
+LDADDR UILine1
|
|
|
|
jsr Draw40Chars
|
|
|
|
lda OffscreenPage
|
|
|
|
ror ; draw on offscreen page
|
|
|
|
+LDADDR UILine2
|
|
|
|
jmp Draw40Chars
|
|
|
|
|
|
|
|
ShowOtherPage
|
|
|
|
; in: none
|
|
|
|
; out: A = new value of OffscreenPage
|
|
|
|
; preserves X/Y
|
|
|
|
jsr ToggleOffscreenPage
|
|
|
|
bne +
|
|
|
|
bit PAGE2 ; show page 2
|
|
|
|
rts
|
|
|
|
+ bit PAGE1 ; show page 1
|
|
|
|
rts
|
|
|
|
|
|
|
|
ToggleOffscreenPage
|
|
|
|
; in: none
|
|
|
|
; out: A = new value of OffscreenPage
|
|
|
|
; preserves X/Y
|
|
|
|
lda OffscreenPage
|
|
|
|
eor #$01
|
|
|
|
sta OffscreenPage
|
|
|
|
rts
|
|
|
|
|
|
|
|
ResetInputTimeout
|
|
|
|
; clobbers X, preserves A/Y
|
|
|
|
ldx #$16
|
|
|
|
stx Timeout
|
|
|
|
stx Timeout+1
|
|
|
|
stx Timeout+2
|
|
|
|
rts
|
2019-06-26 02:44:39 +00:00
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
; SoftBell
|
|
|
|
; yell at the user, but, like, gently
|
|
|
|
;
|
|
|
|
; in: none
|
|
|
|
; out: all registers and flags preserved
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
SoftBell
|
|
|
|
php
|
|
|
|
pha
|
|
|
|
txa
|
|
|
|
pha
|
|
|
|
ldx #32
|
|
|
|
- lda #2
|
|
|
|
jsr @wait
|
2019-06-27 14:55:07 +00:00
|
|
|
bit SPEAKER
|
2019-06-26 02:44:39 +00:00
|
|
|
lda #33
|
|
|
|
jsr @wait
|
2019-06-27 14:55:07 +00:00
|
|
|
bit SPEAKER
|
2019-06-26 02:44:39 +00:00
|
|
|
dex
|
|
|
|
bne -
|
|
|
|
pla
|
|
|
|
tax
|
|
|
|
pla
|
|
|
|
plp
|
|
|
|
rts
|
|
|
|
@wait ; identical to $FCA8 ROM routine, but ROM is switched out when we need it
|
|
|
|
sec
|
|
|
|
-- pha
|
|
|
|
- sbc #1
|
|
|
|
bne -
|
|
|
|
pla
|
|
|
|
sbc #1
|
|
|
|
bne --
|
|
|
|
rts
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
; Home
|
|
|
|
; clear and display text screen (HARDER THAN IT SOUNDS)
|
|
|
|
;
|
|
|
|
; in: none
|
|
|
|
; out: $0106..$011F clobbered
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
Home
|
2019-06-27 13:51:17 +00:00
|
|
|
lda MachineStatus
|
2019-06-26 02:44:39 +00:00
|
|
|
and #SUPPORTS_SHR
|
|
|
|
beq @noSHR
|
2019-06-27 14:55:07 +00:00
|
|
|
lda NEWVIDEO
|
2019-06-30 17:59:06 +00:00
|
|
|
and #$3F
|
|
|
|
sta NEWVIDEO ; get out of SHR mode and linear mode
|
2019-06-28 03:42:01 +00:00
|
|
|
lda #$F0
|
|
|
|
sta TBCOLOR ; white text on black background
|
|
|
|
lda #$00
|
|
|
|
sta CLOCKCTL ; black border
|
2019-06-28 03:50:25 +00:00
|
|
|
sta CLOCKCTL ; set twice for VidHD
|
2019-06-26 02:44:39 +00:00
|
|
|
@noSHR
|
|
|
|
ldx #(@end-@start-1)
|
|
|
|
- lda @start,x
|
|
|
|
sta $106,x
|
|
|
|
dex
|
|
|
|
bpl -
|
|
|
|
jmp $106
|
|
|
|
@start
|
|
|
|
; this will be run from main memory
|
|
|
|
+READ_ROM_NO_WRITE
|
2019-06-27 14:55:07 +00:00
|
|
|
sta CLR80VID ; get out of DHGR mode
|
|
|
|
sta DHIRESOFF ; get out of DHGR mode
|
|
|
|
jsr ROM_TEXT ; TEXT
|
|
|
|
jsr ROM_HOME ; HOME
|
2019-06-26 02:44:39 +00:00
|
|
|
+READ_RAM1_WRITE_RAM1
|
|
|
|
rts
|
|
|
|
@end
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
; BlankHGR
|
|
|
|
; clear and show HGR page 1 without flickering
|
|
|
|
;
|
|
|
|
; in: none
|
|
|
|
; out: text page clobbered (but screen holes preserved)
|
|
|
|
; $2000..$3FFF cleared
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
BlankHGR
|
|
|
|
jsr Home
|
|
|
|
jsr .ClearHGR1 ; clear hi-res screen 1
|
2019-06-27 15:37:23 +00:00
|
|
|
bit PAGE1 ; show hi-res screen 1 (now blank)
|
|
|
|
+HGR_MODE
|
2019-06-26 02:44:39 +00:00
|
|
|
rts
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
; BlankDHGR
|
|
|
|
; clear and show DHGR page 1 without flickering
|
|
|
|
;
|
|
|
|
; in: none
|
|
|
|
; out: text page clobbered (but screen holes preserved)
|
|
|
|
; $2000..$3FFF/main and /aux cleared
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
BlankDHGR
|
|
|
|
jsr Home
|
|
|
|
jsr .ClearHGR1 ; clear hi-res screen 1
|
2019-06-27 14:55:07 +00:00
|
|
|
sta WRITEAUXMEM
|
2019-06-26 02:44:39 +00:00
|
|
|
jsr .ClearHGR1 ; clear hi-res screen 1 in auxmem
|
2019-06-27 14:55:07 +00:00
|
|
|
sta WRITEMAINMEM
|
|
|
|
sta SET80VID
|
2019-06-27 15:37:23 +00:00
|
|
|
bit PAGE1
|
|
|
|
+HGR_MODE
|
2019-06-27 14:55:07 +00:00
|
|
|
sta DHIRESON
|
2019-06-26 02:44:39 +00:00
|
|
|
rts
|
|
|
|
|
|
|
|
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 -
|
|
|
|
+ rts
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
; .ClearHGR1 [private]
|
|
|
|
; clear $2000..$3FFF in current memory bank (main or auxmem)
|
2019-06-27 15:37:23 +00:00
|
|
|
; does not change HGR mode
|
2019-06-26 02:44:39 +00:00
|
|
|
;
|
|
|
|
; in: none
|
|
|
|
; out: $2000..$3FFF cleared
|
|
|
|
; A = 0
|
|
|
|
; X = 0
|
|
|
|
; Y = 0
|
|
|
|
; Z = 1
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
.ClearHGR1
|
|
|
|
ldx #$20
|
|
|
|
stx @a+2
|
|
|
|
lda #0
|
|
|
|
tay
|
|
|
|
@a sta $2000,y
|
|
|
|
iny
|
|
|
|
bne @a
|
|
|
|
inc @a+2
|
|
|
|
dex
|
|
|
|
bne @a
|
|
|
|
rts
|
|
|
|
}
|