Tutorial series for simulating NES Graphics (2018)
nesrocks.com
nesrocks.com
[1] https://news.ycombinator.com/item?id=20959831
[2] https://sites.google.com/site/psigamp3/PhosphorSimTest1.jpg
https://wiki.nesdev.com/w/index.php/MMC
The animated backgrounds are accomplished by the mapper bank switching the character (tile) memory. The parallax scrolling is accomplished by the mapper counting scanlines and generating an interrupt when the correct scanline is reached, so the CPU can change the PPU scroll registers mid-frame with the correct timing. Later mappers like the the MMC5 could precisely time mid-frame bank changes to support more than 256 tiles on screen at once, and to support 8x8 attribute blocks instead of 16x16.
The ultimate mapper feeds arbitrary data to the PPU to simulate having a bitmapped display with 8x1 attribute blocks (the PPU only reads attribute memory once every 8 pixels, so that's a hard limit). Tom Murphy implemented this with a Raspberry Pi (which isn't ideally suited to the task, so there are timing imperfections causing graphical glitches, but theoretically it could be done without them):
There is another game studio that I've been following which does a good job with this tutorial technique as well (Couch Game Crafters). One great example of their work demonstrates creating a shader for animating the visual effect of a toaster moving through a cartoonish pipe [1]
[1] https://twitter.com/CouchGameCraft/status/100797028441722470...