I'd just add this is the only way to have 8x16 sprites cleanly getting in and off the screen on the top border. Since sprite's coordinate can't be signed (anything from $f0 to $ff is considered a disabled sprite), it is impossible to have a sprite partially in the screen, and having the sprites "pop-up" can be noticeable, especially with 8x16 sprites. This can be even more annoying than attribute clashes.I found a different solution: to completely hide scrolling glitches, I needed to blank 16 scanlines. Due to the difficulty of dividing that amount between the top and the bottom of the screen, I decided to hide them all at the top (looks pretty good on my TV, at least).
So in order to have 100% clean scrolling for both BG and sprites it is required to :
- Enable the left border clipping
- Find some way to disable graphics on the top 16 pixels by one of the ways mentioned in this thread (or top 8 if 8x8 sprites are used)
And this no matter what mirroring is used.