|
@@ -97,7 +97,7 @@ Current rung (measured today, normalised position):
|
|
|
|
|
|
|
|
| position | blocker |
|
|
| position | blocker |
|
|
|
|---|---|
|
|
|---|---|
|
|
|
-| **15272** | `Value := 0` in `Init` — a REAL record field, 6 bytes (`ERR 102`) |
|
|
|
|
|
|
|
+| **15911** | `Upcase(Ch)` in `Clear` — an unknown builtin (`ERR 41`) |
|
|
|
|
|
|
|
|
Rungs behind it (now passed):
|
|
Rungs behind it (now passed):
|
|
|
|
|
|
|
@@ -122,12 +122,13 @@ Rungs behind it (now passed):
|
|
|
| 15026 | WITH + n-D subscripts | row strides, fields via DI (`t77_with`) |
|
|
| 15026 | WITH + n-D subscripts | row strides, fields via DI (`t77_with`) |
|
|
|
| 15131 | set field assignment | typed by the target; run-time `in` (`t78_setfield`) |
|
|
| 15131 | set field assignment | typed by the target; run-time `in` (`t78_setfield`) |
|
|
|
| 15201 | string field through DI | `<len><chars>`, truncated (`t79_strfield`) |
|
|
| 15201 | string field through DI | `<len><chars>`, truncated (`t79_strfield`) |
|
|
|
|
|
+| 15272 | REAL constants and copies | measured MBF, 6-byte stores (`t80_realconst`) |
|
|
|
|
|
|
|
|
Rungs ahead:
|
|
Rungs ahead:
|
|
|
|
|
|
|
|
| position | blocker |
|
|
| position | blocker |
|
|
|
|---|---|
|
|
|---|---|
|
|
|
-| 15272 | the REAL representation and integer-to-real conversion (`Value := 0`); then real arithmetic |
|
|
|
|
|
|
|
+| 15911 | `UpCase` (a CHAR fold, then the string form); real arithmetic still waits |
|
|
|
|
|
|
|
|
Corrections the measurements force, worth stating plainly because the stage list
|
|
Corrections the measurements force, worth stating plainly because the stage list
|
|
|
below was written before them:
|
|
below was written before them:
|
|
@@ -401,14 +402,15 @@ ladder order (each stage removes the blocker the previous one exposed).
|
|
|
|
|
|
|
|
### Session state — where to resume
|
|
### Session state — where to resume
|
|
|
|
|
|
|
|
-Last touched 2026-10-21. **Twenty-four rungs are landed across three sessions**
|
|
|
|
|
|
|
+Last touched 2026-10-21. **Twenty-five rungs are landed across three sessions**
|
|
|
(Stages 1-4, sets, enums, record types, array declarations, element/field
|
|
(Stages 1-4, sets, enums, record types, array declarations, element/field
|
|
|
access, file types, the calling convention and string value parameters,
|
|
access, file types, the calling convention and string value parameters,
|
|
|
`Length`, the CRT identifiers, `Kbd`, `KeyPressed`, `var` parameters, the CASE
|
|
`Length`, the CRT identifiers, `Kbd`, `KeyPressed`, `var` parameters, the CASE
|
|
|
labels, variable array subscripts, write field widths, WITH with
|
|
labels, variable array subscripts, write field widths, WITH with
|
|
|
-n-dimensional subscripts, set-field assignment, and string fields through DI).
|
|
|
|
|
-The ladder row has moved from the first typed constant at 7791 to **15272,
|
|
|
|
|
-inside `CALC.INC`'s `Init` — `Value := 0`, a REAL record field**.
|
|
|
|
|
|
|
+n-dimensional subscripts, set-field assignment, string fields through DI, and
|
|
|
|
|
+REAL constants). The ladder row has moved from the first typed constant at
|
|
|
|
|
+7791 to **15911, inside `CALC.INC`'s `Clear` — `Upcase(Ch)`, an unknown
|
|
|
|
|
+builtin**.
|
|
|
|
|
|
|
|
The rung commits and their tags, in order (each is one rung with its own
|
|
The rung commits and their tags, in order (each is one rung with its own
|
|
|
fixture, red proof, and — where the harness allows — execution under qemu and
|
|
fixture, red proof, and — where the harness allows — execution under qemu and
|
|
@@ -439,10 +441,11 @@ Exec86):
|
|
|
| `099f8fd` | `v-TP3-CALC-WIDTH` | `ERR 102 15026` (2-D subscript + `with`) |
|
|
| `099f8fd` | `v-TP3-CALC-WIDTH` | `ERR 102 15026` (2-D subscript + `with`) |
|
|
|
| `a559843` | `v-TP3-CALC-WITH` | `ERR 102 15131` (set assignment to a field) |
|
|
| `a559843` | `v-TP3-CALC-WITH` | `ERR 102 15131` (set assignment to a field) |
|
|
|
| `21ef4e1` | `v-TP3-CALC-SETFIELD` | `ERR 102 15201` (string field through DI) |
|
|
| `21ef4e1` | `v-TP3-CALC-SETFIELD` | `ERR 102 15201` (string field through DI) |
|
|
|
-| `a2e5e69` | `v-TP3-CALC-STRFIELD` | **`ERR 102 15272`** (REAL field) |
|
|
|
|
|
|
|
+| `a2e5e69` | `v-TP3-CALC-STRFIELD` | `ERR 102 15272` (REAL field) |
|
|
|
|
|
+| `0946e80` | `v-TP3-CALC-REALCONST` | **`ERR 41 15911`** (`Upcase`) |
|
|
|
|
|
|
|
|
-- **Code HEAD** `a2e5e69` (`v-TP3-CALC-STRFIELD`); this commit only updates
|
|
|
|
|
- this document. Nothing pushed; `origin/master` is behind by seventeen code
|
|
|
|
|
|
|
+- **Code HEAD** `0946e80` (`v-TP3-CALC-REALCONST`); this commit only updates
|
|
|
|
|
+ this document. Nothing pushed; `origin/master` is behind by eighteen code
|
|
|
commits. Two non-ladder commits in the same period are the terminal-config
|
|
commits. Two non-ladder commits in the same period are the terminal-config
|
|
|
work (`v-TP3-TERMCFG`) and the editor key map (`v-TP3-EDITORKEYS`); they do
|
|
work (`v-TP3-TERMCFG`) and the editor key map (`v-TP3-EDITORKEYS`); they do
|
|
|
not move the ladder and are documented in `TERMINAL.md`.
|
|
not move the ladder and are documented in `TERMINAL.md`.
|
|
@@ -544,11 +547,12 @@ Exec86):
|
|
|
byte-for-byte the same for INTEGER locals, so the compile matrix would have
|
|
byte-for-byte the same for INTEGER locals, so the compile matrix would have
|
|
|
been green and only `t40_readln` (and later CALC) would have noticed.
|
|
been green and only `t40_readln` (and later CALC) would have noticed.
|
|
|
- **Verified baseline, run on the code HEAD above:** `./tests/run_all.sh` →
|
|
- **Verified baseline, run on the code HEAD above:** `./tests/run_all.sh` →
|
|
|
- **OVERALL: ALL PASS**, compile matrix **80/80**, CALC ladder **1/1** at
|
|
|
|
|
- `ERR 102 15272`, terminal config **4/4**, 64 `.COM` linked and **69 executed
|
|
|
|
|
|
|
+ **OVERALL: ALL PASS**, compile matrix **81/81**, CALC ladder **1/1** at
|
|
|
|
|
+ `ERR 41 15911`, terminal config **4/4**, 64 `.COM` linked and **70 executed
|
|
|
under both qemu and Exec86** (`t64_arrays` is compile-only: its image is past
|
|
under both qemu and Exec86** (`t64_arrays` is compile-only: its image is past
|
|
|
- the 8 KB boot-sector read). `tests/nonvacuity.sh`: **103 ok, 0 failed**.
|
|
|
|
|
|
|
+ the 8 KB boot-sector read). `tests/nonvacuity.sh`: **105 ok, 0 failed**.
|
|
|
The runtime is 878 bytes (wrintw added; the golden was re-blessed).
|
|
The runtime is 878 bytes (wrintw added; the golden was re-blessed).
|
|
|
|
|
+ `tests/check_realconst.py` pins the measured 6-byte Real operand bytes.
|
|
|
- **`tests/nonvacuity.sh`:** re-run after this commit's cases (the set
|
|
- **`tests/nonvacuity.sh`:** re-run after this commit's cases (the set
|
|
|
membership bit among them); see the commit message for the count. It is not in
|
|
membership bit among them); see the commit message for the count. It is not in
|
|
|
the default `run_all.sh` and must be run **manually** after touching any check.
|
|
the default `run_all.sh` and must be run **manually** after touching any check.
|
|
@@ -584,8 +588,8 @@ Exec86):
|
|
|
|
|
|
|
|
### Next session — the concrete plan
|
|
### Next session — the concrete plan
|
|
|
|
|
|
|
|
-The ladder is at `ERR 102 15272`, **`Value := 0` — a REAL record
|
|
|
|
|
-field**. Everything
|
|
|
|
|
|
|
+The ladder is at `ERR 41 15911`, **`Upcase(Ch)` — an unknown
|
|
|
|
|
+builtin**. Everything
|
|
|
below is ordered by what the ladder will hit next, not by the original stage
|
|
below is ordered by what the ladder will hit next, not by the original stage
|
|
|
numbers (the measurements have reordered them repeatedly). Each item is the
|
|
numbers (the measurements have reordered them repeatedly). Each item is the
|
|
|
same shape as the rungs already landed: one focused change, one fixture that is
|
|
same shape as the rungs already landed: one focused change, one fixture that is
|
|
@@ -651,11 +655,15 @@ Then the two that are *outside* the ladder and gate the goal as stated:
|
|
|
`Value:FW:DEC`, which waits for real support) and widths on
|
|
`Value:FW:DEC`, which waits for real support) and widths on
|
|
|
CHAR/BOOLEAN/STRING, which are loud today.
|
|
CHAR/BOOLEAN/STRING, which are loud today.
|
|
|
|
|
|
|
|
-15. **Record-field writes — SET and STRING are DONE**
|
|
|
|
|
- (`v-TP3-CALC-SETFIELD`, `v-TP3-CALC-STRFIELD`). **The next rung is the
|
|
|
|
|
- REAL field** (`Value := 0`, 15272) and it is item 7's representation work:
|
|
|
|
|
- TC's 6-byte real, an integer-to-real conversion for `Value := 0`, and then
|
|
|
|
|
- the arithmetic/comparison/`Str`/`Val` surface CALC's evaluator uses.
|
|
|
|
|
|
|
+15. **Record-field writes — SET, STRING and REAL CONSTANTS are DONE**
|
|
|
|
|
+ (`v-TP3-CALC-SETFIELD`, `-STRFIELD`, `-REALCONST`). The 6-byte MBF
|
|
|
|
|
+ representation, integer constants and six-byte copies are in; real
|
|
|
|
|
+ ARITHMETIC, real function results and real formatting remain item 7.
|
|
|
|
|
+
|
|
|
|
|
+16. **`UpCase` — THE NEXT RUNG (15911).** `Upcase(Ch)` in `Clear`. TP3's
|
|
|
|
|
+ UpCase takes a CHAR here (later TP versions also accept a string): fold
|
|
|
|
|
+ `'a'..'z'` to `'A'..'Z'`. A CHAR-only implementation, with the string
|
|
|
|
|
+ form still ENoLib, is the honest first step.
|
|
|
|
|
|
|
|
14. **Raise the execution harness's read.** `tests/exec/bootcom.s` reads 16
|
|
14. **Raise the execution harness's read.** `tests/exec/bootcom.s` reads 16
|
|
|
sectors (8192 bytes); `t64_arrays` is already compile-only for that reason,
|
|
sectors (8192 bytes); `t64_arrays` is already compile-only for that reason,
|