e0test: check-exchange acceptance stage for edit 6; record RC1 first-light
After the flip leaves counters over threshold, the tool now sends a CheckRequest (ACKing every status frame) — edit-6 chips must repaint and re-render the E0 readout; 04000000 marks a pre-rc1 chip. Analysis records the stock-chip archaeology (stock also leaves 04000000, but the ungated E0 readout papered over it in period — our fixes exposed it) and RC1's below-threshold first-light PASS (version+check -> F0). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -522,6 +522,17 @@ hooked from the handler's final notify (`$C5E4`): `JSR $C70E` (original
|
||||
notify), `JSR $CB7C` (repaint `F0000000`), `JSR $D5F2` (re-render the
|
||||
E0 readout, which the edit-5 gate suppresses below threshold), `RTS`.
|
||||
Built into **`RIOv4_3rc1.bin`** (with edits 1-2 and 5; sha256
|
||||
`dc59bd51cae3…`) — awaiting burn + on-hardware verification, after
|
||||
which the image is christened RIO 4.3. Prior generations moved to
|
||||
`archive/`.
|
||||
`dc59bd51cae3…`); prior generations moved to `archive/`.
|
||||
|
||||
Why `04000000` was never seen in period (user-verified by re-slotting
|
||||
the ORIGINAL stock chip, 2026-07-19): stock leaves the same stale frame
|
||||
after every check, but the ungated E0 readout papers over it at the
|
||||
first counter event — `04000000` flashes momentarily, then `E000000x`
|
||||
as errors accrue and the reply-latch wedge trips under load. The wedge
|
||||
fix plus the E0 threshold gate are what exposed the stale frame.
|
||||
|
||||
**RC1 first-light (burned 2026-07-19): PASS on the below-threshold
|
||||
path** — a version+check exchange now leaves the display at `F0000000`.
|
||||
Remaining for the RIO 4.3 christening: over-threshold check repaint
|
||||
(must re-render the E0 readout), `--e0test` regression, mash
|
||||
spot-check.
|
||||
|
||||
@@ -125,8 +125,10 @@ internal static class E0Test
|
||||
{
|
||||
if (--frameCountdown > 0) continue;
|
||||
repliesSeen++;
|
||||
if (ackMode == AckMode.Immediate && !ackSent)
|
||||
if (ackMode == AckMode.Immediate)
|
||||
{
|
||||
// ACK every completed frame (check replies
|
||||
// arrive as several 0x85 frames in a row).
|
||||
ackSent = true;
|
||||
respond = 0xFC;
|
||||
}
|
||||
@@ -204,6 +206,23 @@ internal static class E0Test
|
||||
for (int k = 0; k < flipEvents && ok; k++)
|
||||
ok = await RunEvent(AckMode.Never, "flip");
|
||||
|
||||
if (ok)
|
||||
{
|
||||
// Edit-6 acceptance (rc1/RIO4.3 chips): a CheckRequest self-test
|
||||
// must repaint the display afterwards — F0000000 when healthy,
|
||||
// or the E0 readout when counters are over threshold (they are
|
||||
// now, after the flip). Chips without edit 6 show 04000000 here.
|
||||
PhaseReset(AckMode.Immediate, 0x85, 4); // check replies: cmd+2+ck
|
||||
await transport.WriteAsync(new byte[] { 0x80, 0x00 }, CancellationToken.None);
|
||||
byte[] chk = await Collect(4000, _ => false); // self-test ~1-2s, lamps flash
|
||||
int checkReplies = Count(chk, 0x85);
|
||||
Console.WriteLine($"[check ] CheckRequest sent: self-test ran (lamps flash), {checkReplies} status frame(s).");
|
||||
Console.WriteLine($" Edit-6 chips repaint, then re-render the over-threshold E0 readout.");
|
||||
Console.WriteLine($" >>> DISPLAY SHOULD NOW READ: {Expected(cycles, teardowns)} (may run one higher in the last pair;");
|
||||
Console.WriteLine($" 04000000 here = no edit 6 on this chip) <<<");
|
||||
await Task.Delay(3000);
|
||||
}
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("== done ==");
|
||||
Console.WriteLine($" final predicted counters: $3184=${cycles:X2} $3185=${teardowns:X2} -> display {Expected(cycles, teardowns)}");
|
||||
|
||||
Reference in New Issue
Block a user