Files
StarForth/src/word_source
Robert Allan JamesandClaude Sonnet 5 1f3ec3554e starkernel: REPL scrollback, ~1000 lines (FABRIC.md item 4.4q)
Scope decided with Captain Bob before implementation: ring buffer +
recall on today's full-screen vt100 grid, not also confining REPL text
to the 4.4o 640x480 box (that confinement stays open as its own future
item, not a third silent deferral). No keyboard input path exists yet
(M8 unstarted), so the trigger is two new FORTH words, SCROLL-BACK
( n -- ) / SCROLL-FWD ( n -- ), exercised via serial injection.

vt100.c gains a text-only 1000-line ring buffer (kmalloc'd, tens of KB
-- not pixel snapshots, which would be ~1000x larger for no benefit)
plus a shadow buffer mirroring the current screen. scroll_up() now
pushes evicted rows into the ring before the pixel scroll. History is
one continuous sequence (ring then shadow); scrolling always redraws
from that sequence -- no separate pixel-scroll path for scrollback,
decided up front to avoid retrofitting later.

New src/word_source/scroll_words.c (Module 31), thin wrappers over
console_fb_scroll_back()/_fwd() -> vt100_scroll_back()/_fwd(). Bug
caught during live testing: both words initially used an off-by-one
underflow check (dsp < 1) copied from a different, older dsp
convention elsewhere in this codebase; vm_pop() (which these words
actually call) uses dsp as a 0-based top-of-stack index, so the check
rejected every legitimate single-argument call. Fixed by removing the
separate precheck and relying on vm_pop()'s own guard.

Live-verified on all three architectures (exceeds this item's
amd64-minimum bar): generated 50+ lines via a FORTH loop, confirmed
SCROLL-BACK recovers correctly older content, and on amd64 confirmed
SCROLL-FWD returns to genuinely live state (not a frozen snapshot) by
showing the injected commands' own echo. Known limitation confirmed by
direct pixel measurement: redrawn lines lose their original SGR color
(not stored per-cell) -- text recovers exactly, color does not.

Three-arch verified: Failed: 0, dict-hashes identical across all
three (values changed correctly from prior items -- two new words
were added).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 21:23:25 -04:00
..

src/word_source/

FORTH-79 word implementations, one file per category, registered into the dictionary via include/word_registry.h. Each .c file here has a matching header in src/word_source/include/ and (for most categories) a matching test module in src/test_runner/modules/.

FORTH-79 core

  • arithmetic_words.c, mixed_arithmetic_words.c — + - * / MOD ABS MIN MAX and mixed-precision arithmetic.
  • stack_words.c — DUP DROP SWAP ROT OVER NIP TUCK.
  • control_words.c — IF ELSE THEN DO LOOP BEGIN UNTIL WHILE.
  • defining_words.c — : ; CREATE DOES> VARIABLE CONSTANT.
  • memory_words.c — @ ! C@ C! MOVE FILL.
  • return_stack_words.c — >R R> R@ RDROP 2>R 2R@ 2R>.
  • double_words.c — 2DUP 2DROP 2SWAP 2@ 2! D+ D-.
  • logical_words.c — AND OR XOR NOT INVERT LSHIFT RSHIFT.
  • io_words.c — EMIT KEY TYPE CR TAB SPACE ACCEPT.
  • string_words.c — S" SLITERAL and other string operations.
  • block_words.c — BLOCK BUFFER LOAD THRU FLUSH.
  • format_words.c — .( .R .S HEX DECIMAL BASE.
  • system_words.c — BYE ABORT INCLUDE STATE.
  • dictionary_words.c — FIND SEARCH-WORDLIST WORDS.
  • dictionary_manipulation_words.c — dictionary entry manipulation words.
  • vocabulary_words.c — VOCABULARY DEFINITIONS FORTH-WORDLIST.
  • editor_words.c — block editor words.
  • defer_words.c — DEFER/IS deferred-word mechanism, used by the Tripod message-dispatch shim (see tools/hermes_tripod_smoke.sh).

StarForth-specific extensions

  • q48_16_words.c, q48_words.c — Q48.16 fixed-point word bindings.
  • starforth_words.c — StarForth-specific extensions.
  • acl_words.c — word-level ACL system's FORTH-callable primitives (see docs/03-architecture/word-acl/).
  • lifecycle_words_hosted.c — hosted-build VM lifecycle words (birth/run primitives on the hosted side; kernel-only primitives live in src/starkernel/capsule/mama_forth_words.c).
  • log_words.c — FORTH-callable logging primitives.
  • inference_words.c — FORTH-callable bindings for the statistical inference engine (Loops #5/#6).
  • physics_benchmark_words.c — benchmark harness for the 7 physics feedback loops.
  • physics_diagnostic_words.c — physics diagnostics (WORD-ENTROPY).
  • physics_freeze_words.c — PHYSICS-FREEZE / PHYSICS-THAW.
  • physics_pipelining_diagnostic_words.c — Loop #4 pipelining diagnostics.
  • dictionary_heat_diagnostic_words.c — Loop #1 heat diagnostics.

See src/word_source/include/ for the matching headers (also includes mama_forth_words.h, whose .c implementation lives under src/starkernel/capsule/ since it's kernel-only).