I am a bit delayed with the other version because of real life intrusion so I will tell you how I did the scroll.
The scroll area is 28 bytes x 128 lines = 3584 bytes, in a ram bank we have 16384 bytes so we can fit a map of roughly 4 screens * 3584 bytes = 14336, the map can have three configurations:
- 1234
-
12
34 (as in the demo)
-
1
2
3
4
As you can see we can still make the scrolling area a lbit bigger as we have 2048 bytes free in a bank, which gives 512 bytes to use to increase the scroll area to 146 lines but then I can't guarantee if the copying routine will be able to handle it in one frame as I haven't tested it.
Then I pre-shift the bank three times into 3 other banks, so the total is 4 * 16k = 64k. Why four times? because we have 4 pixels in a byte as I am using a non standard screen mode, the 160x200x4, at the moment this only works on MESS and the real machine
Then I use a double buffer and with the stack I copy from each ram bank to the hidden screen as the scroll offset requires.
My other version will use the mode 160x200x16 two layers where I will use the technique above for the scrolling background (4 colours) and then I will use the other layer for sprites I can use 4 other colours if the sprites don't overlap the background or the same 4 colours of the background if they do overlap the background. The game will be at 25hz as I need the second frame to draw sprites but it won't be too costly as I don't need to restore the background I just need to delete the sprites which is a bit faster.
Another thing that we can do is to pre-shift the screen into 7 banks, and we can scroll the screen per byte in hires 2 colours at 50hz. This would be cool to show a picture, if I have time I will try to do this demo too.
PS: I have also studied another option to do scroll where it can scroll huge maps but at a fixed speed of 1 pixel per byte and no more whereas the method above allows for several speeds and perhaps we can find a way to increase the size of the maps?!