TapeDump GB: Dump GameBoy cartridges without any custom hardware!

TapeDump title screenThis is a rudimentary program (but it works!!) that allows you to dump GB cartridges to computer without anything more than a GB devcart / flashcart (like the Everdrive) and a regular PC or digital audio player with sound recording function. Or if you have a TTL 5V UART/Serial dongle, you can dump games using that and a terminal program.

_____

Its basic method of operation is this: boot up TapeDump from a cartridge, swap the cartridge (slightly risky) with the one you want to dump, and then either 1) save the bits spewed out the GB link port (pin 2) using serial terminal software; or 2) record the digital audio dump as a 300-2400 bps stream of shrieks.

This is not the first such program written on the GameBoy. I have found at least two other dumping programs on the GB written by other people, but they both rely on custom software on microcontrollers like a Raspberry Pi to communicate with the GB using its SPI-like protocol, etc. There is no program that simply connects in a dumb (extra hardware-free) way between the GB and your PC. So that's why I made TapeDump. Feel free also to check out TapeDump for the NES/Famicom.


Getting Started...

You need a way to get this program loaded onto the GameBoy, of course. Typical ways include running it on an Everdrive cartridge, or on an EPROM or EEPROM devcart. Once the program starts up, you can choose a dumping method among two UART speeds, and several KCS audio speeds. TapeDump's main program has loaded itself into RAM and is running from there, meaning it will (ideally) keep running even after you have removed the devcart and inserted your target cartridge for dumping.

*FOR UART Dumping:
Wire your GB Link Port pins 6 (GND) and 2 (Data Out) to the equivalent GND and TxD (or failing that try RxD) pins on a 5V TTL serial adaptor connected to your computer.

Serial TTL (alias FTDI, alias UART, alias 5V serial) is becoming more popular these days since they are used to program Arduinos and the like.

Capture the incoming serial data using a Terminal program on your PC.

*FOR KCS Audio Dumping:
Plug a straight headphone cable into your GameBoy and connect the other end to the Line In jack on your PC or audio recorder. Make sure your GB's volume knob is at maximum volume.

Capture the incoming sound using digital audio recording software on your PC.

(FTDI) TTL USB cable
(FTDI) TTL USB board

 

When the program has loaded and is running in RAM, it will show some basic instructions. You can remove your EPROM/Dev cartridge and insert the cart to be dumped.

Safety Notes:

*1: Removal or insertion of cartridges while the GB power is on runs the risk of damaging either the cartridge, its save RAM or the system itself. Do so at your own risk!

*2: If you use an original DMG unit, you'll need to cut off the locking tab on the power switch, which prevents you from removing a cartridge with the power on. If you don't want to do any surgery to your GameBoy, you'll need to dump from a GB Color or SuperGameBoy (2) since those don't have the locking tab.

*3: To reduce the occurrence of CPU crashes, remove and insert your cartridges quickly. My program also has a spinning bar in the lower-left corner of the screen as a way of showing it's still running.

 

Explanation of initial controls
Press Select -
Mode displayed:
Result

These settings select the data rate at which bits will spew out of the GameBoy. For KCS Audio, 300 bps is the most reliable but also the slowest, taking about 2:50 to transfer 4K of data.

UART 8192 BPS
Link Port serial UART dump at 8192 bps
This method uses the GB's internal Link Port serial bit shifter to take care of the baud rate. Since a standard UART serial frame is reversed and quite different from the Link Port frame, TapeDump needs to reverse the bits and pad with more stop bits, to send a 10-bit UART frame in 16 bits that the GB hardware can send out automatically.

UART 1024 BPS

Link Port serial UART dump at 1024 bps
This method is slower, since it's "bit-banging" each byte of data of a UART frame (10 bits) into 10 bytes that the GB hardware can shift out at its own pace.
-KCS-1200 BPS
Audio Out KCS dump at 1200 bps
This dumps each byte as a combination of 1200Hz and 2400Hz square wave tones, with the number of cycles for each bit being strictly counted by the CPU. Audio is produced by toggling the output from the GB's sample channel (containing all $FFs) on and off.
-KCS- 600 BPS
KCS dump at 600 bps
"
-KCS- 300 BPS
KCS dump at 300 bps
"
KCS 2400@44Khz
KCS dump at 1200 bps * Double-Frequency
2400 bps is an experimental speed, meaning reliability is not guaranteed, but you should try it out, making note of its special requirement that recordings be fed into the KCS08 program at 44100 Hz bitrate.
Press A - Send entire cartridge as a binary dump

This is the usual next step -- TapeDump should, hopefully, dump the entire cartridge and send it as a regular .GB formatted file.

Go and make a cup of tea, because here are the:

Dumping times for the average cartridge
bps
300
600
1200
2400
UART 1024
UART 8192
128K ROM
80m
40m
20m
10m
25m
4m28s
256K ROM
160m
80m
40m
20m
51m
9m
Press B during dumping

Dumping should be cancelled (after a short delay).

Press UP
Displays the Help Menu as seen near the top of this page.

Start Dumping!

UART Serial Dumping:

This really couldn't be simpler. With your serial adaptor connected to your computer, start up your favourite Terminal software (I like TinyBootloader for binary dumping), set its baud rate to 8192 or 1024 bps, turn off any hardware handshaking, and set a file destination to capture incoming data on your computer. Then start the dump in TapeDump.


KCS Audio Dumping:

If you have any experience with old home computers, the following won't be a surprise. If you don't, you might be amused at how low-tech it is. Old '70s and '80s home computers used audio cassette tapes as a storage device, saving files at rates of 300-1200 baud by sending each byte serially as 11 bits encoded into loops of 1200/2400 Hz tones. A standard was set for this method, known as the "Kansas City Standard" or "Byte" (the magazine, not the data size) standard.

My program should conform more or less to this standard as well, meaning you can use KCS decoding programs on the PC to retrieve cartridge dumps from the GB. When dumping starts, the screen will show "DUMPING", a ~3 sec. leader tone will sound, and the program will dump data at the selected bps rate, as a high-pitched screech through the digital audio channel of the GameBoy. Record this audio output to your PC sound card... or an old cassette tape if you really want to be retro.

         

Record the audio on your computer at 22050 Hz or higher, and be sure to save it in a lossless format, such as WAV or AIFF. (Lossy formats such as MP3 and others apparently introduce too many overtones and distortion in the signal to be useful for anything over 300 bps.) You can then use software to decode the audio file back into binary data. I recommend the simple and effective KCS08 program (That Link again) for decoding on PCs.

Note about the bps rate: 300-1200 bps are "standard" in the KCS format, and can be recorded at 22050 Hz, 8-bit, as the KCS08 program requires. The 2400 bps rate is experimental and thus less reliable. For 2400 bps, you should record at 44100 Hz and save the audio file at that sample rate and at 8-bit. (KCS08 requires a 22050 Hz file, but at twice the pitch and twice the sample rate, it's fooled into thinking it's a regular 1200 bps dump.)

If the KCS08 program gives you a big fat error, double-check that your WAV file is indeed in MONO, 8-bits, and double-check that it uses the correct sampling rate, either 22050 Hz or 44100 Hz. Also, try using the -G2 switch in KCS to help with the pitch adjustment, or else -F10 or -F-10 to help readjust the DC offset.

 

Miscellany:

  • The address & bank readout while TapeDump is dumping the cartridge should update itself occasionally, but during KCS dumping due to timing requirements, the readout can't update itself very often. Sorry for any stray or unusual hex digits during the dumping process.
  • The supported mappers should cover a large number of GameBoy games, but not all. If the mapper is of an unknown type, TapeDump will treat it as a generic "MBC5". Similarly, if the size on the GB cart is unsupported (like on a multicart), TapeDump will treat it as an 8 Megabyte ROM so that you can overdump it
  • If your GB resets over and over every time you insert the same cart, then there is one thing to try: Put some sticky tape over the 3rd pin from the right on the cartridge you want to dump. This might prevent unwanted signals from hitting that pin ("RESET" pin) when you insert the cart. See example pic:

* This program is still a work-in-progress with a few bugs here and there.

Chris Covell