Errata

From NESdev Wiki
Revision as of 03:19, 15 October 2013 by Tepples (talk | contribs) (Lord_Nigh reminded me of some of these. I will wikify later.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

The developer manuals for the Sega CD, Sega 32X, 3DO, and Atari Jaguar consoles reportedly have about five pages of hardware errata, or things in the silicon that don't work right. The NES, a third-generation console, has far less silicon than these four-and-a-half-generation consoles; therefore, it has far less space for bugs.

Video

  • Reading $2002 at the exact same time that $2002.D7 goes high at the start of vertical blanking keeps $2002.D7 from going high at all that frame. (Workaround: Use NMI to wait for vertical blanking.)
  • In horizontal or 4-screen mirroring, writing $2000 at the exact start of horizontal blanking may cause the PPU to start reading from the first pattern table instead of the second. (Workaround: Don't disable NMI during active picture. Instead, use a variable to lock out reentrant NMI.)
  • Sprite 0 hit does not trigger at x=255.
  • Filling secondary OAM causes a diagonal fetch pattern, causing both false positives and false negatives in the sprite overflow bit. (Workaround: Make sure the ninth sprite immediately follows the eighth, and use sprite overflow only to time the top of the screen, not the bottom.)

Input

  • DMC DMA during a controller read ($4016/$4017) causes double clocking, which causes bits of the report to be skipped. A common symptom is spurious presses of Right. The arcade version of Donkey Kong 3 was created before this behavior was fully characterized; it plays samples on a separate 2A03. (Workaround: If playing samples, reread the controller and make sure the reads match. If using DMC as a scanline counter, read the controller in a DMC IRQ handler.)

Audio

  • APU Pulse: In sweep decrease mode, the carry input differs between the two channels.
  • APU Pulse: The bottom octave doesn't work, even if sweep is turned off, unless the sweep is set to decrease mode. A lot of commercial games that use all software sweeps don't even try to fix this. (Workaround: Write $08 to $4001 and $4005.)
  • APU Pulse: Writing to $4003 or $4007 to change the high byte of the period while a note is playing causes a click as the phase resets. (Workaround: Write $4003 and $4007 only when they have changed, and use sweep and $4017 writes to change the high bit.)