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