The bench cheat sheet

Printable: NES controller-port bridge, v1b: drawing package TM-NESB-001 rev P (PDF); v1b as built, the checks called out on the photograph (PNG).

Generated by tools/cheatsheet.py. The pin numbers and signals are read out of the schematic, the harness colours out of the lab log, the breakout leads out of the bring-up tool's own table, and each chip's wiring out of the netlist. The only authored text is what each pin does on the part, which is the datasheet's, kept in one place in that tool and refused if the schematic names a pin differently. The same rows are sheets of the drawing package (tools/make-package.py). The head's hands (the Pi's jumpers, the PC817 and the relay) have their own: cheat-sheet-head.md.

Sheet: bench-v1b.

The controller port: pin, NES harness, breakout

Pin numbers are the ones moulded into this console's port housing and the signals are the schematic's, MEASURED 2026-09-09 (the supply is on 5, not 7). Harness colours from the lab log, step 1.1 (2026-09-08). Breakout leads rung out 2026-09-09 with the cable out of the console; the pad half of the cut carries the same five colours. Use the lead, not the colour rule.

pinsignalNES harnessbreakout leadon the bridge
1GNDbrownyellowthe GND rail
2CLKredblueR2-1, A1 D2 (INT0)
3OUT0orangeblackU1-1, A1 D5 (T1)
4D0yellowgreenU2-9
5+5Vwhiterednot used: the bridge runs from the UNO's 5 V
6n/cbluenot carried
7n/cpurplenot carried

The power and reset breakout

Five ways straight through, colour for colour with the front panel's harness (docs/lab/06-breakout-map-power-reset.jpg), metered 2026-09-17. No way is ground: the front panel is grounded by its pad and housing.

pinNES harnessbreakout leadwhat it is
1brownbrownpower switch
2redredpower switch
3orangeorangereset, + side (4.40 V)
4yellowyellowreset, - side, and LED
5whitewhiteLED

The head's four jumpers

Four Dupont leads off the Pi's header, no breakout (2026-09-10). Header positions are the Pi's own numbering. No wire from here to the console: the Pi's ground reaches it through the UNO's USB cable only.

Pi pinpos.torole
GPIO1711PC817 module INPUT +reset, 100 ms high
GPIO2713relay module INpower: high is on
5V2relay module VCCthe coil's supply
GND6PC817 IN-, relay GNDthe one ground lent

The UNO ribbon

Nine Dupont wires from the UNO's digital header, colour per pin as read off the header (2026-09-11). The net and the far end come from the schematic.

UNO pincolournetto
D2blueCON_CLKJ1-2, R2-1
D3greenTRIGR1-1
D5yellowCON_OUT0J1-3, U1-1
D6orangePAD_LATCHJ2-3
D7redPAD_CLKJ2-2
D8brownPAD_D0J2-4
D10blackRCLKU3-12
D11whiteMOSIU3-14
D13greySCKU3-11

The scope: channels and the trigger

As the instrument told them on 2026-11-04T23:50Z (head/leads.toml, written by head/leads.py measure, never by hand): the channel each signal is found on, and what told it. The landing is the one typed column, where the tip is said to sit, given as a board column so it can be put back; the scope cannot check it. Probe grounds on the right board's GND rail, which is the console's ground. The DS1054Z has no external trigger input (MEASURED 2026-09-15), so the bridge's TRIG line takes a channel when it has a probe; a script's ARM names signals, and one with no probe is refused.

inputsignalprobe ontold by
CH1composite videothe console's video out, through the splitter (a BNC coax, no probe tip)10 sync pulses 5.0 us wide every 64.0 us, under 2 V (probe 1x)
CH4CON_OUT0 (latch)U1 pin 1: right board column 34, the side toward U2 (rows f to j)a 3.3 us pulse on every byte (probe 1x)
CH3CON_D0U2 pin 9: right board column 18, the rails side (rows a to e)flat low on ff, bits 31.2 us apart on a5 (probe 1x)
noneCON_CLKU2 pin 2 (CP), or the blue CLK lead at column 24not probed
CH2TRIGR1 on the middle board: the resistor in row a from column 9 (the green D3 lead's housing) to column 6 (the red lead to the scope)stopped a single-shot on TRIG and not without it (probe 1x)
EXT TRIGnonenot on this scopethe DS1054Z has no external trigger input (MEASURED 2026-09-15: source EXT refused; the rear BNC is Trig Out)

U1: 74HCT04 at +5V

Hex inverter, six independent gates. HCT inputs switch at TTL levels (high from 2.0 V), which is why it sits on the console's NMOS OUT0 line: OUT0 high loads the register, so its inversion is the 165's active-low load. One gate is used. The other five inputs are CMOS and must not float: tie each spare A input to GND and leave its Y open.

pinnameon the parton this bench
11Agate 1 inputCON_OUT0: J1-3, A1 D5 (T1)
21Ygate 1 output, the inverse of 1A/PL: U2-1
32Agate 2 inputthe GND rail
42Ygate 2 outputno connection
53Agate 3 inputthe GND rail
63Ygate 3 outputno connection
7GNDgroundthe GND rail
84Ygate 4 outputno connection
94Agate 4 inputthe GND rail
105Ygate 5 outputno connection
115Agate 5 inputthe GND rail
126Ygate 6 outputno connection
136Agate 6 inputthe GND rail
14VCCsupply, 4.5 to 5.5 V; 100 nF to GND at the pinthe +5V rail

U2: 74HC165 at +5V (the TI bag)

8-bit parallel-in, serial-out shift register: the pad's 4021 in a 74 package. While /PL is low the eight inputs A to H are copied into the stages as they are (it is transparent, so the byte must be settled before the load). With /PL high, each rising edge of CP shifts one place toward QH and pulls DS in at A. QH shows stage H, so H is the first bit out and A the eighth, which is why the pad's order A, B, Select, Start, Up, Down, Left, Right is wired H down to A. /CE high holds the clock off.

pinnameon the parton this bench
1/PLparallel load, active low: inputs copied in while low/PL: U1-2
2CPshift clock, rising edge, when /CE is lowCP: R2-2, C4-1
3Eparallel input E, the fourth bit outQ_START: U3-3
4Fparallel input F, the third bit outQ_SEL: U3-2
5Gparallel input G, the second bit outQ_B: U3-1
6Hparallel input H, the first bit out (QH after a load)Q_A: U3-15
7/QHinverted serial outputno connection
8GNDgroundthe GND rail
9QHserial output: stage HCON_D0: J1-4
10DSserial in: shifts into A after the eighth clockthe GND rail
11Aparallel input A, the eighth bit outQ_RIGHT: U3-7
12Bparallel input B, the seventh bit outQ_LEFT: U3-6
13Cparallel input C, the sixth bit outQ_DOWN: U3-5
14Dparallel input D, the fifth bit outQ_UP: U3-4
15/CEclock enable, active low: high inhibits CPthe GND rail
16VCCsupply, 2 to 6 V; 100 nF to GND at the pinthe +5V rail

U3: 74HC595 at +5V

8-bit serial-in, parallel-out shift register with an output latch. Each rising edge of SRCLK shifts SER in at QA's stage; the stages are invisible until a rising edge of RCLK copies all eight into the output latch at once, which is what makes a byte atomic to the console: the 165 never sees a half-written byte. /OE low turns the outputs on; /SRCLR low clears the shift stages (not the latch). QH' is the eighth stage, for chaining a second 595.

pinnameon the parton this bench
1QBlatched output BQ_B: U2-5
2QClatched output CQ_SEL: U2-4
3QDlatched output DQ_START: U2-3
4QElatched output EQ_UP: U2-14
5QFlatched output FQ_DOWN: U2-13
6QGlatched output GQ_LEFT: U2-12
7QHlatched output HQ_RIGHT: U2-11
8GNDgroundthe GND rail
9QH'stage H unlatched: serial out for a chained 595no connection
10/SRCLRshift register clear, active low: tie high to runthe +5V rail
11SRCLKshift clock, rising edge: SER into A, A into B, and onSCK: A1 D13 SCK
12RCLKlatch clock, rising edge: all eight stages to the outputsRCLK: A1 D10
13/OEoutput enable, active low: low drives QA to QHthe GND rail
14SERserial data in, sampled on SRCLK's rising edgeMOSI: A1 D11 MOSI
15QAlatched output AQ_A: U2-6
16VCCsupply, 2 to 6 V; 100 nF to GND at the pinthe +5V rail

Pulled at build time from nes-bench/docs/cheat-sheet.md; the repository is the one copy. The reports use some working words of their own: Words the reports use.