From 0db949c3a3ab07b264c21c3a15efea6b6055be0d Mon Sep 17 00:00:00 2001 From: user Date: Thu, 16 Jul 2026 16:46:21 +0200 Subject: term: compute the OSK view offset from the cursor row (keep input visible) A fixed offset of OSK_ROWS pushed the cursor off the top of the screen when there was little backlog (e.g. a fresh terminal: cursor at logical row 0 -> screen row -3, hidden). Now the offset is max(0, wCurRow - 14): 0 when the cursor is within the visible area, growing only enough to keep the cursor line at the bottom visible row (14) once the terminal has filled past it. compute_offset (from wOskVisible + wCurRow) runs at the top of term_write_tilemap; cursor_down re-runs the tilemap when the cursor changes rows while the OSK is up; osk_toggle just re-runs it. Shared OSK_DOCK constant in gbos.inc keeps term.asm and osk.asm in sync. Verified: fresh terminal + OSK shows the input at row 0; filling past row 14 shifts the view to hold the input at row 14; full screen + OSK puts it at row 14; toggle on+off is still lossless. --- src/osk.asm | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'src/osk.asm') diff --git a/src/osk.asm b/src/osk.asm index 5e316e3..609f6be 100644 --- a/src/osk.asm +++ b/src/osk.asm @@ -16,7 +16,7 @@ DEF rBCPD EQU $FF69 DEF rWY EQU $FF4A DEF rWX EQU $FF4B -DEF OSK_ROWS EQU 3 +DEF OSK_ROWS EQU OSK_DOCK DEF OSK_COLS EQU 20 DEF OSK_KEYS EQU OSK_ROWS * OSK_COLS DEF OSK_TILE0 EQU 104 ; first OSK tile index (bank 1; terminal uses 0-103) @@ -236,20 +236,16 @@ osk_toggle:: ld [wOskVisible], a or a jr z, .hide - ; show: shift the view up so the cursor line clears the keyboard - ld a, OSK_ROWS - call term_set_view + ; show: enable window, then recompute the view so the cursor clears the keys ld a, [rLCDC] or %00100000 ld [rLCDC], a - ret + jp term_write_tilemap .hide ld a, [rLCDC] and %11011111 ld [rLCDC], a - xor a ; view unshifted -> full 18-row backlog - call term_set_view - ret + jp term_write_tilemap ; offset recomputes to 0 -> full backlog ; movement with wrap-around; each moves the highlight osk_up: -- cgit v1.3.1-sl0p