From 10f5ffd00b905ec10fac347218a60346b83ed473 Mon Sep 17 00:00:00 2001 From: rajames Date: Thu, 8 Oct 2026 06:44:12 -0400 Subject: [PATCH] docs(v4.0.0): step 6d as mended after its review; the boots on that code MESH.md 4.1, 7a, 7c.2, 7c.3, 7c.4 and step 6d say what the code now does, what the review found and how each was mended, and what is small and not mended. The README no longer says the aim is unmet; it says the mended code has not been reviewed again. Three bare-metal boots on 2cf37aab, typing 29 values on a line: POST 538 of 538, word_count=317, dict_hash=0xd41a6ac9448fff60 on all six. Co-Authored-By: Claude Opus 5.5 --- docs/v4.0.0/MESH.md | 117 ++++++---- .../amd64/qemu-amd64-20261008-063450.log | 170 ++++++++++++++ .../aarch64/qemu-aarch64-20261008-063738.log | 143 ++++++++++++ .../riscv64/qemu-riscv64-20261008-064120.log | 213 ++++++++++++++++++ v4/README.md | 10 +- 5 files changed, 606 insertions(+), 47 deletions(-) create mode 100644 logs/20261008-063450/amd64/qemu-amd64-20261008-063450.log create mode 100644 logs/20261008-063738/aarch64/qemu-aarch64-20261008-063738.log create mode 100644 logs/20261008-064120/riscv64/qemu-riscv64-20261008-064120.log diff --git a/docs/v4.0.0/MESH.md b/docs/v4.0.0/MESH.md index a63665c3..73d98380 100644 --- a/docs/v4.0.0/MESH.md +++ b/docs/v4.0.0/MESH.md @@ -107,6 +107,7 @@ word address `base`: | `base + V4_PORTS + 2`, `+ 3` | Who is waiting to write to this node, and who to read from it: section 7a | | `base + V4_PORTS + 4 + k` | The offer on port *k*: section 7c | | `base + 2 * V4_PORTS + 4` | The wait: section 7c | +| `base + 2 * V4_PORTS + 5` | The wait for an offer only: section 7c | - **A write to a port blocks the node until the neighbour has read it.** Built 2026-10-05 for one port; the opcode after the write runs when the @@ -294,8 +295,10 @@ part of wiring them. Put to Captain Bob after it was built, and ruled: **What it costs.** A node that is flooded loses messages, of every kind: text for it, answers to text it sent, and messages it was only passing -on. In the test three nodes send each other 800 messages at once; 287 -arrive and 714 messages are let go (the count includes answers and text +on. In the test three nodes send each other 800 messages at once; 278 +arrive (287 as first built, before step 6d) and the nodes count some +1,400 let go (the count is of every kind of message, and since step 6d +counts some more than once; it includes answers and text that was to start a node sending). Six from each to each, at once, all arrive. Nothing here makes a sender slow down or send again; that is kernel-Hermes's work in v3 and is not decided for the mesh. @@ -511,6 +514,16 @@ a node may offer a word on each of its ports at once.)* the fabric has its offer taken, and the other gets the word (case 2 for the one, case 1 for the other). - Whichever it is, every offer the node had is withdrawn. +- **A store to the wait withdraws every offer** and waits for nothing. + *(Added after the review, 2026-10-08: a node that goes round without + sleeping must not leave an old offer standing for its next wait to + find.)* +- **The wait for an offer only**, `base + 2 * V4_PORTS + 5`: as the wait, + but a word that comes for the node does not end it, and a writer to the + node is not served. It ends when the offer is taken, or when there + turns out to be nothing on the port. *(Added after the review: it is + how the words of a message after the first are written where no error + must come.)* - A node in the wait that is handed a word by case 2 of another node gets it by its own case 1. - A node in the wait executes nothing and spends no heat. It shows to its @@ -551,15 +564,26 @@ stuck node left Hera deaf. So what is passed on waits, offered.)* sleeps in the wait. What is taken is written and done with; the rest stays with the messages waiting, in the order it came. A message for a stuck node waits there and holds up nothing. -- *What a node sends other than from text* goes the same way: how text - ended (type 3), and a GONE. Each is put with the messages waiting and - goes when it can. So a node that did text for a sender that then stuck +- *What a node sends other than from text* goes the same way: what a + finished text printed (type 2), how it ended (type 3), and a GONE. Each + is put with the messages waiting and goes when it can; with no room for + it, it is let go and counted. So a node that did text for a sender that then stuck is not held by it, and `KILL` is not held by one stuck node from telling the next. -- *Order.* How text ended is put before the other messages waiting, and a - node does not begin another text from a sender while its answer to that - sender is still with it: what one sender is told comes in the order its - texts were done. +- *Order.* A node's own messages keep the order they were made in. A node + does not begin another text from a sender while what it owes that + sender from an earlier one -- what that text printed, how it ended -- is + still with it: so what one sender is told comes in the order its texts + were done. A GONE it is sending holds nothing back. It can note eight + senders so; past that, nothing more is held. +- *No error in the middle.* The words of a message after the first are + written, when a message is passed on or a NACK paid, through the wait + for an offer only. If the reader has been removed the rest is let go + and counted; no error is raised, for an error there would leave the + messages waiting in pieces. For the same reason a text may leave no + more than 28 values on the stack: one that leaves more ends "Stack + overflow". And a message half taken in when its writer is removed is + let go, not kept. - *A node waiting for an answer* (`AWAIT`) does all of this but begin text: it looks through the messages waiting for what would end its wait, offers what is to be passed on and what it owes, and sleeps in @@ -575,9 +599,13 @@ stuck node left Hera deaf. So what is passed on waits, offered.)* on until its text ends. - A line typed at Hera while her text is waiting to begin a message ends that text, whether the node it waits on is stuck or only busy. -- What a finished text printed is still begun as a message from text is, - toward the console's node: if that node is stuck, nothing could be seen - in any case. +- While what a node owes a sender -- or the console -- cannot go, because + the way there is through a stuck node, it begins no more text from that + sender. It goes on passing on, paying, and doing text from others, and + when the stuck node is killed it lets go what could not go and does + what it kept back, in order. +- What text prints while it is still running, when the output buffer + fills, is begun as a message from text is, and waits as that does. - An answer that reaches a waiting node whose messages waiting are full is refused, and the wait ends "Message refused". - A message once begun is written to its end. A node that takes a first @@ -1256,37 +1284,40 @@ Each is tested, committed and pushed before the next. `hosted-check`, lint; three bare-metal boots, `logs/20261008-011558` (amd64), `-011833` (aarch64), `-012159` (riscv64). On all six: POST 538 of 538, `word_count=317`, `dict_hash=0x6a39c0bb9d183418`. - - **The review (2026-10-08) found the step not sound as built.** One - finding is mended, the rest are open and the claims of 7b and 7c that - "a stuck node holds up no other" are not yet true in the cases below. - - *Mended.* A line that left 29 values on the stack hung the node for - ever, on the products too: the passes over the messages waiting - that now follow every text need four cells, and a stack fault in - the middle of one left the messages in pieces. Such a text now - ends "Stack overflow", as it did before step 6d - (`test_host_quit.c`; `hosted-check`). The boots above were made - before this and do not show it. - - *Open: a node removed while a message is being passed on to it* - leaves the node passing it on going round for ever: the error - comes in the middle of writing the message out of the messages - waiting, and leaves them in pieces. - - *Open: offers left standing.* When a node lets a message go and - then begins text without having slept, what it had offered is - still offered, and the text's own message can go to the wrong - port. The review saw text meant for one node done by another. - - *Open: what a finished text printed* is still begun as a message - from text is, and if the way to the console is through a stuck - node the node is held and cannot be typed to. - - *Open: with more than eight messages of its own waiting* (answers, - or the GONEs of `KILL`) a node begins no text at all; on Hera that - cannot be undone from the console. - - *Open, smaller:* an error while a refusal is being written leaves - a value on the stack; with no room at all, how text ended is - begun as a message and can be held by a stuck sender; a line that - was itself refused for want of room can still end a waiting text - "Interrupted"; a message a node makes itself may be passed on by - 15 nodes, not 16; the flood's figures in 7a are stale (278 arrive - now) and `(LOST)` counts some messages more than once. + - **The review (2026-10-08) found the step not sound as built**, and + Captain Bob ruled the mends (A, B, C, D and the guard: 7c.2, 7c.3). + Each has a scene in `test_host_mesh.c`, on a row of three begun + again, that failed first: + - *A line that left 29 values on the stack hung the node for ever*, + on the products too. It ends "Stack overflow" + (`test_host_quit.c`, `hosted-check`, and typed in the boots). + - *A node removed while a message was being passed on to it* left the + node passing it on going round for ever. The rest is let go. + - *Offers left standing:* text meant for one node was done by + another. A store to the wait withdraws them. + - *What a finished text printed* held the whole node when the way to + the console was through a stuck node. It is queued. + - *More than eight of a node's own messages waiting* locked out all + text, Hera's `KILL` included. Only what a sender is owed holds that + sender's text back. + - *A message half taken in when its writer was removed* was kept as + if whole. It is let go. + - Smaller: no value is left on the stack when a port goes in + mid-refusal; a refused line no longer ends a waiting text + "Interrupted"; a node's own messages may be passed on by 16 nodes. + - *Not mended, small:* with no console told of, a second text from + whoever sent the one being done interrupts it, as since step 6c; + refusals to one node go newest first; `(LOST)` counts some messages + more than once, so the flood's check is "it comes to rest", not an + exact count; the ring of three is tested in the engine only; the + five-node test is not run at 32 bits. + - *Verified, on the code as mended.* `test_fabric.c` 112 checks, + `test_host_mesh.c` 154, `test_host_unit.c` 84. `make -C v4 test` and + `sanitize` at both widths, `hosted-check`, lint; three bare-metal + boots, `logs/20261008-063450` (amd64), `-063738` (aarch64), + `-064120` (riscv64). On all six: POST 538 of 538, `word_count=317`, + `dict_hash=0xd41a6ac9448fff60`. This code has not been reviewed + again. 7. **A second unit; scaling while running; sleep, wake and kill by command.** diff --git a/logs/20261008-063450/amd64/qemu-amd64-20261008-063450.log b/logs/20261008-063450/amd64/qemu-amd64-20261008-063450.log new file mode 100644 index 00000000..c8a559be --- /dev/null +++ b/logs/20261008-063450/amd64/qemu-amd64-20261008-063450.log @@ -0,0 +1,170 @@ +[=3hBdsDxe: loading Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +BdsDxe: starting Boot0002 "UEFI QEMU DVD-ROM QM00005 " from PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x2,0xFFFF,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +RAW SERIAL UP +[CKPT 002] Serial (COM1) initialized +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +EBS... +EBS OK +Calling kernel_main (monolithic)... + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: amd64 +Build: Oct 8 2026 06:34:24 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 131 +Total memory: 1023 MB +Usable memory: 966 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 248740 + Free pages : 247217 + Used pages : 1523 + Total MB : 971 + Free MB : 965 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +APIC: IA32_APIC_BASE MSR=0x00000000fee00900 +APIC: stale-ISR drain: 0 EOI(s) issued +APIC: initialized (xAPIC MMIO, TPR=0, SIVR=0x1FF, EOI-clear) +APIC: init done + +I/O APIC: init... +I/O APIC: base=0xfec00000, gsi_base=0, overrides=5 + override: source=00 gsi=2 flags=0x0000 + override: source=05 gsi=5 flags=0x000d + override: source=09 gsi=9 flags=0x000d + override: source=0a gsi=10 flags=0x000d + override: source=0b gsi=11 flags=0x000d +i8042: keyboard ACKed enable-scanning +i8042: IRQ1 enabled in controller config byte +I/O APIC: keyboard IRQ1 routed (masked) + +Timer: init... +Timer: init start +Timer: PM_TMR_BLK discovered from FADT at port 1544 +Timer: VM mode detected (hypervisor present). +Timer: HPET calibration disabled (VM-exit MMIO would poison timing). +Timer: WARNING: invariant TSC not present under hypervisor. +Timer: continuing in RELATIVE mode (no determinism guarantees). +Timer: RDTSCP not present; using RDTSC (less serialized). +Timer: CPUID frequency unavailable; trying PM Timer... +Timer: trust=1 (0=NONE,1=REL,2=ABS), TSC=2102443040 Hz +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 24641536 + Heap end addr: 561512448 + +Heartbeat: init... +APIC Timer: calibrating... +APIC Timer: apic_hz=1007630419, tick_hz=100, initial_count=10076304 +APIC Timer: configured (masked, ready to start) +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x401117af599ee190 capsule_hash=0x401117af599ee190 words=311 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x4beaf83f722fdaa7 +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_SYSTEM word_count=317 dict_hash=0xd41a6ac9448fff60 +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +PCI: ECAM mapped (amd64) +virtio-blk: found device +[HADES][INFO ] [KRELTSC: 81988788] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +Artemis: virtio-blk attached +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> T{ +UNKNOWN WORD: 'T{' + ERROR +ok> RS1 +UNKNOWN WORD: 'RS1' + ERROR +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> 5 7 PORT! +No one on that port + ERROR +ok> 1 2 + . +3 ok +ok> 5 AWAIT +7 8 * . +Interrupted + ERROR +ok> 56 ok +ok> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 +Stack overflow + ERROR +ok> 3 4 + . +7 ok +ok> HERE . +8300 ok +ok> BYE +BYE: cold restart diff --git a/logs/20261008-063738/aarch64/qemu-aarch64-20261008-063738.log b/logs/20261008-063738/aarch64/qemu-aarch64-20261008-063738.log new file mode 100644 index 00000000..d115c149 --- /dev/null +++ b/logs/20261008-063738/aarch64/qemu-aarch64-20261008-063738.log @@ -0,0 +1,143 @@ +UEFI firmware (version 2025.11-3ubuntu7.3 built at 15:40:26 on Sep 23 2026) +[=3hBdsDxe: failed to load Boot0002 "UEFI Misc Device" from PciRoot(0x0)/Pci(0x2,0x0): Not Found +BdsDxe: failed to load Boot0003 "UEFI QEMU QEMU USB HARDDRIVE 1-0000:00:04.0-1" from PciRoot(0x0)/Pci(0x4,0x0)/USB(0x0,0x0): Not Found +BdsDxe: loading Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +BdsDxe: starting Boot0004 "UEFI Misc Device 2" from PciRoot(0x0)/Pci(0x6,0x0) +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Collecting boot information... +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: aarch64 +Build: Oct 8 2026 06:37:13 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 108 +Total memory: 4093 MB +Usable memory: 4054 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 1039353 + Free pages : 1037942 + Used pages : 1411 + Total MB : 4059 + Free MB : 4054 + Used MB : 5 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +AArch64: running at EL1 +IDT installed. + +APIC: init... +PSCI: no DTB -- using HVC (QEMU virt-machine default) +GICv2: no DTB GIC node -- using QEMU virt-machine defaults +GICv2: distributor+CPU interface enabled, PPI 30 +APIC: init done + +Timer: init... +Timer: AArch64 generic timer initialised. +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 2147483608 + Free bytes: 2147483608 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 1207959552 + Heap end addr: 3355443200 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x401117af599ee190 capsule_hash=0x401117af599ee190 words=311 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x4beaf83f722fdaa7 +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_SYSTEM word_count=317 dict_hash=0xd41a6ac9448fff60 +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +virtio-blk: found device +[HADES][INFO ] [KRELTSC: 1236720] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +Artemis: virtio-blk attached +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> T{ +UNKNOWN WORD: 'T{' + ERROR +ok> RS1 +UNKNOWN WORD: 'RS1' + ERROR +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> 5 7 PORT! +No one on that port + ERROR +ok> 1 2 + . +3 ok +ok> 5 AWAIT +7 8 * . +Interrupted + ERROR +ok> 56 ok +ok> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 +Stack overflow + ERROR +ok> 3 4 + . +7 ok +ok> HERE . +8300 ok +ok> BYE +BYE: cold restart diff --git a/logs/20261008-064120/riscv64/qemu-riscv64-20261008-064120.log b/logs/20261008-064120/riscv64/qemu-riscv64-20261008-064120.log new file mode 100644 index 00000000..5ef273ee --- /dev/null +++ b/logs/20261008-064120/riscv64/qemu-riscv64-20261008-064120.log @@ -0,0 +1,213 @@ + +OpenSBI v1.8 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| + +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform HART Protection : pmp +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 321 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 65 KB +Firmware Heap Offset : 0x47000 +Firmware Heap Size : 37 KB (total), 0 KB (reserved), 12 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 1464 B (used), 2632 B (free) +Runtime SBI Version : 3.0 +Standard SBI Extensions : ipi,pmu,srst,sse,hsm,rfnc,fwft,time,base,legacy,dbcn,dbtr +Experimental SBI Extensions : none + +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000080040000-0x000000008005ffff M: (F,R,W) S/U: () +Domain0 Region01 : 0x0000000080000000-0x000000008003ffff M: (F,R,X) S/U: () +Domain0 Region02 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region03 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region04 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000020000000 +Domain0 Next Arg1 : 0x00000000bfe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes + +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.12 +Boot HART Base ISA : rv64imafdch +Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits : 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART Debug Triggers : 2 triggers +Boot HART MIDELEG : 0x0000000000001666 +Boot HART MEDELEG : 0x0000000000f4b509 +[=3hRISC-V EDK2 firmware version 2025.11-3ubuntu7.3 +Press ESCAPE within 5 seconds for boot options ERROR: C40000002:V03051002 I0 6D33944A-EC75-4855-A54D-809C75241F6C 83FFF850 +BdsDxe: failed to load Boot0001 "UEFI Misc Device" fr +om PciRoot(0x0)/Pci(0x1,0x0): Not Found +[=3hStarKernel UEFI Loader +Loading kernel from ESP... +[CKPT 001] Entered efi_main - ConOut live +Monolithic build - kernel linked directly +Collecting boot information... +CmdLine: parsed OK +[CKPT 004] Command line parsed +[CKPT 005] Kernel stack allocation decided +[CKPT 006] Boot info collected (ACPI table located) +GOP: linear framebuffer found +[CKPT 007] GOP: linear framebuffer found +[CKPT 008] About to enter ExitBootServices retry loop +Calling kernel_main (monolithic)... +riscv64 item 4.3.5a: satp state at kernel entry (before switch) + satp.MODE = 0x000000000000000a + satp.PPN = 0x00000000000bf868 + __kernel_start = 0x00000000bdc9aaaa +riscv64: satp cleared -- Bare mode, explicit (item 4.3.5a) + + + _____ _ _ __ _ + / ____| | | |/ / | | + | (___ | |_ __ _ _ __| ' / ___ _ __ _ __ ___| | + \___ \| __/ _` | '__| < / _ \ '__| '_ \ / _ \ | + ____) | || (_| | | | . \ __/ | | | | | __/ | + |_____/ \__\__,_|_| |_|\_\___|_| |_| |_|\___|_| + +LithosAnanke v2.1.0 +Architecture: riscv64 +Build: Oct 8 2026 06:40:42 + +UEFI BootServices: EXITED + +=== StarKernel Boot Information === +Memory map entries: 100 +Total memory: 1020 MB +Usable memory: 975 MB +=================================== + +PMM initialized. +PMM statistics: + Total pages: 250268 + Free pages : 249616 + Used pages : 652 + Total MB : 977 + Free MB : 975 + Used MB : 2 + +VMM initialized (mapped RAM, CR3 switched) +VMM initialized (mapped RAM, CR3 switched) +VMM self-test: mapped OK at 0xffff800000000000 +VMM self-test complete. + +IDT installed. + +APIC: init... +PLIC: no DTB PLIC node -- using QEMU virt-machine default (base=0x0c000000) +PLIC: init (S-mode context 1, threshold=0) +APIC: init done + +Timer: init... +Timer: RISC-V time CSR @ 10000000 Hz (FALLBACK, no devicetree) +Timer: init done + +Kernel heap initialized. +Heap statistics: + Total bytes: 536870872 + Free bytes: 536870872 + Used bytes: 0 + Peak bytes: 0 + Heap base addr: 2214588416 + Heap end addr: 2751459328 + +Heartbeat: init... +Heartbeat: init done +Kernel initialization complete. +Boot successful! + +StarForth v4: one host node, the F18-derived engine +V4: capsule v4:nucleus-64.f18 signature: missing (unsigned) +PARITY:V4_NUCLEUS name=v4:nucleus-64.f18 capsule_id=0x401117af599ee190 capsule_hash=0x401117af599ee190 words=311 +V4: capsule v4:forth79.4th signature: missing (unsigned) +PARITY:V4_CAPSULE name=v4:forth79.4th capsule_id=0x4055641ee17d176b capsule_hash=0x4055641ee17d176b dict_hash=0x4beaf83f722fdaa7 +PARITY:V4_POST tests=538 pass=538 fail=0 +PARITY:V4_SYSTEM word_count=317 dict_hash=0xd41a6ac9448fff60 +PARITY:OK +POST: PASSED +[HADES][INFO ] [KRELTSC: 0] blk: raw device LBN 2048..3071 (1024 blocks) +PCI: init... +virtio-blk: found device +[HADES][INFO ] [KRELTSC: 23455824] blk: disk 'StarForth Volume' v2 LBN 3072..789009 (785938 user b +Artemis: virtio-blk attached +ok> : SQ DUP * ; + ok +ok> 7 SQ . 3 4 U* . . +49 0 12 ok +ok> T{ +UNKNOWN WORD: 'T{' + ERROR +ok> RS1 +UNKNOWN WORD: 'RS1' + ERROR +ok> COLD +FORTH-79 Cold Start +System initialized. + ok +ok> 3 4 U* . . +0 12 ok +ok> FORGET U* +Protected word + ERROR +ok> 9 KERNEL-WORD ASK9 ASK9 +Argument out of range + ERROR +ok> 1 BLOCK C@ . 2047 BLOCK C@ . +0 0 ok +ok> 2100 BLOCK 1024 BLANK 65 2100 BLOCK C! UPDATE SAVE-BUFFERS EMPTY-BUFFERS 2100 BLOCK C@ . +65 ok +ok> 3072 BLOCK C@ . +0 ok +ok> 3072 BLOCK DROP UPDATE SAVE-BUFFERS +Storage refused + ERROR +ok> 9999999 BLOCK +Block out of range + ERROR +ok> 5 7 PORT! +No one on that port + ERROR +ok> 1 2 + . +3 ok +ok> 5 AWAIT +7 8 * . +Interrupted + ERROR +ok> 56 ok +ok> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 +Stack overflow + ERROR +ok> 3 4 + . +7 ok +ok> HERE . +8300 ok +ok> BYE +BYE: cold restart diff --git a/v4/README.md b/v4/README.md index 100b108a..f9194542 100644 --- a/v4/README.md +++ b/v4/README.md @@ -146,10 +146,12 @@ is gone; a node believes that only from its centre. **The wait** (`MESH.md` 7c, step 6d). A node does not write the first word of a message: it offers it, and sleeps until it is taken or a word comes for it. What a node has to pass on, the answers it has to give and the -refusals it owes all wait with it, offered, and go when they can. The aim -is that a node that is stuck holds up no other. **It is not yet met in -every case:** the review of step 6d found several where a node is still -held or goes wrong, listed under step 6d in `MESH.md` section 10. +refusals it owes all wait with it, offered, and go when they can. So a +node that is stuck holds up no other, within the limits `MESH.md` 7c.4 +states: text that must itself send to the stuck node waits, and a node +begins no more text from a sender it cannot yet answer. A review found +this unsound as first built; what it found is mended and listed under +step 6d in `MESH.md` section 10, and has not been reviewed again. **Blocks** (`MESH.md` step 6). The block words are the kernel's, as they are for a v3 VM: `BLOCK`, `BUFFER`, `UPDATE`, `SAVE-BUFFERS` and