Skip to content

RustyN64 v0.8.0

Latest

Choose a tag to compare

@github-actions github-actions released this 29 Jul 18:52
5a18d53

v0.8.0 "Breadth" — Phase 7: the accuracy battery, and the first commercial pictures

Commercial cartridges render. Super Mario 64 draws its title screen, and 29 of
66 staged titles render through their own graphics microcode. Fourteen frames
are committed under screenshots/, every one rendered and looked at.

CUT CRITERIA (to-dos/VERSION-PLAN.md), both verified rather than assumed:

  • The battery reports a real pass rate: 54 probes, 100%, across two Angrylion
    oracle suites — 41 RDP rasteriser vectors + 13 VI scan-out vectors. Expected
    values are the oracle's, never our own output.
  • Every residual R-1 through R-23 carries a ledger disposition, and no
    residual is referenced anywhere in docs/ or to-dos/ without an entry.

THE TWO DEFECTS THAT UNBLOCKED IT WERE IN THE CPU AND THE PIF, NOT THE RDP

R-18 had been treated as a rasteriser gap for months. It was not.

  • ERET interrupt livelock (#189). ERET resolves in EX, clearing Status.EXL
    and pointing next_pc at EPC. The DC interrupt check runs one cycle later,
    saw EXL clear, and charged the interrupt to whatever sat in ex_dc — the
    ERET itself. EPC was overwritten with the ERET's own address, destroying
    the return address it was about to consume, so the handler returned to the
    ERET, which resumed at itself. Banjo-Tooie went from 1 to 80 distinct PCs
    and programmed the VI for the first time.

  • PIF "no device" flag (#190). Empty joybus ports never set the RX byte's
    bit 7, so osContInit reported four controllers on a one-pad console and
    Super Mario 64 halted in its own assert at 0x80246DD8. A second,
    pre-existing defect sat beside it: mark_no_device wrote the flag to
    resp - 1, the last TX data byte, never the RX byte software reads — it had
    never once landed correctly. SM64 went from 0 to 125,278 RDP commands and a
    title screen; Banjo-Kazooie from 0 to 133,625.

Oracle unchanged throughout: n64-systemtest Phase 1 Failed: 0, suite-wide 90.

T-71-003 — THE ONE CUT CRITERION CI CAN NEVER RUN

F3DEX and its per-studio variants are proprietary and ship inside commercial
ROMs that ADR 0008 forbids committing; rdpq is a genuine CI-gated LLE microcode
test but is not F3DEX and cannot substitute. By maintainer decision the
criterion closes on a reproducible local census (microcode_families.rs,
screenshots. VERSION-PLAN records it as the single documented exception rather
than an unstated weakening of the gate. The census asserts only that staged
titles render, never a pass rate — the corpus is whatever a machine happens to
hold, so a percentage from it would describe a ROM collection while looking
like an accuracy metric.

WHAT THE EVIDENCE STANDARD COST, AND WHY IT STAYS

"Lit pixels" was cited for weeks as proof of rendering and was wrong:
uninitialised RDRAM is non-black. The census proves it on its own data —
Rayman 2 and Namco Museum 64 report ZERO RDP commands with 123,540 and 137,681
lit pixels. A lit-pixel rule would have committed two frames of pure garbage as
evidence. Every screenshot in this release was rendered to PNG and viewed;
frames that scored well but looked wrong were rejected, and the rejections are
recorded because they localise real defects.

ALSO IN THIS RELEASE

  • mirror_s pinned against Angrylion (tex_tri_mirror_s_16) — which refuted the
    hypothesis it was written to confirm: the S-axis mirror path is correct, so
    the mirrored text in GoldenEye and WCW is something else.
  • tlut_en (Set Other Modes bit 47) decoded; the TLUT lookup gated on it
    rather than on the tile format.
  • commercial_boot measures through Bus::scanout_scaled, the path the frontend
    actually presents, and reports scan-out dimensions so a blanked VI is
    distinguishable from a frame that is genuinely black.

NOT CLAIMED

24 titles still issue zero RDP commands. They do not stall — they halt, each
for its own reason, exactly as SM64 halted before the PIF fix. Banjo-Tooie sits
in a B -1 with interrupts enabled and nothing pending; Donkey Kong 64 spins on
BNE v1, v0, -1 with IE = 0 and a NOP delay slot, unexitable by construction;
Jet Force Gemini halts with IP2 pending but masked. Each is a separate
root-cause hunt. Those, the mirrored-text cause, the ledger-extraction refactor
and 1080's IPL3 fault are v0.9.0 "Threshold" work.