Allison’s Bootleg Cart

🎇🎇 PLEASE NOTE: This project is currently in pre-release. All the information is online, but there will likely be compatibility-breaking changes to both hardware and software in the next few weeks or months. 🎇🎇

Allison’s Bootleg Cart (ABC) is a flash cart for the Game Boy (DMG, Pocket, Color and backwards-compatible GBAs). Using a cartridge flasher like GBxCart, you can copy ROMs from your computer to the cart and play them on your handheld. The project started out as an excuse for me to learn RP2040 PIO programming and to learn more about Game Boy internals, but I think the design I came up with is pretty okay and I want to share it with others. So here we are!

Oh btw I’m Allison. Thank you for your interest in my project!

a photo of the cart in a clear shell

If you want to get a little bit deeper into the technical nitty-gritty, I wrote a detailed explanation of how Game Boy cartridges work which includes information and strategies about designing your own Game Boy cartridge from scratch.

Vital information

Please note that the USB port on the cartridge is only for updating cartridge firmware. You cannot upload ROMs to the cart using the USB port! You’ll need to use a cartridge flasher like GBxCart to do that.

I am currently selling a handful of (unpopulated) PCBs at-cost in my Ko-fi shop.

The components of ABC are split across three code repositories:

The firmware and multicart launcher repositories have pre-built binaries, and the PCB repository has exported fabrication files that you can send off to your favorite PCB fabricator (PCBWay, JLCPCB, etc.). The PCB repository also has a bill of materials and links to pre-made shopping lists for components.

Here are the steps you’ll need to follow to build a cart from scratch:

As an aid to placing components, I exported an interactive BOM from KiCad (using the excellent InteractiveHtmlBom plugin).

You’ll also probably want an aftermarket cartridge shell to put the PCB in (like one of these or one of these), and a CR2025 coin cell battery to power the on-cartridge RAM.

If you want to use ABC’s multicart functionality, you need to use the ABC multicart firmware, and then flash the multicart launcher ROM to the cart. (See the multicart launcher repository for further information).

⚠️ Note that building the ABC from scratch is probably not a good beginner project, as it involves soldering small SMD components in fairly tight spaces.

Why ABC?

There are lots of other flash carts out there for the Game Boy, and honestly there’s not much to recommend mine over any other, from a practical perspective. But there are a few things about ABC that make it stand out:

I’ve successfully tested ABC with the original Game Boy (DMG), the Game Boy Pocket, the Game Boy Color, and both Game Boy Advance models. Compatibility with other handhelds (e.g. Analogue Pocket, FPGBC, etc.) is currently unconfirmed, since I don’t own any of them.

ABC supports up to 8MB of flash storage and 256KB of SRAM, and this is the recommended configuration. (You can use chips with less capacity, but the multicart functionality will be compromised.)

MBC support

MBC stands for “memory bank controller.” The MBC is the chip on a Game Boy cart that allows it to access more than 32KB of memory, and also sometimes provides access to specialty hardware included on the cartridge (such as a real-time clock or accelerometer). There were many different MBCs in use during the Game Boy’s heyday, and each type of MBC has a distinct software interface and distinct functionality. The microcontroller on ABC “emulates” the functionality of a number of MBC varieties in software.

Currently, there are firmware builds to support the following MBCs:

Games with no MBC (e.g., Tetris) are also supported.

Questions and answers

Some QTIAWBFAs (questions that I anticipate will be frequently asked):

This thing has a USB-C port, so I’ll definitely be able to upload ROMs over USB, right?

Nope! The USB-C port is only for updating the cart’s firmware. (In the current cart design, the microprocessor is only connected to three of the sixteen lines of the address bus, and consequently it’s not possible to update the onboard parallel flash chip programmatically with the microprocessor.) You’ll need a cartridge flasher to get ROMs onto the cart. I used insideGadgets’ GBxCart during design and development and it’s the cart flasher that I recommend.

Why are you using the old, busted RP2040 chip when RPi has blessed us with the new RP2350 hotness?

I started the PCB design in 2022, long before the RP2350 was announced. The RP2040 remains widely available, and very inexpensive, and works just fine for ABC. (I am working on a new flash cart design centered on the RP2350B, which has many more GPIOs and opens up a number of interesting possibilities.)

Can I use this cart for Pokémon?

First generation games (Red, Blue, Yellow) are fully supported. Second generation games (Gold, Silver, Crystal) are not, since they require a working real-time clock, which this cart does not have.

Can I use this cart to play Kirby Tilt n’ Tumble?

There isn’t an accelerometer on the cart, and there is no software support for MBC7 currently. So, no, you can’t. (I do think it would be technically feasible to add an accelerometer and code for MBC7 support, though. Feel free to send me a patch.)

What about Net de Get: Minigame @ 100??

Come on, man.

Acknowledgements

Game Boy hackers are lucky to live in a world where we have documents like Pan Docs and Game Boy: Complete Technical Reference. If I have seen far, it is by standing on the shoulders of gekkio.

Thanks also to the folks on the Modded Gameboy Gameboy Club Discord server who gave encouragement and talked me through a bunch of problems, and in particular BucketMouse for this and other great technical documentation about Game Boy cartridges.

InsideGadgets’ GBxCart RW was an invaluable tool during the development process, and this series of blog posts provided vital information I needed to find my footing.

I spent a lot of time with this document describing Game Boy memory timings.

License

Please check the individual repositories (firmware, hardware, multicart launcher) for details about how each component is licensed.

The contents of this website are published under the CC BY-NC-SA license. Use of the contents of this website as part of a dataset to train a machine learning model is allowed, under the terms of this license. (For example, a model that includes this website as part of its dataset must explicitly credit me among its contributors, and must be distributed under the same license as the website itself. Also, any model making use of this website in its data set must not be used for commercial purposes.)