Skip to content

Physical capture

Two full VS matches of Samurai Shodown 2 across two consoles, captured on a logic analyzer, then decoded. The ground-truth wire data.

The bench
Bench: NGPC, bench supply, multimeter, 8-channel logic analyzer, and the notebook working out the pinout.

Setup

Analyzer 8-channel, 24 MHz sample rate
Probing grabbers direct on the mainboard near CON2 (the sniffer PCB was not used)
Ground MBT− battery terminal
Line format 19200 8N1, idle-high, non-inverted — 100% valid framing
Probing the mainboard
Grabbers on the mainboard by the EXT connector; ground on MBT−. Nothing soldered.
Samurai Shodown 2 cartridge
The cart under test — NEOP0030. That 0030 is the catalog word in the identity handshake (FC 01 00 30).

Channels

Channel Signal
Ch2 Player 1 data — FC requester, sends F8 <p1> <p2>
Ch6 Player 2 data — FD responder, sends F8 00 <p2>
Ch0 / Ch1 /RTS / /CTS (flow control / noisy)
Ch3–5, 7 idle

Ch2 sent FC ~103 ms before Ch6 → it won the requester (P1) role.

Saleae Logic 2 capture
The capture: D0/D1/D2/D6 active, the rest idle — matching the decode.

What only the capture gave

  • Wall-clock timing: 33.39 ms/tick (~30 Hz) for F0 heartbeat and F8 gameplay.
  • Which physical channel is P1 vs P2, and how role arbitration resolves.
  • On-wire line format (19200 8N1) verified, not assumed.
  • The input mirror between directions — later explained as the combined reply F8 <p1> <p2>.

Artifacts

  • logic_analysis/ngpc_samurai2_vs.sal — raw capture
  • logic_analysis/decoded_ch2_ch6.csv — 23,653 decoded frames
  • logic_analysis/PROTOCOL_FINDINGS.md — capture ↔ ROM reconciliation

Safety

Consoles off first; establish ground + continuity before probing; 3.3 V only; never drive a pin until its direction is known.