Home

Awesome

Logo

The latest release version may be downloaded here.

More recent builds may be downloaded from the CI under the "Build and package ROM" link (you must be logged into github to download the build artifacts). Please note, that those are development builds and may not be properly tested and thus contain imcomplete features or bugs, use them on your own risk.

This project is a homebrew enhancing the capabilities of the Game Boy Camera by allowing access to all the possible parameters of the sensor and improving the printing speed and the camera ergonomics in general. This project is compatible with all known models of Game Boy printer and Game Boy printer emulator. The project features Game Boy And Game Boy Color versions.

A special version compiled for the Mega Duck, also known as Cougar Boy is also available. It requires a special adapter that you can build from informations available here (soon).

This project requires a reflashable Game Boy Camera cart. PCB's and building instructions may be found in this project or in this more detailed fork. Camera modding requires advanced skill in soldering and is not recommended for beginners. GBxCart flasher from InsideGadget is the only known device compatible with camera flashcarts. A generic flashable cartridge is also necessary if you plan to remote control the camera via serial cable.

The save format used here is retro-compatible with any version of the Game Boy Camera rom. This means that you can switch between roms while keeping the same save without loosing your precious images and data. Technically all camera parameters are stored in various empty area of the camera working ram. They do not interfere with a regular camera rom as all checksums are systematically verified.

Photo! is also compatible with mGBA, BGB, SameBoy and PizzaBoy among other non yet tested emulators.

Photo! with its serial remote controller

Showcase (Credit: Raphaël BOICHOT)

Example of use: Photo! working on a GB Boy Colour and remotely controlled from a Game Boy Color with a serial cable.

User Manual in brief

The repo contains two sets of roms. One set is compiled for DMG Game boy and Game Boy Pocket and basically features same slow transfer rate and a default "color" palette, as the original camera. The set compiled for Game Boy Color is able to feature Double Speed Mode, very high baudrate transfer mode and features several palettes. The two sets come with a remote control rom allowing to use another Game Boy as controller via the serial cable. You can flash the remote control rom on any flashable cart, it will be compatible.

Main hub

Main Hub

The main hub brings you to the 5 main menus by pressing START after boot. You can skip it and going directly to Camera Mode by pressing A/B/SELECT.

Camera Mode

Camera Mode

The camera mode was created to propose many more features than a regular camera like infinite time-lapse, ultra-fast transmission, full manual mode, support of third party devices, etc. It was polished by people passionate by the Game Boy Camera.

Capture Mode menu

Trigger menu

Timer, Repeat and AEB mode can be cancelled by pressing B button.

Action menu

The Transfer protocol is very similar to standard printing. Only two packets are used, and the Game Boy does not expect receiving anything in response, we just send the raw image data as quick as possible. First, the Game Boy sends the standard printer INIT packet, and then sends the new 0x10 packet that is the same as DATA, but the data length is always 3584 bytes (16x14 tiles) and CRC bytes are always 0. On CGB the transfer rate is 32KB/s, on the DMG the transfer rate is 1KB/s.

Exp. area menu

Restore Default menu

Dithering menu

Owner informations...

Gallery

Gallery

The Gallery acts as the regular camera gallery but proposes batch image erase/unerase, displaying the image parameters and many printing options compatible with basically all the printer emulators available on the market. It of course can print on the original one !

You can access a thumbnail viewer by pressing A when viewing an image. It allows batch selecting, erasing, printing and transfering images.

Flash Storage

Flash Storage

The flash storage of images is a unique feature from Photo! It allows dumping the whole ram (a "roll") to dedicated areas (the "slots") in the flash memory after the 128 kB of rom. It is intended to be used as film storage in case you do not have a printer with you. 7 storage slots of 30 images capacity are available in total. In the main menu, just choosing a full slot by pushing A allows browsing, printing, restoring to ram and transfering its images. The Game Boy Camera Gallery and the GB Camera Android Manager are able to directly get the images from a rom dump without moving them into ram. The pico-gb-printer is also able to get a roll directly without moving it to ram.

From a particular image in a roll, you can restore it, Print it or Transfer it without restoring the whole roll.

Settings

Settings

Some fancy general parameters like palette, Super Game Boy borders, regular and wild borders, GBA SP mode, overclocking, etc.

Some technical considerations

The Mitsubishi M64282FP artificial retina is one of the first mass produced CMOS light sensor. This kind of sensor is known for its good behavior in low light conditions and very low power consumption. Basically each pixel of the sensor translates the quantity of photons received during a given exposure time into a voltage. The sensor is able to perform some basic arithmetics on the voltage values before transfering them to an analog output (inversion, offsetting, 2D operations, multiplication, etc.). This sensor contains 128x128 pixels but only 123 lines return image information as the first 5 lines (at the bottom of an image) are always stuck at the saturation voltage, even in total darkness. The sensor documentation is notorious for being rushed and some additional informations can be deduced from the less rushed datasheet of the Mitsubishi M64283FP sensor which is a pin compatible close relative of the Game Boy Camera sensor.

Effect of the main adressable parameters

The M64282FP working parameters are set by 8 bytes (plus their 3-bits addresses) containing various registers. The MAC-GBD itself, mapper of the Game Boy Camera, can only receive 5 bytes of data to tune the sensor so 3 equivalent-bytes of data are not modifiable on the Game Boy Camera (more precisely P, M and X, 3x8 bits, registers also called Filtering Kernels are never modified). The mapping between sensor registers and MAC-GBD registers is given as comment in the project code. Here is a detailed description of the registers that can be modified:

Remote control packet format

The packet format is very simple and consist of one byte.

0bS0IPXXXX  
    S - stop, I - identifier, P - parity, XXXX - 4 Button or D-Pad bits
    Stop bit is always 1.
    Identifier is 1 for upper (buttons) and 0 for lower (D-Pad)
    Parity bit is 1 when the count of 1's in XXXX bits is odd, 0 when even.

Sender is a master device for the game boy.

Fast compiling guide for Windows users

Download GBDK-2020 from here under the GBDK Build and Package link and unzip it into the desired directory, for example C:/GBDK

Download Cygwin built for Windows from here. Install it with the additional make package from Devel category. If you encounter strange errors when compiling or make command is not recognized, get make.exe from the source site and copy paste it in /bin folder of Cygwin.

Download and install Python 3 built for Windows from here. Use the advanced installation options to add pip and environment variables (both are mandatory).

Then install Pillow and wave libraries:

python -m pip install --upgrade Pillow
python -m pip install --upgrade wave

Download and install Git built for Windows from here.

Now from the Cygwin terminal, clone this git repository to its desired destination (default is /home/USER), but may be any:

git clone https://github.com/untoxa/gb-photo

Set the GBDK_HOME environment variable which targets your GBDK-2020 folder. Best is to stay with the default GBDK_HOME = "C:/GBDK/"

Run make from the Cygwin terminal in the project folder containing the Makefile:

make

Your roms will be in ./build folders, enjoy !

Showcase of images made with Photo!

Showcase (Credit: Raphaël BOICHOT)

Resources

Author contribution