Our almost-4yo went to sleep on the way home at 16h30 today, and so as a result is now up at 02h00. While I'd rather be sleeping, being up with him for a while gives me the chance to try the latest change that I left synthesising when I went to bed. That change was to make the VIC-II sprites honour the border.
My favourite way to test sprites at the moment is to run Lemmings. This confirmed that the sprites were now honouring the border. I also finally remembered the controls for Lemmings to start a game, and was pleasantly surprised to find that the game works, with little lemmings walking around the place as they should. The game is raster interrupt driven, so the speed was more or less correct as well, as you can see from the following screen shot:
I also learned two extra things:
1. Lemmings apparently uses sprites for the main display.
2. I have a bug where the bottom row of each sprite appears first.
I was also unable to see the cross-hairs, which I assume must be done with characters or bitmap data.
A quick check in VICE confirmed that this is indeed how the cross-hairs are drawn. So now I need to find out what is going wrong with this on the C65GS. I do at least now know that it is in characters $FC and $FD, and the screen is at $4000 for half the frames.
A quick bit of poking around has revealed the problem: I haven't implemented sprite background priority yet, so the sprites are hiding the cross hairs.
In theory, I should be able to use the joystick to move the cross-hairs to a blank section so that I can see it, however, for some reason joystick control isn't working. Maybe I have messed up the joystick CIA input in some way. I'll have to investigate this further, along with the sprite display problem.