|
|
@@ -446,8 +446,8 @@ Exec86):
|
|
|
| `0946e80` | `v-TP3-CALC-REALCONST` | `ERR 41 15911` (`Upcase`) |
|
|
|
| `17f7f7c` | `v-TP3-CALC-UPCASE` | **`ERR 102 18267`** (real output) |
|
|
|
|
|
|
-- **Code HEAD** `05f118f` (`v-TP3-MBF-FROMINT`); this commit only updates
|
|
|
- this document. Nothing pushed; `origin/master` is behind by twenty code
|
|
|
+- **Code HEAD** `45a29e6` (`v-TP3-MBF-ADD`); this commit only updates this
|
|
|
+ document. Nothing pushed; `origin/master` is behind by twenty-one 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`.
|
|
|
@@ -553,9 +553,10 @@ Exec86):
|
|
|
`ERR 102 18267`, terminal config **4/4**, 64 `.COM` linked and **72 executed
|
|
|
under both qemu and Exec86** (`t64_arrays` is compile-only: its image is past
|
|
|
the 8 KB boot-sector read). `tests/nonvacuity.sh`: **108 ok, 0 failed**.
|
|
|
- The runtime is 964 bytes (wrintw and real_from_int; the golden was
|
|
|
- re-blessed) and `tests/rt_exec.py` passes **69/69**. `check_realconst.py`
|
|
|
- pins the measured 6-byte Real operand bytes.
|
|
|
+ The runtime is 1325 bytes (wrintw, real_from_int, real_add, real_sub; the
|
|
|
+ golden was re-blessed) and `tests/rt_exec.py` passes **85/85**, including 16
|
|
|
+ exact-byte MBF add/sub cases. `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.
|
|
|
@@ -674,11 +675,16 @@ Then the two that are *outside* the ladder and gate the goal as stated:
|
|
|
* **DONE: `real_from_int`** (`v-TP3-MBF-FROMINT`, entry 21). ABI:
|
|
|
source address at [BP+6], destination at [BP+4]; TPSRC3 `intreal` in
|
|
|
AL/AH/BX/DX. 13 rt_exec cases against the measured table.
|
|
|
- * **NEXT:** `readd`/`resub` (the same AX/BX/DX + CX/SI/DI convention),
|
|
|
- `remult`, `rediv`, `recmp`, `reint`, then `fmtreal`/`ascreal` for
|
|
|
- `Write(Value:FW:DEC)`, `Str` and `Val`. Each is a direct
|
|
|
- transcription with rt_exec cases; the register convention is the
|
|
|
- reference's, so the arithmetic can be checked byte for byte.
|
|
|
+ * **DONE: `real_add`/`real_sub`** (`v-TP3-MBF-ADD`, entries 22/23).
|
|
|
+ ABI: [BP+4] is a 12-byte block (a then b); the result overwrites a.
|
|
|
+ TPSRC2 `readd`/`resub`, one shared core, the reference's scratch
|
|
|
+ bytes and the AX/BX/DX + CX/SI/DI convention. 16 rt_exec cases
|
|
|
+ (alignment, cancellation, signs, carry out, the exponent-overflow
|
|
|
+ STC path). Two encoder traps: `XOR [mem],reg` is 30h not 32h, and
|
|
|
+ FCML rejects `OR AL,AL`.
|
|
|
+ * **NEXT:** `remult`, `rediv` (`remul11..23` scratch), `recmp`,
|
|
|
+ `reint`, then `fmtreal`/`ascreal` for `Write(Value:FW:DEC)`, `Str`
|
|
|
+ and `Val`. Each is a direct transcription with rt_exec cases.
|
|
|
* **THEN** the compiler side: real expressions need a value model
|
|
|
(pointers to 6-byte temporaries), real comparisons, and real function
|
|
|
results (currently refused because the result is wider than a word).
|