Enum PpuRevision
pub enum PpuRevision {
Rp2c02H,
Rp2c02G,
}Expand description
v2.1.7 P5 — selectable 2C02 die revision, gating revision-dependent quirks.
Additive and default-off: the Default (Self::Rp2c02H) preserves
RustyNES’s established behavior byte-for-byte, so AccuracyCoin, the
commercial oracle, and the visual / audio regression suites are unaffected at
the default. Only the opt-in Self::Rp2c02G selection changes any emulated
behavior (see below).
Real RP2C02 dies shipped across several letter revisions. The one behavioral
difference RustyNES currently models per-revision is the OAMADDR
($2003) write-during-rendering OAM corruption glitch: writing $2003
while rendering is enabled on a visible / pre-render scanline copies one
8-byte OAM “row” from row 0 over the row the write’s high bits target, on the
next rendered dot (the same CorruptOAM mechanism the rendering-disable
model uses; see Ppu::process_oam_corruption). A handful of titles —
notably Huge Insect — trip it. It is not enabled on the default
revision.
Honesty note (see docs/accuracy-ledger.md): the exact mapping of the
$2003 corruption onto specific 2C02 letter revisions is not firmly
established in the public literature, and the precise per-title byte output
of the glitch is not independently oracle-verified in this cut. RustyNES
therefore offers the model as an opt-in approximation keyed to a single
“earlier revision” selection (Self::Rp2c02G) rather than claiming exact
silicon-revision fidelity. This is config, not save-state: like
[PpuRegion] it is re-applied on load and is not part of the snapshot.
Variants§
Rp2c02H
Default. Later RP2C02 die (the “H”-class revision RustyNES has always
modeled). The OAMADDR ($2003) write-during-rendering OAM corruption is
not modeled, so the deterministic output is byte-identical to a build
without this feature.
Rp2c02G
Earlier RP2C02 die (“rev E+” in the nesdev notes). Additionally models the
OAMADDR ($2003) write-during-rendering OAM row-corruption glitch that
Huge Insect and a few other titles trip. Opt-in; changes emulated
behavior only for software that writes $2003 mid-render.
Implementations§
§impl PpuRevision
impl PpuRevision
pub const fn models_oamaddr_corruption(self) -> bool
pub const fn models_oamaddr_corruption(self) -> bool
Whether this revision models the OAMADDR ($2003) write-during-rendering
OAM corruption glitch. Only Self::Rp2c02G does; the default returns
false, keeping the default build byte-identical.
Trait Implementations§
§impl Clone for PpuRevision
impl Clone for PpuRevision
§fn clone(&self) -> PpuRevision
fn clone(&self) -> PpuRevision
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more