pub const EMULATION_EPOCH: u32 = 3;Expand description
v3.0.0 (ADR 0045) — which emulator behaviour a movie or a netplay peer
expects, beside the options and the board that HardwareOptions and
BoardDescription describe.
Two builds with identical options can still emulate a game differently
whenever an accuracy fix lands: v3.0.0’s T-MMC3-BG-A12, for instance,
moves the MMC3 IRQ for games with the background at $1000. Without a
record of which behaviour a recording assumes, a movie replays under the
new timing and a mixed-version netplay session desyncs, and neither says
why. .rnm format 5 records this number, and netplay protocol 6 sends it
in the handshake; a mismatch is refused, naming both epochs.
The bump rule. Increment it, in the same change, whenever a change makes the core produce a different framebuffer, audio sample or bus cycle from the same inputs than the last release did. Every such change already re-blesses a golden or moves a commercial snapshot, so that is the trigger to look for. Refactors, byte-identical performance work, frontend features and new mapper families (which have no earlier output to differ from) do not bump it. A release that moved goldens without raising it breaks the promise this constant exists to keep.
It was 1 at v3.0.0, the first release to carry it. Earlier builds have no epoch, and are refused by the movie format (5) and the protocol (6) instead.
| epoch | release | what moved |
|---|---|---|
| 1 | v3.0.0 | the MMC3 background-at-$1000 A12 rule (T-MMC3-BG-A12) |
| 2 | v3.0.1 | mapper 45 CHR-RAM unbanked (T-GA23C-CHRRAM; Famicom Yarou Vol.1) |
| 3 | v3.1.0 | a DMC load DMA refused by a write takes four cycles; sprite evaluation starts at OAMADDR as of dot 65 and keeps a misaligned OAMADDR when X is in range (AccuracyCoin re-sync to f5f41dc2) |