Skip to the content
2 layers60 × 24 mmNgpc link sniffer, the printed circuit board in 3D

Ngpc link sniffer

caioluders/ngp-link8

Neo Geo Pocket Color link cable, reverse-engineered — play NGP/NGPC games linked online in your browser.

Size
60 × 24 mm
Copper layers
2
Thickness
1 mm
Parts
4
Nets
5
Pads
30
Tracks, vias
53, 10
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
24 Jul 2026
Updated
3 Aug 2026

Overview

Ngpc link sniffer is an open-source printed circuit board by caioluders, from the caioluders/ngp-link repository on GitHub. It is a 2-layer board of 60 × 24 mm with 4 parts on 5 nets, routed with 53 tracks and 10 vias.

README

ngpc_link_sniffer/hardware/README.md

NGPC Link Cable Sniffer — KiCad project

A single passive 2-layer PCB that replaces the Neo Geo Pocket Color link cable: it wires two NGPC EXT ports together as a null-modem crossover while exposing every signal on passive tap headers for a logic analyzer or 3.3 V USB-UART adapter. No original cable required. See ../ngpc-link-sniffer-spec.md for the full design rationale.

Generated and validated with KiCad 10.0.5. DRC and ERC both pass with 0 violations.

Files

FileWhat it is
ngpc-link-sniffer.kicad_proProject
ngpc-link-sniffer.kicad_schSchematic (4 connectors + net labels)
ngpc-link-sniffer.kicad_pcbBoard layout
symbols/ngpc.kicad_symLocal symbol library
footprints/ngpc.pretty/Custom footprints (edge connector + tap header)
gerbers/Fabrication output (gerbers + Excellon drill)
scripts/gen_pcb.pyRegenerates the .kicad_pcb (run with KiCad's python)
scripts/gen_sch.pyRegenerates the .kicad_sch (run with system python3)
preview_*.png3D renders

The wiring

Physical NGPC EXT pinout (identical on both consoles): 1=TXD0 2=RXD0 3=GND 4=/RTS0 5=/CTS0 — GND is the centre contact (pin 3) (see docs/reference/cable.md).

Null-modem crossover (in copper, not in the pad numbering):

text
SIDE A 1 TXD  ───────────── cross ───────────── 2 RXD  SIDE B
SIDE A 2 RXD  ───────────── cross ───────────── 1 TXD  SIDE B
SIDE A 3 GND  ─────────── straight ─────────── 3 GND  SIDE B
SIDE A 4 /RTS ───────────── cross ───────────── 5 /CTS SIDE B
SIDE A 5 /CTS ───────────── cross ───────────── 4 /RTS SIDE B

The two crossing pairs (TXD/RXD and /CTS//RTS) run on opposite copper layers, so they cross without shorting and without signal vias — exactly the trick the spec suggests. GND is straight on F.Cu.

Tap headers each expose their own side's five signals before the crossover, labeled TX / RX / GND / RTS / CTS. Each header pin sits directly on its signal trace (fan out to 2.54 mm, tap, fan back) — no stubs.

  • TAP A (J3): SIDE A signals
  • TAP B (J4): SIDE B signals

For "PC as fake console" mode (spec Scenario 2), wire a 3.3 V USB-UART to TAP A: UART TX → RX pin, UART RX → TX pin, RTS → CTS pin, CTS → RTS pin, GND → GND.

Both-face contact pads

Each of the 5 edge contacts has a pad on both F.Cu and B.Cu, tied together by a via placed inside the body at X=9 mm / X=51 mm — deliberately kept out of the pad's sliding-contact zone so there's no hole in the gold where the console spring touches.

⚠ PROVISIONAL DIMENSIONS — measure before ordering

The spec lists several EXT-port dimensions as still TBD. This board uses these placeholder values (edit scripts/gen_pcb.py and the footprint, then rerun):

SymbolMeaningValue usedStatus
Cpin pitch1.5 mmmeasured (spec)
Gslot opening width12 mm → tongue = 11.5 mmmeasured (female slot)
Epad width1.0 mmPLACEHOLDER
Fpad length5.0 mmPLACEHOLDER (from GB-link reference)
Dfirst-pin offsetpads centered on tonguePLACEHOLDER
Binsertion depthtongue = 8 mm, pads 1 mm from tipPLACEHOLDER
Hkeying/notchnonenot yet known

Board is currently 60 mm × 24 mm, tongues 8 mm long × 11.5 mm wide (to fill the measured 12 mm slot with ~0.25 mm clearance per side), 1 mm insertion chamfers. The 6 mm pad cluster stays centred in the tongue. Overall length is arbitrary (rigid bridge between two consoles) — set it to whatever suits your bench.

Also verify with a multimeter that pin 3 (centre) = GND against the TMP95C061 SIO0 pins on the mainboard, and confirm the left-to-right pad order and which board face the port contacts, before committing to fab. This is why pads are on both faces and why the revision is v0.1.

Ordering

  • Layers: 2 · Copper: 1 oz · Min trace: 0.3 mm (0.2 mm rules)
  • Order both 0.8 mm and 1.0 mm thickness (slot measured 1.0–1.5 mm)
  • Surface finish: ENIG (gold) for the wear-resistant contact pads
  • Solder mask is already opened over all contact pads
  • Upload gerbers/ to JLCPCB / OSHPark / PCBWay

Regenerating

bash
# PCB (needs KiCad's bundled python / pcbnew):
flatpak run --command=python3 org.kicad.KiCad scripts/gen_pcb.py
# Schematic (plain python3):
python3 scripts/gen_sch.py
# Validate:
flatpak run --command=kicad-cli org.kicad.KiCad pcb drc  ngpc-link-sniffer.kicad_pcb
flatpak run --command=kicad-cli org.kicad.KiCad sch erc  ngpc-link-sniffer.kicad_sch

License

MIT / CERN-OHL-P (permissive open hardware).

Parts

4
QtyValueFootprintReferences
2NGPC_EXTNGPC_EXT_EdgeConnectorJ1, J2
2Tap_1x05PinHeader_1x05_P2.54mm_TapJ3, J4

Similar boards

  • 2 layers18.5 × 26 mm24g2usb rp2350zero, the printed circuit board in 3D

    24g2usb rp2350zero

    joypad-ai/joypad-os

    Universal controller firmware for building adapters, dongles, and custom controllers.

    4 parts1.7kApache-2.0
  • 2 layers116 × 33 mm966595-1 and 963356-1, the printed circuit board in 3D

    966595-1 and 963356-1

    rusefi/rusefi

    rusefi - GPL internal combustion engine control unit

    4 parts1.2k
  • 2 layers19 × 18 mmDaughter board, the printed circuit board in 3D

    Daughter board

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    4 parts915
  • 2 layers24.8 × 24.8 mmNrf24 breakout, the printed circuit board in 3D

    Nrf24 breakout

    tardate/LittleArduinoProjects

    a collection of "Little Electronic & Arduino Projects", most involving electronics or an Arduino in one way or another!

    4 parts803MIT
  • 2 layers26 × 20 mmCap chain, the printed circuit board in 3D

    Cap chain

    drandyhaas/KiCadRoutingTools

    A set of Python/Rust tools to aid routing in KiCad

    4 parts744MIT
  • 2 layers34.7 × 20 mmXG Station Power MSI, the printed circuit board in 3D

    XG Station Power MSI

    osy/XG_Mobile_Station

    Open source eGPU dock for ROG Ally and ROG Flow

    4 parts712CC-BY-4.0
  • 2 layers20.3 × 24.5 mmJack power input, the printed circuit board in 3D

    Jack power input

    Luos-io/luos_engine

    Open-source and real-time orchestrator for cyber-physical-systems, to easily design, test and deploy embedded applications and digital twins.

    4 parts546MIT

Questions

How big is the Ngpc link sniffer PCB?

It measures 60 × 24 mm and has 2 copper layers, 1 mm thick.

What parts does the Ngpc link sniffer use?

4 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Ngpc link sniffer KiCad files?

From the caioluders/ngp-link repository on GitHub, at the commit this page was made from: the board is ngpc_link_sniffer/hardware/ngpc-link-sniffer.kicad_pcb and its schematic ngpc_link_sniffer/hardware/ngpc-link-sniffer.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Ngpc link sniffer design in my own project?

Its repository states no licence, so its author keeps all rights: ask caioluders before reusing the design.