Skip to the content
2 layers50.8 × 61 mmTestbench, the printed circuit board in 3D

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.md

NESceptor

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:

text
                     +--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_RST when low the console is off, and that is important to know.
  • M2 is the clock
  • R/W for 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:

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:

text
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib

Then you have to initialize the cmake build system with:

text
mkdir build
cd build
../scripts/cmake.sh

Then 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
QtyValueFootprintReferences
14.1uFnesceptor:C_0402_1005MetricC2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15
7~nesceptor:DHVQFN-14-1EP_2.5x3mm_P0.5mm_EP1x1.5mmU1, U2, U3, U4, U5, U6, U7
5Conn_01x02_PinConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ2, J3, J4, J5, J6
21uFCapacitor_SMD:C_0805_2012MetricC1, C16
15051104091nesceptor:CON_5051104091_MOLJ1
1Conn_01x03_PinConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ7
1Conn_02x05_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_VerticalJ9
1Conn_02x16_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x16_P2.54mm_VerticalJ10
1~Package_TO_SOT_SMD:SOT-223U8

More from RetroTournaments/nesceptor

2
  • 4 layers83.8 × 35.6 mmInconsole, the printed circuit board in 3D

    Inconsole

    RetroTournaments/nesceptor

    Hardware mod for 1985 NES

    55 parts5GPL-3.0
  • 2 layers12 × 33.5 mmUsbport, the printed circuit board in 3D

    Usbport

    RetroTournaments/nesceptor

    Hardware mod for 1985 NES

    9 parts5GPL-3.0

Similar boards

  • 2 layers65 × 30 mmRgb to hdmi, the printed circuit board in 3D

    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 mmAmiga gfxcard, the printed circuit board in 3D

    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 mmHacky holidays, the printed circuit board in 3D

    Hacky holidays

    hackclub/OnBoard

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

    33 parts915
  • 2 layers240 × 120 mmQuiver PDB 01, the printed circuit board in 3D

    Quiver PDB 01

    Arrow-air/project-quiver

    Project Quiver documentation, designs, and project artifacts.

    33 parts617CERN-OHL-S-2.0
  • 2 layers75 × 26 mmDIY detector, the printed circuit board in 3D

    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 mmPixelix, the printed circuit board in 3D

    Pixelix

    BlueAndi/Pixelix

    Full RGB LED matrix, based on an ESP32 and WS2812B LEDs or emulated LEDs on TFT.

    33 parts447MIT
  • 2 layers65 × 30 mmCanHat, the printed circuit board in 3D

    CanHat

    bondus/KlipperToolboard

    A 3D printer tool head controller board

    33 parts373GPL-3.0

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).