The revised Reposition Player 0 routines take 4 scanlines. The routines in the prior version took 6 (5 to reposition, plus 1 to get back into sync with the main kernel loop).
This screenshot shows reposition routines P0EarlyHM25, P0EarlyHM30, P0EarlyHM35, ..., P0EarlyHM70 being triggered (the red robots). They also show NUSIZ0 being updated (the red missile).
Unlike player 1, the player 0 routines do not have any late updates. There's also quite a bit of SLEEP going on in the P0EarlyHMxx routines. It might be possible to shrink down to just 3 scanlines, but by using 4 scanlines I was able to set up the datastream usage to be exactly the same as for player 1, which will make the sprite C routines easier to implement.
I also added a constant to the source that controls the values in the datastreams. TEST_PLAYER = 0 will test player 0 reposition routines (that's the screenshot above and the ROM at the bottom).
TEST_PLAYER = 1 will test player 1 reposition routines.
TEST_PLAYER = 2 (or any value other than 0 and 1) will not reposition the players.