feat(v4.0.0): POST passes and is part of the boot; U* and U/MOD
The boot is now nucleus, forth79.4th, POST, prompt, on both products. - forth79.4th: U* and U/MOD, the capsule's first colon definitions. They are in the FORTH-79 Required Word Set and neither v3 nor v4 had them. - post79.4th: 550 cases, 126 of the 130 required words. 443 are v3's with v3's result. The rest follow three rulings (2026-10-05): address- dependent cases are checked for count, not value; where v3 departs from FORTH-79 the standard's result is expected; words v3 has no case for get cases written by hand. v4/tools/post79_rules.py holds each exception with its reason and docs/v4.0.0/POST79.md lists them all. - every case starts from an empty stack, DECIMAL and FORTH DEFINITIONS - the boot requires POST's tally line with fail=0 Verified: tests=550 pass=550 fail=0 and identical PARITY lines on hosted amd64, aarch64 and riscv64 (make -C v4 hosted-check) and on bare metal, clean qemu with STARFORTH_V4=1, on the same three (logs/20261005-1619xx, -1621xx, -1625xx). A U/MOD broken on purpose fails five cases and stops the boot. make -C v4 test passes. Not shown: all words but those two are still assembled, so POST has so far tested the assembled words. Nothing was typed at a bare-metal prompt. Open: PAD 42 OVER ! faults on v4 (D-1). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
5d6043e37e
commit
2930349bbf
+70
-68
@@ -1,5 +1,5 @@
|
||||
# Capsule Block Manifest — Auto-generated
|
||||
<!-- Generated by mkcapsule --manifest 2026-10-05T20:03:22Z -->
|
||||
<!-- Generated by mkcapsule --manifest 2026-10-05T20:24:47Z -->
|
||||
<!-- DO NOT EDIT — re-run mkcapsule --manifest to refresh. -->
|
||||
<!-- Hand-written justifications and immutability notes live -->
|
||||
<!-- in MANIFEST.md alongside this auto-generated index. -->
|
||||
@@ -29,8 +29,8 @@
|
||||
| `sdk.4th` | 5109, 5110, 5111, 5112, 5113, 5114, 5115 | `0x008fdbbb62c94a3a` | n/a |
|
||||
| `turtle.4th` | 5100, 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108 | `0x4d470418ca543365` | n/a |
|
||||
| `user-font-demo.4th` | 4200, 4201, 4202 | `0xce1fd7d1b581a56d` | n/a |
|
||||
| `v4:forth79.4th` | 6000 | `0xa4b74bdc7deaf204` | n/a |
|
||||
| `v4:post79.4th` | 7000, 7001, 7002, 7003, 7004, 7005, 7006, 7007, 7008, 7009, 7010, 7011, 7012, 7013, 7014, 7015, 7016, 7017, 7018, 7019, 7020, 7021, 7022, 7023, 7024, 7025, 7026, 7027, 7028, 7029, 7030, 7031, 7032, 7033, 7034, 7035, 7036, 7037, 7038, 7039, 7040, 7041, 7042, 7043, 7044, 7045, 7046, 7047, 7048, 7049, 7050, 7051, 7052, 7053, 7054, 7055, 7056, 7057, 7058, 7059, 7060, 7061, 7062, 7063 | `0x24df7b11992128ed` | n/a |
|
||||
| `v4:forth79.4th` | 6000, 6001, 6002 | `0x4055641ee17d176b` | n/a |
|
||||
| `v4:post79.4th` | 7000, 7001, 7002, 7003, 7004, 7005, 7006, 7007, 7008, 7009, 7010, 7011, 7012, 7013, 7014, 7015, 7016, 7017, 7018, 7019, 7020, 7021, 7022, 7023, 7024, 7025, 7026, 7027, 7028, 7029, 7030, 7031, 7032, 7033, 7034, 7035, 7036, 7037, 7038, 7039, 7040, 7041, 7042, 7043, 7044, 7045, 7046, 7047, 7048, 7049, 7050, 7051, 7052, 7053, 7054, 7055, 7056, 7057, 7058, 7059, 7060, 7061, 7062, 7063 | `0xb987dbb4388990bd` | n/a |
|
||||
| `workload-0.4th` | 2200, 2201 | `0x93f86f60aeba8feb` | n/a |
|
||||
| `workload-1-lite.4th` | 5058, 5059 | `0x44a7a7e3176dcc8d` | n/a |
|
||||
| `workload-1.4th` | 4406, 4415, 4425, 4435 | `0x63e251adb0a03613` | n/a |
|
||||
@@ -368,71 +368,73 @@
|
||||
| 5113 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok |
|
||||
| 5114 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok |
|
||||
| 5115 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok |
|
||||
| 6000 | `v4:forth79.4th` | `0xa4b74bdc7deaf204` | ok |
|
||||
| 7000 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7001 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7002 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7003 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7004 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7005 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7006 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7007 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7008 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7009 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7010 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7011 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7012 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7013 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7014 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7015 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7016 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7017 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7018 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7019 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7020 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7021 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7022 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7023 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7024 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7025 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7026 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7027 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7028 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7029 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7030 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7031 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7032 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7033 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7034 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7035 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7036 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7037 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7038 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7039 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7040 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7041 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7042 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7043 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7044 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7045 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7046 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7047 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7048 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7049 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7050 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7051 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7052 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7053 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7054 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7055 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7056 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7057 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7058 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7059 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7060 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7061 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7062 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 7063 | `v4:post79.4th` | `0x24df7b11992128ed` | ok |
|
||||
| 6000 | `v4:forth79.4th` | `0x4055641ee17d176b` | ok |
|
||||
| 6001 | `v4:forth79.4th` | `0x4055641ee17d176b` | ok |
|
||||
| 6002 | `v4:forth79.4th` | `0x4055641ee17d176b` | ok |
|
||||
| 7000 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7001 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7002 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7003 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7004 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7005 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7006 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7007 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7008 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7009 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7010 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7011 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7012 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7013 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7014 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7015 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7016 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7017 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7018 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7019 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7020 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7021 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7022 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7023 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7024 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7025 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7026 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7027 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7028 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7029 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7030 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7031 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7032 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7033 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7034 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7035 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7036 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7037 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7038 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7039 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7040 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7041 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7042 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7043 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7044 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7045 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7046 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7047 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7048 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7049 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7050 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7051 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7052 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7053 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7054 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7055 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7056 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7057 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7058 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7059 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7060 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7061 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7062 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
| 7063 | `v4:post79.4th` | `0xb987dbb4388990bd` | ok |
|
||||
|
||||
## Conflicts
|
||||
|
||||
|
||||
+23
-1
@@ -3,4 +3,26 @@ Block 6000
|
||||
( as colon definitions, loaded when the system boots. )
|
||||
( docs/v4.0.0/NUCLEUS.md. Blocks 6000 up. )
|
||||
( A word moves here from the assembled nucleus, v4/capsule, )
|
||||
( once its colon definition passes POST. None has moved yet. )
|
||||
( once its colon definition passes POST. )
|
||||
Block 6001
|
||||
( U* U/MOD -- FORTH-79 unsigned multiply and divide. )
|
||||
( Neither v3 nor the v4 nucleus had them. )
|
||||
( The first two words count the bits in a cell. )
|
||||
: (BITS) ( -- n )
|
||||
0 1 BEGIN DUP WHILE 2* SWAP 1+ SWAP REPEAT DROP ;
|
||||
(BITS) CONSTANT (NB)
|
||||
VARIABLE (UD)
|
||||
( u1 u2 -- ud the unsigned double product )
|
||||
: U* UM* ;
|
||||
Block 6002
|
||||
( ud u1 -- u2 u3 unsigned: u2 the remainder, u3 the quotient )
|
||||
( One bit a step: shift ud left, and take u1 from its high )
|
||||
( cell whenever it goes, counting that in the low cell. )
|
||||
( A zero divisor is error 11, Division by zero. )
|
||||
: U/MOD
|
||||
DUP 0= IF DROP DROP DROP 11 NODE-ERROR ! THEN (UD) !
|
||||
(NB) 0 DO
|
||||
DUP 0< >R 2* OVER 0< IF 1+ THEN SWAP 2* SWAP
|
||||
R> IF (UD) @ - SWAP 1+ SWAP
|
||||
ELSE DUP (UD) @ U< 0= IF (UD) @ - SWAP 1+ SWAP THEN THEN
|
||||
LOOP SWAP ;
|
||||
|
||||
+310
-263
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user