BMC64: a bare metal C64 emulator for the Raspberry Pi
A bare metal Commodore 64 emulator for the Raspberry Pi 1/2/3 with true 50hz/60hz smooth scrolling, low input latency and better audio/video sync.
At a glance
- What is it?
- BMC64 boots a Commodore 64 emulator straight into RAM on a Raspberry Pi, with no Linux underneath, frames timed to vsync and input latency low enough for action games. The price is a hardware ceiling: Pi 4 and later are explicitly out of scope.
- Who is it for?
- Adopt BMC64 if you want a dedicated Commodore machine in the style of the hardware it emulates, you have a Pi Zero, Zero 2W, Pi 2 or Pi 3, and you would rather have a four second boot into the emulator than a general purpose Linux system. Do not adopt it if you own a Pi 4 or a Pi 5, because the README states those are not supported, and check the gamepad situation before you plan a party, since USB Bluetooth gamepads are not supported directly.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly C, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The emulator is the operating system
BMC64 is a bare metal C64 emulator for the Raspberry Pi Zero, 2 and 3, and the phrase bare metal is doing the real work in that sentence. The README states that the project uses VICE for emulation without any operating system distribution installed on the Pi, with the VICE platform dependencies satisfied using circle-stdlib. So the Pi boots straight into the emulator, and the result is a quick boot time of about 4.1 seconds for a C64 over composite. That number is the clearest expression of the design goal, because a normal Raspberry Pi boot followed by an emulator launch is orders of magnitude slower and involves a login, a desktop or a window manager and a compositor. Nothing about the Commodore experience survives in this project, and that is the point. You get a machine that behaves like a C64 rather than a Raspberry Pi that happens to be running an emulator.
Vsync timing is the feature that matters
The features list leads with timing. Frames are timed to vsync for true 50 or 60 hz smooth scrolling with no horizontal tearing, and the project description adds low latency between input and video and audio. Those two properties are what separates a bare metal emulator from an emulator running on a general purpose system with a display server in between, and they are exactly the properties a player notices in a scrolling game rather than in a static screen. The README also notes that no shutdown sequence is required, you just power off, which is a small but telling detail about the whole approach, since the state is not managed by an operating system that would want to flush anything. Compatibility is borrowed from existing emulators, with high C64 compatibility thanks to VICE and high Plus/4 compatibility thanks to Plus4Emu on the Pi 3, so BMC64 is not a new emulator core but a new way to run an existing one.
Pi 4 and later are out of scope
The limitations section is short and firm. BMC64 only supports the Pi Zero, Pi Zero 2W, Pi 2 and Pi 3 based devices, and the README states explicitly that Raspberry Pi 4 and greater is not supported. That is an unusual position in 2026, when a Pi 5 is a common purchase, and it is worth understanding why before you buy hardware. The project targets a specific class of device, and the scope document linked from the README describes the priorities and what is considered out of scope. Second limitation: USB Bluetooth gamepads are not supported directly but can be connected through the 8BitDo USB Wireless Adapter 2, and the README adds a candid note that not all gamepads will work. Third: 8BitDo Retro Keyboards, including the C64 model, are supported over USB or a 2.4GHz receiver, which is where the community projects for cases and PCBs come in.
Five machines ship in one release
Since version 3.0, all the machines are bundled into one release for all Pi models, and you switch between them from the Machine menu. BMC64 covers four more Commodore machines besides the C64, namely the C128, the Vic20, the Plus/4 and the PET, which turns a single Pi into a small rack of period machines. The build system reflects that bundling, with separate top-level makefiles named Makefile-C64, Makefile-C128, Makefile-PET, Makefile-Plus4, Makefile-Plus4Emu and Makefile-VIC20, plus a shared Makefile and helper scripts including make_machines.sh, make_all.sh, make_release.sh, build_sdcard.sh and get_gnu_toolchain.sh. The toolchain is the Circle standard library built for bare metal ARM, and the main Makefile points at third_party/circle-stdlib/libs/circle with the newlib directory under arm-none-circle:
CIRCLEHOME = third_party/circle-stdlib/libs/circle
NEWLIBDIR = third_party/circle-stdlib/install/arm-none-circle
VPATH = srcA web UI, profiles and networking live inside the image
The source tree shows what the system does once it boots. There is a webui/ directory with separate objects for the HTTP layer, the filesystem, machine selection and assets, which corresponds to a documented Web UI, and a profiles/ directory with a store, a boot profile, a machine profile and a key value store, which matches the Profiles documentation. A bmcmodem.o and a network_time_sync.o sit next to the vice network object, which is the network support the README mentions for things like bulletin board systems and C64 operating system networking, with a separate make_wifi_firmware.sh script for the wireless part. The keyboard directory holds a router, a layout dispatcher and a set of layouts for US, UK, Norwegian, French, German, Latin American, C64, positional and maxi keyboards, and the sdcard/ directory plus an entry point in the fatfs addon of Circle handle the storage side. A small updater is also built in, controlled by updater.cfg.
Release discipline and the licensing picture
The releases are frequent and well organised, with v5.2.0 on 2026-09-26, v5.3.0 on 2026-10-17 and v5.3.1 on 2026-10-18, and the last push was on 2026-10-18. The README separates stable releases from pre-releases, where the pre-releases carry unreleased features for testing, and it also points to older releases before version 5.0.0 hosted elsewhere. A CHANGELOG.md sits at the root, and the repository contains a check_release_files.sh script, which suggests the packaging is verified as part of the release rather than assembled by hand. Licensing is GPL-3.0 for BMC64 itself, with a separate document for third-party software, and the tree carries a third_party/ directory that holds the circle-stdlib, the VICE 3.3 sources, common code and zlib, so the licence situation has more than one layer and the third-party document is the one to read before you redistribute a build.
Editorial conclusion
Adopt BMC64 if you want a dedicated Commodore machine in the style of the hardware it emulates, you have a Pi Zero, Zero 2W, Pi 2 or Pi 3, and you would rather have a four second boot into the emulator than a general purpose Linux system. Do not adopt it if you own a Pi 4 or a Pi 5, because the README states those are not supported, and check the gamepad situation before you plan a party, since USB Bluetooth gamepads are not supported directly. Verify first that your Pi model is in the supported list, read the project scope document to see what the maintainer considers in and out of scope, and use a stable release rather than a pre-release if you want the composite video and input path to behave as documented.
Frequently asked questions
What is BMC64 and how does it differ from running VICE on Linux?
BMC64 is a bare metal C64 emulator for the Raspberry Pi. The README says it uses VICE for emulation without any operating system distribution installed on the Pi, with the platform dependencies satisfied by circle-stdlib, which gives a boot time of about 4.1 seconds for a C64 over composite.
Which Raspberry Pi models are supported?
Only the Pi Zero, Pi Zero 2W, Pi 2 and Pi 3 based devices. The README states explicitly that Raspberry Pi 4 and greater is not supported, and points to the project scope document for the priorities behind that decision.
Which Commodore machines can BMC64 emulate?
The C64 plus four more, the C128, Vic20, Plus/4 and PET. Since version 3.0 all machines are bundled into one release for all Pi models and you switch between them from the Machine menu, and Plus4 emulation can use the more accurate Plus4Emu on the Pi 3.
Can I use a gamepad with BMC64?
USB Bluetooth gamepads are not supported directly, but they can be connected through the 8BitDo USB Wireless Adapter 2, and the README warns that not all gamepads will work. 8BitDo Retro Keyboards, including the C64 model, are supported over USB or with a 2.4GHz receiver.
How is BMC64 built?
With per-machine makefiles at the top level, Makefile-C64, Makefile-C128, Makefile-PET, Makefile-Plus4, Makefile-Plus4Emu and Makefile-VIC20, plus scripts such as make_machines.sh, make_all.sh, build_sdcard.sh and get_gnu_toolchain.sh. The main makefile builds against the Circle standard library and the VICE 3.3 sources vendored under third_party/.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/randyrossi-bmc64)Was this useful?