Original Consoles · Volume 2
The PlayStations — Imitating the GunCon and the GunCon 2, Byte by Byte
Why the PlayStation and PlayStation 2 are the easy consoles; what an adapter must answer on the controller port and the USB port; the calibration trick Time Crisis plays on a GunCon 2 and how an imitation fakes it; per-game scales; two players and regions; and the four things that do it today: SindenPS, Light Gun Commando, a SAMCO fork and the Time Breaker gun

2.1 Why the PlayStations are the easy case
Namco’s GunCon and GunCon 2 each take the console’s composite video, time the raster inside the gun, and hand the console two numbers (Volume 1, §1.4; the guns themselves are catalogued in Console Light Guns, Volumes 4 and 5). The console never measures anything. So an imitation needs no video connection, no timing and no knowledge of the display. It needs to answer the console’s questions in the right format, with numbers that land where the game expects.
That is why every project in Volume 1, §1.6 that does anything does the PlayStations first, and why Ben Ryves chose the GunCon for his first test: “simulating this sort of light gun if you know the pointer coordinates you wish to send is very easy” (benryves.com, 13 December 2022).
The Konami Justifier and Hyper Blaster on the original PlayStation are the exception. They are latch guns that pull the console’s IRQ10 line, and they belong with the timing boxes in Volume 3.
2.2 The GunCon on the controller port

The PlayStation’s controller port is a synchronous serial bus: the console selects a port, clocks a byte out and a byte in at the same time, and waits for the device to pulse an acknowledge line before the next byte. The GunCon is one more device on that bus. What makes it a gun is only what it says:
- Device code. After the console’s
01h 42h, the GunCon answers5A63h, which PSX-SPX lists as “Namco Lightgun; GunCon/Cinch Type”. - Buttons. Two bytes, active low: A on bit 3, the trigger on bit 13, B on bit 14.
- X. “8MHz clks since HSYNC (01h=Error, or 04Dh..1CDh)”. The valid range, 77 to 461, is 384 counts across the visible line; History of Light Guns, Volume 5 works out what that means in time.
- Y. “Scanlines since VSYNC (05h/0Ah=Error, PAL=20h..127h, NTSC=19h..F8h)”.
- No light. “Coordinates X=0001h, Y=000Ah indicates ‘no light’”, which a game reads as a shot off the screen, the reload in most PlayStation gun games.
- When. “The gun should be read only shortly after begin of VBLANK.”
On a real GunCon those numbers come from counting the video signal through the cinch lead. An imitation is simply told where the gun points and writes numbers in these units. It does not need the lead, and it does not need to know whether the picture is on a cathode-ray tube.
2.3 What an imitation GunCon does with the numbers
The one published imitation whose source can be read is the PlayStation firmware SindenPS distributes, SindenLightgunPSXDemoNTSC01.ino and its PAL twins. Its header says it is “a deritive of the version published here by Charlie Cole on his LightgunVerter project”, the GunCon “active cable” in LightGunVerter’s repository, and it carries LightGunVerter’s Creative Commons Attribution-NonCommercial 3.0 licence. Reading it shows what such a thing has to do and where the sharp edges are:
- It is an SPI slave. An ATmega’s hardware SPI, in the bit order and clock phase the PlayStation uses, with an interrupt per byte: check the first two bytes are
01h 42h, load the next reply byte, and pull the acknowledge line low for about 2 µs (four delay macros of eight NOPs each, 32 cycles at 16 MHz). Anything else getsFFh, so the imitation stays silent when the console addresses a memory card. - The aim arrives from the host as one byte per axis. The Raspberry Pi running the Sinden driver sends six bytes at 57,600 baud,
222, X, Y, buttons1, buttons2, 223, with X and Y each 0 to 255. So the aim the console sees can never be finer than 256 steps across the screen. Mapped onto the 363 X counts the code uses, that is about 1.4 GunCon counts per step: coarser than a real GunCon, and coarser than the project’s gun, which reports 0 to 32767 (Open-Source Firmware, Volume 6). - The edges are the reload. Within three steps of any edge (below 3 or above 252), the firmware answers “no light” with X = 0001h and Y = 0005h, one of the two error values PSX-SPX lists. Pointing off the screen therefore reloads, as it does with a real GunCon.
- Everything else is a straight line.
X = 77 + x/255 × (440 − 77)andY = 48 + y/255 × (294 − 48). The game’s own calibration screen takes up the offset.
Two things in the file deserve a warning for anyone building from it. First, the comments and the code disagree about the television standard: the block labelled “NTSC untested” uses a Y span of 48 to 294, which is a PAL-sized range (PSX-SPX gives NTSC as 25 to 248), while the commented-out “PAL” lines use 77 to 461 for X, which is PSX-SPX’s full range. Second, the high byte is built with a subtraction of 255, not 256: for any X above 255 the low byte is posx − 255, so the reported value is one count larger than intended, a one-count step at the byte boundary. Neither matters much to a player, because the game calibrates, but both would matter to anyone copying the numbers as a reference. They are recorded here so the project’s own code (Volume 5) does not inherit them.
SindenPS adds what the bare sketch lacks: a web page at sindenps.local “to dial in calibration, offsets etc.”, with the Sinden wiki’s advice to keep “an in-game calibration screen open while you iterate on these settings”, and separate firmware files for NTSC, PAL and a Die Hard Trilogy PAL fix (GCON45-PAL-DieHardTrilogy.hex).
2.4 The GunCon 2 on the USB port

The GunCon 2 plugs into one of the PlayStation 2’s two USB ports. It is not a HID device; it is a vendor-specific device with a single interrupt endpoint, and the PlayStation 2’s games talk to it with their own driver. Three open sources describe it from the device’s side: the 2021 SAMCO fork by 88hcsif that implements it in TinyUSB, PCSX2’s emulation of it, and Ben Ryves’s V-USB imitation. Between them:
Enumeration. Vendor 0x0B9A, product 0x016A (USBDevice.setID(0x0b9a, 0x016a) in the fork; the same pair in PCSX2’s device descriptor). One interface of class 0xFF, vendor-specific; one endpoint, 0x81, interrupt IN, maximum packet 8 bytes, polling interval 8.
A request that must fail. The fork’s driver carries the comment that matters most to anyone writing one: “Very important to return false here. The PS2 will send a Set Interface command and it seems to expect it to fail. USBD Setup Received 01 0B 00 00 00 00 00 00.” Returning false makes TinyUSB stall the request.
The game’s parameters. PCSX2 accepts a class-interface OUT request 0x09 carrying six bytes: param_x, param_y and param_mode. They are offsets the game wants subtracted, and mode bit 0x0100 flags progressive scan; in progressive mode the offsets are halved. PCSX2 also echoes the progressive bit back in the button word of each report.
The report. Six bytes, little-endian: a 16-bit button word, active low and idle at 0xFFFF (trigger 0x2000, start 0x8000, select 0x4000, A 0x0008, B 0x0004, C 0x0002, D-pad 0x0010 to 0x0080), then X and Y. Off-screen is X = 0, Y = 0; PCSX2 never sends 0 for a real position, clamping to 1, because “0,0 is reserved for offscreen”.
The numbers. The fork maps the gun’s screen fraction onto X 150 to 724 and Y 32 to 295. Ben Ryves tried 384, 768 and then 640 units across for X before settling. Those are working choices, not a specification: the GunCon 2 measures the real tube, and as §2.6 shows, the games disagree with each other about what a full screen is worth.
LightGunVerter’s GunCon 2 “smart cable” adds one piece of evidence about the real gun’s clock: the firmware computes X as a 12 MHz count, with the comment “GunCon 2 uses 12MHz clock from start of sync”, and Y as a line number. That is the author’s statement in code, not a Namco document, and it was not checked against the hardware.
2.5 The calibration shot and the black frame
Time Crisis games on the PlayStation 2 calibrate the GunCon 2 with a trick that only works on a cathode-ray tube. PCSX2’s source states it exactly: “Time Crisis games do a ‘calibration’ by displaying a black frame for a single frame, waiting for the gun to report (0, 0), and then computing an offset on the first non-zero value.”
A real GunCon 2 sees no light during the black frame and reports 0, 0; the next frame it sees the picture and reports a position; the game takes that first position as the calibration shot. A camera gun cannot see a black frame. It goes on reporting where it points, the game never sees the “no light” it is waiting for, and the offset is taken from the wrong sample, or never.
So an imitation has to fake it. PCSX2 does so with a separate binding, the “Calibration Shot” button: pressing it starts a window of 12 reports in which the trigger is held down and the position is frozen at the shot; the last 5 are forced to 0, 0; then normal reports resume. An imitation in hardware has to do the same, either on a dedicated button or automatically on the first trigger pull while a calibration screen is up. The second is harder, because the imitation cannot see the screen and does not know which game is running. A dedicated button is the dependable answer; Volume 5 recommends it.
Whether SindenPS or the Time Breaker gun does this was not found in their documentation. Ben Ryves reported that “Time Crisis 3 and Virtua Cop: Elite Edition seem happy enough so far” with his imitation, and warned that his simple poll loop was “likely not enough to properly implement all of the Guncon 2’s functionality”.
2.6 Every game has its own scale
PCSX2 carries a table of per-game constants for the GunCon 2, with a frank comment: “Right pain in the arse. Different games seem to have different scales.. Not worth putting these in the gamedb for such few games. Values are from the old nuvee plugin.” A selection:
Table 1 — PCSX2 carries a table of per-game constants for the GunCon 2, with a frank comment: "Right pain in the arse. Different games seem to have different scales.. Not worth putting these in the gamedb for such few games. Values are from the old nuvee plugin." A selection
| Game (serial) | Scale X, Y (%) | Centre X, Y | Screen |
|---|---|---|---|
| Time Crisis 2 (SLUS-20219) | 90.25, 97.5 | 390, 154 | 640 × 240 |
| Time Crisis II (SCES-50300) | 90.25, 102.75 | 390, 138 | 640 × 256 |
| Time Crisis 3 (SLUS-20645) | 90.25, 97.5 | 390, 154 | 640 × 240 |
| Vampire Night (SLUS-20221) | 89.8, 102.5 | 422, 124 | 640 × 228 |
| Resident Evil – Dead Aim (SLUS-20669) | 90.25, 93.5 | 420, 132 | 640 × 240 |
| Virtua Cop – Elite Edition (SLES-51229) | 110.15, 100.0 | 433, 159 | 512 × 256 |
| Endgame (SLES-50936) | 112.0, 100.0 | 320, 120 | 512 × 256 |
| Gunfighter 2 (SLES-51289) | 84.5, 89.0 | 456, 164 | 640 × 256 |
The reason is physical. A real GunCon 2 counts against the actual video, so each game’s calibration was written around the counts the real gun produced for that game’s picture on a tube. An imitation that maps the whole screen onto one fixed range will be right for some games and visibly off in others, by a quarter of the screen in the worst pairs above, and a two-point calibration in the game takes up the offset but not the scale.
The consequence for any hardware imitation is a per-game profile: a scale and centre per title, chosen by the player. SindenPS’s dashboard offers “Profile management for driver configurations”, with a game-guide file alongside; the project’s box would need the same (Volume 5).
2.7 Two players, two guns and regions
- Ports. A second GunCon goes in controller port 2. A second GunCon 2 goes in the second USB port: Namco’s Time Crisis II manual puts player 1 on the top USB port and player 2 on the bottom (Console Light Guns, Volume 5). PCSX2 notes one exception: Endgame (European release) needs its gun on USB port 2.
- Mixing. Time Crisis II accepts a GunCon 2 on USB overriding a GunCon in the matching controller port, per the same manual. More generally the Sinden wiki observes that “many PS2 games are compatible with the G-Con45”, which is the easier gun to imitate, but that “some PS2 games are G-Con2 only, and compatibility varies by region”.
- Which to build first. The wiki’s verdict from use: “as the G-Con45 is easier to emulate, that part of the adapter tends to be faster and more responsive and is overall a more favourable experience”. That is a user report, not a measurement.
- Television standard. The GunCon’s Y range differs between NTSC and PAL (§2.2), and SindenPS ships separate NTSC and PAL firmware.
2.8 SindenPS
SindenPS is the most complete working route for a modern gun on real PlayStations, and the model for this project’s own design. Its README calls it “a custom hardware–software bridge that lets modern Sinden Lightguns behave like authentic PlayStation 1 or 2 lightguns”.
The hardware, from the Sinden wiki’s 2026 guide:
Table 2 — The hardware, from the Sinden wiki's 2026 guide
| Part | Job |
|---|---|
| Raspberry Pi (Pi 5, Pi 4, Pi 3 B+ or Pi Zero 2 W) with the official supply | Runs the Sinden Linux driver, which turns the gun’s camera images into a position, and the SindenPS services and dashboard |
| Arduino Nano Supermini on the SindenPS PS1 PCB, in a printed dongle with a 90° PlayStation controller plug | The GunCon (G-Con 45) imitation, one dongle per player |
| Arduino Pro Micro on the SindenPS PS2 Pi hat, with a USB cable to the PlayStation 2 | The GunCon 2 imitation, one per player; the hat has room for two |
| Optional PJ-320A jack | A pedal input |
| A scaler that draws a white border (RetroTINK 5X Pro, RetroTINK 4K, PixelFX Retro GEM) | The Sinden gun aims by finding a white border, which the consoles do not draw (Modding Classic Light Guns, Volume 5, §5.4) |
The README’s Pi table: Pi 5 and Pi 4 (1 GB) run either mode with two guns; the Pi 3 B+ cannot run two GunCon 2s; the Pi Zero 2 W runs one gun only. It recommends active cooling on the Pi 4 and 5 “to prevent thermal throttling”. The software installs from GitHub onto Raspberry Pi OS Lite 32-bit. SindenPS “boots into G-Con45 mode if it detects that a dongle is connected”; unplugging the dongle switches it to GunCon 2 mode.
Why it needs a Pi. The Sinden gun is a camera that streams images to a host driver; the position is computed on the host (Open-Source Firmware, Volume 1, §1.10). The Pi is that host. An OpenFIRE gun computes its position in the gun, so the same job needs only a microcontroller that can read a USB mouse (Volume 5).
Licence. The repository carries the “SindenPS Fair Use Licence”, which permits use and modification “for personal, educational, and non-commercial purposes”, and the PlayStation firmware inherits LightGunVerter’s non-commercial licence. Neither can go into a product that is sold.
Other firmware in the repository. SONY-ANALOG.hex (the credits mention firmware “for the Sony Analog Adpater for Galaxian3”) and KONAMI.hex with a drawing of a “Konami Interface Board”, credited to Widge, for “video desync data”. That is the Konami IRQ10 route of Volume 3, and its status was not established (Volume 1, §1.10).
2.9 Light Gun Commando, the SAMCO fork and the LightGunVerter cable
Light Gun Commando (Ben Ryves, 2022–2023) began as exactly this: a PC tracking a Wii Remote through a Mayflash DolphinBar, “sending data to a circuit pretending to be a Guncon”, playing Time Crisis II on a real PlayStation 2 and an LCD. His GunCon 2 imitation used V-USB on an ATmega, with “a USB device descriptor that closely matched the Guncon 2”, copied from a real gun with Windows’ USB viewer. The same adaptor’s firmware also imitates a Hyper Blaster (Volume 3). A detail worth borrowing: he made the adaptor hold the gun’s A button automatically whenever the camera can see the emitters, so the player takes cover and reloads simply by pointing off the screen. In Time Crisis, A is the pedal.
The SAMCO fork (88hcsif, 2021) put the GunCon 2 inside the gun. Hold the trigger while plugging in and the gun enumerates as 0B9A:016A instead of a mouse; otherwise it is an ordinary SAMCO. It is the only published design in which the IR camera gun itself speaks to the PlayStation 2 directly, with no box at all, and it is a direct ancestor in spirit of a “console mode” in the project’s fork (Volume 5). Its limits are stated in its README: no calibration (the sensor bar position and monitor size are hard-coded), and it was tested only on an Adafruit ItsyBitsy M4 because “it is pretty heavy on floating point operations”.
The LightGunVerter’s GunCon 2 cable (2019) took the other approach: the box sends an eight-byte serial frame (0x80, 0xCC “GunCon 2 identifier”, then X, Y and buttons in seven-bit pairs) to a “smart cable” that presents itself to the PlayStation 2. The cable’s own firmware is not in the repository.
2.10 The Time Breaker gun

The only commercial product found that plays original PlayStation and PlayStation 2 gun games on a flat panel is the Time Breaker LightGun. Stone Age Gamer sells it at $129.99 (read 2026-10-24) as a “plug-and-play light gun designed for wirelessly playing classic PS1/PS2 shooters”, with a sensor at the top of the television and a camera in the gun; it “Supports TVs of all types. HDTV, CRT, Projectors, etc.”, recommends a screen of 42 inches or more, offers an optional recoil mode, and sells a second gun for two players. Its confirmed-games list includes Point Blank 1 to 3, Time Crisis, Project Titan, Judge Dredd and Resident Evil Survivor on the PlayStation, and Virtua Cop, Ninja Assault, Vampire Night, Dino Stalker and Resident Evil Survivor 2 on the PlayStation 2. The listing also says PlayStation 2 games work on backward-compatible PlayStation 3s.
The Taiwanese launch article (T客邦, 26 February 2026) gave a 1 March 2026 release, an infrared locator in front of the set, calibration first with the locator and then in each game, support for GunCon games on the PlayStation and GunCon 2 games on the PlayStation 2, 35 or more games, LCD and OLED sets from 27 to 85 inches, two players, three colours and a deluxe set with an HDMI adapter. Neither source says how the receiver connects or what it presents itself as; from the game lists it must answer as a GunCon on the PlayStation and a GunCon 2 on the PlayStation 2, but that is inference. The maker is not named in either source beyond the logo in the article’s image.
It matters to this dive as proof that the route is sound enough to sell, and as the obvious alternative for anyone who wants PlayStation gun games on a flat panel without building anything. It does nothing for the project’s own gun.
2.11 The display, lag and the picture
- Any display works. Nothing in either PlayStation route is timed against the picture. The console’s video can go to a cathode-ray tube, through a scaler, or through an HDMI adapter to a flat panel.
- The camera gun needs its own references. A Sinden needs a white border drawn by a scaler; the project’s gun needs only its infrared emitters at the screen, and works with the console’s picture untouched.
- The 4:3 window. The consoles’ 4:3 picture usually sits pillarboxed on a 16:9 panel. A gun calibrated to the panel’s edges must be told where the 4:3 picture is, or the translator must map only that window. OpenFIRE’s display-ratio setting does the first (Open-Source Firmware, Volume 5, §5.5).
- Lag. The flat panel’s processing delay is what the player feels, exactly as on a PC (PC (Windows), Volume 6). The imitation itself adds at most one poll interval: PSX-SPX advises reading the GunCon just after vertical blanking, so about once a frame, and the GunCon 2’s endpoint interval is 8 ms. Use the set’s game mode. No published latency figure exists for any of the four routes.
- 480p. Some PlayStation 2 gun games offer progressive scan. A real GunCon 2 needed it signalled (the mode bit in §2.4); an imitation only has to honour the halved offsets.
2.12 Why this, and why not the others
Table 3 — 2.12 Why this, and why not the others
| Choice | Options | Pick for a PlayStation route | Why, and why not the others |
|---|---|---|---|
| Which PlayStation gun to imitate first | GunCon (G-Con 45); GunCon 2 | GunCon (G-Con 45) | Simplest protocol, no USB stack, plays every PlayStation gun game that uses it and, per the Sinden wiki, many PlayStation 2 games; GunCon 2 second for the games that demand it |
| Where the translation runs | Raspberry Pi plus Arduinos (SindenPS); a microcontroller box; inside the gun | A microcontroller box for the project’s gun (Volume 5) | A Pi is needed only when the gun’s position is computed on a host, as with a Sinden; an OpenFIRE gun computes it in the gun. Inside the gun means a second identity and Namco’s vendor ID (Volume 5) |
| Aim resolution on the link | 8-bit (SindenPS serial); full 16-bit | Full resolution | SindenPS’s 256 steps are coarser than the GunCon’s own counts; reading the gun’s 0 to 32767 directly costs nothing |
| Calibration shot on the GunCon 2 | Automatic; dedicated button; none | Dedicated button | Time Crisis waits for a “no light” report a camera gun cannot produce; automatic detection would need to know the game is calibrating |
| Per-game scale | One fixed map; per-game profile | Per-game profile | PCSX2’s table shows scales from about 84 to 112 per cent between titles |
| Buy instead | Time Breaker gun | Not for this project | It plays the games but is a closed product; it does not use or test the project’s gun |
2.13 What could not be verified
- Nothing in this volume has been run with the project’s gun or any imitation on real hardware.
- The real GunCon 2’s counting clock (12 MHz per LightGunVerter’s comment) and its true X and Y spans on NTSC and PAL.
- How SindenPS’s GunCon 2 firmware handles the calibration black frame, and whether it honours the class request
0x09; its firmware ships as a zip and a document, not as readable source in the repository. - Whether a GunCon imitation must respond only “shortly after VBLANK”, as PSX-SPX advises for the real gun, or whether games poll at other times.
- Which PlayStation 2 games accept the G-Con 45, title by title; the wiki’s “many” is not a list.
- Time Breaker: maker, connection, protocol, latency and whether it fakes the Time Crisis black frame.
- PlayStation 2 games on a backward-compatible PlayStation 3 with a GunCon 2 or an imitation, a seller’s claim only.
Sources
- Martin Korth (nocash), PSX-SPX, “Controllers and Memory Cards”, lightgun sections (Namco GunCon; Konami IRQ10), read 2026-10-24. https://psx-spx.consoledev.net/controllersandmemorycards/
- th3drk0ne,
sindenps: README,LICENSE,Firmware/PSX/SindenLightgunPSXDemoNTSC01/SindenLightgunPSXDemoNTSC01.inoand the.hexfiles, last push 2026-10-10, read 2026-10-24. https://github.com/th3drk0ne/sindenps - Sinden Lightgun wiki, “OG Console Setup Guide”, Internet Archive capture, read 2026-10-24. https://www.sindenwiki.org/wiki/OG_Console_Setup_Guide
- Charlie Cole,
charcole/LCDZapper,Firmware/main/main.cpp(GunCon 2 cable) andFirmware/ActiveCables/PSXGun.ino, read 2026-10-24. https://github.com/charcole/LCDZapper - 88hcsif,
IR-Light-Gun: README,Guncon/Guncon2Driver.c,Guncon/Guncon2Interface.cppand.h,Samco_2.1_4IR/Samco_2.1_4IR.ino, 2021, read 2026-10-24. https://github.com/88hcsif/IR-Light-Gun - PCSX2,
pcsx2/USB/usb-lightgun/guncon2.cpp, master, read 2026-10-24. https://github.com/PCSX2/pcsx2 - Ben Ryves, “Light Gun Commando: LCD-compatible light gun support for original console hardware?”, 13 December 2022, and “Updating Light Gun Commando to ESP-IDF 5.0 and simulating a Guncon 2”, 25 December 2022, read 2026-10-24. https://benryves.com/journal/3763182 ; https://benryves.com/journal/3763183
- Stone Age Gamer, “Time Breaker Light Gun - PlayStation, PlayStation 2”, read 2026-10-24. https://stoneagegamer.com/time-breaker-light-gun-playstation-playstation-2.html
- 李文恩 (Li Wen-en), T客邦, Time Breaker LightGun, 26 February 2026, read 2026-10-24. https://www.techbang.com/posts/128067-time-breaker-lightgun-lcd-ps2-shooter
Comments (0)