Those attribute tables suck.
I'm designing a platform engine that scrolls the screen to the sides as well as up and down. I'm using vertical mirroring, wich should (or so I thought!) present no problems in updating the attributes when scrolling sideways, as I'd have a huge off-screen buffer. However, the PPU has no "increment 8" mode as it has an "increment 32" one. Does that mean I really have to write the address to $2006 8 times if I want to update an attribute column? Oh, well...
A different problem shows up when updating rows of attributes. Since I'm using vertical mirroring, if I mess with the attributes at the bottom of the page I may be messing with blocks that are at the top, depending on the scrolling. So, I have to keep a copy of the attributes in RAM, update only the bits I need and them write the row to the PPU.
This all seems very inneficient... Isn't there a trick or something to handle attributes more efficiently?
I'll just think about it a little longer... this thing is really getting in the way of my engine...
EDIT: Hum... thinking better about the second problem, I guess most games don't have it because they have a status bar at the top or at the bottom, giving the programmer a buffer. I don't plan to have a status bar (wich would be difficult anyway, since the game can scroll anywhere it would be impossible to keep an area reserved for a status bar - unless using MMC5 and it's advanced mirroring control), so should I just shut the rendering off 16 pixels earlier to avoid any color glitches?
I'm designing a platform engine that scrolls the screen to the sides as well as up and down. I'm using vertical mirroring, wich should (or so I thought!) present no problems in updating the attributes when scrolling sideways, as I'd have a huge off-screen buffer. However, the PPU has no "increment 8" mode as it has an "increment 32" one. Does that mean I really have to write the address to $2006 8 times if I want to update an attribute column? Oh, well...
A different problem shows up when updating rows of attributes. Since I'm using vertical mirroring, if I mess with the attributes at the bottom of the page I may be messing with blocks that are at the top, depending on the scrolling. So, I have to keep a copy of the attributes in RAM, update only the bits I need and them write the row to the PPU.
This all seems very inneficient... Isn't there a trick or something to handle attributes more efficiently?
I'll just think about it a little longer... this thing is really getting in the way of my engine...
EDIT: Hum... thinking better about the second problem, I guess most games don't have it because they have a status bar at the top or at the bottom, giving the programmer a buffer. I don't plan to have a status bar (wich would be difficult anyway, since the game can scroll anywhere it would be impossible to keep an area reserved for a status bar - unless using MMC5 and it's advanced mirroring control), so should I just shut the rendering off 16 pixels earlier to avoid any color glitches?