I'm no C64 programmer so forgive me if I'm getting any of the details wrong.
I was recommended the video above, which is a modern game made for the REU (RAM Expansion Unit). I asked in a retro gaming forum what a game like that might need all the RAM for (assuming level data is stored on a ROM cartridge and can be retrieved quickly.) One suggestion was that it contains "pre-shifted" copies of graphics. This in turn got me thinking about background scrolling on the C64.
Reading up on the topic, it appears the only scrolling supported natively by the VIC, is a 0-7 pixel offset in X and Y. (Lower bits of $D011/$D016) If you want courser scrolling, you'll have to implement it in software by shuffling a whole row/column 1 byte in the appropriate direction, when you hit the end of the available range of the smooth scrolling. It seems like this is not necessarily a huge problem because you can also move the source in RAM for the BG layer using $D018. Effectively you can double (or more) buffer the changes so you don't have to apply the changes within a single frame.
But it makes me wonder, was there ever any hardware that sought to accelerate hardware scrolling? Such hardware would need a couple of things:
- Enough memory to hold as much video matrix data as you wish to design for.
- Some logic that translates requests coming from the VIC