{"id":36677079,"url":"https://github.com/aminch/bmc64-pcb","last_synced_at":"2026-01-12T10:51:39.005Z","repository":{"id":305548129,"uuid":"1002303343","full_name":"aminch/bmc64-pcb","owner":"aminch","description":"BMC64 all-in-one pcb for an original Commodore 64 case","archived":false,"fork":false,"pushed_at":"2026-01-02T11:37:28.000Z","size":10367,"stargazers_count":5,"open_issues_count":2,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-01-07T09:27:57.638Z","etag":null,"topics":["c64","commodore-64","pcb"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aminch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-15T06:59:33.000Z","updated_at":"2025-12-31T08:16:15.000Z","dependencies_parsed_at":"2025-09-06T19:16:03.723Z","dependency_job_id":"0c178769-9293-4c3d-952c-d2e16ea6107a","html_url":"https://github.com/aminch/bmc64-pcb","commit_stats":null,"previous_names":["aminch/bmc64-pcb"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/aminch/bmc64-pcb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aminch%2Fbmc64-pcb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aminch%2Fbmc64-pcb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aminch%2Fbmc64-pcb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aminch%2Fbmc64-pcb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aminch","download_url":"https://codeload.github.com/aminch/bmc64-pcb/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aminch%2Fbmc64-pcb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28338846,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T10:40:25.642Z","status":"ssl_error","status_checked_at":"2026-01-12T10:39:27.820Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c64","commodore-64","pcb"],"created_at":"2026-01-12T10:51:38.908Z","updated_at":"2026-01-12T10:51:38.986Z","avatar_url":"https://github.com/aminch.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# BMC64 PCB\n\nThe BMC64 PCB combines together a [Raspberry Pi 3B+](https://www.raspberrypi.com/products/raspberry-pi-3-model-b-plus/), [Waveshare RP2040-Zero](https://www.waveshare.com/wiki/RP2040-Zero), original joystick ports, and USB-C power in a single drop-in board which fits straight into an original breadbin or C64C case with an original C64 keyboard.  It's powered by the fantastic C64 emulator [BMC64](https://accentual.com/bmc64/) and all ports are moved to suitable positions inside an original C64 case for easy access without any case modifications needed! You can also connect up the original LED.\n\n- [BMC64 PCB](#bmc64-pcb)\n  - [Revisions](#revisions)\n  - [PCBs \\\u0026 Parts](#pcbs--parts)\n    - [Main PCB](#main-pcb)\n    - [MicroSD card adapter board](#microsd-card-adapter-board)\n    - [BOM](#bom)\n    - [Ordering PCBs](#ordering-pcbs)\n    - [Schematics](#schematics)\n    - [Compatibility](#compatibility)\n      - [Keyboards](#keyboards)\n      - [Cases](#cases)\n  - [Assembly](#assembly)\n  - [Software](#software)\n    - [Alternative software](#alternative-software)\n    - [Debugging BMC64](#debugging-bmc64)\n  - [History](#history)\n    - [4.0](#40)\n    - [2.2](#22)\n    - [2.0.5](#205)\n    - [2.0.4](#204)\n    - [2.0.1](#201)\n    - [1.2.1](#121)\n    - [1.2](#12)\n    - [Pre-PCB solutions](#pre-pcb-solutions)\n  - [Disclaimer](#disclaimer)\n\n## Revisions\n\nIn the spirit of the original Commodore 64, there are two main sizes of the BMC64 PCB, just as there were two main sizes of [motherboards](https://www.c64-wiki.com/wiki/Motherboard) used in Commodore 64s. I'm even reusing the same naming convention. The longboard and shortboard. The longboards are the original versions of the BMC64 PCB named because the PCB was larger than newer shortboard versions. They use both the expansion (cartridge) port and cassette port holes in the case to expose the HDMI, USB and MicroSD card ports. The short board was introduced in v 2.2. It's smaller and only uses the expansion (cartridge) port to expose the HDMI, USB and MicroSD card ports. \n\nThere have been three major revisions on the BMC64 PCB.\n\n * Shortboard (v4.0) - current, details in this README\n * [Shortboard (v2.2)](SHORTBOARD22.md) - DEPRECATED\n * [Longboard (v1.2 - v2.0.5)](LONGBOARD.md) - DEPRECATED\n\nIf you have an existing PCB it can be [modified](MODIFICATIONS.md) to support the features and firmware for v4.0. Proceed with modifications **AT YOUR OWN RISK**. If in doubt just order new v4.0 PCBs. \n\n## PCBs \u0026 Parts\n\n### Main PCB\n\n![BMC64 PCB](images/bmc64-pcb-v4.0.png)\n\n### MicroSD card adapter board\n\n The adapter board is used to connect the MicroSD slot on the Raspberry Pi 3B+ to the main PCB\n\n![MicroSD card adapter](images/MicroSD-adapter-pcb-v1.1g.png)\n\n### BOM\n\nFull [BOM](bom/bom.md) of parts needed.\n\n### Ordering PCBs\n\nI ordered the PCBs via [JLCPCB](https://jlcpcb.com/) with just the standard settings. The main PCB was the standard 1.6mm thick, but it is important to order the MicroSD adapter board in **0.6mm** or **0.8mm** thick or it will be too big to fit into the microSD slot on the Raspberry Pi 3B+!\n\nCheck the [Releases](https://github.com/aminch/bmc64-pcb/releases/latest) for the gerber files.\n\n### Schematics\n\n![BMC64 PCB Schematic](schemantics/Schematic_BMC64-PCB-V4.0_2026-01.png)\n\n![MicroSD card adapter](schemantics/Schematic_MicroSD-Adapter-V1.1_2025-07.png)\n\n### Compatibility\n\n#### Keyboards\n\nBMC64 PCB is compatible with:\n\n * Original C64 keyboards\n * [Mechboard 64](https://www.retrofuzion.com/products/mechboard-64-fully-backlit) (support added in v4.0).\n  \nTo support the [Mechboard 64](https://www.retrofuzion.com/products/mechboard-64-fully-backlit), it needs to have the 5V on pin 4 of the C64 Keyboard header active. You can just connect the 5V directly from the main 5V voltage input, it works, kinda, but there is not enough stable voltage from the microcontroller to keep the LEDs a constant brightness. I added a header on which you can install an optional Canton-Power DDO603SA 5V Buck-Boost Converter Module which looks to have solved the problem. (See assembly)\n\nNote: If you are using an original C64 keyboard you can just leave the header for the DDO603SA unpopulated, it is not required.\n\n#### Cases\n\nBMC64 PCB fits inside both the original breadbin and C64C cases. It mounts to the original mounts and reuses existing holes in the case, no modifications required.\n\n## Assembly\n\nThe first step in assembly is to attach the microSD adapter board. We will do this by inserting the adapter into the Raspberry Pi 3B+, loosely assembling it in place, then tack soldering the adapter board to the correct location:\n \n * Attach the M2.5 nylon stand-offs to the four corners on the board where the Raspberry Pi 3B+ will be mounted.\n * Cut two 1x4 sets of header pins from the 1x20 header pins in the [BOM](bom/bom.md).\n * Slide the MicroSD adapter into the Raspberry Pi 3B+.\n * Place the 2 sets of 1x4 headers on the main PCB.\n * Place the Raspberry Pi 3B+ on the nylon stand-offs while inserting the header pins into the MicroSD card adapter.\n * Put two (or more) screws into the Raspberry Pi 3B+ to hold everything in place.\n * Place solder on the outer pins on top to holder the header pins in place\n * Flip the board and solder the outer pins on the headers too.\n * Flip the board and carefully remove the Raspberry Pi 3B+, and it should look like the picture below.\n\n![MicroSD card adapter positioning](images/microsd-adapter-position.jpg)\n\n * Confirm that the positioning is ok by placing the Raspberry Pi 3B+ back on the adapter.\n * Adjust the board if needed by reheating the solder on the pins until you're happy.\n * Remove the Raspberry Pi 3B+ again.\n * Complete the final soldering on all of the header pins.\n\nAll of the other parts are labelled on the board. Start with the smallest components and work your way up until everything is attached. The list of parts to attach are below and the finished board should look as in the picture:\n\n * USB-C power port, 2x 5.1K resistors and 2x 0.1µF capacitors\n * Main power switch and fuse\n * 2x DB9 joystick ports and IC Regulator \n * GPIO header\n * 390ohm resistor \u0026 1x3 LED header\n * 2x Stacked USB 3.0 ports\n * 1x20 header pins (for C64 keyboard)\n * 2x 1x9 and 1x 1x5 female headers for mounting the RP2040-Zero\n * MicroSD card slot\n * Mechboard 64 support (optional):\n   * Cut 1x4 header pins from the 1x20 header pins in the [BOM](bom/bom.md).\n   * Solder the pins into the header below the GPIO header\n   * Solder the DDO603SA 5V Buck-Boost Converter Module onto the pins\n * 1x6 female header for FTDI232 debug points (optional)\n\n![BMC64 PCB](images/bcm64-pcb-v4.0.jpg)\n\nYou'll need to flip the board for the final components\n\n * 4x TVS diodes in the ESD1-4 positions next to the joysticks\n\n![BMC64 PCB](images/bcm64-pcb-bottom-v4.0.jpg)\n\nTo assemble the final parts:\n\n * Push the Waveshare RP2040-Zero into the female headers on the board.\n * Attach the Raspberry Pi 3B+ to the nylon stand-off with screws being careful to slide in the microSD card adapter in the process.\n * Attach the Waveshare RP2040-Zero to the Raspberry Pi 3B+ with a short usb C-A cable.\n * Connect the two USB ports to two of the Raspberry Pi 3B+'s usb ports with the short usb A-A cables.\n * Connect the Raspberry Pi 3B+ to the GPIO connector with the 40pin GPIO ribbon cable. (Note: Cut the cable to suit if desired)\n * Replace the plastic switch on the main switch with the smaller one included in the [BOM](bom/bom.md). (This is needed for the switch to fit correctly in the hole in the C64 case)\n * The finished board should be ready to drop into the case! It should look like it does below:\n\n![BMC64 PCB with Raspberry Pi](images/bcm64-pcb-with-pi-v4.0.jpg)\n\nThe fitment of the board inside a C64 breadbin case is shown also shown above. All ports, the power switch and USB-C power connector use the existing holes in the case. It is mounted using screws to the existing stand-offs inside the case. It has mounting holes compatible with the breadbin and C64C cases.\n\n## Software\n\nIt runs the [BMC64](https://accentual.com/bmc64/) emulator. Install this onto a MicroSD. You will need to run with the GPIO Config Option #1, and `positional` setting for the keyboard.\n\nYou will need to install the latest [C64P](https://github.com/aminch/c64p/releases) firmware on the RP2040-Zero (**do not use** the legacy uf2 file). Do this by connecting it to a PC then dropping the firmware on the drive that is attached. \n\nFor the first run of BMC64 you will need to switch the keyboard into BMC64 mode by pressing `RUN/STOP + F3`. (For details see: [C64P Readme](https://github.com/aminch/c64p))\n\n**Note:** This is a basic PCB. It's designed only for use with the BMC64 emulator, it's not recommended to use any other software on your Raspberry Pi 3B+ when using this PCB. See disclaimer below.\n\n### Alternative software\n\nWith the release of v2.0.5, it's now possible to use a [Pi 4B](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/) or [Pi 5](https://www.raspberrypi.com/products/raspberry-pi-5/) (recommended).\n\nNote: BMC64 **IS NOT COMPATIBLE** with Pi 4B or Pi 5!!!\n\nIf you use a Pi 4B or Pi 5 you need to run Pi OS then install emulators on PiOS and configure them up to use the GPIO joystick ports. To make this easy you can use [8-bit PC Pi compile](https://github.com/aminch/8-bit-pc-pi-compile), a repository that contains scripts to install Vice and Atari800 emulators onto PiOS Lite. It also includes a menu and configuration to support the bcm-pcb.\n\nC64P also includes a Vice mode to work with an original C64 keyboard. You need to press `RUN/STOP + F5` on first launch. (For details see: [C64P Readme](https://github.com/aminch/c64p))\n\n### Debugging BMC64\n\nAn optional debug port can be populated with a 6 position female header. This header connects directly to the [UART port](https://pinout.xyz/pinout/uart) on GPIO pins 14 and 15. The port is labelled with ground (GND), TX and RX, and can use any appropriate debug probe but it has been designed to be pin compatible with a [FTDI FT232RL Type-C to TTL Serial Converter Adapter Module](https://www.aliexpress.com/item/1005007081543813.html) which are super cheap and common on Aliexpress. It is attached to the board as shown below and connected to the computer via USB.\n\n![BMC64 PCB with Debug Probe](images/bcm64-pcb-with-debug-probe-v2.2.jpg)\n\nThe debug probe is used to view the output log from the BMC64 emulator while it's running to debug problems. You plug in the debug probe and connect with an application such as Putty e.g.\n\n```\n sudo putty /dev/ttyUSB0 - serial -sercfg 115200,8,n,1,N\n```\n\n## History\n\n### 4.0\n\nChanges for the 4.0:\n\n * Major version alignment with BMC64 PCB, C64P PCB, and C64P firmware. All are v4.\n * Added optional support for [Mechboard 64](https://www.retrofuzion.com/products/mechboard-64-fully-backlit)\n * C64P updated to v4.0\n * Positioning adjustment for RP2040-Zero, USB 3.0 extensions and C64 keyboard header for easier connecting.\n\n### 2.2\n\nChanges for the 2.2:\n\n * Board redesigned into the smaller shortboard footprint\n * Raspberry Pi Pico replaced with RP2040-Zero\n * C64P updated to PCB v2.0 specifications and pinout\n * USB 3.0 stacked extension replaces single USB 2.0 ports\n * C64 keyboard, LED and Debug headers repositioned for smaller size\n\nCheck out [this blog post](https://retro.minch.io/2025/09/bmc-pcb-22-with-bmc64/) for details of the journey from v1.2 to v2.2.\n\n### 2.0.5\n\nChanges for the 2.0.5:\n\n * Repositioning of MicroSD card, USB ports extensions and LED connector\n * Increased trace thickness for VCC / GND on MicroSD adapter\n * MicroSD adapter now compatible with Pi 4B \u0026 Pi 5\n\n### 2.0.4\n\nChanges for the 2.0.4:\n\n * Added debug port to direct connect a FTDI232\n * Extend PCB cut outs for switch for better clearance\n * Minor trace repositioning and clean up\n\n### 2.0.1\n\nChanges for the 2.0.1 model were:\n\n * ESD protection with TVS diodes added to the joystick ports\n * Added an additional rear facing USB port\n * Repositioned the keyboard header for a cleaner connection\n * Adjusted the mounting holes for better fitment\n * Thicker traces for main power rail\n * Repositioned traces to avoid foot of keyboard mount for C64C case\n \n### 1.2.1\n\nSmall adjustments on SD_CONN, main power switch and external USB port for improved fitment.\n\n### 1.2\n\nTo read the journey from the prototype V1.0 PCB to the V1.2 check out the blog post: [All in One BCM64 PCB](https://retro.minch.io/2025/06/all-in-one-bmc64-pcb/)\n\n### Pre-PCB solutions\n\nBefore I went for the single PCB solution I had tried many options to make a clean build for a **new** C64. You can read about that in the series of blog posts I made (link below). You can also find information about the choices I made in this project, such as not connecting an original C64 keyboard directly via GPIO but going for the USB keyboard option.\n\n* [Building a Commodore 64 - Part I - (Why!?!)](https://retro.minch.io/2021/12/building-a-commodore-64-part-i-why/) - The whole journey to here\n* [Building a Commodore 64 - Part VIII - (BMC64 Keyboard)](https://retro.minch.io/2022/02/building-a-commodore-64-part-viii-bmc64-keyboard/) - USB keyboard choice specifics \n* [C64P - BMC64 Keyboard](https://retro.minch.io/2023/04/c64p-bmc64-keyboard/) - Original C64 USB Keyboard adapter\n\n## Disclaimer\n\nThis project is just a fun personal experiment for education and is not intended for professional or commercial use. I'm not an electrical engineer, so please use any information, code, or designs here at your own risk. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faminch%2Fbmc64-pcb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faminch%2Fbmc64-pcb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faminch%2Fbmc64-pcb/lists"}