4cade/src/ui.common.a

157 lines
3.9 KiB
Plaintext
Raw Normal View History

2019-06-26 02:44:39 +00:00
;license:MIT
;(c) 2018-9 by 4am
;
; common UI functions
;
; Public functions
; - SoftBell
; - Home
; - BlankHGR
; - BlankDHGR
;
!zone {
;------------------------------------------------------------------------------
; 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
lda MachineStatus
2019-06-26 02:44:39 +00:00
and #SUPPORTS_SHR
beq @noSHR
2019-06-27 14:55:07 +00:00
lda SHADOW
2019-06-26 02:44:39 +00:00
ora #$08
2019-06-27 14:55:07 +00:00
sta SHADOW ; turn off auxmem-to-bank-E1 shadowing
lda NEWVIDEO
2019-06-26 02:44:39 +00:00
and #$7F
2019-06-27 14:55:07 +00:00
sta NEWVIDEO ; get out of SHR mode
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
}