Haha, y'all are funny
Bill, I love this idea! Let me get it straight and see if I'm seeing it correctly:
You have 32 different banks of 4K RAM. To choose what bank, you write to $EEA8 to $EEAB. For data within that 4K bank you write to $C000 to $CFFF. Each byte is broken down into 2 nibbles which is the color data for 2 pixels, sorted by using some glue logic and those flip-flops. Correct?
Your horizontal size is only 512 out of the 640. Are you planning on panning it a bit to center it? If so, would you be using the preset feature on the '161, or some other method? If it's already in the schematic then I guess I overlooked it.
Doing the math, would each RAM bank be 16 lines essentially? 4096 bytes in each bank / 512 bytes per line * 2 pixels per byte = 16 lines.
Sprites would be super awesome! There is so much that goes into that, lots of math. At the same time, I want to say that one reason sprites were used back in the day was because of limited RAM. Just like text based systems, if you only have to store smaller images in RAM, and then just recall those on the fly, you would not be using as much memory. Of course, it is also good for changing positions and frames of the sprite, if the hardware is set up for that.
One thing to think about, however unconventional it may be, is layering. I don't know it's specific name, something similar to "frame buffer" (can't remember), but in a way it's like sprites, but bigger. In many 2D games that want to show something that looks real, even in NES Mario games, you have the foreground, the character/enemy layer, and the background, and various other layers in between. I've both used and created my own game engines, and for 2D games this is very important. Also important, a way to turn transparency on or off, though you can often do this with just 0/0/0 black (if you have enough colors to go around and can create a "black" without it actually be full 0/0/0 black). Not sure if you are wanting to go that far or not. I certainly cannot! Just some input from a video game programmer
I really like the idea of using the high/low clock to read and write data to the RAM. That allows you to write to the video RAM at any time without interrupt or checks or shift registers. Very cool. I also like the idea of banking the RAM as you did. Since my boards are being printed, and I can no longer change anything (that's a good thing!), I've already been thinking of the next VGA project using a similar design to what you have here.
Looks great Bill, good job! Thanks for inspiring me!
Chad