Skip to content

NGPC link-cable physical capture procedure

This procedure is designed to resolve the remaining UART, CTS/RTS, connector, and simultaneous-start arbitration questions using two NGPC/NGPC Color units and two copies of Samurai Shodown 2.

The passive hardware requirements for a non-destructive inline breakout are specified in ngpc-link-interposer-spec.md.

Safety boundary

Do not drive any connector pin. Do not assume an online pin-number diagram is oriented correctly. Initially use only continuity mode, a high-impedance voltmeter, and high-impedance logic-analyzer inputs whose absolute maximum rating exceeds every measured voltage.

With both consoles powered off and batteries removed:

  1. Photograph both connector orientations and assign temporary pin labels from left to right as viewed in each photograph (A1...An, B1...Bn).
  2. Measure cable continuity between every A/B pin pair and the shield.
  3. Record resistance, not just a yes/no beep. A crossed null-modem cable should reveal crossed signal pairs while ground/shield should remain straight.
  4. Verify that no signal pin is shorted to another signal or to ground.

Never use continuity or resistance mode on a powered console.

Passive measurements

Power one console without connecting the other. Measure every port contact relative to the established ground contact:

Temporary pin Power off continuity Idle volts Link-menu volts Candidate
GND / TXD / RXD / RTS / CTS / shield

Repeat with the other console and then with the passive cable attached. Pins that remain near zero are ground candidates; stable high outputs may be TXD or RTS; floating/intermediate pins may be inputs. These are hypotheses until a transition capture confirms direction.

Analyzer setup

  • Attach analyzer ground only to the confirmed console/cable ground.
  • Observe; never configure analyzer channels as outputs.
  • Capture every non-ground cable conductor on both sides if the breakout permits.
  • Use at least 2 MHz sample rate; 5–10 MHz is preferable. The predicted UART bit period at 19200 bit/s is 52.083 microseconds, so 2 MHz gives roughly 104 samples per bit.
  • Capture raw digital samples before enabling a protocol decoder.
  • For a first decoding attempt use asynchronous UART, 19200 bit/s, 8 data bits, no parity, one stop bit, idle high, LSB first.
  • Also retain RTS and CTS edges. A byte-only export cannot resolve arbitration.

Controlled experiments

Use freshly powered consoles and the same menu actions for every run. Name raw captures and normalized exports with the experiment ID.

ID Procedure Question answered
E01 Power both consoles, remain outside link menu true idle levels and unsolicited traffic
E02 Enter link mode on A only for 10 seconds FC retry interval; RTS/CTS behavior without peer
E03 Keep A searching, then enter link mode on B deterministic requester/responder election
E04 Reverse E03 (B first, then A) whether first entrant always becomes player 1
E05 Enter link mode on both as simultaneously as practical collision/arbitration and symmetric FC behavior
E06 Complete setup, then hold/release each control separately on P1 and P2 F8 direction, bit mapping, sampling cadence
E07 Complete setup and leave all controls idle for 30 seconds keepalive/control cadence and phase traffic
E08 Unplug cable during handshake handshake timeout and terminal bytes
E09 Unplug during active play, then reconnect without reboot F8 reset, standalone FE, recovery policy
E10 Abort link mode normally from each endpoint where possible deliberate shutdown sequence versus fault path

Expected identifying signatures include:

FC 01 00 30             identity request
FD 01 00 30             identity response
F0..F7 [count payload]  normal transport
F9                      payload completion acknowledgment
F8 00 <P2 input>        player-2 offer
F8 <P1> <P2>            combined input reply
F8 FE FE                reset/error propagation
FE                      final termination

Required metadata

For every experiment record:

  • console model, region, board revision if known, and which physical unit is A;
  • battery voltage before the run;
  • cartridge labels and ROM SHA-256 where independently dumped;
  • cable identity and continuity matrix;
  • analyzer model, input threshold, sample rate, and channel-to-pin mapping;
  • exact power-on and menu-action timestamps;
  • whether each console displayed player 1/player 2 or another role indication;
  • raw capture filename and exported UART CSV filename.

Normalized byte export

Convert decoded bytes to the workspace format:

time,direction,value
0.000000,A>B,0xFC
0.000521,A>B,0x01

Then run:

make decode-trace TRACE=path/to/capture.csv

Do not discard framing, parity, or overrun errors from the analyzer export. Keep a separate error log with timestamp and direction; those errors may expose CTS timing or an incorrect UART assumption.