The scrolling on the lower ice sheet is now almost completely implemented.
In this screenshot, the current rock has scrolled all the way to the end of the sheet and the screen has scrolled appropriately. The rocks along the top of the ice are there for reference. This was both easier and harder to pull off than I anticipated. I hadn't done anything with ANTIC scrolling in Ratcatcher, so I didn't even bother researching it at the time. Once I got the idea straight in my head, it wasn't that hard to do. My first attempt involving updating all 70 video pointers on the lower playfield during every coarse scroll. This worked fine in the emulator, but was causing some visual glitches on real hardware. I thought the culprit was that I was trying to do too much in a single frame, so I broke the pointer updates into chunks and performed one chunk during every fine scroll frame. This necessitated creating a parallel display list that would receive these updates and then get "page flipped" into DLIST on the coarse scroll frames. This worked great, but didn't solve the problem! It turned out that I actually had an interrupt timing issue that only manifested itself on coarse scroll frames. I don't understand why this is, but I solved that issue and decided to keep my dual-display list scheme anyway. I like having the scrolling work spread out across 16 frames just to give me a more consistent processing load. At this point I had playfield scrolling, but the rings and lines are generated from the player/missile objects. I then had to get those scrolling. The first problem with this is that I plan to have a little curling dude/dudette throwing the rock at some point. The rings aren't visible when the curling person is, so at some point during the scroll I have to switch the lower player/missile graphics to the rings. I got this working, but then I had to fix the colors. I wanted to come up with a color interrupt scheme that could be applied to both the curling person and the rings. I finally came up with one, but ran right back into the interrupt timing problem I had before. The issue here is that interrupts on the lower sheet have less time to work because of the additional processing ANTIC has to perform when the scroll bits are set. After a lot of tweaking and optimizations, I finally got everything working on real hardware. I'm not 100% sure that my solution will work once the curling person is in place, but I'll just have to deal with that problem when it arises. The next step is to start applying friction to the rock so that it will eventually stop moving.