The Zapper does work with modern TVs, at least it does on our Plasma TV - I can imagine it would work on an OLED TV, but I don’t have one to test it on :) (Volunteers welcome.) The zapper did not work with our LCD TV or any laptop screen I tried it with :(
To test the Zapper with a Plasma TV I wrote a Python script which flashes the screen white/black for a short period of time.
I connected the Zapper to a 5 volt supply to
GND (brown), with the
DETECT (blue) and
TRIGGER (purple) pins to the Oscilloscope.
I pointed the the Zapper, which was attached to the Oscilloscope, at the Plasma TV and ran the python script to flash the TV screen. The results can be seen below, the Zapper
DETECT pin goes high when the screen flashes white - there is, however, a delay between the signal being sent to the TV and the Zapper registering the flash. I tried the same on an LCD TV and on the LCD screen of my laptop, both with negative results - perhaps other TVs produce positive results…
The delay between the update signal being sent to the TV and the Zapper registering the flash can be measured by generating the video signal and timing how long it takes for the
DETECT pin to go high.
To perform that experiment I used an Arduino Uno to generate the video signal and to time how long the Zapper took to respond. The delay is longer than one frame due to the pre-processing the TV has to do before displaying a frame (up-scaling, de-interlacing, whatever other “clever” enhancements) - the TV has to, at least receive the whole frame before displaying it, and if the video signal is interlaced then the TV has to wait for both fields. Two frames of white had to be displayed before the TV displayed a white frame, if a single frame of white was sent to the TV it was not displayed.
The delay, which was about 3 frames at 50Hz for this particular TV, means that Zapper games on the original NES will not work with a modern TV despite the Zapper registering the white target sprites on the TV. However, I do think it would be possible to modify a NES game such as Duck Hunt to work on a plasma TV by taking the delay in to account and displaying the target sprite for 3 or 4 frames instead of just a single frame.
The delay could either be explained by the interlaced video signal or the processing delay in the TV. As the Arduino tvout library produces a progressive video signal the delay is caused by the TV processing the frame.
The Arduino sketch to test the Zapper with a display is available on GitHub beardypig/zapper-experiments. I would be interested to hear from other people testing the Zapper with their own TVs/monitors.
Using that same circuitry I created an Arduino sketch that can be used to read the state of Zapper via the serial port.