Skip to the content
4 layers83.8 × 35.6 mmInconsole, the printed circuit board in 3D

Hardware mod for 1985 NES

Size
83.8 × 35.6 mm
Copper layers
4
Thickness
1.6 mm
Parts
55
Nets
93
Pads
368
Tracks, vias
1,005, 115
Pours
10
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
9 May 2024
Updated
27 Oct 2025

Overview

Inconsole 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 4-layer board of 83.8 × 35.6 mm with 55 parts on 93 nets, routed with 1,005 tracks and 115 vias.

It is built around the ABM8-272-T3 and SM03B-SRSS-TB. Its parts include 31 capacitors, 10 ICs, 6 resistors, 4 connectors and 2 switches. It belongs with the retro computing and games boards and the RP2350 boards of this library.

Main components

2

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

55
QtyValueFootprintReferences
23.1uFnesceptor:C_0402_1005MetricC2, C3, C10, C11, C12, C13, C14, C15, C24, C25, C26, C27, C28, C29, C30, C31 +7
7~nesceptor:PQFP12_RUT_TEXU2, U3, U4, U5, U6, U7, U9
44.7uFnesceptor:C_0402_1005MetricC16, C17, C18, C22
210uCapacitor_SMD:C_0805_2012MetricC1, C19
215pnesceptor:C_0402_1005MetricC20, C21
21knesceptor:C_0402_1005MetricR2, R6
227nesceptor:C_0402_1005MetricR7, R8
2SW_Pushnesceptor:TS-1088-AR02016SW1, SW2
11kResistor_SMD:R_0402_1005MetricR4
133nesceptor:C_0402_1005MetricR1
15051104091nesceptor:CON_5051104091_MOLJ2
1ABM8-272-T3Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1
1Conn_01x01_PinConnector_PinSocket_2.54mm:PinSocket_1x01_P2.54mm_VerticalJ3
1Conn_01x04_MountingPinnesceptor:PicoEZMate-Reinforced-LiteJ1
1Lnesceptor:AOTA-B201610S3R3-101-TL1
1NCP1117-3.3_SOT223Package_TO_SOT_SMD:SOT-223-3_TabPin2U11
1RP2350A-QFN60nesceptor:RP2350A_QFN-60_EP_7.75x7.75_Pitch0.4mmU8
1SM03B-SRSS-TBConnector_JST:JST_SH_SM03B-SRSS-TB_1x03-1MP_P1.00mm_HorizontalJ4
1~nesceptor:RP2A07U1

More from RetroTournaments/nesceptor

2
  • 2 layers50.8 × 61 mmTestbench, the printed circuit board in 3D

    Testbench

    RetroTournaments/nesceptor

    Hardware mod for 1985 NES

    33 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

  • 6 layers76 × 46.4 mmRp2350 driver, the printed circuit board in 3D

    Rp2350 driver

    sequoia-hope/rp2350-motor-controller

    An RP2350 based brushless motor controller

    291 parts39
  • 4 layers62.8 × 61.7 mmCf mp3-player, the printed circuit board in 3D

    Cf mp3-player

    will127534/cf-mp3-player

    A simple MP3/WAV/FLAC player using CF card

    119 parts16MIT
  • 4 layers40 × 40 mmEnc encoder, the printed circuit board in 3D

    Enc encoder

    ROAR-QUTRC/perseus-v3

    The code base for the QUT Robotics Club ROAR teams rover Perseus starting 2026

    87 parts10
  • 4 layers84 × 40 mmRV4028, the printed circuit board in 3D

    RV4028

    MichaelBell/RV4028

    RV4028 - A hackable Risc-V computer

    48 parts9BSD-3-Clause
  • 2 layers93.6 × 102.8 mmMote hardware, the printed circuit board in 3D

    Mote hardware

    empriselab/mote

    A low cost, high confidence mobile robot optimized for education.

    75 parts5MIT
  • 2 layersOpensync, the printed circuit board in 3D

    Opensync

    ErichZimmer/OpenSync

    An open source synchronizer for velocimetry of fluids.

    230 parts4CERN-OHL-S-2.0
  • 4 layers61 × 79 mmRP2350 80QFN minimal, the printed circuit board in 3D

    RP2350 80QFN minimal

    Sphyrna-029/Pico-Pilot

    A simple auto pilot for land/water based robots based on the Raspberry Pi rp2350B/2354B

    75 parts3
  • 2 layers53.5 × 26 mmGbtty rp2354a, the printed circuit board in 3D

    Gbtty rp2354a

    maxfierke/gbtty

    gbtty: what if your game boy was also a VT100-compatible 20x18 ANSI terminal?

    37 parts2Apache-2.0

Questions

How big is the Inconsole PCB?

It measures 83.8 × 35.6 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Inconsole use?

55 parts, built around the ABM8-272-T3 and SM03B-SRSS-TB. 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 Inconsole KiCad files?

From the RetroTournaments/nesceptor repository on GitHub, at the commit this page was made from: the board is dev/inconsole/inconsole.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 Inconsole 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).