

Testbench
Hardware mod for 1985 NES
- Size
- 50.8 × 61 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 33
- Nets
- 85
- Pads
- 245
- Tracks, vias
- 326, 44
- Pours
- 12
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 9 May 2024
- Updated
- 27 Oct 2025
Overview
Testbench is an open-source printed circuit board by RetroTournaments, from the RetroTournaments/nesceptor repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 50.8 × 61 mm with 33 parts on 85 nets, routed with 326 tracks and 44 vias.
Its parts include 16 capacitors, 9 connectors and 8 ICs. It belongs with the retro computing and games boards of this library.
README
README.mdNESceptor
The NESceptor is a small hardware mod that adds a USB output to a 1985 Nintendo Entertainment System. This mod is designed to provide support for speedrunning and speedrunning competitions. The primary use case is to:
- Allow for live RAM watch
- Transmit console power status
- Transmit precise timing information
Design Decisions
Why this overall design?
The console is to be treated with respect. Although nearly 62 million units were sold, they are no longer manufactured and should not be unnecessarily damaged. The case (shell) of the Nintendo Entertainment system is not to be cut or irreversibly modified. The electronics are not to be irreversibly modified.
To satisfy this requirement - while also balancing the desires to be able to quickly install a NESceptor - a two-part design was chosen. The first board sits inside the console and attaches directly to the back of the CPU via a series of castellations. This first board provides level translation and hosts the microcontroller which does all necessary i/o and processing.
The second part sits in the small outside slot on the back of the console and is attached via double sided tape and a small cable which goes back to the in console pcb. This second board has ESD protection and the USB port for power in and data trasmission out.
A rough block diagram is below:
+--inconsole/--------------------+ +--usbport/---------+
+------------+ | +--------+ +------------+ | | |
| | | | | | | | | USB connection |
| NES CPU | | | 5V to | | Rp2350 | | | |
| | | | 3.3V | | Micro- | | | ESD protection |
| 8 data | | | | | controller | | | |
| 14 addr | --> | Level | -> | | ---> | |
| 3 aux | | | Trans- | | Watching / | <--- | |
| -- | | | lators | | Filtering | | | |
| 25 signals | | | | | | | | |
| | | | | | | | | |
+------------+ | +--------+ +------------+ | | |
+--------------------------------+ +-------------------+ Why Castellations?
The inconsole pcb is connected to the NES CPU with 40 castellations.
Consider:
- Removing the CPU and/or PPU can be difficult for novices (ahem) and requires patience, dedicated tools, and practice. Then once removed a socket is installed, and the CPU/PPU have to be installed into yet another socket, and the whole thing is fiddly and may lead to damage.
- The CPU itself is not subjected to heat or potential damage (when removing it), and is left basically alone with this design.
- A flex pcb was tried at one point, but it proved very difficult to install and remove. Flex pcbs are also more expensive to manufacture.
The main drawback to the castellations is that they may make the nesceptor difficult to remove, although this has not been tested yet.
Which signals are needed from the console?
The following signals are absolutely required:
- Data lines 0 to 7 (8 total), these are self explanatory!
- Address lines 0 to 10 and 13-15 (14 total). Address lines 11 and 12 are not necessary because they are unmapped.
NES_RSTwhen low the console is off, and that is important to know.M2is the clockR/Wfor read / write (low is write)
This gives a total of 25 signals.
Historically NMI was also watched - but it was not used in the first version.
Maybe the controller pins are important, or IRQ, but they were never hooked up in the original.
Notes on level translation
The NES is a 5V system, which is relatively high by modern standards, as most modern microcontrollers only have 3.3V tolerant inputs.
For example the RP2350 datasheet indicates a maximum 3.63V supply voltage (IOVDD) and IOVDD + 0.3 as maximum input voltage.
The NES signals must be translated to not damage the microcontrollers.
The level translators must not be used to change or interact with the console whatsoever. They are preferably unidirectional. This is imperative to maintain the legitimacy of the speedrunning and should be easily verified by third parties.
Why the RP2350?
An earlier version of the NESceptor used an FPGA - specifically the Lattice iCE40 HX on the Alchitry CU development board, however:
- FPGAs are expensive.
- FPGAs are difficult to program (requiring some HDL).
The RP2350 is cheaper and should be capable of reading the NESs roughly 2 MHz signals:
- This logic analyzer project uses a raspberry pi pico and boasts 100Msps
- And this one also gets similar speeds.
Why USB
USB is simple and well supported, people probably already have a ton of cables. This will allow for communication and power delivery. Ethernet is not necessary in this application because the nesbox mini pc will handle that, and would introduce some additional complications when it comes to networking. Wifi for communication is expected to be unreliable - although this is unknown.
Dev Instructions
PCB Development
Install KiCad for schematics / pcb design / etc.
I just use snap install kicad.
This got me kicad 9.0.1 last time.
I'm using KiCad because it's free, and this is an open source project.
Enclosure Development
Install OpenSCAD for the 3d printed usbport enclosure.
I just use snap install openscad.
This got me openscad 2021.01 last time.
I'm using OpenSCAD because its free, programmatic, and this is an open source project.
Firmware Development
Firmware is developed using the RP2350 C/C++ SDK.
To get started you need to have cloned this repo with submodules, or else use git submodule update --init --recursive.
Install the necessary prerequisites for the pico sdk:
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlibThen you have to initialize the cmake build system with:
mkdir build
cd build
../scripts/cmake.shThen to build the firmware (source code in include/ and src/), simply use make.
To flash the firmware to the nesceptor you need to hold the bootsel button when plugging it in, and then drag and rop the completed .uf2 file onto the device.
It should then reboot and start running immediately.
Ordering instructions
Under construction.
Parts
33| Qty | Value | Footprint | References |
|---|---|---|---|
| 14 | .1uF | nesceptor:C_0402_1005Metric | C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15 |
| 7 | ~ | nesceptor:DHVQFN-14-1EP_2.5x3mm_P0.5mm_EP1x1.5mm | U1, U2, U3, U4, U5, U6, U7 |
| 5 | Conn_01x02_Pin | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J2, J3, J4, J5, J6 |
| 2 | 1uF | Capacitor_SMD:C_0805_2012Metric | C1, C16 |
| 1 | 5051104091 | nesceptor:CON_5051104091_MOL | J1 |
| 1 | Conn_01x03_Pin | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J7 |
| 1 | Conn_02x05_Odd_Even | Connector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_Vertical | J9 |
| 1 | Conn_02x16_Odd_Even | Connector_PinHeader_2.54mm:PinHeader_2x16_P2.54mm_Vertical | J10 |
| 1 | ~ | Package_TO_SOT_SMD:SOT-223 | U8 |
More from RetroTournaments/nesceptor
2- 4 layers83.8 × 35.6 mm

- 2 layers12 × 33.5 mm

Similar boards
- 2 layers65 × 30 mm

Rgb to hdmi
hoglet67/RGBtoHDMI
Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI
33 parts1kGPL-3.0 - 2 layers127 × 96 mm

Amiga gfxcard
mntmn/amiga2000-gfxcard
MNT VA2000, an Open Source Amiga 2/3/4000 Graphics Card (Zorro II/III), written in Verilog
33 parts1k - 2 layers92.7 × 58.4 mm

Hacky holidays
hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!
33 parts915 - 2 layers240 × 120 mm

Quiver PDB 01
Arrow-air/project-quiver
Project Quiver documentation, designs, and project artifacts.
33 parts617CERN-OHL-S-2.0 - 2 layers75 × 26 mm

DIY detector
ozel/DIY_particle_detector
A mobile low-cost spectrometer for measuring radioactivity and the energy of ionising radiation like alpha particles and electrons
33 parts558BSD-2-Clause - 2 layers100 × 50 mm

Pixelix
BlueAndi/Pixelix
Full RGB LED matrix, based on an ESP32 and WS2812B LEDs or emulated LEDs on TFT.
33 parts447MIT - 2 layers99.1 × 71.1 mm

CONTROLLER Standby Instrument
jrsteensen/OpenHornet
OpenHornet 1:1 F/A-18C Simulator Repository
33 parts431 - 2 layers65 × 30 mm

Questions
How big is the Testbench PCB?
It measures 50.8 × 61 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Testbench use?
33 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 Testbench KiCad files?
From the RetroTournaments/nesceptor repository on GitHub, at the commit this page was made from: the board is dev/testbench/testbench.kicad_pcb and its schematic dev/inconsole/inconsole.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Testbench design in my own project?
Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).