MiSTer FPGA · Volume 4
Original Guns on a CRT — SNAC, the GunCon 2 and the Sync Lead
How a MiSTer drives a real cathode-ray tube with the console's own timing, which original light guns plug straight into which cores, how the USB GunCon 2 and an adapted GunCon 1 work, the video settings that break them, and what the CRT route is good for in this project

This volume is Route A from Volume 1: an original CRT light gun, seeing a real tube, with the timing produced by a MiSTer core. It is the one modern way to play a cartridge-era gun game with its original gun and nothing faked except the console. How the original guns sense the beam belongs to CRT Timing; how to buy, test and repair them to Modding Classic Light Guns, whose Volume 5, section 5.7 points here.
4.1 What the CRT route needs
Four things, every one of them required:
- A CRT that draws the picture directly, without digital processing in the set (CRT Timing, Volume 7, section 7.2 lists the qualifications: direct drive, no 100 Hz processing, no line doubler).
- The core’s own analogue video, at 15 kHz, with no frame buffer between the core and the tube (4.2).
- A connection for the gun: a SNAC adapter for a gun that plugs into a console port (4.3, 4.4), or USB plus a sync lead for a GunCon 2 (4.5).
- The core whose console used that gun. A SNAC adapter carries only what the console’s port carried. As one forum member put it, “SNAC handles only whatever the real system would handle” (skooter, misterfpga.org, 22 May 2024): a Zapper works in the NES core and nowhere else.
4.2 The picture: analogue output with the core’s own timing
MiSTer has two ways to send the core’s own timing to a CRT, both configured in MiSTer.ini (read 24 October 2026):
- The I/O board’s analogue (VGA-style) output. The
.inifile’s shipped value iscomposite_sync=1, “composite sync on HSync signal of VGA output”, which is what most RGB SCART and professional monitors want.vga_modeselects RGB, YPbPr, S-Video or composite. - HDMI through a converter, with
direct_video=1: “enable core video timing over HDMI, use only with VGA converters” (2is an automatic mode for converters that report 1024×768).
Two settings must stay off for a CRT light gun:
forced_scandoubler=0. The scandoubler turns 15 kHz into 31 kHz for VGA monitors, drawing each line twice from a line buffer. An original gun’s photodiode would then see each line twice and later than the core’s counters expect. That breaks the gun, by inference from how the guns work; it was not tested.vga_scaler=0. With1, the analogue output carries the scaler’s picture, which is buffered.
MiSTer’s wiki is unequivocal about the analogue output’s timing: “The analog output is driven as the original system would have, with no buffering”, and so it “cannot have any form of lag” (Lag Explained). For a CRT gun that is the whole requirement, because the light the gun sees and the counter the core latches come from the same clock, which is the property CRT Timing, Volume 7 says a modern source must have.
4.3 SNAC: the original gun on the console’s own pins

A SNAC adapter is a passive (or nearly passive) lead from a console’s controller socket to the I/O board’s user port, a connector shaped like a USB 3.0 socket that is not USB: each core reads and drives its seven lines directly as USER_IN[0..6] and USER_OUT[0..6]. Since the lines go straight to FPGA pins, the socket is not a USB bus and a USB device must never be plugged into it. Adapters are made per console; which I/O board revisions carry the user port was not checked against MiSTer’s own documentation for this dive.
Because the core treats the user-port lines as its controller-port pins, an original gun on SNAC is exactly as it was on the console: the gun’s photodiode sees the tube, the gun pulls the console’s light line, and the game turns that into a position from the core’s video counters. Main and its F10 calibration play no part (the game’s own calibration screen, where it has one, does).
4.4 Gun by gun through SNAC

From each core’s source (all read 24 October 2026):
- NES Zapper. The NES core’s SNAC item has a dedicated “Zapper” choice, alongside “Controllers” and “3D Glasses”. The source comments that it will “Extend SNAC zapper high signal to be closer to original NES”: the core stretches the gun’s light pulse, because the user-port path does not reproduce the console’s own input timing exactly.
- SNES Super Scope and Justifier. “SNAC: Yes”. The core passes the port’s pin 6 (IOBit) in both directions, and the gun pulling it low latches the PPU’s counters, so both guns should work through the same path. The Super Scope’s receiver plugs into the second port.
- Master System Light Phaser. “USERIO: SNAC”. The core’s SNAC path assigns the port’s TH line to the sensor input (
joyser_th <= USER_IN[4];//sensor). - Genesis, Mega Drive, Mega-CD: Menacer and Justifier. Each core’s SNAC passes TH (
SERJOYSTICK_IN[6] <= USER_IN[4]; // THin the Genesis core). The Menacer’s receiver and the Justifier both plug into a pad port. - Saturn Virtua Gun / Stunner. “Pad 1 SNAC: ON” passes TH to the core’s SMPC port register. Nothing found documents a real Saturn gun tested this way.
- PlayStation GunCon 1. “Pad1: SNAC-port1” (or port 2). The GunCon measures the beam itself from a video feed and reports numbers over the pad’s serial bus, so it needs sync: “The original GunCon requires composite sync from the PlayStation/core to work” (AngelicLiver, misterfpga.org, 21 May 2024). The core provides it: when a GunCon is used on SNAC, it outputs composite sync on the SNAC’s interrupt line, with the comment “quirk for guncon, irq is N/C in guncon. so using irq line and outputting csync on snac for g-con”. Two forum members confirmed on 21 May 2024 that it works: “tested this and it is working with the PSX core” (thorr) and “GunCon 1 works with the PS1 core through SNAC” (skooter). Whether a given SNAC adapter routes that line to the gun’s video plug was not checked; the adapter has to be made for it. The Namco System 11 arcade core takes a GunCon 1 the same way (Volume 3).
- Atari 7800 XG-1. “Port Input: SNAC”, with “Sega Phaser Mode” swapping the trigger and light lines (Volume 2, section 2.9).

4.5 The GunCon 2 over USB
The GunCon 2 is the odd one: a CRT gun that talks USB. It measures the beam from a video feed, like the GunCon 1, but reports a position as a USB device (0B9A:016A; Modding Classic Light Guns, Volume 2, section 2.3 has how to test one by asking it). So on MiSTer it goes through Main, and from Main into any core with a virtual gun, not just the PlayStation core. It is the only way to use an original CRT gun in the NES, SNES or Sega cores without that console’s own gun.
Nolan Nicholson’s GunCon2-MiSTer project did the work and was merged into Main between January and May 2022 (commits recognising the GunCon 2, adding calibration save and load, and the off-screen grace period). Its README now says “The official distributions of MiSTer’s linux kernel (zImage_dtb) and main executable (MiSTer) now include special handling”, so no custom files are needed. Set-up, from the README:
- Keep Main and the kernel current with the downloader.
- Plug the GunCon 2 into a data-capable USB port, “not the POWER ONLY one”.
- Feed its video lead: “The yellow RCA connector needs to be connected to a composite sync signal.” Alternatives: “If you are using component video, you can tap into the Luma (green) cable”, or with RGB and sync-on-green, “the green line should also work.”
- Calibrate per core: load the core and the 240p Test Suite’s white screen, open the OSD, press F10, aim at each edge and press A, not the trigger. “BE CAREFUL not to calibrate the min and max of the same axis to the same value.”
Main recognises it with QUIRK_LIGHTGUN_CRT and a default calibration of 25 to 245 vertically and 145 to 700 horizontally. The quirk adds one behaviour no other gun gets: when the gun’s X leaves the calibrated range, Main keeps reporting the last on-screen position for 50 ms before passing the off-screen value. The comment in input.cpp gives the trade-off exactly: “Grace period of 50 ms. Longer times here make guns a bit more reliable on dark screens, but introduce lag to any mechanics where you want to shoot offscreen (e.g., to reload.)” X is used because “The GunCon 1 and 2 both report out-of-screen x values more reliably than Y values”.
The README rates each core: NES Zapper “Good”; Master System Light Phaser “Okay”, “Darker games have trouble”; SNES Super Scope and Justifier “Good”; Genesis Menacer and Justifier “Okay”; PlayStation “Good overall”, with some issues on dark areas; and Saturn “No lightgun support yet”. The Saturn line predates the Saturn core’s virtual gun (February 2025) and was not found re-tested.
The GunCon 2 is also the project’s proposed fallback shell (decision row MC-1), but that gun is rebuilt with a Pico and OpenFIRE inside and becomes a Route B gun; its original CRT electronics are removed (Modding Classic Light Guns, Volume 3).
4.6 The GunCon 1 through a USB adapter
A GunCon 1 can also be converted to USB and used like a GunCon 2, in any core. Main recognises three converters by name: an Arduino-based adapter or a RetroZord reporting the name “RZordPsGun”, and a Reflex Adapt reporting “ReflexPSGun”. All get QUIRK_LIGHTGUN and a 0 to 32767 default calibration. “Reflex Adapt turns GunCon into a USB lightgun” (skooter, misterfpga.org, 22 May 2024). The gun still needs its sync feed and a CRT. GUN2CRT, an adapter by the GUN4IR maker for the same purpose, is described in Modding Classic Light Guns, Volume 5; Main has no entry for it by name, so how it presents itself decides whether it is treated as a gun.
4.7 Getting a reliable shot
What the sources agree on, and what follows from how the guns work:
- Brightness wins. Every CRT gun needs to see light. The GunCon 2 README flags darker games on the Master System and dark areas on the PlayStation, and Main’s 50 ms grace period exists for “dark screens”. Raise the set’s brightness and contrast for gun games, and prefer the core’s palettes and modes that keep targets bright.
- Calibrate on a white screen. The 240p Test Suite’s full white pattern gives the GunCon 2 a clean edge to aim at.
- No scaler, no scandoubler, no processing in the set (4.2, and CRT Timing, Volume 6).
- Use the matching core. An original gun through SNAC works only in its own console’s core (4.1).
- Reload off-screen quickly, but not too quickly. With a GunCon 2, an off-screen shot is reported only after 50 ms, so a reload pulled the instant the gun leaves the screen may land as an on-screen shot at the last position.
4.8 Which original gun, which core
Table 1 — 4.8 Which original gun, which core
| Original gun | Connection | Cores | Display | Calibration |
|---|---|---|---|---|
| NES Zapper | SNAC (“Zapper”) | NES | CRT | None (game) |
| Super Scope, SNES Justifier | SNAC | SNES | CRT | None (game) |
| Light Phaser | SNAC | Master System; Atari 7800 in Sega Phaser Mode (inferred) | CRT | None (game) |
| Menacer, Genesis Justifier | SNAC | Genesis, Mega Drive, Mega-CD | CRT | None (game) |
| Virtua Gun / Stunner | SNAC (not documented with a gun) | Saturn | CRT | None (game) |
| GunCon 1 | SNAC plus sync from the core | PlayStation; System 11 arcade | CRT | None (game) |
| GunCon 1 | USB adapter (RetroZord, Reflex Adapt) plus sync | Any core with a virtual gun | CRT | F10 per core |
| GunCon 2 | USB plus sync lead | Any core with a virtual gun | CRT | F10 per core (press A) |
4.9 What the CRT route is for in this project
The project’s gun never uses this route: it aims from infrared emitters and works on any display. The route still has two uses:
- A reference. On one MiSTer, the same game can be played with the original gun on a CRT (the timing the game was written for) and with the project’s gun on the household television. A difference in where shots land is then the project’s gun, its calibration, or the 8-bit path (Volume 1, section 1.3), not the game.
- The lowest-latency display for the project’s gun. The project’s gun on a CRT through the analogue output has no scaler latency at all (Volume 5). Its infrared emitters do not care what kind of screen they surround.
Whether either is worth doing depends on whether a CRT is available.
4.10 What could not be verified
- No original gun was tried on a MiSTer for this dive.
- Whether SNAC adapters on sale route the PlayStation core’s sync output to a GunCon 1’s video plug.
- A real Saturn gun through SNAC.
- The effect of the scandoubler on a CRT gun (inferred).
- Which I/O board revisions carry the user port.
- Whether GUN2CRT is recognised by Main.
Sources
- MiSTer-devel,
Main_MiSTer,MiSTer.iniandinput.cpp, master, read 2026-10-24. https://github.com/MiSTer-devel/Main_MiSTer - MiSTer-devel Wiki, “Lag Explained”, read 2026-10-24 (github-wiki-see mirror). https://github.com/MiSTer-devel/Wiki_MiSTer/wiki/Lag-Explained
- MiSTer-devel core top-level sources:
NES.sv,SNES.sv,SMS.sv,Genesis.sv,MegaDrive.sv,MegaCD.sv,Saturn.sv,PSX.sv(andjoypad_pad.vhd),Atari7800.sv, read 2026-10-20 and 2026-10-24. - Nolan Nicholson, “GunCon2-MiSTer”, README, read 2026-10-24. https://github.com/NolanNicholson/GunCon2-MiSTer
- Main_MiSTer commits 0d848c615b (2022-01-29, GunCon 2 recognised, #516), ec174d41e9 (2022-02-04, calibration menu, save and load, #524), 8f80dbab77 (2022-05-09, 50 ms grace, #599), cc9791eea6 (2022-03-19, RetroZord GunCon, #573).
- misterfpga.org, “Does the Guncon 1 Work with PS1/Other Cores?”, posts by AngelicLiver, skooter and thorr, 21–22 May 2024, read 2026-10-24 via the forum’s mail mirror. https://mail.misterfpga.org/viewtopic.php?p=86799
- Photos: Chinpokomon5, “Guncon 1, 2, and 3”, Wikimedia Commons, CC BY-SA 3.0; Evan-Amos, “Nintendo-SNES-Super-Scope-L” and “SMS-Light-Phaser”, Wikimedia Commons, public domain.
Comments (0)