feat(v4): the machine boots from its ROM; the prebuilt nucleus is gone
The host node starts in its ROM (entry 12), and the boot feeds it the system's source through the console: capsules/v4/sys/map-64.f18, the fourteen .f18 blobs and end.f18, each found, hash-checked and signature-checked as any capsule, then EOT. The ROM assembles the system and starts it at (IDLE); the host reads the image record (v4_image_from_node) for what only the assembled system knows. A ROM error is reported with its blob, line and meaning, then PARITY:FAIL. Deleted: v4/tools/mkimage.c, capsules/v4/nucleus-64.f18, v4/capsule/*.v4, v4/tools/v4tof18.py. The .f18 files are the source now. - text.c speaks the rest of the ROM's language (set, here, store, start; v4_text_value, v4_text_start), so the oracle reads the same source: test_host_rom_nucleus compares the ROM against text.c on the .f18 files, word for word, image record included. Host tests load the .f18 files. - mkmap image writes v4_map_image (the map's description of the system); hosted and the kernel link the ROM and the map instead of v4_image_64.c. - Hera (Captain Bob's ruling, option 1): births stream the system the ROM assembled, as assembled code; hera.4th is unchanged. test_host_unit's host builds the system with the ROM. - New parity lines: PARITY:V4_F18 per blob, PARITY:V4_ROM words=2049 rom_hash=0xa6c792b5821010b7 instructions=60725216. Acceptance: amd64, aarch64, riscv64 boot to ok> with PARITY:V4_POST tests=538 pass=538 fail=0, POST: PASSED, and PARITY:V4_SYSTEM word_count=317 dict_hash=0xe5a57f3eb72ff94a on all three -- the same hash as the prebuilt nucleus gave. make -C v4 test test-32 hosted-check: all pass. Logs: logs/20261015-141648, -141938, -142350. Startup cost under QEMU TCG, the ROM's assembly (last V4_F18 line to V4_ROM): amd64 26.7 s of 132 s to ok>; aarch64 41.0 s of 195 s; riscv64 20.5 s of 101 s. Hosted native: +0.85 s. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
1bf19d6224
commit
a73580e949
+23
-1
@@ -56,7 +56,21 @@
|
||||
* count byte, then its characters, four to a cell, low
|
||||
* byte first, zero-padded to a whole cell.
|
||||
*
|
||||
* header NAME a dictionary entry for NAME (capsule/dict.v4), laid down
|
||||
* set NAME VALUE an assembler variable: like a constant, but it may be
|
||||
* set again (the newest value is its value). In code it
|
||||
* is a literal.
|
||||
* here as a VALUE: the next word address, the word being built
|
||||
* ended first. Not something to assemble on its own.
|
||||
* store ADDR VALUE ADDR, a VALUE that is a word of RAM, is given VALUE: the
|
||||
* state the system is switched on in.
|
||||
* start NAME the end of the text: every branch must have its target,
|
||||
* and NAME, a word, is where the system starts
|
||||
* (v4_text_start). Nothing may follow.
|
||||
* These four, constant, #, and ", are the ROM's language
|
||||
* (docs/v4.0.0/MACHINE.md): the ROM assembles the same
|
||||
* text the same way.
|
||||
*
|
||||
* header NAME a dictionary entry for NAME (capsules/v4/sys/dict.f18), laid down
|
||||
* in front of the word that the next `:` starts, and
|
||||
* linked to the header before it. NAME is taken as it
|
||||
* stands -- it may be ( or \ or + -- and is at most 31
|
||||
@@ -123,6 +137,7 @@ typedef struct {
|
||||
unsigned pool_used;
|
||||
|
||||
v4_cell latest; /* xt of the newest header, 0 if none */
|
||||
v4_cell start; /* the word `start` named, -1 if none yet */
|
||||
int header_pending; /* a header waits for its `:` */
|
||||
|
||||
unsigned line;
|
||||
@@ -155,6 +170,13 @@ v4_cell v4_text_word(const v4_text *t, const char *name);
|
||||
* dictionary's LATEST starts as. */
|
||||
v4_cell v4_text_latest(const v4_text *t);
|
||||
|
||||
/* The value of the constant or set variable NAME: 1 and *value, or 0 if
|
||||
* NAME is neither. */
|
||||
int v4_text_value(const v4_text *t, const char *name, v4_cell *value);
|
||||
|
||||
/* The word `start` named, or -1 if the text has had no start. */
|
||||
v4_cell v4_text_start(const v4_text *t);
|
||||
|
||||
/* The next free word address. */
|
||||
v4_cell v4_text_here(v4_text *t);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user