sms/pad: make B jump to the next selection "class"
This commit is contained in:
parent
162e503291
commit
ade9b96d14
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user