mirror of
https://github.com/a2-4am/4cade.git
synced 2024-09-26 21:56:44 +00:00
148 lines
4.8 KiB
Plaintext
148 lines
4.8 KiB
Plaintext
;License:MIT
|
|
;(c) 2018-9 by 4am
|
|
;
|
|
; miscellaneous UI functions
|
|
;
|
|
; Public functions
|
|
; - ClearScreens
|
|
; - Home
|
|
; - BlankDHGR
|
|
; - IsSearchKey
|
|
; - IsUpDownOrRightArrow
|
|
;
|
|
|
|
;------------------------------------------------------------------------------
|
|
; ClearScreens
|
|
; clear and display text screen and then clear both hires screens
|
|
; (in this order so that the erasing isn't visible)
|
|
;
|
|
; in: none
|
|
; out: $0106..$011F clobbered
|
|
;------------------------------------------------------------------------------
|
|
ClearScreens
|
|
jsr Home
|
|
lda #$20 ; clear both hi-res pages
|
|
sta @clear+2 ; (in case game loader shows them, we don't want
|
|
ldx #$40 ; to flash previous bits of the launcher UI)
|
|
ldy #$00
|
|
tya
|
|
@clear sta $FD00,y ; SMC
|
|
iny
|
|
bne @clear
|
|
inc @clear+2
|
|
dex
|
|
bne @clear
|
|
rts
|
|
|
|
;------------------------------------------------------------------------------
|
|
; Home
|
|
; clear and display text screen (HARDER THAN IT SOUNDS)
|
|
;
|
|
; in: none
|
|
; out: $0106..$011F clobbered
|
|
;------------------------------------------------------------------------------
|
|
Home
|
|
lda MachineStatus
|
|
and #SUPPORTS_SHR
|
|
beq @noSHR
|
|
lda NEWVIDEO
|
|
and #%00011111 ; bit 7 = 0 -> IIgs Apple II-compatible video modes
|
|
; bit 6 = 0 -> IIgs 128K memory map is the same as the Apple IIe
|
|
; bit 5 = 0 -> IIgs DHGR is color, not monochrome
|
|
; bits 0-4 unchanged
|
|
sta NEWVIDEO
|
|
lda #$F0
|
|
sta TBCOLOR ; white text on black background
|
|
lda #$00
|
|
sta CLOCKCTL ; black border
|
|
sta CLOCKCTL ; set twice for VidHD
|
|
@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
|
|
sta CLR80VID ; get out of DHGR mode
|
|
sta DHIRESOFF ; get out of DHGR mode
|
|
jsr ROM_TEXT ; TEXT
|
|
jsr ROM_HOME ; HOME
|
|
+READ_RAM1_WRITE_RAM1
|
|
rts
|
|
@end
|
|
|
|
;------------------------------------------------------------------------------
|
|
; 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
|
|
sta WRITEAUXMEM
|
|
jsr ClearHGR1 ; clear hi-res screen 1 in auxmem
|
|
sta WRITEMAINMEM
|
|
sta SET80VID
|
|
sta DHIRESON
|
|
bit PAGE1
|
|
jmp HGRMode
|
|
|
|
;------------------------------------------------------------------------------
|
|
; IsSearchKey
|
|
; test whether accumulator contains a key that might trigger a new textrank
|
|
; search
|
|
;
|
|
; in: A = key
|
|
; out: A &= 0x7F
|
|
; Y preserved
|
|
; X clobbered
|
|
; Z = 1 and C = 0 if this is a search key
|
|
; Z = 0 if this is not a search key
|
|
;------------------------------------------------------------------------------
|
|
IsSearchKey
|
|
and #$7F ; strip high bit for search characters
|
|
cmp #$30 ; control keys and punctuation ignored
|
|
bcc @badkey
|
|
cmp #$3A ; numbers are good input
|
|
bcc @goodkey
|
|
cmp #$41 ; more punctuation (also ignored)
|
|
bcc @badkey
|
|
cmp #$5B ; uppercase letters are good input
|
|
bcs +
|
|
ora #$20 ; convert uppercase letters to lowercase
|
|
@goodkey
|
|
ldx #0
|
|
rts
|
|
|
|
+ cmp #$61 ; more punctuation (also ignored)
|
|
bcc @badkey
|
|
cmp #$7B ; lowercase letters are good input
|
|
bcc @goodkey
|
|
@badkey
|
|
ldx #1
|
|
rts
|
|
|
|
;------------------------------------------------------------------------------
|
|
; IsUpDownOrRightArrow
|
|
; test whether accumulator contains ASCII code for up, down, or right arrow
|
|
; search
|
|
;
|
|
; in: A = key
|
|
; out: all registers preserved
|
|
; Z = 1 if accumulator was one of those 3 keys
|
|
; Z = 0 otherwise
|
|
;------------------------------------------------------------------------------
|
|
IsUpDownOrRightArrow
|
|
cmp #$8B ; up arrow
|
|
beq @done
|
|
cmp #$95 ; right arrow
|
|
beq @done
|
|
cmp #$8A ; down arrow
|
|
@done rts
|