starkernel: retarget REPL glyph rendering to TTF-TEXT's rasterizer (4.4j)
font_8x16.c keeps rendering everything through and including POST; TTF-TEXT's rasterizer takes over at the interactive REPL boundary (sk_repl()) via a new runtime mode switch, vt100_enable_ttf() (console_fb_enable_ttf() wrapper), not a compile-time swap -- both backends coexist in the same binary since boot/POST must stay font_8x16.c per this item's own done-when. TTF-TEXT (the FORTH word) isn't directly callable from vt100.c -- VM stack arguments, different call shape than a one-glyph cell draw. Used hal/ttf.c's VM-independent primitives directly instead (same rasterizer TTF-TEXT itself calls underneath), added as a native C helper in vt100.c. Lazily loads fonts:JetBrainsMono-Regular.ttf and kmallocs a 96-slot raster cache (covers all 95 printable ASCII, no eviction thrash) on first switch. Cell geometry changes at the switch (mode-aware cell_w()/cell_h()): provisional 12x24 TTF cell (600/1000em * 20px = 12px exactly, using 4.4i's confirmed-uniform hmtx advance width) vs font_8x16's fixed 8x16 -- cols/rows re-derived and screen cleared at the switch point, same as vt100_init() itself does. Final REPL text size is 4.4m's decision, not this item's. Also fixes the second call site 4.4i flagged: erase_line_range() now uses one fb_fill_rect() instead of a per-cell font_8x16-specific blank glyph draw, consistent with erase_display(2)'s full-screen case. Three-arch verified: amd64/aarch64/riscv64 all reach ok>, POST Failed: 0, identical dict-hashes. amd64 screendump shows real proportional JetBrains Mono letterforms on the REPL tail, visibly distinct from every prior font_8x16 screenshot. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
64c20c78eb
commit
f729b91a09
@@ -268,6 +268,13 @@ void sk_repl_run(VM *vm)
|
||||
|
||||
void sk_repl(VM *vm)
|
||||
{
|
||||
/* FABRIC.md item 4.4j: boot and POST (both already returned by the time
|
||||
* sk_repl() is called) stay on font_8x16.c/VT100 by design; the
|
||||
* interactive REPL -- this function -- is the boundary where TTF-TEXT
|
||||
* takes over. One-shot: console_fb_enable_ttf() no-ops on any later
|
||||
* call. */
|
||||
console_fb_enable_ttf();
|
||||
|
||||
console_println(lithos_version);
|
||||
console_puts("StarForth Version "); console_println(STARFORTH_VERSION);
|
||||
console_println("");
|
||||
|
||||
Reference in New Issue
Block a user