diff options
| author | user <user@clank> | 2026-07-18 21:50:22 +0200 |
|---|---|---|
| committer | user <user@clank> | 2026-07-18 21:50:22 +0200 |
| commit | 9b813f2a0eb8626f84489de0f55dc6da2ed22420 (patch) | |
| tree | 0887bb78ecc91a1c63fc5ed76be10adc9b8c2743 /usr | |
| parent | term: 3 more renderer wins - 10.9x scroll, 2.7x putc vs pre-cache (diff) | |
| download | gbos-9b813f2a0eb8626f84489de0f55dc6da2ed22420.tar.gz gbos-9b813f2a0eb8626f84489de0f55dc6da2ed22420.tar.xz gbos-9b813f2a0eb8626f84489de0f55dc6da2ed22420.zip | |
term: SCY ring-scroll - scroll writes ONE map row; OSK toggle is 212 cycles
The BG map's 32 rows become a ring: logical row L always lives at map
row (wMapTop + L) & 31, and SCY = (wMapTop + wViewTop)*8 places the
view. Scrolling bumps wMapTop, rebuilds the one new bottom line and
writes its single map row (map_row_one); the other 17 rows move for
free. The whole OSK view dance - shift the cursor above the keys,
restore the backlog on hide - is now term_view_update: one SCY write,
no map rewrite at all.
OSK safety: the keyboard lives on the WINDOW layer, which SCY never
moves. Stale ring rows can only appear under it: wViewTop = max(0,
wCurRow-14) <= 3 is nonzero only while the OSK is visible, and the
window covers exactly those bottom 3 rows (WX=7, WY=120). Verified:
scroll + view shift + scroll-while-OSK-up + backlog restore all
pixel-correct via VRAM screenshots; full README demo passes.
term_scroll: 78.5k -> 35.6k T-cycles (857k pre-optimization: 24x).
OSK toggle: 45k tilemap rewrite -> 212 cycles.
Regenerated demo/gbos-demo.gif on the new renderer.
Diffstat (limited to 'usr')
0 files changed, 0 insertions, 0 deletions
