1. There seems to be a "palette pointer." I read about it on a post on the message boards, but havn't been able to find any other information on it. What exactly is it? If you set the address (via $2006) to any palette number while the background is turned off it defaults to the palette number being pointed at right? Is that it?
2. In VBLANK, you can do anything you want to the PPU (write to any registers) without fear of anything going wrong. While rendering the PPU uses an "internal address" to display the write tiles in correspondance to the scrolling values, so you can't write to $2006 without disrupting the picture being drawn (as your messing up what tiles to draw and such).
So in VBLANK you can access any registers, and while rendering (non-HBLANK), you can only access $2000,$2001,$2002, and possibly $2005 (?). Accessing $2006 will mess up the internal address, and accessing $2007 will...? What would happen if you accessed $2007 (would whatever address the internal PPU address is would get accessed right, or if your reading you'll just read the internal buffer pipline thing possibly). I'm guessing $2003 isn't used (or is it used in some kind of pointer the PPU uses to access what sprite bytes it needs to evaluate, which I think is done in HBLANK). I know reading $2004 is uncertain of what happens so I guess writing it while rendering is uncertain too.
In HBLANK you get a little pardon I guess. You can touch $2000,$2001,$2002,$2005,$2006, and maybe $2007 (?). I'm wondering what the PPU does in HBLANK. I know it evaluates sprites (thus $2003/4 must be left alone unless the PPU doesn't use $2003 to address the sprites), but is that all (so you can use anything else).
3.
-$2000/1/2 can be accessed any time I believe.
-$2003/4 probably can only be accessed in VBLANK, but I have no idea. According to the wiki, the 1st 5-bits of $2003 select which bytes of SPR-RAM byte to get sprite 0 and 1's bytes from. This makes me believe that you could acces $2003 during rendering (or in HBLANK) since it's not being used by the PPU at all (except during fetches of Sprite 0 and 1). I'm not sure about accessing $2004 though (even though the PPU only accesses sprites during HBLANK I think).
-$2005 I'm guessing it can be used anytime as (according to CCs faq) it only gives "suggestions" to $2006 (???). When do $2005 writes take effect? The first write takes effect on screen immediatly? The 2nd write doesn't take effect at all because it's only used at the beginning of rendering and sets the address at where to start.
-$2006 can be accessed in VBLANK of course, in HBLANK because the PPU isn't using it (although you'll have to set it back to the write address at the end of HBLANK if you want the scrolling to be right). It can't be used during rendering since the PPU is already using it internally and changing it will change what it rendered.
-$2007 I read on the wiki that you MUST only access this register while in VBLANK or Screen Disabled. I don't get what would happen if you accessed this register, the PPU must use this also I suppose, but I'm wondering what (and why) *bad* things will happen.
I'm trying to understand the PPU a little better so if you could help me out, thanks
2. In VBLANK, you can do anything you want to the PPU (write to any registers) without fear of anything going wrong. While rendering the PPU uses an "internal address" to display the write tiles in correspondance to the scrolling values, so you can't write to $2006 without disrupting the picture being drawn (as your messing up what tiles to draw and such).
So in VBLANK you can access any registers, and while rendering (non-HBLANK), you can only access $2000,$2001,$2002, and possibly $2005 (?). Accessing $2006 will mess up the internal address, and accessing $2007 will...? What would happen if you accessed $2007 (would whatever address the internal PPU address is would get accessed right, or if your reading you'll just read the internal buffer pipline thing possibly). I'm guessing $2003 isn't used (or is it used in some kind of pointer the PPU uses to access what sprite bytes it needs to evaluate, which I think is done in HBLANK). I know reading $2004 is uncertain of what happens so I guess writing it while rendering is uncertain too.
In HBLANK you get a little pardon I guess. You can touch $2000,$2001,$2002,$2005,$2006, and maybe $2007 (?). I'm wondering what the PPU does in HBLANK. I know it evaluates sprites (thus $2003/4 must be left alone unless the PPU doesn't use $2003 to address the sprites), but is that all (so you can use anything else).
3.
-$2000/1/2 can be accessed any time I believe.
-$2003/4 probably can only be accessed in VBLANK, but I have no idea. According to the wiki, the 1st 5-bits of $2003 select which bytes of SPR-RAM byte to get sprite 0 and 1's bytes from. This makes me believe that you could acces $2003 during rendering (or in HBLANK) since it's not being used by the PPU at all (except during fetches of Sprite 0 and 1). I'm not sure about accessing $2004 though (even though the PPU only accesses sprites during HBLANK I think).
-$2005 I'm guessing it can be used anytime as (according to CCs faq) it only gives "suggestions" to $2006 (???). When do $2005 writes take effect? The first write takes effect on screen immediatly? The 2nd write doesn't take effect at all because it's only used at the beginning of rendering and sets the address at where to start.
-$2006 can be accessed in VBLANK of course, in HBLANK because the PPU isn't using it (although you'll have to set it back to the write address at the end of HBLANK if you want the scrolling to be right). It can't be used during rendering since the PPU is already using it internally and changing it will change what it rendered.
-$2007 I read on the wiki that you MUST only access this register while in VBLANK or Screen Disabled. I don't get what would happen if you accessed this register, the PPU must use this also I suppose, but I'm wondering what (and why) *bad* things will happen.
I'm trying to understand the PPU a little better so if you could help me out, thanks