Skip to the content
PCBKitNew board
2 layers123 × 66.6 mmBoard pcb, the printed circuit board in 3D

N64 only version of the sanni OSCR

Size
123 × 66.6 mm
Copper layers
2
Thickness
1.6 mm
Parts
16
Nets
50
Pads
174
Tracks, vias
367, 239
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
17 Mar 2022
Updated
4 May 2026

Overview

Board pcb is an open-source printed circuit board by jgazeley, from the jgazeley/n64cartreader repository on GitHub. It is a 2-layer board of 123 × 66.6 mm with 16 parts on 50 nets, routed with 367 tracks and 239 vias.

It is built around the AP2112K-3.3. Its parts include 5 capacitors, 2 resistors, 2 connectors, 1 IC and 1 diode. It belongs with the RP2040 boards of this library.

Main components

1

README

README.md

N64 Pico Cart Reader V2

A simple, open-source N64 cartridge reader powered by a Raspberry Pi Pico. Plug it in via USB to dump ROMs and back up saves directly to your computer using a web browser or command line.

Device in Action

Features

  • Full ROM dumping for retail N64 cartridges (up to 32 MB)
  • Save read/write/restore for all retail save types:
    • SRAM (e.g. 1080 Snowboarding, Ocarina of Time)
    • EEPROM 4K/16K (e.g. GoldenEye, Super Mario 64)
    • FlashRAM (e.g. Majora's Mask, Pokemon Stadium) (For a full list of N64 games and their save types, see Micro-64's Game Save List)
  • Controller Pak (MPK) export/import
  • GameShark cartridge export/import/restore
  • Web Serial GUI — runs in Chrome/Edge, no install required
  • Python CLI for all other users
  • 3.3V-native design — no level shifting needed, lower BOM cost
  • Automatic cart identification — detects game, ROM size, and save type from a built-in catalog

Getting Started

See docs/GETTING_STARTED.md for full setup instructions.

Quick Start

  1. Flash the pico_headless_demo.uf2 firmware to your Pico (hold BOOTSEL while plugging in USB, then drag the file onto the drive).
  2. Insert an N64 cartridge.
  3. Open the Web Serial UI in Chrome or Edge, or use a CLI:

Windows (PowerShell):

powershell
./host-tools/powershell/N64CartReader.ps1 -Port COM5

Windows/macOS/Linux (Python):

bash
# example for windows
python3 host-tools/python/pico_pak_n64_magic_cli.py --port /dev/ttyCOM5 n64-cart-id --rescan
# example for linux
python3 host-tools/python/pico_pak_n64_magic_cli.py --port /dev/ttyACM0 n64-cart-id --rescan

Project Layout

text
firmware/
  rp2040/          C-based firmware for the Raspberry Pi Pico (timing-critical bus logic)
host-tools/
  powershell/      Native CLI for Windows (no setup needed); also supports macOS/Linux
  python/          Cross-platform CLI for validation, diagnostics, and batch scripts
  web/             Easiest, driverless browser-based interface using Web Serial
hardware/
  board/           V2 hardware project (KiCad PCB, schematics, and BOM)
enclosure/
  board/           3D-printable protective case (FreeCAD and STL files)
docs/              Technical guides, hardware documentation, and troubleshooting
LICENSES/          Third-party license texts for shared components

Web Serial UI

The browser-based interface is the easiest way to use the reader. It works in Chrome and Edge via the Web Serial API. No drivers or software installation required.

Open host-tools/web/index.html directly in your browser, click Connect, and the UI will detect your cartridge and present options for ROM dumping, save export/import, and GameShark operations.

See docs/WEB_SERIAL_UI.md for details.

Python CLI

The Python CLI provides full access to all device capabilities and is used for bench testing, validation, and scripted workflows.

bash
cd host-tools/python

# Identify the cartridge
python3 pico_pak_n64_magic_cli.py --port /dev/ttyACM0 n64-cart-id --rescan

# Export a save
python3 pico_pak_n64_magic_cli.py --port /dev/ttyACM0 n64-export --out my_save.bin --sha256

# Import a save with verification
python3 pico_pak_n64_magic_cli.py --port /dev/ttyACM0 n64-import --in my_save.bin --verify

# Dump the full ROM
python3 pico_pak_n64_magic_cli.py --port /dev/ttyACM0 n64-rom-dump --out my_rom.z64

# Run the validation matrix
python3 n64_validation_matrix.py --port /dev/ttyACM0

PowerShell CLI

A native alternative for Windows users (no installation required). Works with the built-in PowerShell 5.1 or PowerShell 7+ (pwsh) on any platform. See Getting Started for Windows execution policy setup.

powershell
# Interactive menu (use COMx on Windows, /dev/ttyACM0 on Linux)
./host-tools/powershell/N64CartReader.ps1 -Port COM5

# Export a save
./host-tools/powershell/Export-Save.ps1 -Port COM5 -Out my_save.bin

# Import a save with verification
./host-tools/powershell/Import-Save.ps1 -Port COM5 -In my_save.bin -Verify

# Dump the full ROM
./host-tools/powershell/Dump-Rom.ps1 -Port COM5 -Out my_rom.z64

Building the Firmware

Requires the Pico SDK and CMake.

bash
cd firmware/rp2040
export PICO_SDK_PATH=/path/to/pico-sdk
cmake -S . -B build
cmake --build build -j4 --target pico_headless_demo

Flash with picotool or drag build/pico_headless_demo.uf2 onto the Pico in BOOTSEL mode.

Hardware

The V2 board is a single PCB with an integrated N64 cartridge slot and Raspberry Pi Pico footprint. The design is in KiCad under hardware/board/kicad/.

Power is supplied through USB. The RP2040 runs at 3.3V, which matches N64 cartridge logic levels directly.

Pin mapping and board documentation are in docs/HARDWARE.md.

Troubleshooting

Cartridge not detected or garbled header: Remove the cartridge, clean the edge connector contacts with isopropyl alcohol and a cotton swab, and reseat firmly.

EEPROM save shows type=none after cart swap: Run n64-cart-id --rescan or retry 3-5 times. The Joybus bus needs a moment to settle after a physical swap.

Controller probe returns IO_ERR: EEPROM cartridges and controllers share the same Joybus data line. Unplug one to test the other.

Web Serial won't connect: Web Serial requires Chrome or Edge. Firefox and Safari are not supported. Make sure no other application (terminal, serial monitor) has the port open.

V1 Legacy

The original N64 Cart Reader was built on an Arduino Mega 2560 with an SD card for storage and a serial terminal interface. That design is preserved in the legacy/v1-arduino branch.

See docs/V1_LEGACY.md for details on the original hardware.

Acknowledgements

N64 Pico Cart Reader V2 was designed and implemented by Jayson Gazeley as an RP2040-based successor to the original Arduino N64 Cart Reader.

The project builds on prior open-source preservation work, especially:

  • Sanni Cart Reader (GPL-3.0) — foundational N64 cartridge interfacing logic
  • drmdmp64_mass / DreamDumper64 by nopjne (BSD-2-Clause) — Joybus PIO and EEPROM reference implementation
  • skaman — multi-console cart-reader modules
  • hkz & themanbehindthecurtain — FlashRAM command documentation
  • Andrew Brown & Peter Den Hartog — N64 controller protocol
  • libdragon — N64 controller checksums

See docs/CREDITS_AND_PRIOR_ART.md for full attribution and docs/LICENSING.md for license details.

References

Parts

16
QtyValueFootprintReferences
4, , ,
30.1uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC1, C2, C3
21kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1, R2
110uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC5
14.7uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC6
1AP2112K-3.3Package_TO_SOT_SMD:SOT-23-5U1
1LEDLED_THT:LED_D3.0mmD1
1N64_Controllerproject_footprints:Controller_Port_3PinJ2
1N64_Slotproject_footprints:N64_SlotJ1
1RaspberryPi_PicoModule:RaspberryPi_Pico_SMDA1

Questions

How big is the Board pcb PCB?

It measures 123 × 66.6 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Board pcb use?

16 parts, built around the AP2112K-3.3. 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 Board pcb KiCad files?

From the jgazeley/n64cartreader repository on GitHub, at the commit this page was made from: the board is hardware/board/kicad/board_pcb.kicad_pcb and its schematic hardware/board/kicad/board_pcb.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Board pcb design in my own project?

Its repository states no licence, so its author keeps all rights: ask jgazeley before reusing the design.

Similar boards

  • 2 layers26 × 30 mmMicrocontroller, the printed circuit board in 3D

    Microcontroller

    FrameworkComputer/ExpansionCards

    Reference designs and documentation to create Expansion Cards for the Framework Laptop

    34 parts1.1kCC-BY-4.0
  • 2 layers53.2 × 24.8 mmPicoLink, the printed circuit board in 3D

    PicoLink

    ErichStyger/mcuoneclipse

    McuOnEclipse projects and examples

    46 parts765
  • 2 layers36 × 20 mmCombined, the printed circuit board in 3D

    Combined

    adamb314/ServoProject

    Getting the most out of your hobby servo

    24 parts545
  • 2 layers25 × 25 mmSmallEncoder, the printed circuit board in 3D

    SmallEncoder

    DDeGonge/OS-ARM

    This arm is not industrial and it will not be fast, but that is not my goal. But it will hopefully be a very nice looking arm fully capable of 6dof motion, cheap enough to keep it accessable but capable enough to…

    17 parts498MIT
  • 4 layers70 × 72 mmSPINC AA Charger, the printed circuit board in 3D

    SPINC AA Charger

    CoretechR/SPINC

    DIY Automatic Battery Charger Using RP2040

    101 parts467GPL-3.0
  • 4 layers60.8 × 61.3 mmOS3M Mouse, the printed circuit board in 3D

    OS3M Mouse

    spoter368/os3m-hardware

    All the hardware needed to build your own OS3M Mouse!

    51 parts399
  • 4 layers74 × 104 mmBeepy, the printed circuit board in 3D

    Beepy

    sqfmi/beepy-hardware

    Beepy Hardware

    160 parts348MIT