Quote from the wiki page:
Nintendulator (and probably a few others) do extra stuff.
1. If the PPU isnot rendering, the value written becomes $FF.
2. If $2003 (OAM_ADDR) ANDed with 3 results 2, then the value written is ANDed with $E3.
Why? (edited & fixed)
Next question is about the PPU register $2007. From the same source, it seems that any write outside the palette range does not take immediate effect, but "delayed" until the next PPU clock/operation. No, it's not about the 1st read buffer "problem", but a "phase state". There's nothing on the wiki about it.
Does writting to $2007 take immediate effect... or not?
Quote:
Writes to OAMDATA during rendering (on the pre-render line and the visible lines 0-239, provided either sprite or background rendering is enabled) do not modify values in OAM, but do perform a glitchy increment of OAMADDR, bumping only the high 6 bits (i.e., it bumps the [n] value in PPU sprite evaluation - it's plausible that it could bump the low bits instead depending on the current status of sprite evaluation). This extends to DMA transfers via OAMDMA, since that uses writes to $2004. For emulation purposes, it is probably best to completely ignore writes during rendering.
Nintendulator (and probably a few others) do extra stuff.
1. If the PPU is
2. If $2003 (OAM_ADDR) ANDed with 3 results 2, then the value written is ANDed with $E3.
Why? (edited & fixed)
Next question is about the PPU register $2007. From the same source, it seems that any write outside the palette range does not take immediate effect, but "delayed" until the next PPU clock/operation. No, it's not about the 1st read buffer "problem", but a "phase state". There's nothing on the wiki about it.
Does writting to $2007 take immediate effect... or not?