Hardware bugs and quirks: Difference between revisions
From NESdev Wiki
Jump to navigationJump to search
(Created page with "== CPU == The NES uses the 6502 as its CPU core, which has a few bugs and quirks of its own. The only behavior different from...") |
(I agree with Rainwarrior that this covers mostly the same ground as Errata. Merge begins.) |
||
Line 1: | Line 1: | ||
{{merge|Errata}} | |||
== CPU == | == CPU == | ||
The NES uses the 6502 as its CPU core, which has a few [[Wikipedia:MOS Technology 6502#Bugs_and_quirks|bugs and quirks]] of its own. The only behavior different from a standard 6502 is the NES's decimal flag is inactive; it will behave as though it is always unset. | The NES uses the 6502 as its CPU core, which has a few [[Wikipedia:MOS Technology 6502#Bugs_and_quirks|bugs and quirks]] of its own. The only behavior different from a standard 6502 is the NES's decimal flag is inactive; it will behave as though it is always unset. |
Revision as of 19:30, 29 October 2015
A user thinks this article covers much the same conceptual space as Errata. How might they be merged? |
CPU
The NES uses the 6502 as its CPU core, which has a few bugs and quirks of its own. The only behavior different from a standard 6502 is the NES's decimal flag is inactive; it will behave as though it is always unset.
Some Famiclones may use a 65C02, which does have a working decimal flag and does not have the 6502's undocumented instructions. Official hardware never uses a 65C02.
PPU
- Setting bit 6 of PPUCTRL ($2000) on a stock NES can potentially damage the PPU.
- Setting PPUADDR ($2006) may corrupt the scroll registers. Be sure to set PPUCTRL ($2000) and PPUSCROLL ($2005) after you're done with PPUADDR.
- Setting OAMADDR ($2003) corrupts OAM. Usually you'll just want to set it to $00 and follow it with OAMDMA in your vblank routine, which will help with other OAM bugs as well.
- If OAMADDR is greater than 7 at the end of vblank, OAM may be corrupted.
- Blanking the display mid-frame can corrupt OAM.
- The sprite overflow flag can have false positives and false negatives.
APU
- Playing DMC samples can corrupt controller reads. Usually circumvented by re-reading the controller until two consecutive reads match.
- Writing to $4003 or $4007 will reset the phase and envelope of the channel. This means changing the high bits of a note's frequency will retrigger the note, which can cause popping noises during software sweeps. Similarly, writing to $400B will reload the triangle's linear counter.
- A negative sweep on pulse channel 1 will subtract the shifted period value minus 1. This does not happen on pulse channel 2.