Prechádzať zdrojové kódy

docs: record the REAL-constant rung (ladder 15911)

CALC-COMPILE.md: the rung table gains v-TP3-CALC-REALCONST (0946e80,
ERR 41 15911), the session state says twenty-five rungs, the baseline is
the run just made (81/81 compile, 70/70 executed under both oracles,
non-vacuity 105/105, plus the new check_realconst), item 15 is marked
done through real constants, and `UpCase` is the next item.

SUMMARY.md: the intro now stops at ERR 41 15911 and lists REAL constants
among the landed features.
Eric Streit 2 dní pred
rodič
commit
f09b53afe8
2 zmenil súbory, kde vykonal 33 pridanie a 24 odobranie
  1. 27 19
      CALC-COMPILE.md
  2. 6 5
      SUMMARY.md

+ 27 - 19
CALC-COMPILE.md

@@ -97,7 +97,7 @@ Current rung (measured today, normalised position):
 
 | 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):
 
@@ -122,12 +122,13 @@ Rungs behind it (now passed):
 | 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`) |
+| 15272 | REAL constants and copies | measured MBF, 6-byte stores (`t80_realconst`) |
 
 Rungs ahead:
 
 | 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
 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
 
-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
 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, 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
 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`) |
 | `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) |
-| `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
   work (`v-TP3-TERMCFG`) and the editor key map (`v-TP3-EDITORKEYS`); they do
   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
   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 **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
-  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).
+  `tests/check_realconst.py` pins the measured 6-byte Real operand bytes.
 - **`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
   the default `run_all.sh` and must be run **manually** after touching any check.
@@ -584,8 +588,8 @@ Exec86):
 
 ### 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
 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
@@ -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
     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
     sectors (8192 bytes); `t64_arrays` is already compile-only for that reason,

+ 6 - 5
SUMMARY.md

@@ -2037,9 +2037,9 @@ census of what `CALC.PAS` actually needs and the reference measurements from
 the original `TURBO.COM`. Two tracks run in parallel: the ladder (front-end,
 verifiable on small fixtures) and the layout (§3, the only thing that stops
 the compiler *emitting* a 16,560-byte program). The ratchet and front-end
-features through **string-field assignment** are landed: the ladder
+features through **REAL constants** are landed: the ladder
 (`tests/calc_ladder.sh` + `tests/fixtures/calc_ladder.tsv`, run by `run_all.sh`;
-CALC.PAS now stops at `ERR 102` at pos 15272, `Value := 0` in `Init`), the `{$I}` include,
+CALC.PAS now stops at `ERR 41` at pos 15911, `Upcase(Ch)` in `Clear`), the `{$I}` include,
 `^X`/`#nn`, scalar typed constants, sets, enums, records (CellRec = 80),
 subranges, arrays, element/field access, file types, string value parameters,
 `Length`, the CRT identifiers (`ClrScr`/`GotoXY`/`ClrEol`/`LowVideo`/
@@ -2048,9 +2048,10 @@ subranges, arrays, element/field access, file types, string value parameters,
 ranges (`t74_caselist`), variable array subscripts scaled by the element size
 (`t75_arrvar`), write field widths (`t76_width`, runtime entry 20 `wrintw`),
 WITH and n-dimensional subscripts (`t77_with`), set-field assignment and
-run-time `in` (`t78_setfield`), string fields through DI (`t79_strfield`), and
-`INT 10h`+`C6` in Exec86 (fixtures through `t79_strfield`). The next rung is
-the 6-byte REAL field; then the remaining string
+run-time `in` (`t78_setfield`), string fields through DI (`t79_strfield`),
+the measured 6-byte REAL constants (`t80_realconst`, with a byte-level check),
+and `INT 10h`+`C6` in Exec86 (fixtures through `t80_realconst`). The next rung
+is `UpCase`; then the remaining string
 builtins, file operations, variable-index subscripts + `with`, pointers, `var`
 params, reals, recursion, and the layout change. Items 1-4 below are
 independent of both.