In posts to the nesdev Yahoo! Group, it is suggested that OAM and the palette may be DRAM that decays rapidly.
In a typical render cycle (wait for vblank, turn off PPU, write VRAM, do OAM DMA, turn on PPU), do OAM and the palette really decay to the point where they must be rewritten every vblank? I did a few tests on my frontloader using games with a Seal, jiggling the Game Pak at various points:
In message 1751 Andrew Davie wrote:
So we sprayed it with freon and lo and behold, the sprites stopped
flickering. I figured it out shortly thereafter - the sprites are loaded
into DYNAMIC ram. The Three stooges was being miserly with what cpu cycles
it used, so it only did the update whenever it really HAD to. And it turns
out, when this particular variant of the NES got hot, the time the dynamic
ram held its contents got shorter and shorter. [snip]
I do believe we made modifications to the stooges, too, so that it wasn't
pushing the machine so much.
flickering. I figured it out shortly thereafter - the sprites are loaded
into DYNAMIC ram. The Three stooges was being miserly with what cpu cycles
it used, so it only did the update whenever it really HAD to. And it turns
out, when this particular variant of the NES got hot, the time the dynamic
ram held its contents got shorter and shorter. [snip]
I do believe we made modifications to the stooges, too, so that it wasn't
pushing the machine so much.
In message 3506 Kevin Horton wrote:
A word on the palette RAM. It is dynamic, and its value decays quite
quickly if PPU rendering is not on.
quickly if PPU rendering is not on.
In a typical render cycle (wait for vblank, turn off PPU, write VRAM, do OAM DMA, turn on PPU), do OAM and the palette really decay to the point where they must be rewritten every vblank? I did a few tests on my frontloader using games with a Seal, jiggling the Game Pak at various points:
- I tried Super Mario Bros./Duck Hunt in SMB mode and removed the Game Pak during gameplay. The sky stayed blue (blinking with black because of CIC resets) for a long time.
- I tried Nintendo's Tetris for NES (NES-EI-USA). I held down on the cartridge and let it rise slowly, just enough to halt the CPU with a bad opcode on the PRG bus without affecting the CHR bus or the CIC chip. Once I got the program to stop in the middle of a note that continued playing, showing that at least some of the 2A03 was still being clocked, and the PPU kept on drawing the same image. Once I got the program to stop in what appeared to be the middle of a VRAM transfer, which I could discern because the background scrolled up and to the left a bit. Even without constant refreshing from the CPU, it appears the OAM and palette got refreshed by the PPU while the screen was turned on, even for several seconds.