FABRIC.md items 4.4v/4.4r/4.4ab: keyboard bridge, and simplify to a
full-screen vt100 terminal 4.4v -- keyboard-to-REPL bridge, real and tested: Refactored KEY-EVENT's per-arch translation logic (keyboard_words.c) into a shared C function, sk_key_event_poll(), so the REPL bridge reuses item 4.3.5f's already-converged Linux-keycode-namespace event stream instead of building separate amd64/aarch64/riscv64 tables. repl.c's sk_kbd_getc() decodes the standard US-QWERTY printable range plus Enter/Backspace/Shift against that stream; sk_readline() polls it as a second source alongside console_getc(). Verified via QEMU monitor sendkey injection, and by Captain Bob typing directly into the live QEMU window over real emulated PS/2 hardware mid-session (1 1 + . -> 2 ok, then a clean BYE shutdown). 4.4ab -- simplify to a full-screen terminal: Captain Bob's call, reverting the 640x480 CANVAS box + independent REPL strip (4.4o/4.4t/4.4x/4.4z) in favor of the simplest shape: the entire framebuffer is one vt100 terminal, g_vt.cols/rows = fb_width()/fb_height() divided by cell size, no origin offset, no box, no strip, no border drawing. The REPL prompt is just the terminal's last scrolling line. Scrollback, TTF rendering, and SGR color are all box-agnostic and keep working unmodified. 4.4r -- reframed as a text/graphics mode toggle: "Hide/show the scroll box" stopped meaning anything once the box was removed; the underlying need survives as a whole-screen mode switch. vt100_toggle_graphics() is a two-state machine (VISIBLE/HIDDEN) -- hidden mode stops the terminal from touching the framebuffer while its logical state keeps advancing, so direct framebuffer/TTF-TEXT drawing can use the whole screen; showing again wipes and reuses scrollback_redraw() to restore the terminal exactly. Reachable two ways, one transition function: physically via Alt+TAB (4.4y revised from Ctrl+TAB) and programmatically via the new ALT+TAB FORTH word. Verified: three-arch clean QEMU boot + logs; amd64 screendump confirms full-width text with no box/strip artifacts. Punch list §25 items 4.4v/4.4r/4.4ab complete; 4.4y revised. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
b21aa50a14
commit
af20efaa15
@@ -5787,7 +5787,7 @@ document and committing that amendment as its own item.*
|
||||
> (`logs/20260811-225514/aarch64/`), riscv64 (`logs/20260811-225903/riscv64/`) — `Failed: 0`
|
||||
> all three.
|
||||
|
||||
- [ ] **4.4r — Toggle word: hide/show the scroll box.** A FORTH word that hides the 640×480
|
||||
- [x] **4.4r — Toggle word: hide/show the scroll box.** A FORTH word that hides the 640×480
|
||||
scroll box, revealing the rest of CANVAS beneath it for drawing; showing it again restores
|
||||
the scroll-box content undisturbed, no scrollback loss. Depends on 4.4o/4.4p (geometry),
|
||||
4.4q (scrollback), 4.4t (confinement — the box must be real before it can be hidden), 4.4v
|
||||
@@ -5798,6 +5798,19 @@ document and committing that amendment as its own item.*
|
||||
three-arch QEMU boot + logs per CLAUDE.md.
|
||||
*Refs:* §27.8.
|
||||
|
||||
> **REFRAMED AND DONE 2026-08-12, by 4.4ab.** "Hide/show the scroll box" stopped meaning
|
||||
> anything once 4.4ab removed the box — there is only the full-screen terminal now. The
|
||||
> underlying need survives in a more general shape: a text/graphics mode switch for the
|
||||
> *whole screen*, which is what got built. `vt100_toggle_graphics()` (`vt100.c`) is a
|
||||
> two-state machine (VISIBLE/HIDDEN) — hiding stops every terminal draw call from touching
|
||||
> the framebuffer (logical state, cursor, and scrollback keep advancing normally so nothing
|
||||
> is lost), showing again wipes whatever graphics drew and reuses the existing
|
||||
> `scrollback_redraw()` to repaint the terminal's current content exactly, restored rather
|
||||
> than merely redrawn from a stale snapshot. Reachable two ways, both driving the same
|
||||
> single transition function: physically via Alt+TAB (`repl.c`'s `sk_kbd_getc()`) and
|
||||
> programmatically via the new `ALT+TAB` FORTH word (`keyboard_words.c`) — the "toggle word"
|
||||
> this item originally asked for, just not scoped to a box anymore.
|
||||
|
||||
- [ ] **4.4s — `(user)` prompt segment — scoped, blocked, not started.** Extends 4.4's prompt
|
||||
to `[VM name] (user) ok>`, e.g. `[Hera] (zuse) ok>`. **Blocked:** `zuse_session`
|
||||
(`include/vm.h:393`) is a boolean only — no username/identity string exists anywhere in the
|
||||
@@ -5892,7 +5905,7 @@ document and committing that amendment as its own item.*
|
||||
> verified against real `TTF-TEXT` rendering, per the note directly above; 4.4x/4.4z carry
|
||||
> that verification forward as their own done-when, not re-litigated here.
|
||||
|
||||
- [ ] **4.4v — M8 scope, precisely bounded: keyboard-to-REPL bridge.** Surfaced while
|
||||
- [x] **4.4v — M8 scope, precisely bounded: keyboard-to-REPL bridge.** Surfaced while
|
||||
discussing 4.4u's TAB-toggle binding — Captain Bob's recollection was that keyboard input
|
||||
already works end-to-end; checked against the code rather than assumed either way.
|
||||
**What's real and already done** (confirmed by reading the code, not from milestone
|
||||
@@ -5928,6 +5941,21 @@ document and committing that amendment as its own item.*
|
||||
CLAUDE.md.
|
||||
*Refs:* §27.8, 4.3.5 series, 4.4r, 4.4u, `docs/lithosananke/ROADMAP.md` M8 section.
|
||||
|
||||
> **DONE 2026-08-12.** Reused item 4.3.5f's `KEY-EVENT` convergence work rather than building
|
||||
> two per-arch tables from scratch (`kbw_key_event`'s FORTH-word logic was refactored into a
|
||||
> new shared C function, `sk_key_event_poll()`, exported from `keyboard_words.c` — same
|
||||
> single-implementation discipline as everywhere else in this codebase) — one keycode-to-ASCII
|
||||
> translation table (Linux input-event-codes.h namespace, confirmed against this build host's
|
||||
> own header, not guessed) covers all three architectures instead of amd64 needing a separate
|
||||
> XT-scancode table. `sk_kbd_getc()` (`repl.c`) tracks shift state, decodes the standard
|
||||
> US-QWERTY printable range plus Enter/Backspace, and `sk_readline()` polls it as a second
|
||||
> source alongside `console_getc()` exactly as scoped. Verified two ways: QEMU monitor
|
||||
> `sendkey` injection, and — better evidence than planned for — Captain Bob typing directly
|
||||
> into the live QEMU window over real emulated PS/2 hardware, producing `1 1 + .` → `2 ok`
|
||||
> and a clean `BYE` shutdown, confirmed by him mid-session. Superseded detail: the original
|
||||
> done-when named "landed in the REPL strip" — the strip itself was later reverted (4.4ab);
|
||||
> this item's actual keyboard-bridge substance is unaffected by that reversion.
|
||||
|
||||
- [x] **4.4w — Pin 4.4u's open numbers with Bob.** Design-only, no code. Three specific values
|
||||
4.4u left as working/placeholder, not final: (1) exact gray RGB for the two REPL-strip
|
||||
border lines — 4.4u only says "a mid-gray, not chosen"; (2) the REPL input-line's character
|
||||
@@ -6027,6 +6055,15 @@ document and committing that amendment as its own item.*
|
||||
|
||||
> **DECIDED 2026-08-12 — Ctrl+TAB.** Chosen by Captain Bob directly. 4.4v's interception
|
||||
> code intercepts this specific combination, not bare TAB.
|
||||
>
|
||||
> **REVISED 2026-08-12, same session — Alt+TAB.** Captain Bob changed the choice while 4.4v
|
||||
> was being built, once the toggle's actual purpose was reframed by 4.4ab from "hide/show
|
||||
> the scroll box" to "switch the whole screen between text and graphics mode" — Alt+TAB
|
||||
> reads more naturally for a mode switch than Ctrl+TAB does. `repl.c`'s interception
|
||||
> (`SK_KEY_LEFTALT`=56/`SK_KEY_RIGHTALT`=100, Linux input-event-codes.h, confirmed not
|
||||
> guessed) was updated to match before this item's own done-when was ever exercised, so there
|
||||
> was no built-then-discarded Ctrl+TAB code path — only the design note above was briefly
|
||||
> wrong.
|
||||
|
||||
- [x] **4.4z — Draw the scroll box's visible border.** 4.4t confined REPL text to the 640×480
|
||||
box's coordinate space but never stroked a visible rectangle outline on it — the box's edges
|
||||
@@ -6051,6 +6088,32 @@ document and committing that amendment as its own item.*
|
||||
> (`logs/screendump-4.4z/amd64-border.png`) shows a full rectangle outline around the box,
|
||||
> visually distinct from the strip below it.
|
||||
|
||||
- [x] **4.4ab — Simplify: the whole framebuffer is one full-screen vt100 terminal; drop the
|
||||
CANVAS box and REPL strip.** Reverted 2026-08-12, Captain Bob's explicit call: "let's just
|
||||
rather simplify things and make the entire framebuffer a vt100 terminal. That'll be much
|
||||
easier." **Supersedes the box/strip mechanism 4.4o/4.4t/4.4x/4.4z built** — those items stay
|
||||
checked as historical record of what was built and why, not edited in place, per this
|
||||
document's own discipline. The 640×480 centered box (4.4o), its text confinement (4.4t),
|
||||
the split into an independent bottom strip plus derived box geometry (4.4x), and the box's
|
||||
drawn border (4.4z) are all removed in favor of the simplest possible shape: `g_vt.cols`/
|
||||
`g_vt.rows` are `fb_width()/cell_w()` and `fb_height()/cell_h()` — the full screen, no
|
||||
origin offset, no separate strip render path. The REPL prompt is just the terminal's last
|
||||
scrolling line, exactly like any ordinary terminal.
|
||||
**What this keeps, unaffected:** scrollback (4.4q), TTF rendering (4.4j), SGR/ANSI color
|
||||
(4.4h/4.4k), and the keyboard bridge (4.4v, see below) — none of those are box-specific,
|
||||
and all continue to work against the full-screen grid without modification beyond
|
||||
`px_of()`/`py_of()` dropping their now-zero origin offset.
|
||||
*Done when:* three-arch QEMU boot + logs clean; amd64 screendump shows REPL text spanning
|
||||
the full screen width with no box/strip artifacts.
|
||||
*Refs:* §27.8, 4.4o, 4.4t, 4.4x, 4.4z.
|
||||
|
||||
> **DONE 2026-08-12.** Three-arch QEMU boot + logs clean (`logs/20260812-153337/amd64`,
|
||||
> `logs/20260812-153423/aarch64`, `logs/20260812-153532/riscv64`). amd64 screendump
|
||||
> (`logs/screendump-fullscreen/amd64-fullscreen.png`) — taken after Captain Bob typed
|
||||
> directly into the QEMU window over real emulated PS/2 hardware (`: STAR 42 EMIT ;` /
|
||||
> `: MARGIN 30 SPACES CR ;`, both echoed correctly including shift-key punctuation) —
|
||||
> confirms full-width text with no box confinement, no strip, no border artifacts.
|
||||
|
||||
- [ ] **4.5 — URGENT, flagged by Captain Bob 2026-08-11: the kernel build has never used any
|
||||
compiler optimization.** **Blocking priority, set by Captain Bob 2026-08-11: no other
|
||||
punch-list item is worked until 4.5a–4.5f are done**, ahead of whatever would otherwise
|
||||
|
||||
Reference in New Issue
Block a user