aboutsummaryrefslogtreecommitdiffstats
path: root/src/osk.asm
diff options
context:
space:
mode:
authoruser <user@clank>2026-07-16 16:17:02 +0200
committeruser <user@clank>2026-07-16 16:17:02 +0200
commit30f3a65e2de99cdffd091289b4edb8e14be9032d (patch)
treedce23b1cb2cbef5a24e279c7ada29d44c23c7403 /src/osk.asm
parentosk: wrap the cursor around all four edges (diff)
downloadgbos-30f3a65e2de99cdffd091289b4edb8e14be9032d.tar.gz
gbos-30f3a65e2de99cdffd091289b4edb8e14be9032d.tar.xz
gbos-30f3a65e2de99cdffd091289b4edb8e14be9032d.zip
sh: handle backspace in readline; prompt is now '#'
readc() returning $08/$7F now drops the last char from the command buffer (and emits one $08 so the terminal erases it) instead of storing the raw byte. Previously "lz<bksp>s" left the buffer as "lz\x08s", so the command "ls" was reported "not found" even though the screen showed "ls". Also change the shell prompt from '$' to '#'. osk: B button types the selected key SHIFTED (uppercase a-z). A types the key as shown (lowercase/digit/symbol); B on a letter subtracts 32 for the uppercase glyph (the font already has A-Z). Non-letters are unchanged.
Diffstat (limited to 'src/osk.asm')
-rw-r--r--src/osk.asm15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/osk.asm b/src/osk.asm
index 490a402..02700c6 100644
--- a/src/osk.asm
+++ b/src/osk.asm
@@ -337,9 +337,22 @@ osk_handle::
bit 4, a
call nz, osk_right
ld a, [wPadNew]
- bit 0, a ; A: type the selected key
+ bit 0, a ; A: type the key as shown
+ jr z, .chkb
+ call osk_selected
+ scf
+ ret
+.chkb
+ ld a, [wPadNew]
+ bit 1, a ; B: type the key SHIFTED (uppercase a-z)
jr z, .none
call osk_selected
+ cp "a"
+ jr c, .shifted
+ cp "z"+1
+ jr nc, .shifted
+ sub 32 ; 'a'..'z' -> 'A'..'Z'
+.shifted
scf
ret
.none