feat(v4.0.0): a node is sent text as a message and sends back what it prints
MESH.md step 3. The ports are the transport; the message is what is transported: to, from, type, heat and TTL, ACL tag, sequence, length, then text four characters to a word. - quit.v4: a node with nothing to do is blocked reading "any port"; text for it is interpreted; (FINISH) sends what it printed and then how the text ended, and it waits again - core.v4: EMIT keeps what is printed, (FLUSH-OUT) and (HDR) send it to the sender on the port the message came on. EMIT still needs one free data cell and no more; it works on the return stack and in A and B - message.h/.c: the same format for whatever is on a port and is not a node - boot.c: the boot is the node's console on port 1 and its kernel on port 0 - the prompt tests are a console that speaks messages - gone: v4_line_begin, v4_line_done, v4_line_status; writing a node's input buffer and setting its P from outside; any use of CONSOLE-TX Verified: make -C v4 test (test_host_quit.c 1283 checks, the full-stack figures unchanged) and make -C v4 sanitize pass; hosted-check passes on three ISAs with POST 550 of 550; clean qemu with STARFORTH_V4=1 passes POST and answers lines typed at each prompt on amd64, aarch64 and riscv64 (logs/20261006-110551, -111621, -111341). -110837 is an aarch64 run ended by the test wrapper's limit while still in UEFI firmware; it shows nothing about v4. Not done: KEY, EXPECT and QUERY still read the console's input registers; a message not for this node is let go (step 4). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
42610e844f
commit
a041b401ea
@@ -287,6 +287,29 @@ Each is tested, committed and pushed before the next.
|
||||
6).
|
||||
3. **Messages (section 6):** a StarForth node that reads messages when
|
||||
idle; the console as a device; a line typed is a message.
|
||||
**Done 2026-10-06, but for the keyboard.** A node with nothing to do is
|
||||
blocked reading "any port" (`(IDLE)`, `v4/capsule/quit.v4`). What
|
||||
arrives is a message; text for this node is interpreted; what it prints
|
||||
is kept and sent back as messages to the sender, on the port the
|
||||
message came on, and then a message saying how the text ended (`EMIT`,
|
||||
`(FLUSH-OUT)`, `(HDR)` in `core.v4`; `(FINISH)` in `quit.v4`).
|
||||
`v4/src/message.c` is the same format for whatever is on the other end
|
||||
of a port and is not a node. The boot is that, on the node's port 1, as
|
||||
the console (`v4_boot_line`); the prompt tests are too. Handing a node a
|
||||
line by writing its input buffer and setting its `P` is gone
|
||||
(`v4_line_begin` and the rest). Nothing reads the `CONSOLE-TX` register
|
||||
any more.
|
||||
`EMIT` still needs one free cell of the data stack and no more, as
|
||||
before; it keeps its working values on the return stack. The full-stack
|
||||
tests hold at the same figures as before.
|
||||
All v4 tests pass at both widths and under ASan and UBSan;
|
||||
`hosted-check` on three ISAs; bare metal `logs/20261006-110551` (amd64),
|
||||
`-111621` (aarch64), `-111341` (riscv64). `-110837` is an aarch64 run
|
||||
that was ended by the test wrapper's limit while still in UEFI firmware,
|
||||
before the kernel had started; it shows nothing about v4.
|
||||
**Not done:** `KEY`, `EXPECT` and `QUERY` still read the console's two
|
||||
input registers, not a message. A message not for this node, or not
|
||||
text, is let go: passing it on is step 4.
|
||||
4. **Finding the way (section 7).**
|
||||
5. **Birth and Hera's requests (section 9); the unit of five.**
|
||||
6. **Storage (section 8).**
|
||||
|
||||
Reference in New Issue
Block a user