When using frameskip 1 and vsync the frames should
be aligned to every second monitor update.
This way constant time will elapse between frame
updates and will result in very-very smooth update even
with framedrop (like in the Xbox port of VBA).
For example at 60 Hz monitor update frameskip 1 will
result in constant 30 Hz and frameskip 2 will result in
constant 20 Hz.
30 and 20 are divisibles of 60 so synchronizing to
0,2,4,6... vertical retraces when frameskip is 1 and
0,3,6,9... vertical retraces when frameskip is 2 will mean
discrete update periods.
Currently using frameskip results immediately in terrible
tearing because the frames do not seem to apear at
discrete periods.
Example with frameskip 1 and 60 Hz monitor update:
problem:
0,1,2,3,4,5,6,7 (monitor update)
0,0,2,2,2,4,6,6 (vba frame update)
Frame 2 is displayed longer and frame 4 just half as
long as it should be.
solution:
0,1,2,3,4,5,6,7 (monitor update)
0,0,2,2,4,4,6,6 (vba frame update)
All frames are displayed for the same time period.
Hope this will help. ;)