Wobble / Flicker on the Vectrex!
Newest scientific experiements show:
The Vectrex creators were no shielding experts!
Actually that is no news, and everybody that listened to a Vectrex already knew that.
… of the vectrex proved that already.
The built in sound amplifier was placed on the power board and not shielded, which
resulted in electrical interferences – that could be well heard.
But actually it cannot be only the transformer that is interfering – since the buzz changes with
the amount of vectors that are displayed.
Anyway… Sound is not what I was going to talk about.
As I have made clear many, MANY times I like my vectrex games running at 50Hz.
Which I thought would be needed to make the vectrex display stable.
That is not true, per se.
Actually come to think if it…
I doubt that many eyes can make out the difference if a game is running in 50Hz or in 48Hz.
As it turns out – concerning the Vectrex you CAN clearly see a difference whether it runs in 50Hz or 49Hz. But the reason is not that the display FLICKERS more due to to slow refresh rates. It wobbles due to power grid interferences!
For easier demonstration purpose I will not show images of a real vectrex, but images from Vide – which by now can emulate this feature. On the bottom I’ll provide links with “real” vectrex showcases.
Note: Most of the theory and input on this came from Peer Johannsen.
This is a summary of the findings. You can find more on this subject in the Proboard forum (link provided further down in the article)
The mentioned scientific experiements (running programs on a Vectrex) seem to support the theory, that the Vectrex image is influenced by the frequency of the power grid.
(Germany: ) If we plug in our electrical devices in the power outlet on the wall we get ~230Volt AC at 50Hz. AC means alternating current, which means the voltage changes in form of a sinus wave – fifty times a second a complete sinus curve.
The vector position on a vectrex is changed very slightly with the sinus wave of the power grid frequency.
The effect is with “well programmed” vectrex program in Europe not visible!
(Well programmed -> refresh in 50Hz)
Because the BIOS refresh frequency that the original developers chose was also exactly 50Hz.
This means although, all vectors are influenced by the power grid – the (European) user does not notice it, because every vectrex round the influence of the power grid is exactly the same and the image is thus STABLE again.
The effect of the interference is “funnily” most visible, when the 50Hz is barely missed.
If you miss the 50Hz by 1Hz, meaning the vectors are displayed only slightly longer or slightly faster – the effect is MOST visible. Because “virtually” you can see the vectors following (both in x and y coordinate) the sinus wave function. Missing/or being faster by 1Hz is about 600 cycles (612 cycles) in Vectrex terminology. This means, the vectors on the screen “move along the sinus” curve – with one full sinus wave taking exactly 1 second.
The image shows the result (slightly exaggerate in emulation, but a real vectrex also shows this!).
Running the same program at 60Hz (still in Germany) does the same movement but 10 times per second – barely visible to the eye as a sinus movement, this is more like a “jitter”.
(again exaggerated by emulation)
Theoretically a 60Hz image should be much more stable – but the interfering power grid destabilizes the image!
60Hz power grid!
I always wondered, why other people were not disturbed by those “wobbles” when the refresh rate of the Vectrex was slightly above 50Hz. The reason is easy, people with a 60Hz power grid can not see a difference! They NEVER! have a jitter free display. And for you guys it does not really make a difference if the jitter is 1/10th of a second or 1/9th of a second – it is just some other kind of jitter.
For Americans (and all other 60Hz power grid users) to really get a CLEAN display – the Vectrex programs must display in 60Hz – meaning each display round should be done in 25000 Vectrex cycles!
Try it! Write a program and set the WaitRecal() refresh rate to 60Hz:
1500000 / 60 = 25000 cycles
25000 in hex -> $61A8
respecting VIA little endian -> $A861
LDD #$A861 ; load D with little endian 25000 STD Vec_Rfrsh ; store to vectrex refresh rate time
… and not only will you display in 60Hz (as long as your program does not add up to more than 25000 cycles), but your display will be JITTER-FREE!
(BTW. PiTrex owners should set their display to 60Hz – since the program speed and display speed are disjunct – you can do that, and the display will be much better!)
Following examples are again exaggerated by emulation, but the real world is very similar!
50Hz Vectrex program running in a 60Hz power grid environment:
60Hz Vectrex program running in a 60Hz power grid environment:
61Hz Vectrex program running in a 60Hz power grid environment:
Experiments to reinforce this theory
There are two tests for the above theory, that come to mind:
a) the ones I provided above
Run a stable image at exactly the same “cycle offset” (from the WaitRecal) per round at different refresh rates. This results in a stable image as long as the Vectrex- refresh frequency matches the power grid frequency.
Otherwise there is a wobble (small differences) or a jitter (larger differences)
b) the opposite experiement can also be made
Meaning: display a stable image at different cycle offsets (from the WaitRecal) per round, and keeping the same Vectrex refresh frequency as the power grid frequency.
(Peer did these also – and these experiments also show the expected wobble/jitter)
The “complete” discussion about this can be found at the proboard forum: https://vectorgaming.proboards.com
If there is time – Peer and I would like to do further experiments on this subject. One thing we intend to look deeper into is – whether it is possible to add some shielding to existing vectrex units to suppress the wobble. If that can be done – than maybe in the future there will not only be offerings to DeBuzz kits, but also “DeWobble” or “DeJitter” kits.
If anyone else is intrigued by the subject, does his/her own experiments or just want to small talk about this – pls contact us – or inform us about your findings!
Links to “real” vectrex displays
Frequency test Europe 50Hz power grid: WobbleTest_50Hz
Frequency test US 60Hz power grid: WobbleTest_60Hz (Thanks Brandon!)
(Note: a simple “Sinus” wave as shown in emulation is probably not 100% correct, probably there are other trigonometric functions interfering, possibly some function like:
sin(x * pi/15000) * cos(c * x * pi/15000)
0 <= x <= 30000 cycle of refresh frequency, c some constant like c = 0.02
Thus the display of the real Vectrex are not 100% identical to emulation)
My own test program (source and binary) can be found at: Directory: test program
@Peer: the latest Vide.jar (with the above “extended wobble function”) can be found at: Vide_wobble3.jar