WAIT waits extacly the given amount of frames, while VSYNC has more to it.
It waits for blank frames.
Let's say that this code takes a half a frame (1/120th of a second)
WHILE 1
DO_SOMETHING '<-- in this example, that takes a half a frame.
WAIT 1
WEND
The code would run at 45FPS.
However, replace WAIT with VSYNC, and since a vertical frame swap is near, we just wait 'till that happens.
My understanding is wait literally pauses the program and nothing is proceed. But with vsynic button inputs are received but not acted upon because the screen needs to catch up.
WAIT will always wait the amount of time specified, while VSYNC waits for the amount of frames specified. (I think) Basically, if your program takes most of a frame for each loop to be processed, VSYNC 1 will only wait the remaining amount of time for that frame before continuing. This ensures a completely stable game speed, unless your program takes *longer* than one frame to process per loop.