Skip to the content
PCBKitNew board
2 layers140 × 170 mmCdi, the printed circuit board in 3D

An unofficial CD drive add-on for the NES.

Size
140 × 170 mm
Copper layers
2
Thickness
1.6 mm
Parts
28
Nets
76
Pads
194
Tracks, vias
462, 36
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
29 Aug 2026
Updated
15 Oct 2026

Overview

Cdi is an open-source printed circuit board by ThroatyMumbo, from the ThroatyMumbo/NESCD repository on GitHub, published under the MIT licence. It is a 2-layer board of 140 × 170 mm with 28 parts on 76 nets, routed with 462 tracks and 36 vias.

It is built around the PCM5102APW. Its parts include 9 connectors, 8 capacitors and 1 resistor. It belongs with the retro computing and games boards of this library.

Main components

1

README

README.md

NESCD-001

NESCD-001

An unofficial homemade CD add-on for the NES, just because!

This repo contains the schematics, PCB, 3D printable STLs for the shell, sticker labels, and the firmware.

How it works

It's basically an RP2350B hooked up to both an Everdrive N8 Pro and an IDE CD drive. It reads the game ROM off the CD, uploads it to the Everdrive over USB and asks the menu to install it, then watches a mailbox byte in the cart's CHR RAM for the game to ask for music. The RP2350B is the coordinator in the middle that bridges the NES/Everdrive and the CD drive.

Project video: https://www.youtube.com/watch?v=6D8RWVwW4ZI

Hardware

  • The main PCB (see pcb/)
  • A standard 40-pin IDE CD drive
  • Everdrive N8 Pro

Build

text
cd firmware && ./flash.sh

Making a disc

The demo game needs cc65 (ca65/ld65), plus python3 with numpy, ffmpeg for the audio, and xorriso to burn.

text
cd game && make         # demo.nes, four music tracks, and build/demo.img
cd game && make burn    # burn build/demo.img and read it back to check

To put your own game on a disc, pass mkgamedisc.py an iNES ROM and one track per music byte:

text
python3 firmware/tools/mktrack.py theme.wav -o theme.rom --loop-start 4.2
python3 firmware/tools/mkgamedisc.py -o mygame.img --title "MY GAME" --nes mygame.nes --track 1=theme.rom --verify
firmware/burn.sh mygame.img

Using it

If everything goes right, you should be able to just put a burned disc into the CD drive while the NES is on and sitting on the Everdrive menu. It'll auto-boot the game once it's read and uploaded to the Everdrive.

Playing an audio CD

Arguably the most practical use for this thing: A CD player!

Insert the CD while on the Everdrive menu and it should automatically launch the player.

Audio CD player

FAQ

What?

Great question! I came up with the idea for this project while reading about the canceled SNES CD-ROM add-on. I was originally going to make my own version of that add-on, but decided it'd be funnier and weirder if I took it a step further and made one for NES.

Why?

Because it's fun.

Who?

It's me! Your old pal - Throaty Mumbo!

Where are the FMVs you showed in the video?

I chose not to include any FMV-related code here because to get that working I had to semi-reverse engineer Something Nerdy's Bad Apple!! Ultimate NES Demake, which is currently closed source. The team has mentioned they're planning to formally open source their MXM mapper (which this demo presumably uses, actually not sure) once their game Former Dawn is released. I didn't feel good about publishing reverse engineered code from an indie development team for my stupid meme project, especially when they have plans to release it themselves.

Why not stream audio from the Everdrive?

I originally wanted to do this, but was hitting a ceiling on the Everdrive USB bandwidth. I'd likely have to add some form of aggressive compression to make room. It's also a nice touch to use the expansion port instead.

The USB cable poking out on the front is by far the biggest blemish on the design of this contraption, so I did look at moving everything to the expansion port. Unfortunately the bandwidth there is even more limited than the USB route.

Plus, the expansion port audio allows more flexibility with mixing and volume control - hence the volume knob on the front.

How is this thing powered?

A single molex cable from a wall adapter (this one in particular). The 5V/12V rails are split between the CD drive and the board + the NES output. I took the end of a spare NES power cable and hooked it up to a buck converter that converts the 12V input to ~9.5V so you can power the NES as well (the plug pokes out of the top of the box). That way you only need one wall outlet to get the entire thing running. You can also power the NES separately from its regular adapter - the plug coming out of the NESCD is optional.

Couldn't you power everything off VRAW?

This was my initial plan, but it seemed tight considering the stock NES adapter (1.3A) has to power the NES, Everdrive, RP2350, DAC, and the CD drive. The power adapter for that Fideco drive sled I tested with initially outputs at 2A, so I figured a dedicated 2A molex adapter (which supposedly outputs 2A on 5V and 12V each, at least according to the label) would be the minimum. But honestly I didn't actually test running the CD drive and everything else off VRAW at the same time, so this was more of a cautious choice than based off of objective measurement. If it works it'd be a nice improvement for an eventual v2 design.

How do you get back to the Everdrive menu once you've inserted a disc?

This is still something I'm trying to figure out. AFAIK there's no way to trigger a soft reset on the NES. However one guaranteed solution is to hook up the NES power output rail to a relay switch. That way if the board ever needs the NES to reset, it can just turn it on and off from the source. Not super elegant but it should work.

Parts

28
QtyValueFootprintReferences
5100nCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC2, C3, C5, C6, C8
4M3MountingHole:MountingHole_3.2mm_M3_DIN965_PadH1, H2, H3, H4
1+12VTestPoint:TestPoint_THTPad_D1.5mm_Drill0.7mmTP3
1+3V3TestPoint:TestPoint_THTPad_D1.5mm_Drill0.7mmTP2
1+5VTestPoint:TestPoint_THTPad_D1.5mm_Drill0.7mmTP1
1100u/16VCapacitor_THT:CP_Radial_D6.3mm_P2.50mmC1
112V TO BUCKTerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_HorizontalJ4
11kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR1
122u/10VCapacitor_THT:CP_Radial_D5.0mm_P2.50mmC4
122u/16VCapacitor_THT:CP_Radial_D5.0mm_P2.50mmC7
1GNDTestPoint:TestPoint_THTPad_D1.5mm_Drill0.7mmTP4
1IDE 40Connector_IDC:IDC-Header_2x20_P2.54mm_VerticalJ5
1MOLEX INConnector_TE-Connectivity:TE_MATE-N-LOK_350211-1_1x04_P5.08mm_VerticalJ1
1MOLEX TO DRIVEConnector_TE-Connectivity:TE_MATE-N-LOK_350211-1_1x04_P5.08mm_VerticalJ2
1PANEL POT 10kConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ8
1PCM5102Acdi:PCM5102A_BoardA2
1PGA2350cdi:Pimoroni_PGA2350A1
1PWR SWITCHTerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-4-5.08_1x04_P5.08mm_HorizontalJ3
1SPARE GPIOConnector_PinHeader_2.54mm:PinHeader_2x10_P2.54mm_VerticalJ9
1SWD+UARTConnector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ7
1USB TO EVERDRIVEcdi:USB_Micro_DIP_1x05_P2.54mmJ6

Questions

How big is the Cdi PCB?

It measures 140 × 170 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Cdi use?

28 parts, built around the PCM5102APW. 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 Cdi KiCad files?

From the ThroatyMumbo/NESCD repository on GitHub, at the commit this page was made from: the board is pcb/cdi.kicad_pcb and its schematic pcb/cdi.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Cdi design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 6 layers243.8 × 243.8 mmRaven, the printed circuit board in 3D

    Raven

    agranlund/raven

    Homemade MC68060 + DSP56303 Atari-compatible computer. Hardware, firmware, and software stack

    331 parts87
  • 2 layers54 × 60.5 mmTape, the printed circuit board in 3D

    Tape

    jrowny/mixtape2

    My second iteration of a cassette-style mp3 player

    38 parts82MIT
  • 2 layers232 × 134 mmType2 v2, the printed circuit board in 3D

    Type2 v2

    Alxdreee/TYPE-2

    Touch-capacitive polyphonic synthesizer powered by ESP32-S3

    18 parts68GPL-3.0
  • 2 layers55 × 100 mmESP32AY revD2, the printed circuit board in 3D

    ESP32AY revD2

    djspawnbrest/ESP32AY

    ZxPod - ESP32 based AY multiformat player

    138 parts59GPL-3.0
  • 2 layers76 × 63.5 mmPicoTracker, the printed circuit board in 3D

    PicoTracker

    xiphonics/picoTracker-pcb

    Buy the official kit at xiphonics store # Trademark Notice

    98 parts36CC0-1.0
  • 4 layers40 × 100 mmJPL.mp3, the printed circuit board in 3D

    JPL.mp3

    jpetkauskas/JPL.mp3

    Files for ESP32 based MP3 player

    72 parts33
  • 2 layers58.8 × 55.7 mmAiO i2s DAC, the printed circuit board in 3D

    AiO i2s DAC

    martinroger/ipodesp32

    An iPod emulator for 2006-2013 BMW Mini Coopers that need Bluetooth

    102 parts24MIT
  • 2 layers135 × 135 mmVa5pcb, the printed circuit board in 3D

    Va5pcb

    iollama/Voice-Assistant-5

    ESP32-S3 push-to-talk voice assistant using OpenAI Realtime API

    16 parts21GPL-3.0