I've been experimenting with rendering full screen bitmaps on the NES without complex mappers. The viewport is 224x240 pixels. This demo uses the BattleToads AOROM cartridge, but the only feature of the cartridge that I need is the CHR-RAM.
It pushes 368 bytes of data to the PPU every frame, in 8 byte chunks, which adds up to 46 changed tiles. That should be plenty to make a 4-way scrolling engine and update character tiles. To do scrolling on the Y axis, I have a variable-length delay routine based on DMC IRQs, but I've been manually figuring out the right combination of sample rates and busy waiting for each scanline. I need to find a formula and generate it instead. It will support PAL and NTSC systems, but for now it only works with NTSC.
Thanks to tepples, tokumaru, Bregalad, and many others of the nesdev community, for figuring out the concepts required to implement something like this. This
topic explores displaying a full-screen bitmap with CHR-RAM. This
topic explores using the DMC as a video timer.