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

Figure 1 — Three Namco GunCons side by side on a red cloth: the original GunCon for the PlayStation, the GunCon 2 for the PlayStation 2, and the GunCon 3. On MiSTer the first works on a CRT through SNAC in th…
Figure 1 — Three Namco GunCons side by side on a red cloth: the original GunCon for the PlayStation, the GunCon 2 for the PlayStation 2, and the GunCon 3. On MiSTer the first works on a CRT through SNAC in the PlayStation core; the second works on a CRT over USB in many cores, with a sync lead; the third, which aims from emitters beside the screen, works on any display. Photo: Chinpokomon5, Wikimedia Commons, CC BY-SA 3.0.

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:

  1. 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).
  2. The core’s own analogue video, at 15 kHz, with no frame buffer between the core and the tube (4.2).
  3. 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).
  4. 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 .ini file’s shipped value is composite_sync=1, “composite sync on HSync signal of VGA output”, which is what most RGB SCART and professional monitors want. vga_mode selects 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” (2 is 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. With 1, 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

Figure 2 — A table of what a SNAC adapter carries for each original gun. NES with SNAC set to Zapper: light and trigger as data lines of port 2, with the core extending the light signal to be closer to the or…
Figure 2 — A table of what a SNAC adapter carries for each original gun. NES with SNAC set to Zapper: light and trigger as data lines of port 2, with the core extending the light signal to be closer to the original NES. SNES with SNAC set to Yes: the Super Scope or Justifier pulls IOBit, pin 6, low to latch the PPU's counters, and the core passes pin 6 both ways. Master System with USERIO set to SNAC: the Light Phaser pulses TH to latch the VDP's H counter, the core's line commented sensor. Genesis, Mega Drive and Mega-CD: the Menacer and Justifier on TH. Saturn with Pad 1 SNAC on: TH to the SMPC, with no published test found. PlayStation with Pad1 set to SNAC-port1: the GunCon 1 times the beam itself from a sync feed and sends numbers on the serial bus, and the core puts composite sync on the SNAC's interrupt line for it. Atari 7800: light and trigger on joystick pins, with Sega Phaser Mode swapping them. Common to all: a CRT, 15 kHz analogue video from the core, and only the matching core; no F10 calibration applies. Own-work diagram.

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

Figure 3 — The SNES Super Scope, a grey shoulder-fired bazooka-shaped gun with a red muzzle cap. It is wireless: its sensor and trigger signals reach a receiver plugged into the console's second port, and tha…
Figure 3 — The SNES Super Scope, a grey shoulder-fired bazooka-shaped gun with a red muzzle cap. It is wireless: its sensor and trigger signals reach a receiver plugged into the console's second port, and that receiver is what a SNAC adapter connects to the MiSTer. Photo: Evan-Amos, Wikimedia Commons, public domain.

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]; // TH in 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).
Figure 4 — The Sega Master System Light Phaser, a black angular pistol with a long barrel. Through a SNAC adapter it drives the Master System core's TH line just as it drove the console's, on a CRT only. Phot…
Figure 4 — The Sega Master System Light Phaser, a black angular pistol with a long barrel. Through a SNAC adapter it drives the Master System core's TH line just as it drove the console's, on a CRT only. Photo: Evan-Amos, Wikimedia Commons, public domain.

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:

  1. Keep Main and the kernel current with the downloader.
  2. Plug the GunCon 2 into a data-capable USB port, “not the POWER ONLY one”.
  3. 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.”
  4. 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 gunConnectionCoresDisplayCalibration
NES ZapperSNAC (“Zapper”)NESCRTNone (game)
Super Scope, SNES JustifierSNACSNESCRTNone (game)
Light PhaserSNACMaster System; Atari 7800 in Sega Phaser Mode (inferred)CRTNone (game)
Menacer, Genesis JustifierSNACGenesis, Mega Drive, Mega-CDCRTNone (game)
Virtua Gun / StunnerSNAC (not documented with a gun)SaturnCRTNone (game)
GunCon 1SNAC plus sync from the corePlayStation; System 11 arcadeCRTNone (game)
GunCon 1USB adapter (RetroZord, Reflex Adapt) plus syncAny core with a virtual gunCRTF10 per core
GunCon 2USB plus sync leadAny core with a virtual gunCRTF10 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:

  1. 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.
  2. 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

  1. MiSTer-devel, Main_MiSTer, MiSTer.ini and input.cpp, master, read 2026-10-24. https://github.com/MiSTer-devel/Main_MiSTer
  2. MiSTer-devel Wiki, “Lag Explained”, read 2026-10-24 (github-wiki-see mirror). https://github.com/MiSTer-devel/Wiki_MiSTer/wiki/Lag-Explained
  3. MiSTer-devel core top-level sources: NES.sv, SNES.sv, SMS.sv, Genesis.sv, MegaDrive.sv, MegaCD.sv, Saturn.sv, PSX.sv (and joypad_pad.vhd), Atari7800.sv, read 2026-10-20 and 2026-10-24.
  4. Nolan Nicholson, “GunCon2-MiSTer”, README, read 2026-10-24. https://github.com/NolanNicholson/GunCon2-MiSTer
  5. 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).
  6. 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
  7. 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)

  1. Loading…

Comments are held for moderation — nothing appears until approved.