FPGA Game Boy MBC

IMG_20141204_201842~2

This is a project to build a complete Game Boy cartridge using an FPGA. The Game Boy thinks there is an actual game cartridge inserted and the game runs.

Some time ago I tried to simulate a hardware game cartridge by using an Arduino Due with the ROM contents stored in an SD card. The Due is quite fast but not enough to keep sending data to the Game Boy at sufficient rate. I was only able to show the “Nintendo” logo on boot.

BEihyHACIAEt08F

I started learning about FPGAs, CPLDs and Verilog, and I realized that recreating a Game Boy cartridge with them would be much easier.

Inside a typical game cartridge there is always a ROM chip, a battery backed up RAM chip (if the game stores saves) and a Memory Bank Controller (MBC). As the Game Boy’s 16 bit address bus offers only limited space for ROM and RAM addressing, many games are using MBCs to expand the available address space by bank switching.

I wanted to recreate all of this elements into a proto board by using an FPGA, an EEPROM chip, and some level shifters to accommodate the voltage levels from the FPGA (3V) to the Game Boy (5V).

With Verilog I was able to program a MBC1 clone so all the different memory banks are correctly translated.

In order to wire up the proto board with the Game Boy I used this special cartridge with exposed pins.

B2Rs4NuIcAAxt1W

For the FPGA I used this cheap Altera Cyclone II development board usually found on eBay.

altera-cyclone-ii-ep2c5t144-cpld-fpga-development-learning-board

I also tested the setup by using a CPLD, enough for simulating an MBC.  I used this Altera MAX II development board from eBay too.

CPLD-Minimum-System-Core-Board-Development-Board-MAX-II-EPM570-T100-Replace-EPM240-ALTERA-PLD-FPGA.jpg_640x640

This is Super Mario Land running on the whole setup.

FPGA Game Boy MBC