From be70e61d07509acbf10d00544fee134b7785c47b Mon Sep 17 00:00:00 2001 From: Cyd Date: Sun, 19 Jul 2026 16:53:02 -0500 Subject: [PATCH] Christen RIO 4.3: RIOv4_3.bin is the production firmware MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Final gate passed: 120s mash at 549 presses/min sustained (heaviest stress run of the campaign) — zero wedges, counters flat, NAK 0, all 247 resends healed. RIOv4_3rc1 renamed to RIOv4_3.bin (same bytes, sha dc59bd51cae3...); README/ANALYSIS promote it, production table updated (native-game cabinets -> RIOv4_3.bin; FastRIO 4.3 variant is build-on-demand with the documented flag set + acceptance ladder). Co-Authored-By: Claude Fable 5 --- README.md | 47 ++++++++++--------- RIOv4_2-ANALYSIS.md | 16 +++++-- RIOv4_3rc1.bin => RIOv4_3.bin | 0 RIOv4_3rc1.disasm.asm => RIOv4_3.disasm.asm | 0 .../riomash-rio43rc1-9600-20260719-164901.log | 28 +++++++++++ 5 files changed, 64 insertions(+), 27 deletions(-) rename RIOv4_3rc1.bin => RIOv4_3.bin (100%) rename RIOv4_3rc1.disasm.asm => RIOv4_3.disasm.asm (100%) create mode 100644 testlogs/riomash-rio43rc1-9600-20260719-164901.log diff --git a/README.md b/README.md index 1a11bdfb..c8c442a8 100644 --- a/README.md +++ b/README.md @@ -41,37 +41,40 @@ the SCI state machine (protocol constants FC=ACK FD=NAK FE=RESTART FF=IDLE, idle-reload-4 patterns), patch the early-ACK/error wedge path or widen its window, burn a new EPROM, keep this original safe. -## Current work candidate — `RIOv4_3rc1.bin` +## RIO 4.3 — `RIOv4_3.bin` (current production firmware) -Built by `make_patch.py --e0thresh=5 --checkrepaint RIOv4_2.bin -RIOv4_3rc1.bin`; sha256 -`dc59bd51cae34781cf42f338e44a020b249a4030acc3c584af916aee9ca881e3` +**Christened 2026-07-19** after full on-hardware certification. Built +by `make_patch.py --e0thresh=5 --checkrepaint RIOv4_2.bin RIOv4_3.bin`; +sha256 `dc59bd51cae34781cf42f338e44a020b249a4030acc3c584af916aee9ca881e3` (68 bytes changed vs stock). 9600 baud, native-game compatible. On the stock v4.2 base it carries: 1. **Reply-latch wedge fix** (edits 1-2) — bench-certified. -2. **E0-display threshold, N=5** (edit 5) — bench-certified 2026-07-19 - (held `F0000000` sub-threshold, flipped to `E0000105` at the 5th - teardown; mash regression clean). -3. **Check self-test display repaint** (edit 6, NEW) — the CheckRequest - handler previously left a stale `04000000` frame on the display; a - 10-byte cave at `$E020` now repaints `F0000000` after every check, - then re-renders the `E0` readout only if a counter is at/over - threshold. **Needs on-hardware verification**: after a burn, any - version+check exchange (tray connect, monitor, mash start) must - leave the display reading `F0000000`, not `04000000`; then re-run - `--e0test` (expect the certified behavior unchanged) and a mash - spot-check. +2. **E0-display threshold, N=5** (edit 5) — certified: display holds + `F0000000` through sub-threshold error events, flips to the live + `E0` readout at the 5th teardown (`E0000105` on the bench). +3. **Check self-test display repaint** (edit 6) — certified both ways: + version+check leaves `F0000000` when healthy, and re-renders the E0 + readout when counters are over threshold (`E0000305` on the bench) + instead of stock's stale `04000000`. -Once edit 6 is verified on the cockpit, this image is christened -**RIO 4.3**. +Certification runs (all in `testlogs/` + RIOv4_2-ANALYSIS.md): two +`--e0test` acceptance passes (display verified by eye at each step) and +a 120 s mash at **549 presses/min sustained** — zero wedges, board +counters flat, zero NAK, 247 resends all healed +(`riomash-rio43rc1-9600-20260719-164901.log`). + +A FastRIO 4.3 variant does not exist yet; when wanted, build it with +`make_patch.py --baud31250 --widen-ackwait --e0thresh=5 --checkrepaint` +and run the same acceptance ladder before deploying. ## Archive All prior generations live in [`archive/`](archive/) with their disassemblies: `RIOv4_2_patched` (wedge fix only), `_31250`/`_31250v2` (FastRIO speed builds), `_62500`/`_125000` (speed-ladder science runs), -and the `_e0t5` pair (threshold without check-repaint; the 9600 one is -in the socket as of 2026-07-19 until rc1 is burned). Bench verdicts and -per-edit history: RIOv4_2-ANALYSIS.md. The pristine dump `RIOv4_2.bin` -stays at top level — it is the source every patch builds from. +and the `_e0t5` pair (threshold without check-repaint). Bench verdicts +and per-edit history: RIOv4_2-ANALYSIS.md. The pristine dump +`RIOv4_2.bin` stays at top level — it is the source every patch builds +from. RIO 4.3 is in the cockpit socket as of 2026-07-19; the original +AMD chip and the retired e0t5 burn are labeled and preserved. diff --git a/RIOv4_2-ANALYSIS.md b/RIOv4_2-ANALYSIS.md index 14b19436..d6b3c23a 100644 --- a/RIOv4_2-ANALYSIS.md +++ b/RIOv4_2-ANALYSIS.md @@ -394,11 +394,11 @@ awaited exchange (~6-9 ms), so the real cadence is interval+exchange. Absolute-schedule pacing would approach 40+ Hz; ~94% of actually-issued polls were answered. Future host tweak, not firmware. -### Production configuration +### Production configuration (updated 2026-07-19: RIO 4.3 christened) | deployment | chip | config.json | |---|---|---| -| native-game cabinets | `RIOv4_2_patched.bin` (9600) | defaults (RioBaudRate 9600, AnalogPollMs 55) | -| RIOJoy-only cockpits (FastRIO) | `RIOv4_2_patched_31250v2.bin` | RioBaudRate 31250, AnalogPollMs 20-25, FTDI-class adapter | +| native-game cabinets | **`RIOv4_3.bin`** (9600; supersedes `archive/RIOv4_2_patched.bin`) | defaults (RioBaudRate 9600, AnalogPollMs 55) | +| RIOJoy-only cockpits (FastRIO) | `archive/RIOv4_2_patched_31250v2.bin` until a FastRIO 4.3 is built (`--baud31250 --widen-ackwait --e0thresh=5 --checkrepaint`) + acceptance-tested | RioBaudRate 31250, AnalogPollMs 20-25, FTDI-class adapter | AppConfig.RioBaudRate + AnalogPollMs are plumbed through RioCoordinator; stop-and-wait delivery is always on (near-zero cost on clean links). @@ -544,5 +544,11 @@ frames hit a timeout-retry that our late ACK then rescued — so subset that exhaust all 5 retransmits), and a timeout-recovered cycle exits via the success teardown (no `$3185`), while NAK-recovered cycles tear down through `$DA2F` (`$3185`). Every observation from both bench -sessions fits this model. Remaining for the RIO 4.3 christening: mash -spot-check. +sessions fits this model. + +**CHRISTENED RIO 4.3 (2026-07-19).** Final gate: 120 s mash at 549 +presses/min sustained (1129 presses — the heaviest stress run of the +campaign), zero wedges, counters flat, NAK 0, 247 resends all healed +(`testlogs/riomash-rio43rc1-9600-20260719-164901.log`). `RIOv4_3rc1` +renamed to **`RIOv4_3.bin`** (same bytes, sha `dc59bd51cae3…`) — the +production firmware for native-game cabinets. diff --git a/RIOv4_3rc1.bin b/RIOv4_3.bin similarity index 100% rename from RIOv4_3rc1.bin rename to RIOv4_3.bin diff --git a/RIOv4_3rc1.disasm.asm b/RIOv4_3.disasm.asm similarity index 100% rename from RIOv4_3rc1.disasm.asm rename to RIOv4_3.disasm.asm diff --git a/testlogs/riomash-rio43rc1-9600-20260719-164901.log b/testlogs/riomash-rio43rc1-9600-20260719-164901.log new file mode 100644 index 00000000..0fade303 --- /dev/null +++ b/testlogs/riomash-rio43rc1-9600-20260719-164901.log @@ -0,0 +1,28 @@ +== RIO mash test :: COM1 @ 9600 8N1, 120s, chip label 'rio43rc1-9600' == + lamp echo ON (drives reply/lamp collisions), wedge threshold 2.0s, poll 55ms, app auto-recovery DISABLED + log: c:\VWE\riojoy\riomash-rio43rc1-9600-20260719-164901.log + firmware: 4.2 + counters before: RestartCount=0 AbandonCount=0 FullBufferCount=0 [board/lamp faults reported!] + +>>> MASH NOW: two hands, 8 lamp buttons, as fast as you can. <<< +>>> Test runs 120s. A wedge alarm will beep + banner. <<< +>>> Ctrl+C ends the run early and still prints the summary. <<< + +[ 31.92s] progress: presses=258 (258/min) analog=474 maxGap=0.64s wedges=0 +[ 61.98s] progress: presses=588 (569/min) analog=918 maxGap=0.64s wedges=0 +[ 91.98s] progress: presses=922 (601/min) analog=1356 maxGap=0.64s wedges=0 + +== MASH SUMMARY [rio43rc1-9600] == +run : 120s on COM1, lamps on, wedge threshold 2.0s +firmware : 4.2 +presses/releases : 1129 / 1118 (549 presses/min) +analog replies : 1811 (~2181 poll slots; 83.0%), sentinels 0 +framing / NAK : 298 / 0 (command resends NAK/timeout: 247) +gap histogram : <100ms:1778 100-250ms:29 250-500ms:0 0.5-1s:3 1-2s:0 2-5s:0 >5s:0 +longest gaps : 0.68s@121.9s, 0.64s@0.6s, 0.57s@122.6s, 0.15s@32.2s, 0.14s@84.3s, 0.13s@52.3s, 0.13s@51.5s, 0.13s@93.5s, 0.13s@60.1s, 0.13s@15.2s +wedge events : 0 +counters before : RestartCount=0 AbandonCount=0 FullBufferCount=0 [board/lamp faults reported!] +counters after : RestartCount=0 AbandonCount=0 FullBufferCount=0 [board/lamp faults reported!] +counter delta : RestartCount=+0 AbandonCount=+0 FullBufferCount=+0 +verdict : PASS — no wedge; compare gap histogram + counter delta to baseline +log file : c:\VWE\riojoy\riomash-rio43rc1-9600-20260719-164901.log