<feed xmlns='http://www.w3.org/2005/Atom'>
<title>gbos.git/src/joypad.asm, branch master</title>
<subtitle>gbos - a tiny Unix-flavored OS for the Game Boy Color (kernel, shell, coreutils in C, RAM filesystem)</subtitle>
<id>https://git.sl0p.foo/gbos.git/atom/src/joypad.asm?h=master</id>
<link rel='self' href='https://git.sl0p.foo/gbos.git/atom/src/joypad.asm?h=master'/>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/gbos.git/'/>
<updated>2026-07-16T14:07:01Z</updated>
<entry>
<title>osk: toggle-able on-screen keyboard on the window layer</title>
<updated>2026-07-16T14:07:01Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-07-16T14:07:01Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/gbos.git/commit/?id=a5557c75767f7201d5df8c6f95c162044072ef10'/>
<id>urn:sha1:a5557c75767f7201d5df8c6f95c162044072ef10</id>
<content type='text'>
A joypad-driven keyboard that costs zero permanent screen space: it lives
on the GB window layer, so SELECT just flips LCDC bit 5 (window enable) and
the terminal's background layer underneath is never disturbed.

- src/joypad.asm: read $FF00 with edge detection (wPadCur/Prev/New).
- src/osk.asm: 3x20 key grid (letters, digits, space, punctuation, plus
  Enter/Backspace) built once into spare bank-1 VRAM tiles (104+) and laid
  out on the $9C00 window map, docked to the bottom 3 rows. The highlighted
  key is a palette swap on its window attribute byte (CGB BG palette 1 =
  inverted), so moving the cursor is 1-2 attribute writes with no tile
  rebuilding. SELECT toggles, d-pad moves, A types.
- KGetc's console poll loop now polls the joypad and osk_handle each
  iteration; a key press returns its byte to the reader exactly like a
  serial byte, so the shell is oblivious to the input source.

Verified in the emulator (via --keys): SELECT shows the keyboard, the
highlight tracks the d-pad, and typing "ls"+Enter runs the command and
lists the files; a second SELECT hides it and reclaims the full 18 rows.

Known limitation: the OSK overlays the bottom 3 terminal rows, so if the
prompt has scrolled to the very bottom the current input line can be
hidden. A follow-up can add a scroll region (terminal uses rows 0-14 while
the OSK is up). Input over serial still works unchanged.
</content>
</entry>
</feed>
