Virtual Boy Cartridge Programmer

Originally: April 8th, 2018
Last Updated: May 14th, 2018

Now with 128Mbit cart support!!!

I’ve been working on and off on a Virtual Boy cartridge programmer for several months. It’s hard these days to find the time to focus on a project and get it done. This really should have been a couple week project but regardless, here it is.

I originally built an adapter PCB to plug VB carts into an EETools ChipMax 2 reader/writer. That didn’t work out so well because the ChipMax 2 cannot tolerate much more line delay then its already has. I’ve since then also had additional problems programming the flash chips I use for VB cartridges using a newer ChipMax 2. There seems to be some compatibility issues with ChipMax 2 based on computer operating systems and the older flash chips I use. Shown below is my original ChipMax 2 VB cart adapter. I’ve used the ChipMax 2 for several years to program my 16Mbit chips but its now time to move on.

Rather than continue to struggle with Chipmax 2 issues, I decided to build my own VB specific programmer based on an Arduino Mega2560 R3 board. I’ve built my own EEPROM programmers in the past so I knew it wasn’t that difficult to do. That led to the build of a VB cartridge adapter PCB, or shield, that plugs into a Arduino Mega2560 R3 board to create a fully featured VB cart programmer.

VB Cart Programmer

The programmer shown in the picture above has been modified to support an SD card and an LCD so there are a few jumper wires now. It can dump any current VB game as well as program my 16Mbit custom VB cart. My 128Mbit custom VB cart is also now supported! This also gives me the ability to have the cart PCBs pre-assembled and then programmed after assembly with any file I choose. Now I don’t have to hand build carts which is super convenient!

My VB programmer has the ability to write both the flash space and SRAM space, as well as dump both of those to the SD card. Files that you want to program with are placed on the SD card and then can be selected to upload to the cart.

Erase, Blank Check, Read, Write, and Verify are all implemented for both Flash and RAM. This means save states for games can also be downloaded and saved offline. Below is a screenshot of an animated percent complete bar to show progress during any of the major operations.

VB programming complete

Just for fun I’ve also designed and implemented a very simple animation at boot-up of a Virtual Boy character walking across the screen. You can see the intro video below.

Here’s a close up GIF of the animation that’s easier to see. I have another one where the feet are animated but the display smear is so bad in these LCDs that the one without foot movement looks better.

This same character appears at the end of some program operations as shown below.

The user interface to the programmer is currently an ASCII based interface through a terminal program like RealTerm. It’s fairly easy to use. Operations are performed by issuing ASCII readable messages to the programmer surrounded by brackets <>. Below is a picture of the bootup messages and the initial ID of one of my 16Mbit carts. Then I’ve issued a command, which is print menu. The menu shows all the current operations capable. Most are the standard programming commands like read, write, verify, blank check but some are for debugging. The programmer connects to the terminal program using a virtual COM port at 500,000 baud and settings of 8,N,1, and no parity.

I have my enclosure design v0 done as well. Going for a very unique mini Virtual Boy enclosure. My initial design is shown below. I’m working on a rev 1 version now.

Here’s a few images of the first test print. Came out better than I hoped in colored PLA material via a FDM 3D print.

And a back view.

I’ll most likely build a hand full of them (10 or less) and even give a few to some of the VB homebrew game developers out there. Then its on to the next project! If you have any interest in this project, feel free to send me a message via my contact us page. Thanks!