sprite dma

This is an archive of a topic from NESdev BBS, taken in mid-October 2019 before a server upgrade.
View original topic
sprite dma
by on (#11624)
what happens if a sprite dma transfer is started toward the end of vblank? i would assume that it would mess up the ppu just like any other ppu access during that time.

matt

by on (#11627)
The way I understand it:

Sprite DMA ($4014) is nothing more than a CPU macro which auto-fetches bytes and feeds them to $2004. So what happens if DMA "spills" into rendering is the same as what would happen if you wrote to $2004 during rendering (because that's pretty much exactly what's happening).

From what I understand -- $2004 writes during rendering have no effect (they may or may not increment $2003 -- I'd really like clarification on this).

Meaning if you DMA with only 101 CPU cycles left in VBlank -- only 50 bytes will have been successfully copied to OAM (and possibly $2003 will only += 50? again confirmation welcome), the other 413 cycles that the DMA "eats" will still be wasted, but will have no effect.


Of course if the PPU is off, DMA/$2004 can be done any time without any trouble.