Skip to the content
PCBKitNew board
2 layers97.8 × 53.3 mmGameboy camera printer shield, the printed circuit board in 3D

Gameboy camera printer shield

trickart/gameboy-camera-printer-shield

An Arduino Uno R4 WiFi shield (KiCad project) for dumping DMG/GBC cartridges — especially the Game Boy Camera — and printing to the Game Boy Pocket Printer.

Size
97.8 × 53.3 mm
Copper layers
2
Thickness
1.6 mm
Parts
17
Nets
52
Pads
122
Tracks, vias
215, 48
Pours
24
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
16 Jul 2026
Updated
16 Jul 2026

Overview

Gameboy camera printer shield is an open-source printed circuit board by trickart, from the trickart/gameboy-camera-printer-shield repository on GitHub. It is a 2-layer board of 97.8 × 53.3 mm with 17 parts on 52 nets, routed with 215 tracks and 48 vias.

It is built around the 74HC595. Its parts include 6 connectors, 4 capacitors, 2 ICs and 1 resistor. It belongs with the retro computing and games boards of this library.

Main components

1

README

README.md

Game Boy Camera Reader + Pocket Printer Shield

An Arduino Uno R4 WiFi shield (KiCad project) for dumping DMG/GBC cartridges — especially the Game Boy Camera — and printing to the Game Boy Pocket Printer.

Assembled shield (v1.0) mounted on an Arduino Uno

With an Arduino Uno R4 WiFi (5V logic, RA4M1) this shield lets you:

  • Read the ROM header of DMG/GBC cartridges
  • Dump the Game Boy Camera's SRAM (128 KB of photos) to a .sav file
  • Print images to the Pocket Printer over the link cable

Key design points:

  • Everything runs at 5V, so no level shifters are required
  • The 16-bit address bus is driven by two cascaded 74HC595 shift registers; the 8-bit data bus connects directly to GPIO
  • PHI (cartridge pin 2) control is mandatory for the Game Boy Camera (Low for ROM access / High for RAM access). Regular cartridges ignore pin 2, so they can be read with the same setup
  • The Pocket Printer is driven over the 3 link-cable lines (SCK/SOUT/SIN) with bit-banged SPI mode 3

Repository Contents

PathDescription
gameboy-camera-printer-shield.kicad_pro/.kicad_sch/.kicad_pcbKiCad project, schematic, and PCB layout
Arduino_MountingHole.pretty/Custom footprint library
jlcpcb/gerber/Gerber and drill files
jlcpcb/production_files/BOM, CPL, and zipped Gerbers for JLCPCB assembly

Required Libraries

Opening the schematic/PCB requires these external KiCad libraries in addition to the bundled Arduino_MountingHole.pretty:

Clone them and register the symbol/footprint libraries in KiCad (Preferences → Manage Symbol/Footprint Libraries) before opening the project.

Bill of Materials

PartDesignatorSpecQty
74HC595U1, U2Shift registers for address lines A0–A15 (TSSOP-16)2
DMG cartridge connectorJ532-pin, 2 mm pitch1
GB link portJ6MGB link connector for the printer1
Ceramic capacitor 0.1 µFC1, C2, C3Decoupling (each 74HC595 + cartridge VCC)3
Capacitor 10 µFC4Bulk capacitance on the cartridge VCC rail1
Resistor 10 kΩR1Pull-up on cartridge /RST1
Pin socketsJ1–J4Arduino Uno shield headers (8/10/6/8 pins)4

No level shifters or crystal oscillator needed — PHI is just toggled statically Low/High from a GPIO; no clock generation is required.

Arduino Pin Assignment

Arduino pinFunction
D0–D7Data bus D0–D7 (bidirectional)
D1074HC595 ST_CP (latch)
D11 (COPI/MOSI)74HC595 DS (serial data in)
D13 (SCK)74HC595 SH_CP (shift clock)
A0Cartridge PHI (pin 2) — ★ required for the Camera
A1Cartridge /WR (pin 3)
A2Cartridge /RD (pin 4)
A3Cartridge /CS (pin 5)
D8Printer SCK (link pin 5)
D9Printer SOUT (link pin 3 = printer SIN)
D12Printer SIN (link pin 2 = printer SOUT)
A4 / A5Unused

Wiring

1. 74HC595 ×2 (fixed pins)

595 pinSignalConnects to
16VCC5V
8GNDGND
13/OEGND (output always enabled)
10/MR5V (reset always released)
11SH_CPArduino D13
12ST_CPArduino D10
14 (U1)DSArduino D11
9 (U1)Q7′Cascades to pin 14 (DS) of U2

2. Address lines (595 outputs → cartridge)

595 outputs: Q0 = pin 15, Q1–Q7 = pins 1–7.

595Output pinsSignalCartridge pins
U115, 1, 2, 3, 4, 5, 6, 7A0–A76–13
U215, 1, 2, 3, 4, 5, 6, 7A8–A1514–21

(Bit order: Q0 = LSB. Sending the high byte first, then the low byte over SPI puts the low byte in U1 and the high byte in U2.)

3. Data, control, and power (Arduino ↔ cartridge)

ArduinoDirCartridge pinSignal
D0–D7⇄22–29D0–D7 (bidirectional data)
A0→2PHI (Camera ROM/RAM enable)
A1→3/WR
A2→4/RD
A3→5/CS
5V→1VCC
GND→32GND
10 kΩ → 5V→30/RST (fixed pull-up)
—NC31AUDIO (unconnected)

4. Capacitor placement (decoupling / bulk)

Rule of thumb: 0.1 µF right at each IC's power pins, plus one 10 µF on the power rail.

CapacitorValuePlacement
Decoupling0.1 µF74HC595 U1: shortest path across pin 16 (VCC) ↔ pin 8 (GND)
Decoupling0.1 µF74HC595 U2: shortest path across pin 16 (VCC) ↔ pin 8 (GND)
Decoupling0.1 µFCartridge: pin 1 (VCC) ↔ pin 32 (GND), right at the connector
Bulk10 µF5V–GND rail near the cartridge (smooths current spikes during reads)

Keep the 0.1 µF caps as close as possible to the IC/connector pins — long leads defeat the purpose. The circuit will work without them, but they provide noise margin and dump stability.

Pocket Printer (link cable, printer-side connector)

Link pinSignalArduino
Pin 2SOUT (printer → Arduino)D12
Pin 3SIN (Arduino → printer)D9
Pin 5SCK (Arduino is master)D8
Pin 6GNDGND

The Arduino acts as clock master and bit-bangs SPI mode 3 (SCK idles High, data updated on the falling edge, sampled on the rising edge, MSB first) at ~8 kHz.

Bus Control Logic

Operation/RD/WR/CSPHI
ROM read (header/logo/ROM)LowHighLowLow
SRAM read (photos, 0xA000–0xBFFF)LowHighLowHigh
Register write (RAM enable / bank select)HighLow (pulse)HighLow
  • Idle state: /RD, /WR, /CS = High.
  • PHI: High when accessing the RAM region (0xA000–0xBFFF), Low otherwise (ROM/registers). Without this the Game Boy Camera's ROM returns high-Z garbage and its RAM is inaccessible. Regular cartridges ignore pin 2.

SRAM (Photo) Dump Procedure

  1. Write 0x0A to 0x0000 (enable RAM)
  2. Write bank number 0x00–0x0F to 0x4000 (select RAM bank)
  3. With PHI = High, read 0xA000–0xBFFF
  4. Repeat for all 16 banks → 128 KB
  5. Write 0x00 to 0x0000 (disable RAM)

Concatenate the hex dump on a PC and convert it with bytes.fromhex() into a 131,072-byte .sav file. Photos can then be extracted with a GB Camera save viewer or an emulator.

Fabrication

Ready-to-order files for JLCPCB are in jlcpcb/production_files/ (Gerber zip, BOM, and CPL for SMT assembly).

License

This project is licensed under CC BY-SA 4.0.

The parts derived from the external libraries listed in Required Libraries (Gekkio/gekkio-kicad-libs and willdurand/kicad-libs) remain subject to their respective licenses.

Parts

17
QtyValueFootprintReferences
4MountingHole_3.2mmArduino_MountingHole:MountingHole_3.2mmMH1, MH2, MH3, MH4
30.1uCapacitor_SMD:C_0603_1608MetricC1, C2, C3
274HC595Package_SO:TSSOP-16_4.4x5mm_P0.65mmU1, U2
110kResistor_SMD:R_0603_1608MetricR1
110uCapacitor_SMD:C_0805_2012MetricC4
1AnalogConnector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_VerticalJ3
1Digital/PWMConnector_PinSocket_2.54mm:PinSocket_1x08_P2.54mm_VerticalJ4
1Digital/PWMConnector_PinSocket_2.54mm:PinSocket_1x10_P2.54mm_VerticalJ2
1GB_GBC_1x32willdurand_connector:GB_GBC_1x32J5
1GameBoy_LinkPortGekkio_Connector:GameBoy_LinkPort_MGB_HorizontalJ6
1PowerConnector_PinSocket_2.54mm:PinSocket_1x08_P2.54mm_VerticalJ1

Questions

How big is the Gameboy camera printer shield PCB?

It measures 97.8 × 53.3 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Gameboy camera printer shield use?

17 parts, built around the 74HC595. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Gameboy camera printer shield KiCad files?

From the trickart/gameboy-camera-printer-shield repository on GitHub, at the commit this page was made from: the board is gameboy-camera-printer-shield.kicad_pcb and its schematic gameboy-camera-printer-shield.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Gameboy camera printer shield design in my own project?

Its repository states no licence, so its author keeps all rights: ask trickart before reusing the design.

Similar boards

  • 2 layers45.7 × 31.8 mmLEDx16 board, the printed circuit board in 3D

    LEDx16 board

    tardate/LittleArduinoProjects

    a collection of "Little Electronic & Arduino Projects", most involving electronics or an Arduino in one way or another!

    36 parts803MIT
  • 2 layers228.6 × 100 mmMongus48, the printed circuit board in 3D

    Mongus48

    ChrisChrisLoLo/beyblock20

    The magnetic, modular, 20-key macropad that can join together to form an ortholinear board

    124 parts335GPL-3.0
  • 2 layers245.1 × 160 mm8-Bit CPU 32k, the printed circuit board in 3D

    8-Bit CPU 32k

    slu4coder/Minimal-64x4-Home-Computer

    My DIY TTL home computer with VGA and PS/2 and 4x the processing power of a Commodore C64 or Apple II.

    139 parts326
  • 2 layers100 × 95.1 mmProtoboard-6x4-breakout, the printed circuit board in 3D

    Protoboard-6x4-breakout

    electroniceel/protoboard

    Advanced protoboard layout with 1.27mm pitch for smd parts

    4,745 parts311CC-BY-4.0
  • 4 layers140 × 100 mmDc usv, the printed circuit board in 3D

    Dc usv

    TobleMiner/DC-UPS

    A small DC UPS, designed to keep small appliances like consumer network equipment running during power outages

    351 parts223CERN-OHL-P-2.0
  • 2 layers100.5 × 218.3 mmTraktorino, the printed circuit board in 3D

    Traktorino

    silveirago/traktorino

    The open-source DIY MIDI Controller for DJs.

    96 parts220
  • 2 layers287.8 × 126.7 mmNoName, the printed circuit board in 3D

    NoName

    AlaaSaadAbdo/battoota

    Keyboards

    267 parts188
  • 2 layers100 × 100 mmTommyPROM32-595, the printed circuit board in 3D

    TommyPROM32-595

    TomNisbet/TommyPROM

    Simple Arduino-based EEPROM programmer

    36 parts187