FrankenGraphics wrote:
As the title says, and generally speaking - is this viable, or a no-go?
I know it'd be slow and squeezed as you'd need to go through the PPU to get it, but anyway.
The automatic PPUADDR increase is at least something, and the PPUDATA register is read/write.
Are there any precedents to study?
I don't think it was ever used, because it's extremely inconvenient to have RAM data only available during VBlank or forced VBlank. For most of game variable or arrays this is unacceptable. However if for some reason you need data that does not need access during a level but only between levels, then yes, it's a perfectly viable alternative to get an extra 1k of RAM.
You didn't mention CHR-RAM, but rainwarrior did, and if you don't use all the tiles, it's just as well a way to get extra RAM-which is only accessible during VBlank or forced VBlank.
You could do a buffer system where VRAM updates are used to write to or read that RAM portion, but honestly, that sounds terribly annoying to work with, and I don't see any situation where you need some extra RAM but the data can wait a frame or two before its retrieved. I might just be lacking imagination, though.
If you have a mapper capable of single-screen mirroring, such as mapper #1 or #7 you can even use the second-nametable-as-RAM and have scrolling in one or both axis.
Even if you are using both nametables and scrolling, technically a small part of the attribute table (upper nybble of the last 8 bytes) is unused (unless negative Y scrolling is used), so you could use it as an extra RAM. Because only the upper nybbles are free it doesn't sound practical, as you'd have to wait until VBlank to retrieve the data
and do some and/or/bitshift operations in order to do so. Since this is a great total of 16x4 bits, equivalent of 8 bytes of data, I fail to see any situation where this much extra RAM makes any difference, but who knowns.