|
|
@@ -97,7 +97,7 @@ Current rung (measured today, normalised position):
|
|
|
|
|
|
| position | blocker |
|
|
|
|---|---|
|
|
|
-| **15201** | `Contents := ''` in `Init` — a STRING assignment to a record field through DI (`ERR 102`) |
|
|
|
+| **15272** | `Value := 0` in `Init` — a REAL record field, 6 bytes (`ERR 102`) |
|
|
|
|
|
|
Rungs behind it (now passed):
|
|
|
|
|
|
@@ -121,12 +121,13 @@ Rungs behind it (now passed):
|
|
|
| 14330 | write field widths | `wrintw`, runtime 770 -> 878 (`t76_width`) |
|
|
|
| 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`) |
|
|
|
+| 15201 | string field through DI | `<len><chars>`, truncated (`t79_strfield`) |
|
|
|
|
|
|
Rungs ahead:
|
|
|
|
|
|
| position | blocker |
|
|
|
|---|---|
|
|
|
-| 15201 | string assignment to a record field through DI; then the rest of `CALC.INC` |
|
|
|
+| 15272 | the REAL representation and integer-to-real conversion (`Value := 0`); then real arithmetic |
|
|
|
|
|
|
Corrections the measurements force, worth stating plainly because the stage list
|
|
|
below was written before them:
|
|
|
@@ -400,14 +401,14 @@ ladder order (each stage removes the blocker the previous one exposed).
|
|
|
|
|
|
### Session state — where to resume
|
|
|
|
|
|
-Last touched 2026-10-21. **Twenty-three rungs are landed across three sessions**
|
|
|
+Last touched 2026-10-21. **Twenty-four rungs are landed across three sessions**
|
|
|
(Stages 1-4, sets, enums, record types, array declarations, element/field
|
|
|
access, file types, the calling convention and string value parameters,
|
|
|
`Length`, the CRT identifiers, `Kbd`, `KeyPressed`, `var` parameters, the CASE
|
|
|
labels, variable array subscripts, write field widths, WITH with
|
|
|
-n-dimensional subscripts, and set-field assignment). The ladder row has moved
|
|
|
-from the first typed constant at 7791 to **15201, inside `CALC.INC`'s `Init` —
|
|
|
-`Contents := ''`, a string assignment to a record field through DI**.
|
|
|
+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**.
|
|
|
|
|
|
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
|
|
|
@@ -437,10 +438,11 @@ Exec86):
|
|
|
| `b41c669` | `v-TP3-CALC-ARRVAR` | `ERR 1 14330` (write field width) |
|
|
|
| `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) |
|
|
|
-| `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) |
|
|
|
|
|
|
-- **Code HEAD** `21ef4e1` (`v-TP3-CALC-SETFIELD`); this commit only updates
|
|
|
- this document. Nothing pushed; `origin/master` is behind by sixteen code
|
|
|
+- **Code HEAD** `a2e5e69` (`v-TP3-CALC-STRFIELD`); this commit only updates
|
|
|
+ this document. Nothing pushed; `origin/master` is behind by seventeen code
|
|
|
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
|
|
|
not move the ladder and are documented in `TERMINAL.md`.
|
|
|
@@ -542,10 +544,10 @@ Exec86):
|
|
|
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.
|
|
|
- **Verified baseline, run on the code HEAD above:** `./tests/run_all.sh` →
|
|
|
- **OVERALL: ALL PASS**, compile matrix **79/79**, CALC ladder **1/1** at
|
|
|
- `ERR 102 15201`, terminal config **4/4**, 64 `.COM` linked and **68 executed
|
|
|
+ **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
|
|
|
under both qemu and Exec86** (`t64_arrays` is compile-only: its image is past
|
|
|
- the 8 KB boot-sector read). `tests/nonvacuity.sh`: **101 ok, 0 failed**.
|
|
|
+ the 8 KB boot-sector read). `tests/nonvacuity.sh`: **103 ok, 0 failed**.
|
|
|
The runtime is 878 bytes (wrintw added; the golden was re-blessed).
|
|
|
- **`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
|
|
|
@@ -582,8 +584,8 @@ Exec86):
|
|
|
|
|
|
### Next session — the concrete plan
|
|
|
|
|
|
-The ladder is at `ERR 102 15201`, **`Contents := ''` — a string
|
|
|
-assignment to a record field through DI**. Everything
|
|
|
+The ladder is at `ERR 102 15272`, **`Value := 0` — a REAL record
|
|
|
+field**. Everything
|
|
|
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
|
|
|
same shape as the rungs already landed: one focused change, one fixture that is
|
|
|
@@ -649,13 +651,11 @@ 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
|
|
|
CHAR/BOOLEAN/STRING, which are loud today.
|
|
|
|
|
|
-15. **Record-field writes — SET is DONE, STRING is THE NEXT RUNG (15201).**
|
|
|
- Set constructors now take base/size from the target and store through DI
|
|
|
- (`v-TP3-CALC-SETFIELD`), and `in` tests a field's byte at run time.
|
|
|
- `Contents := ''` (and later `Contents := S`) needs a counted-string copy
|
|
|
- to a DI address: the literal path can store <len><chars> directly; a
|
|
|
- string variable source can push DI as strstore's destination. The field
|
|
|
- is 71 bytes, so the copy truncates at 70 characters.
|
|
|
+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.
|
|
|
|
|
|
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,
|