As previously stated in another thread, I wasn't sure how an errant 2005 or 2000 write would affect a large block of writes to the PPU (ie, if the NMI interrupted the writes and wrote to 2000 and/or 2005). I tested this in FCEUX 2.2.3 and Nintendulator (but not on hardware, sorry). These were my results...they may be obvious to some of the regulars here.
all are writes, except where noted
(basic)
2006 2006 2007
-correct PPU address
(sta 2005 x1)
2005 2006 2006 2007
-!! sets wrong PPU address
2006 2005 2006 2007
-!! never sets an address
2006 2006 2005 2007
-correct PPU address
(sta 2005 x2)
2005 2005 2006 2006 2007
-correct PPU address
2006 2005 2005 2006 2007
-!! sets wrong PPU address
2006 2006 2005 2005 2007
-correct PPU address
2006 2006 2007 2005 2007 2005 2007
-correct PPU address
(lda 2002)
lda2002 2006 2006 2007
-correct PPU address
2006 lda2002 2006 2007
-!! never sets an address
2006 2006 lda2002 2007
-correct PPU address
(sta 2000)
*2000 of same nametable select
2000 2006 2006 2007
-correct PPU address
2006 2000 2006 2007
-correct PPU address
2006 2006 2000 2007
-correct PPU address
*2000 of different (wrong) nametable select
2000 2006 2006 2007
-correct PPU address
2006 2000 2006 2007
-!! WRONG PPU address (different nametable)
2006 2006 2000 2007
-correct PPU address
2006 2006 2007 2000 2007
-correct PPU address
(lda 2007)
lda2007 2006 2006 2007
-correct PPU address
2006 lda2007 2006 2007
-correct PPU address
2006 2006 lda2007 2007
-PPU address is 1 to the right
2006 2006 sta2007 lda2007 sta2007
-correct PPU address, 1 write, skip 1 spot, 1 write
(lda 2006)
(returns open bus, doesn't affect anything)
lda2006 2006 2006 2007
-correct PPU address
2006 lda2006 2006 2007
-correct PPU address
2006 2006 lda2006 2007
-correct PPU address
all are writes, except where noted
(basic)
2006 2006 2007
-correct PPU address
(sta 2005 x1)
2005 2006 2006 2007
-!! sets wrong PPU address
2006 2005 2006 2007
-!! never sets an address
2006 2006 2005 2007
-correct PPU address
(sta 2005 x2)
2005 2005 2006 2006 2007
-correct PPU address
2006 2005 2005 2006 2007
-!! sets wrong PPU address
2006 2006 2005 2005 2007
-correct PPU address
2006 2006 2007 2005 2007 2005 2007
-correct PPU address
(lda 2002)
lda2002 2006 2006 2007
-correct PPU address
2006 lda2002 2006 2007
-!! never sets an address
2006 2006 lda2002 2007
-correct PPU address
(sta 2000)
*2000 of same nametable select
2000 2006 2006 2007
-correct PPU address
2006 2000 2006 2007
-correct PPU address
2006 2006 2000 2007
-correct PPU address
*2000 of different (wrong) nametable select
2000 2006 2006 2007
-correct PPU address
2006 2000 2006 2007
-!! WRONG PPU address (different nametable)
2006 2006 2000 2007
-correct PPU address
2006 2006 2007 2000 2007
-correct PPU address
(lda 2007)
lda2007 2006 2006 2007
-correct PPU address
2006 lda2007 2006 2007
-correct PPU address
2006 2006 lda2007 2007
-PPU address is 1 to the right
2006 2006 sta2007 lda2007 sta2007
-correct PPU address, 1 write, skip 1 spot, 1 write
(lda 2006)
(returns open bus, doesn't affect anything)
lda2006 2006 2006 2007
-correct PPU address
2006 lda2006 2006 2007
-correct PPU address
2006 2006 lda2006 2007
-correct PPU address