When the background scrolls at certain speeds, flicker and/or color anomalies appear, or become more apparent.
This is exactly what happens on NTSC. If you've ever played the NES on an NTSC television, it's much more apparent there. I'll try to explain. Each pixel of some color can appear three different ways, depending on two factors: its horizontal position on screen, and the current colorburst phase for the line. The result is the following combination of different appearances based on location:
Code: Select all
1 0 2 1 0 2 1 0 2 1 0 2 ...
2 1 0 2 1 0 2 1 0 2 1 0 ...
0 2 1 0 2 1 0 2 1 0 2 1 ...
The colorburst phase toggles each frame, so you might get the above pattern on even frames, and the following pattern on odd frames:
Code: Select all
2 1 0 2 1 0 2 1 0 2 1 0 ...
0 2 1 0 2 1 0 2 1 0 2 1 ...
1 0 2 1 0 2 1 0 2 1 0 2 ...
When a bunch of pixels of the same color are together, the phases average out and you see a solid color without any irregularities. A single pixel of a color on black will show the differences much better. Below are some example pixels on the left and what the appear as on the right on even and odd frames (through my NTSC filter). They are expanded 300% to make them more visible.
If the screen isn't scrolling, you can see that each pixel will flicker between two of the three possible appearances (i.e. 0 and 1, 1 and 2, or 2 and 0). If the screen is scrolling at one pixel per frame, pixels will take on phases 2, 2, 1, 1, 0, 0, 2, 2, 1, 1, 0, 0, etc. This will be clearly visible as a shimmer. Some games scroll a fractional number of pixels per frame, which results in a more complex pattern. For example, 1.5 pixels per frame works out to actual movements in the 1, 2, 1, 2, 1, 2 pattern (averaging 1.5 pixels), and pixels at this scroll rate could appear in an alternating pattern or stay the same phase all the time; if they stay the same phase, you'll see the color artifacts much more clearly, as when you stop the emulator.
This also helps explain why it's important for the monitor's refresh and emulator's frame rate to be the same. Once a GUI is added to adjust the NTSC filter paramters, you'll be able to turn on field merging, which is like mixing the two phase arrangement diagrams above together, eliminating most of this flickering (but also eliminating the shimmer effect when you scroll, making it less-authentic). The result is that pixels appear every frame as a mix of the two possible phases for that position:
Code: Select all
1+2 0+1 2+0 1+2 0+1 2+0 1+2 0+1 2+0 ...
2+0 1+2 0+1 2+0 1+2 0+1 2+0 1+2 0+1 ...
0+1 2+0 1+2 0+1 2+0 1+2 0+1 2+0 1+2 ...