sms/pad: make B jump to the next selection "class"

This commit is contained in:
Virgil Dupras 2019-07-02 16:18:00 -04:00
parent 162e503291
commit ade9b96d14

View File

@ -31,10 +31,8 @@
.equ PAD_SELSTAT PAD_RAMSTART .equ PAD_SELSTAT PAD_RAMSTART
; Button status of last padGetC call. ; Button status of last padGetC call.
.equ PAD_GETCSTAT PAD_SELSTAT+1 .equ PAD_GETCSTAT PAD_SELSTAT+1
; Current selection "class". 0 = lowcase, 1 = upcase, 2 = num, 3 = symbols
.equ PAD_SELCLASS PAD_GETCSTAT+1
; Current selected character ; Current selected character
.equ PAD_SELCHR PAD_SELCLASS+1 .equ PAD_SELCHR PAD_GETCSTAT+1
; When non-zero, will be the next char returned in GetC. So far, only used for ; When non-zero, will be the next char returned in GetC. So far, only used for
; LF that is feeded when Start is pressed. ; LF that is feeded when Start is pressed.
.equ PAD_NEXTCHR PAD_SELCHR+1 .equ PAD_NEXTCHR PAD_SELCHR+1
@ -47,7 +45,6 @@ padInit:
ld (PAD_SELSTAT), a ld (PAD_SELSTAT), a
ld (PAD_GETCSTAT), a ld (PAD_GETCSTAT), a
xor a xor a
ld (PAD_SELCLASS), a
ld (PAD_NEXTCHR), a ld (PAD_NEXTCHR), a
ld a, 'a' ld a, 'a'
ld (PAD_SELCHR), a ld (PAD_SELCHR), a
@ -98,6 +95,8 @@ padUpdateSel:
jr z, .left jr z, .left
bit PAD_RIGHT, a bit PAD_RIGHT, a
jr z, .right jr z, .right
bit PAD_BUTB, a
jr z, .nextclass
jr .nothing jr .nothing
.up: .up:
ld a, (PAD_SELCHR) ld a, (PAD_SELCHR)
@ -115,7 +114,45 @@ padUpdateSel:
ld a, (PAD_SELCHR) ld a, (PAD_SELCHR)
inc a \ inc a \ inc a \ inc a \ inc a inc a \ inc a \ inc a \ inc a \ inc a
jr .setchr jr .setchr
.nextclass:
; Go to the beginning of the next "class" of characters
push bc
ld a, (PAD_SELCHR)
ld b, '0'
cp b
jr c, .setclass ; A < '0'
ld b, ':'
cp b
jr c, .setclass
ld b, 'A'
cp b
jr c, .setclass
ld b, '['
cp b
jr c, .setclass
ld b, 'a'
cp b
jr c, .setclass
ld b, ' '
; continue to .setclass
.setclass:
ld a, b
pop bc
; continue to .setchr
.setchr: .setchr:
; check range first
cp 0x7f
jr nc, .tooHigh
cp 0x20
jr nc, .setchrEnd ; not too low
; too low, probably because we overdecreased. Let's roll over
ld a, '~'
jr .setchrEnd
.tooHigh:
; too high, probably because we overincreased. Let's roll over
ld a, ' '
; continue to .setchrEnd
.setchrEnd:
ld (PAD_SELCHR), a ld (PAD_SELCHR), a
jp unsetZ jp unsetZ
.nothing: .nothing: