Skip to the content.

Arduino Gameboy Printer Emulator (V3)

CI


Telegram Gameboy Camera Chatroom

Got telegram instant messaging and have some questions or need any advice, or just want to share? Invite link below:

https://t.me/gameboycamera


Media Coverage And Other Projects Spinoff

There is more examples located in our showcase page page, but below is a few actively used cases:

Featured On Hack A Day Article

WestM’s Arduino Gameboy Printer Emulator Tutorial

Rafael Zenaro: NeoGB Printer

Click For More Examples In Our Showcase Page


What is a Gameboy Camera?

The Game Boy Camera (GBC), released as Pocket Camera[a] in Japan, is a Nintendo accessory for the handheld Game Boy game console

Game Boy Camera commercial, 1998

About this project

Code to emulate a gameboy printer via the gameboy link cable and an arduino module.

Goal is to provide an easy way for people to quickly setup and download the images from their gameboy to their computer before the battery of these gameboy cameras dies of old age.

I hope there will be a project to collate these gameboy images somewhere.

Official Releases

Downloads: Version Release Downloads at GitHub

Release Notes Located Here


Quick Start

Construct the Arduino Gameboy Printer Emulator

Use an arduino Nano/Uno and wire the gameboy link cable according to the pinout shown below.

Pure GBA cables (purple ones) have a different pinout from GB/GBC, avoid using them. In general, do not destroy old genuine gameboy link cables for this purpose, there is plenty new cables you can purchase online. Do note that you cannot trust the color code of these cables, you must always check the wire against the plug pins. Especially considering the RX/TX pair of the pins may be flipped.

Else if you have a 3D printer, you can use (Game Boy DMG-01 Link Port plug for dupont jumper wire by Marko Štamcar from Slovenian Computer Museum, created as part of a retro tech exhibition)[https://www.thingiverse.com/thing:4685189]

Pinout Diagram

Thanks to West McGowan (twitter: @imwestm) who was able to replicate this project on his Arduino Nano plus Gameboy Color and helpfully submitted a handy picture of how to wire this project up. You can find his tutorial in here

General Pinout

Gameboy Original/Color Link Cable Pinout
 ___________
|  6  4  2  |
 \_5__3__1_/   (at cable)
Arduino Pin Gameboy Link Pin
unused Pin 1 : 5.0V
D4 Pin 2 : Serial OUTPUT
D3 Pin 3 : Serial INPUT
unused Pin 4 : Serial Data
D2 Pin 5 : Serial Clock (Interrupt)
GND Pin 6 : GND (Attach to GND Pin)

Dedicated PCB

As crossing Serial OUTPUT and Serial INPUT is the main cause of issues with the project, dedicated PCBs were made to fit with the Arduino Nano and Uno, using a GBA/GBC socket. This also allows not cutting a cable. The Uno version comes with pins dedicated for an SD shield that you can just left empty for this project.

Programming the emulator

Next download ./GameBoyPrinterEmulator/gpb_emulator.ino to your arduino nano. After that, open the serial console and set the baud rate to 115200 baud.

Alternative option of uploading precompiled arduino nano image via WebUSB

If your browser supports webusb, you have the option of uploading directly to the arduino nano the firmware using WebUSB (e.g. via google chrome)

Afterwards, you can check if it’s working via the webusb serial console below as well

Download the image (Javascript)

The Arduino IDE 2.XX does not allow to batch copy/paste the serial output anymore. You have to follow this guide to configure PuTTy or another serial datalogger. Once connected to your Arduino serial with PuTTY, print from your gameboy, then close the serial monitor and copy/paste data from the log file to the raw packet javascript decoder in ./GameBoyPrinterDecoderJS/gameboy_printer_js_raw_decoder.html. Press click to render button.

One you done that, your image will show up below. You can then right click on the image to save it to your computer. Or you can click upload to imgur to upload it to the web in public, so you can share it. (Feel free to share with me at mofosyne@gmail.com).

A copy of the raw decoder is accessible here as well:

Need example raw packet captures to test out the raw js decoder without the gameboy printer emulator hardware? You can check a few out in the Real Packet Capture Example folder of the gameboy printer sniffer project.

You are all done!

Note: V3 now uses raw packet decoder, rather than the original tile decoder. This allows us to better support gameboy printers enabled games using compression.

Download via Game Boy Printer Web (External Project)

For those who want to take the next step and take more photos regularly you may want to look at a partner project by Herrzatcke. Herrzatcke created a photo manager dedicated for gameboy cameras and have already integrated support for this project so you can easily upload photos via WebUSB or by copying and pasting raw packet data.

Enter Game Boy Printer Web

Download via Android app and use the Arduino as a generic output interface for the Game Boy Printer (External Project)

For those who want to use an Android to download photos in the field, you may want to consider this partner project by Mraulio. Mraulio created an Android app to manage a Game Boy Camera gallery and communicate via usb serial with Arduino Printer Emulator and GBxCart to get images. Additionaly, when booting the Arduino board connected with the serial cable to a Game Boy Printer switched ON, the device will boot in printer mode and allow you to output images from the Android App to the printer with the exact same wire configuration. In this mode, the LED connected to pin 13 will flash ON to indicate that the printer is ready.

Enter GBCamera Android Manager

Download the image (C) (Advance User)

For advance users, in the GameBoyPrinterDecoderC folder there is a PC based commandline program that when compiled would allow for decoding raw packet captures into bitmap.

Gameboy Printer Decoder C Readme


Project Makeup


Technical Information

Sniffer / Real Gameboy Printer Captures

Refer to https://github.com/mofosyne/GameboyPrinterSniffer for more information.

Protocol

  | BYTE POS :    |     0     |     1     |     2     |      3      |     4     |     5     |  6 + X    | 6 + X + 1 | 6 + X + 2 | 6 + X + 3 | 6 + X + 4 |
  |---------------|-----------|-----------|-----------|-------------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|
  | SIZE          |        2 Bytes        |  1 Byte   |   1 Byte    |  1 Bytes  |  1 Bytes  | Variable  |        2 Bytes        |  1 Bytes  |  1 Bytes  |
  | DESCRIPTION   |       SYNC_WORD       | COMMAND   | COMPRESSION |     DATA_LENGTH(X)    | Payload   |       CHECKSUM        |  DEVICEID |  STATUS   |
  | GB TO PRINTER |    0x88   |    0x33   | See Below | See Below   | Low Byte  | High Byte | See Below |       See Below       |    0x00   |    0x00   |
  | TO PRINTER    |    0x00   |    0x00   |    0x00   |   0x00      |    0x00   |    0x00   |    0x00   |    0x00   |    0x00   |    0x81   | See Below |

Gameboy Printer Timing

Below measurements was obtained via the ANALOG DISCOVERY via digilent

                       1.153ms
        <--------------------------------------->
         0   1   2   3   4   5   6   7             0   1   2   3   4   5   6   7
     __   _   _   _   _   _   _   _   ___________   _   _   _   _   _   _   _   _
CLK:   |_| |_| |_| |_| |_| |_| |_| |_|           |_| |_| |_| |_| |_| |_| |_| |_|
DAT: ___XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX____________XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_
       <-->                           <---------->
       127.63 us                         229.26 us


Research/Dev log

2022-04-20

2021-01-26

2020-08-30

2017-11-30

2017-4-12

My Face In BW


Credits / Other Resources

Resources Referenced

Contributors / Thanks