Skip to main content

EMULATION_EPOCH

Constant EMULATION_EPOCH 

Source
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.

epochreleasewhat moved
1v3.0.0the MMC3 background-at-$1000 A12 rule (T-MMC3-BG-A12)
2v3.0.1mapper 45 CHR-RAM unbanked (T-GA23C-CHRRAM; Famicom Yarou Vol.1)
3v3.1.0a 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)