docs(ledger): characterise the silent cohort — they halt, each differently - #195
Conversation
…rently Dumping what reaches WB at one-cycle granularity shows the titles issuing zero RDP commands are not stalled mid-work; they have deliberately stopped, the same shape Super Mario 64 had before the PIF fix. Banjo-Tooie: B -1 at 0x800136A0, IE=1, IM=0xFF, Cause.IP=0 -- a self-loop with interrupts enabled and nothing pending, so nothing can release it. Donkey Kong 64: BNE r3,r2,-1 at 0x80000A04 with IE=0 -- a spin-poll comparing two registers with interrupts disabled, and the delay slot is a NOP, so neither register is reloaded inside the loop. Unexitable by construction. The most distinctive of the three and the best next target. Jet Force Gemini: B -1 at 0x8003F5D8 with IE=0 and IP2 pending but masked, while still servicing the occasional exception (its preamble SD t0,88(k0) retires) -- halted rather than frozen. osMemSize is doubly weakened as a lead. Seeding RI_SELECT = 0x14 -- the documented IPL3 configuration, TSEL=0b0001 RSEL=0b0100 from N64brew RDRAM Interface -- so IPL3 takes the RDRAM-already-up branch changed nothing: osMemSize stayed 0, the silent titles stayed silent, SM64 was unaffected. Refuted by measurement rather than left as a plausible story. So the remaining work is per-title root-causing, not one shared fix. Each reached a halt for its own reason, exactly as SM64 reached its assert because osContInit miscounted controllers, and the method that worked there is the one to repeat: find the branch into the halt, read what it tested, trace it back. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Important Review skippedReview was skipped as selected files did not have any reviewable changes. 💤 Files selected but had no reviewable changes (1)
⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
Antigravity, correctly: the rest of this row names registers by ABI (t0, k0, s3) while the DK64 snippet used the raw r3/r2 my probe's disassembler emitted. Naming them properly is not only consistency -- r3/r2 are v1/v0, the return-value pair, so the loop is comparing two returned values and tracing what last wrote them is the way into the root cause. The raw encoding is kept alongside so the disassembly can still be matched. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Adjudication — Antigravity reviewNo blocking issues. Register naming — adopted, and it improved the findingCorrect: the rest of the row names registers by ABI ( Fixing it turned out to be more than consistency.
The raw encoding is kept alongside so the disassembly can still be matched against the probe output. 1,800 characters onto an already long single-line row — acknowledged, trackedAgreed, and this is the third independent time it has been raised (also #188, #193). It is task #49: extract all long residuals to Not doing it as a rider on a docs change about halt diagnosis — and worth noting the concrete harm is now demonstrated rather than theoretical: CodeRabbit found on #194 that unescaped pipes in this row were corrupting the table ( |
Antigravity review (Gemini via Ultra)This pull request updates Blocking issuesNone found. Suggestions
Nitpicks
Automated first-pass review by |
Docs-only. Characterises the titles issuing zero RDP commands, and refutes a lead by measurement.
They are not stalled — they have stopped
Dumping what actually reaches
WBat one-cycle granularity:StatusB -1@0x800136A0IE=1,IM=0xFF,IP=0BNE r3,r2,-1@0x80000A04IE=0NOPso neither register is reloaded — unexitable by constructionB -1@0x8003F5D8IE=0,IP=0x04SD t0,88(k0)retires)This is the same shape Super Mario 64 had before the PIF fix — a game that hit an assert and gave up. DK64 is the most distinctive and the best next target: a loop that cannot exit on its own terms.
osMemSizerefuted as a leadRI_SELECTwas seeded to0x14— the documented IPL3 configuration (TSEL = 0b0001,RSEL = 0b0100, N64brew RDRAM Interface §RI_SELECT) — so IPL3 would take the RDRAM-already-up branch.Nothing changed.
osMemSizestayed0, the silent titles stayed silent, SM64 was unaffected. Combined with SM64 rendering its title screen withosMemSize == 0, the lead is now doubly weakened. Refuted by measurement rather than left standing as a plausible story that later work would build on.What this means for the plan
The remaining silent titles are not one shared fix. Each reached its halt for its own reason, exactly as SM64 reached its assert because
osContInitmiscounted controllers. The method that worked there is the one to repeat: find the branch into the halt, read what it tested, trace that value back.Gates
cargo fmt --all --check·cargo test --workspace· markdownlint — green. Docs only, no behaviour change.