From 4a0e1235c72d89f8e3ea7a115624c96622b953f1 Mon Sep 17 00:00:00 2001 From: SDD Date: Sun, 18 Oct 2026 15:55:48 +0300 Subject: [PATCH] dwt: first real-unit contact -- TCP 771 and the computed challenge work; ROM peek matches v2.2; screenshot over peek --- dwt/evidence/real-unit-canvas.png | Bin 0 -> 8192 bytes dwt/notes/REAL_UNIT.md | 47 ++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 dwt/evidence/real-unit-canvas.png create mode 100644 dwt/notes/REAL_UNIT.md diff --git a/dwt/evidence/real-unit-canvas.png b/dwt/evidence/real-unit-canvas.png new file mode 100644 index 0000000000000000000000000000000000000000..dec1327bd0bcd5a6b49c3e4798367f22b2b66355 GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/dwt/notes/REAL_UNIT.md b/dwt/notes/REAL_UNIT.md new file mode 100644 index 0000000..25252ec --- /dev/null +++ b/dwt/notes/REAL_UNIT.md @@ -0,0 +1,47 @@ +# First contact with the real VT1200 + +Date: 2026-10-18. Terminal at **100.103.100.103** (static IP, no BOOTP), +reached from host `100.103.255.254` on `enp197s0f3u1`. + +**Read-only throughout this note — no `poke`, no `jump`.** + +## Results + +| check | result | +|---|---| +| TCP 771 | **open** | +| opcode 7 | challenge (flag `0x7F`) sent, computed reply accepted, `Done\n\0` | +| `peek 0x3F200000` (8 B) | `e9 7a e2 f5 aa aa 55 55` — **matches `vt1200_v22.bin`** | +| `peek 0xAECE0` (1 B) | `bd` — message classes 0,1,2 admitted (emulator: `05`) | +| `peek 0x1E8BA0` (4 B) | `0x018BF1B0` bits = **3,251,638 bytes** free in the heap | +| screenshot over `peek` | `dwt/evidence/real-unit-canvas.png` | + +The screenshot shows the live Terminal Manager V2.2: Ethernet +`08-00-2B-16-4B-5A`, IP `100.103.100.103`, LAT `LAT_08002B164B5A`, and five +`Debug connection from IP host 100.103.255.254` lines in Messages — one per +connection made here. That is the read primitive working on real hardware. + +## Two differences from the emulator, worth knowing + +1. **The real unit challenges opcode 7.** The emulator only challenges opcodes + ≥ 2. A plain liveness check therefore exercises the challenge too, and its + success is additional evidence that `dwt/challenge.py` matches the shipped + image. +2. **Message filter is `0xBD`, not `0x05`.** Levels 0, 1 and 2 are admitted on + the real unit; the emulator only admitted 0 and 3. + +## Geometry + +The raw VRAM canvas is **1024×1024**, captured correctly. The visible screen is +1280×1024, with the canvas at x=192; `dwt/screenshot.py --screen` uses the +emulator's 1280×901/offset-192×36 defaults and will misplace the bottom on the +real unit. The raw canvas is the authoritative artifact; for a faithful screen +image use `--screen-width 1280 --screen-height 1024 --offset-x 192 --offset-y 0` +once the vertical origin is measured. + +## Next + +The remaining unproven step on this unit is the write path: `poke`/`jump` and +then the COFF loader + `create_process`. The loader already refuses a target +outside a free-list block (status 8), so a first attempt with `marker.coff` +will tell us whether the linked ranges are free before anything runs.