Skip to the content
11 layers44 × 73 mmGb video pico breakout, the printed circuit board in 3D

Gb video pico breakout

chromalock/CGBLinkVideo39

Playing media on a gameboy color over the link cable, with the help of an RPi Pico

Size
44 × 73 mm
Copper layers
11
Thickness
1.6 mm
Parts
15
Nets
45
Pads
131
Tracks, vias
114, 88
Pours
2
Routed
Yes
KiCad
KiCad 8.99 (file 20241129)
Created
27 Oct 2024
Updated
5 Jan 2025

Overview

Gb video pico breakout is an open-source printed circuit board by chromalock, from the chromalock/CGBLinkVideo repository on GitHub. It is an 11-layer board of 44 × 73 mm with 15 parts on 45 nets, routed with 114 tracks and 88 vias.

It is built around the SN74LVC1G17QDCKRQ1. Its parts include 4 ICs, 2 capacitors, 2 resistors, 2 diodes and 1 connector. It belongs with the retro computing and games and interfaces and adapters boards and the RP2040 boards of this library.

Main components

1

README

README.md

CGBLinkVideo

Playing media on a gameboy color over the link cable, with the help of an RPi Pico

"Buy Me A Coffee"

Inspiration

This project was heavily inspired by Staacks/wifi-game-boy-cartridge, and borrows utility macros, cartridge headers, and some random python snippets.

Repo Structure

You can find more detailed information on the individual components in the following locations:

text
/firmware/  |   Firmware + PIO programs for an RPi Pico (W)
/pcb/       |   Schematics, PCB designs, and gerber files for the GBLink board.
/roms/      |   Gameboy Color ROMs
/scripts/   |   Python package + scripts for streaming data to the gameboy color 
/stream/    |   Wrapper scripts for hooking up video sources to the gameboy script

System Requirements

text
- Python 3  (3.10.12 for me)
- FFMpeg    (4.4.2-0ubuntu0.22.04.1 for me)
- RGBASM    (v0.7.0-37-gc70cecc2 for me)        <-- only if you want to build the roms yourself

Hardware Requirements

text
- Gameboy Color + Link Cable
- Raspberry PI Pico
- GBLink Board (or some other method of level shifting)
- GBC Flash Cartridge

Conceptual Overview

text
| PC | <--UART--> | RPi Pico + GBLink Board | <--PIO--> | Gameboy Color | 

PC Handles video encoding, then sends the encoded data to the RPi pico over UART, which is stored in a buffer (triple buffered). This happens at roughly 1Mbps.

Meanwhile, the Gameboy color makes requests to the RPi Pico over its serial port, with the voltage levels being shifted by the GBLink board. The PIO handle the job of parsing these signals and shifting data out to the gameboy.

Explanation Video

I Streamed To A Game Boy

Quickstart

First, you will need to put the files from this release onto a gameboy flash cartridge. (or you can choose only the rom files you need)

Plug in your GBLink adapter to your computer and connect it to your gameboy. On the gameboy, start the rom file you need for your application. (view the above release for the descriptions)

OBS

You will need OBS.

Linux

bash
# install dependencies
git clone https://github.com/chromalock/CGBLinkVideo
cd CGBLinkVideo

sudo apt install ffmpeg 
pip install -r ./scripts/requirements.txt

get list of video devices (optional)

bash
# get list of current video devices
v4l2-ctl --list-devices
# Dummy video device (0x0000) (platform:v4l2loopback-000):
#         /dev/video0

get list of serial ports

bash
sudo dmesg | grep tty
# [484956.666636] cdc_acm 3-4.1.2.1.4:1.0: ttyACM0: USB ACM device

run appropriate script

bash
# td2018.gbc            | bw stream
# td2018-vsync.gbc      | bw stream, but with larger transfers to reduce tearing
./stream/cam-stream-full.sh /dev/video0 /dev/ttyACM0

# tdc2018.gbc           | color stream
# tdc2018-vsync.gbc     | color stream, but with larger transfers to reduce tearing
./stream/color-cam-stream-full.sh /dev/video0 /dev/ttyACM0

# tile-index.gbc        |  the low-res grayscale stream that sends a new tilemap every frame
./stream/cam-stream.sh /dev/video0 /dev/ttyACM0

Windows

You will need to install ffmpeg from here, and Python 3 from here

I recommend using choco to do it via choco install ffmpeg-full and choco install python.

To get pip, run:

batch
python -m pip install -U pip

then, clone the repository (or you can download/extract the zip file)

batch
git clone https://github.com/chromalock/CGBLinkVideo
cd CGBLinkVideo

install python dependencies:

batch
pip install -r .\scripts\requirements.txt

Get list of serial ports

batch
mode
:: Status for device COM3:
:: -----------------------
::     Baud:            115200
::     Parity:          None
::     Data Bits:       8
::     Stop Bits:       1
::     Timeout:         OFF
::     XON/XOFF:        OFF
::     CTS handshaking: OFF
::     DSR handshaking: OFF
::     DSR sensitivity: OFF
::     DTR circuit:     OFF
::     RTS circuit:     ON
:: 
:: 
:: Status for device CON:
:: ----------------------
::     Lines:          3000
::     Columns:        120
::     Keyboard rate:  31
::     Keyboard delay: 1
::     Code page:      437

then (in cmd.exe, powershell will not work) run the script for whichever rom you are running

batch
:: td2018.gbc            | bw stream
:: td2018-vsync.gbc      | bw stream, but with larger transfers to reduce tearing
.\stream\cam-stream-full.sh COM3

:: tdc2018.gbc           | color stream
:: tdc2018-vsync.gbc     | color stream, but with larger transfers to reduce tearing
.\stream\color-cam-stream-full.bat COM3

:: tile-index.gbc        |  the low-res grayscale stream that sends a new tilemap every frame
.\stream\cam-stream.bat COM3

Known Issues

Not responding after stopping stream

Due to either my bad code or an issue in the pySerialTransfer library, occasionally when stopping the stream program the arduino will be left in a state where it wont respond any more.

The solution is to simply unplug and re-plug in the GBLink. After this, the serial port name may change and you will need to determine which is the new one via the steps above.

Seeing garbage data or just Black

1. Pico not synced to GB

Hold right on the dpad of the gameboy for a few seconds. This should allow enough time for the pico to reset its state machines, and will restart communication on the gameboy.

2. Bad Connection

If the link cable isnt making good contact with either tha gameboy or the gblink, data may not transfer. Try a different link cable or cleaning the contacts on both devices.

Parts

15
QtyValueFootprintReferences
3SN74LVC1G17QDCKRQ1SN74LVC:SOT65P210X110-5NU1, U2, U3
3TestPointConnector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalTP1, TP2, TP3
2CCapacitor_SMD:C_0805_2012MetricC1, C2
2LEDLED_SMD:LED_0805_2012MetricD1, D2
2RResistor_SMD:R_0805_2012MetricR3, R4
1Conn_01x05Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ1
1PicoMCU_RaspberryPi_and_Boards:RPi_Pico_SMD_THU4
1gb-link-socketgb-link-socket:gb-link-socketGB1

More from chromalock/CGBLinkVideo

1
  • 11 layers14.6 × 17.3 mmGb video breakout, the printed circuit board in 3D

    Gb video breakout

    chromalock/CGBLinkVideo

    Playing media on a gameboy color over the link cable, with the help of an RPi Pico

    11 parts39

Similar boards

  • 2 layers92 × 92 mmSanket 4.0, the printed circuit board in 3D

    Sanket 4.0

    Student-Satellite-IITB/Communication-Subsystem

    Communication Subsystem for IITBSSP CubeSat Mission

    52 parts3
  • 2 layers92 × 95.9 mmSanket.old, the printed circuit board in 3D

    Sanket.old

    Anant713/Antenna-Deployment-System

    45 parts
  • 2 layers76 × 45 mmFuel center, the printed circuit board in 3D

    Fuel center

    andrew-c-tran/byteshift-fuel-center

    Automotive-grade CAN module for fuel pressure, temperature and ethanol content. AEC-qualified parts, fail-safe protocol, JLCPCB-ready.

    52 partsGPL-3.0
  • 11 layers21 × 16 mmAccelSensor, the printed circuit board in 3D

    AccelSensor

    dodotronix/RemBrake

    electronic system to control breaks on handbikes remotely

    15 parts
  • 11 layers64 × 41.4 mmESPCB, the printed circuit board in 3D

    ESPCB

    shvmm/espcb-bms-comms

    An ESP32 series based PCB for implementing BMS comms to Solar Inverters

    13 partsLGPL-2.1
  • 11 layers68.8 × 53.6 mmTesla seat controller shield, the printed circuit board in 3D

    Tesla seat controller shield

    ForestKatsch/unofficial-tesla-seat-controller

    STM32G0-based controller for four seat motors, two ventilation fans, and the seat switchpack. Input is a regulated 12 V Mean Well power supply; record the exact model before system testing.

    12 parts
  • 11 layers106.1 × 55.1 mmIDEFlex, the printed circuit board in 3D

    IDEFlex

    Redherring32/Xbox-Portable

    Fully portable original (2001) Xbox handheld using real hardware

    20 parts93

Questions

How big is the Gb video pico breakout PCB?

It measures 44 × 73 mm and has 11 copper layers, 1.6 mm thick.

What parts does the Gb video pico breakout use?

15 parts, built around the SN74LVC1G17QDCKRQ1. 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 Gb video pico breakout KiCad files?

From the chromalock/CGBLinkVideo repository on GitHub, at the commit this page was made from: the board is pcb/gb_video_pico_breakout/gb_video_pico_breakout.kicad_pcb and its schematic pcb/gb_video_breakout/gb_video_breakout.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Gb video pico breakout design in my own project?

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