Skip to content

Commit 835bc45

Browse files
committed
Merge remote-tracking branch 'origin/main' into docs/adr-backfill-0007-0009
# Conflicts: # CHANGELOG.md
2 parents 76d9f11 + c6432ae commit 835bc45

2 files changed

Lines changed: 52 additions & 2 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
110110
docs) — the standalone Sharp S-RTC has no established "4513" part number anywhere; that number
111111
belongs only to the different Epson chip paired with SPC7110.
112112

113+
- **`docs/STATUS.md`: an accuracy dashboard — `v0.5.0` "Fidelity" work, in progress.** RustySNES
114+
has no single monolithic oracle ROM the way RustyNES's AccuracyCoin does (an early skeleton for
115+
exactly that approach, `rustysnes-test-harness::accuracy_battery`, ticket T-04, was never
116+
implemented and is superseded, not a competing source of truth), so rather than force the
117+
composed multi-layer battery into one misleading summed fraction (a 5.12M-case CPU oracle
118+
would swamp a 4-ROM audio suite), a new "Accuracy dashboard" table tracks each layer's own
119+
status — the CPU per-opcode oracle (0-diff against its chosen reference; one documented
120+
inter-reference divergence, not a bug, `docs/adr/0002`), the SPC700 per-opcode oracle (0-diff,
121+
100.00%), on-cart CPU, PPU/DMA golden framebuffer, audio boot+run, Core/Curated coprocessors
122+
(honesty-gate green, 3/3), and BestEffort coprocessors split into real-title-validated (6/9)
123+
vs unit-test-only (3/9) — always
124+
current, reaffirmed every release from here on, plus a named-residuals line so known gaps stay
125+
visible instead of buried in prose.
126+
113127
## [0.4.0] "Completion" - 2026-07-08
114128

115129
Closes out Phase 7's BestEffort coprocessor/board matrix: a full ARMv3 (ARM6-class) CPU core for

‎docs/STATUS.md‎

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,40 @@ implemented (`v0.4.0`, unit-tested only — no commercial dump in the local corp
2121
Save-states (`v0.2.0`), rewind, run-ahead, PAL region auto-detection, and ExLoROM (all `v0.3.0`)
2222
are implemented and shipped — see the frontend and memory-map-model tables below.
2323

24+
## Accuracy dashboard
25+
26+
RustySNES doesn't have one monolithic all-in-one oracle ROM the way RustyNES's AccuracyCoin does.
27+
An early skeleton for exactly that approach exists (`rustysnes-test-harness::accuracy_battery`,
28+
ticket T-04) but was never implemented and has since been superseded — no publicly available
29+
SNES ROM plays the AccuracyCoin role, and the composed multi-suite approach below is what
30+
actually shipped; that skeleton is tracked as dead code to remove in a follow-up, not a competing
31+
source of truth. The accuracy story here is instead a **composed multi-layer battery** across
32+
independently-sourced suites (`docs/testing-strategy.md`). Rather than force these heterogeneous
33+
suites into one artificial summed fraction (a 5.12M-case CPU oracle would swamp a 4-ROM audio
34+
suite in any raw sum, which would be misleading, not informative — this project's honesty-gate
35+
posture, `docs/adr/0003`, applies to how numbers are presented too), each layer's own status is
36+
tracked here, always current, reaffirmed every release:
37+
38+
| Layer | Status | Detail |
39+
|---|---|---|
40+
| CPU (65C816) per-opcode oracle | ✅ **0-diff vs. reference** | 5,119,999 / 5,120,000 (SingleStepTests/65816; the one residual is a documented inter-reference divergence, `docs/adr/0002`, not a bug — not literally 0 of 5,120,000, but 0 against the chosen reference behavior every other test vector agrees on) |
41+
| SPC700 per-opcode oracle | ✅ **0-diff, 100.00%** | 256,000 / 256,000 (SingleStepTests/spc700) |
42+
| On-cart CPU (gilyon `cputest-basic`) | ✅ **green** | 1107 / 1107 "Success" |
43+
| PPU/DMA/HDMA golden framebuffer (undisbeliever) | ✅ **green, deterministic** | 29 / 29 ROMs bit-identical across runs |
44+
| Audio boot+run (blargg `spc_*`) | ✅ **literal PASS, all 4** | `spc_smp`, `spc_timer`, `spc_mem_access_times`, `spc_dsp6` — asserted, not a determinism proxy |
45+
| Core/Curated coprocessors (oracle-gated) | ✅ **3 / 3, honesty gate green** | DSP-1 (4 commercial ROMs), Super FX/GSU (58 Krom ROMs + per-opcode suite), SA-1 (18 commercial carts) — `ORACLE_COPROCESSORS` |
46+
| BestEffort coprocessors, real-title validated | ✅ **6 / 9** | DSP-2, DSP-4, ST010, S-DD1, CX4, OBC1 — each boots a real commercial title to real gameplay content |
47+
| BestEffort coprocessors, unit-test only | ⚠️ **3 / 9** | SPC7110 (wired against its one available ROM but doesn't reach a bootable screen — the addressing-bug fix in `v0.4.0` improved but didn't close this), ST018, S-RTC (neither has a commercial dump in the local corpus) |
48+
| Determinism contract | ✅ **proven** | bit-identical framebuffer/audio across runs; save-state round-trip proven across all three board tiers (no-coprocessor, Curated, BestEffort) |
49+
50+
**Named residuals, tracked not hidden:** the 65816 `e1.e` divergence (`docs/adr/0002`); DSP-3 and
51+
ST011 have no board wired (no verified board/window entry to pin against, `necdsp_variant.rs`);
52+
SPC7110's post-`RTI` WRAM-population gap (`docs/cart.md` §SPC7110); PAL and ExLoROM both lack
53+
golden-ROM-boot proof (no ROM in the local corpus for either). `v0.5.0 "Fidelity"` is where the
54+
next layer — a named hardware-gotcha regression suite (DRAM refresh, HDMA mid-scanline placement,
55+
the DMA/HDMA-collision crash quirk, open-bus-via-HDMA-latch, true mid-dot writes, hi-res
56+
color-math precision, the `$4203` double-write edge case) — gets added to this table.
57+
2458
## Subsystem progress
2559

2660
| Crate | Chip | State |
@@ -97,8 +131,10 @@ are implemented and shipped — see the frontend and memory-map-model tables bel
97131
determinism proxy). The per-opcode SPC700 (oracle 0-diff) + per-tick S-DSP math is correct.
98132
- **Master-clock totals:** a booted NTSC frame advances ≈357,374 master clocks (spec ≈357,368),
99133
confirming the 6/8/12 access map + dot timeline.
100-
- **Accuracy battery (the composed two-layer oracle):** the CPU layer is 0-diff; the on-cart
101-
layer is gilyon-basic green + undisbeliever golden. Audio + coprocessor layers pending.
134+
- **Accuracy battery (the composed multi-layer oracle):** see the "Accuracy dashboard" section at
135+
the top of this document for the always-current, per-layer status table — the CPU, SPC700,
136+
on-cart CPU, PPU/DMA golden, and audio layers are all green; the coprocessor layer is 6/9
137+
BestEffort boards real-title validated plus all 3 Core/Curated boards honesty-gate green.
102138
- **Determinism contract:** the framebuffer is verified bit-identical across runs (same seed +
103139
ROM ⇒ identical hash) for all 29 undisbeliever ROMs; the full save-state round-trip (save,
104140
restore onto a fresh `System`, continue both, compare framebuffer + audio) is proven for a

0 commit comments

Comments
 (0)