diff --git a/docs/superpowers/plans/2026-10-30-vt1200-stream-transport-and-row-strips.md b/docs/superpowers/plans/2026-10-30-vt1200-stream-transport-and-row-strips.md index 954a784..aa40ea3 100644 --- a/docs/superpowers/plans/2026-10-30-vt1200-stream-transport-and-row-strips.md +++ b/docs/superpowers/plans/2026-10-30-vt1200-stream-transport-and-row-strips.md @@ -365,34 +365,62 @@ git commit -m "feat(stream): paced sender and terminal status frames" --- -### Task 7: Unit run and measurement +### Task 7: Real RX ring, then the unit measurement **Files:** +- Modify: `harness/udpstream/vidstream.c` (RX ring), `harness/mame/vidstream.lua` - Create: `harness/udpstream/test-stream.sh` -- Modify: `harness/mame/NETWORK_REPORT.md` (new section: scheme A on the unit) -- [ ] **Step 1: Write `test-stream.sh`** +**Interfaces:** +- Consumes: `fp_parse`, `blit_row`, the marker page (R12), the status frame (Task 6). +- Produces: a payload that receives real Ethernet through its own LANCE RX ring and paints it; + `test-stream.sh [rows] [stretch]` driving 300 frames and reporting fps/bytes/drops. -Same shape as `bench-sweep.sh`: `sudo ./test-stream.sh [rows] [stretch]`, driving `vidsend.py` at 30 fps for 300 frames and recording fps, delivery %, drops, CSR0 error bits. +**Ruling R16:** ruling R11 deferred the *DMA* path to this task. The payload's RX is currently a +debugger-injected buffer; this task replaces it with the ring the unit needs, and closes the two +Important findings from Task 4: (a) clamp `len` to `SLOT_BYTES` before `fp_parse`; (b) replace the +level-triggered `RX_READY` flag with a consume counter (or mask RX while consuming), because a real +ISR owns that cell. The unit run itself needs the physical terminal (R4) and is recorded as +human-assisted. -- [ ] **Step 2: Run it on the unit** +- [ ] **Step 1: Write the failing MAME check** -Run: `sudo ./test-stream.sh enp197s0f3u1 08:00:2b:16:4b:5a 80 12` -Expected: a CSV row per 30 frames, no `MISS`, and a measurable fps. +Add `VT1200_MODE=ring` to `vidstream.lua`: assert the payload arms 16 descriptors with OWN set for +slot A, that a completion moves the write pointer to slot B, and that a descriptor marked with a +frame larger than `SLOT_BYTES` is rejected without a blit (`RX_BAD` increments, `RX_OK` does not). -- [ ] **Step 3: Measure `B,XY` versus `L,XY`** +- [ ] **Step 2: Run it to verify it fails** -Run the same test with the helper forced to `vram_blit_` (L,XY) via `--blit=l`, and record both fps values. This is the number the tile plan needs. +Run: `VT1200_MODE=ring harness/mame/run-vidstream.sh` +Expected: FAIL — the ring words are zero (no RX ring exists yet). -- [ ] **Step 4: 3.5-minute soak** +- [ ] **Step 3: Implement the RX ring** -Run 6,300 frames continuously; assert the terminal still answers and the picture is still updating (status frames keep arriving). +16 descriptors × 1526 bytes at `RX_SLOT_A`; arm all 16 for the active slot at frame start; on +completion sum the delivered lengths, clamp to `SLOT_BYTES`, `fp_parse`, paint, then arm the other +slot. Count `drops` when a completion arrives while the previous slot is still being painted. -- [ ] **Step 5: Commit the numbers** +- [ ] **Step 4: Run the ring check to verify it passes** + +Run: `VT1200_MODE=ring harness/mame/run-vidstream.sh` +Expected: PASS, with the descriptor/OWN transition and the oversize rejection both evidenced. + +- [ ] **Step 5: Write `test-stream.sh`** + +Same shape as `bench-sweep.sh`: `sudo ./test-stream.sh [rows] [stretch]`, 300 frames +at 30 fps through `vidsend.py`, one CSV row per 30 frames (fps, delivery %, drops, CSR0 bits). + +- [ ] **Step 6: Unit run (human-assisted)** + +Run: `sudo ./test-stream.sh 08:00:2b:16:4b:5a 128 8`, then the same with the blit forced to +`L,XY`, then a 6,300-frame soak. Record fps for both, and whether the OS interfered (`OS_TOUCH`). +This step cannot be executed without the terminal; it stays open until the operator runs it. + +- [ ] **Step 7: Commit** ```bash -git add harness/udpstream/test-stream.sh harness/mame/NETWORK_REPORT.md -git commit -m "test(stream): scheme A measured on the unit (B,XY vs L,XY, 3.5 min soak)" +git add harness/udpstream/vidstream.c harness/mame/vidstream.lua harness/udpstream/test-stream.sh +git commit -m "feat(stream): real rx ring over chained descriptors; unit measurement script" ``` ---