docs(v4.0.0): MACHINE.md -- the three .4th layers: forth79.4th (100 percent FORTH-79), starforth.4th, anything else

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
rajames
2026-10-15 05:41:15 -04:00
co-authored by Claude Opus 5.5
parent 58f3837498
commit e429d30a7e
+15 -3
View File
@@ -51,9 +51,14 @@ width (32 and 64 bits).
them. They hold everything written in opcodes: the stack and arithmetic words, the
registers and ports, and the FORTH machinery itself (the text interpreter, `:` and `;`,
the dictionary).
3. **FORTH.** The interpreter just built compiles `forth79.4th`, then the StarForth system
`.4th` words. Ruled: the kernel loads `forth79.4th` as the system's own vocabulary, before
POST and before `init.4th`, the way v3 registers its words.
3. **FORTH.** The interpreter just built compiles the `.4th` capsules, in three layers
(ruled 2026-10-15):
1. **`forth79.4th`**: the FORTH-79 Standard, adhered to 100 percent.
2. **`starforth.4th`**: the StarForth words.
3. **Anything else**: every other capsule, such as `starshipos.4th`.
Ruled: the kernel loads `forth79.4th` as the system's own vocabulary, before POST and before
`init.4th`, the way v3 registers its words.
4. **POST**, with the existing test DSL: the case table `v4/system/post_cases.c` (name, lines,
expected error, stack and output) and its runner `v4/system/post.c`. Seal before it,
`COLD` after, as now.
@@ -126,3 +131,10 @@ Each step is accepted as `.claude/CLAUDE.md` says:
it lets `mkpost.py` write POST's cases again.
4. **ROM size.** It is whatever the assembler and blob reader take. It is set when step 1 is
built.
5. **Where `starforth.4th` loads.** Proposed: with `forth79.4th`, by the kernel and before
POST, because v3's StarForth words are system words and v3's POST covers them. Layer 3 is
`init.4th`'s.
6. **Where the standard's names live.** "100 percent" in `forth79.4th`: does it name all 130
Required words, including the ones that are single opcodes (`DUP`, `+`, `@`)? Proposed: yes.
The `.f18` primitives carry their own names, and `forth79.4th` gives every standard word its
standard name and behaviour. The `.f18` layer then holds no FORTH-79 names at all.