Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Fixed

- **`C11.12` is unauthorable, verified two ways — there is nothing to assert.** Checked rather than
assumed: the row's subject ("Mode 7 scroll offset latch timing") appears exactly **twice** in
`ref-docs/`, both times as a game-compatibility table row naming NHL '94, with **no behavioural
statement anywhere** — no value, no timing, no mechanism. And no reference models a distinct
timing: ares reads the register live in `sfc/ppu/mode7.cpp`
(`s32 hoffset = (i13)self.io.hoffsetMode7;`), with no per-scanline latch for a test to catch a core
getting wrong.

Writing a row would mean inventing an expectation and checking our own arithmetic against itself —
the `E9.11` failure mode. The genuinely testable part of `$210D`'s dual-latch behaviour (it updates
`M7HOFS` via `M7_old` *and* `BG1HOFS` via `BG_old`, with different formulas) is **already covered**
by `C4.01` and `C4.04`/`C4.05`, all blessed scenes; `C11.12` adds only the word *timing*, which is
the part nothing defines.

It belongs with `C13.*` and `F1.22`: enumerated, uncoverable, scored as such rather than chased.

- **`inidisp_forgot_to_force_blank`: the model difference is now identified exactly, and a recorded
claim about it is corrected.** The last per-dot framebuffer gap was documented only as "an
`internal_cgram_address` draw-ordering detail". The concrete difference: MesenCE updates
Expand Down
30 changes: 30 additions & 0 deletions docs/accuracysnes-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -766,6 +766,36 @@ wrapped part is page zero and precisely page zero. Nothing else is in reach howe
which is what lets the program wait a whole buffer cycle instead of timing anything — and the echo
offset free-runs regardless of `FLG` bit 5, so there is no starting phase to know.

### `C11.12` is unauthorable — there is nothing to assert, not merely something hard

Checked 2026-08-02, two ways, and recorded so it is not re-attempted.

**The corpus gives a game name and nothing else.** `C11.12` ("Mode 7 scroll offset latch timing")
appears exactly twice in `ref-docs/`, both times as a row in a game-compatibility table naming
**NHL '94**. There is no behavioural statement anywhere — no value, no timing, no mechanism. A test
needs something to assert, and the research corpus supplies nothing to assert.

**No reference models a distinct timing either.** ares reads the register **live** in
`sfc/ppu/mode7.cpp`:

```cpp
s32 hoffset = (i13)self.io.hoffsetMode7;
```

There is no per-scanline latch, no deferred copy, nothing a test could catch a core getting wrong.
Writing a row would mean inventing an expectation and then checking that our own arithmetic agrees
with itself — the `E9.11` failure mode.

**What the dual-latch mechanism actually is, and where it is already covered.** fullsnes documents
that `$210D` updates `M7HOFS` (via `M7_old`) *and* `BG1HOFS` (via `BG_old`), with different
formulas. That is real and testable — and it is already covered: `C4.01` (the BG formula keeps the
low three bits) and `C4.04`/`C4.05` (`$210D` drives Mode 7 scroll) are both blessed scenes. `C11.12`
adds only the word *timing*, which is the part nothing defines.

**To ever author it** would need a source that says what NHL '94 depends on — a disassembly note, a
hardware measurement, or a reference that special-cases it. Until then it belongs with `C13.*` and
`F1.22`: enumerated, uncoverable, and scored as such rather than chased.

### Survey of what is left in Group E, and why none of it is a quick row

Six rows landed in this batch (`E8.01`, `E9.02`, `E5.06`, `E9.09`, `E3.09`, `E3.13`) at roughly one
Expand Down
Loading