Skip to content

Guillain-RDCDE/PocketRoll

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

182 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PocketRoll — an infinite roll of film for the Game Boy Camera on the Analogue Pocket

PocketRoll

An infinite roll of film for the 1998 Game Boy Camera —
on the Analogue Pocket, with no PC in the field.

Read the making-of →   ·   Plain-text version   ·   The research


The Game Boy Camera, in 1998, could hold thirty photos — thirty, total, forever, until you deleted some to make room. PocketRoll lifts that limit on the Analogue Pocket, using nothing but the console, the original cartridge, and an SD card.

 An Infinite Roll — the making-of

A save format that erases itself if you cheat. A bug that cost three days and was fixed by one character. A ROM nobody had ever disassembled. A screen that split in two. The full story of how a 1998 camera was taught to shoot forever — written as a long read that flows like a novel and unfolds, at a click, into the actual bytes, the Verilog and the disassembly.

Every photo you take with the real cartridge — its real sensor, passed live through a custom openFPGA core — is archived to the SD card and its slot recycled, so the camera never runs out. The result is an unlimited roll, developed at home with MugDump. No cables, no PC, no modification to the 1998 hardware.

How it works

Three machines are stacked inside one another: the camera's ROM, which can see a sensor but has no concept of a file; the cartridge, which physically holds the sensor and thirty frames; and beneath both, the FPGA core — a Game Boy built from logic, the only layer that can reach the SD card.

PocketRoll leaves the cartridge and its sensor completely untouched, and rewrites the Game Boy underneath. It notices each photo, copies it to the card, and patches the ROM's film full logic — as the console reads it — into a cyclic roll that overwrites the oldest frame instead of refusing the next. The camera never knows.

What's inside

Path Contents
src/ · pkg/ the openFPGA Game Boy core this project builds on
pocketroll/core/ the core changes, build helpers, and testbench
pocketroll/docs/ the research and the war stories, documented in full
pocketroll/tools/ zero-dependency tools to read, verify and forge camera saves

The research

Verified by hand on real hardware, and in several cases documented nowhere else on the web.

  • The camera's checksum — a running sum seeded at 0x2F and an XOR at 0x15, over the summary vector alone. → 01 — SRAM save format
  • Slot recycling — reproducing the camera's own deletion to within six bytes. → 02 — slot recycling
  • The Analogue Pocket .sta save state — decoded from scratch. → 03 — saves explained
  • Sensor passthrough — the real cartridge, sensor included, running live. → 04 — core architecture
  • The core bring-up — every black screen, and the hidden Pocket debug log that cracked them, with no JTAG. → 06 — build & debug
  • The dump — why the photos must be read straight off the physical cartridge. → 07 — the dump saga
  • The ROM overlay — the home-grown disassembly and the cyclic-roll patch in bank $02. → 11 — ROM disassembly
  • The save-state resume fix — a physical-cartridge clock left free-running across the pause. → 12 — resume fix

Building it

The core builds with Quartus Prime Lite 25.1 — the version its committed IP (PLLs and the rest) was generated for. Versions 18.1 and 24.1 compile cleanly but produce a black screen on the Pocket. core_top.sv must keep `define isgbc 0 (upstream leaves it at 1, which builds the Game Boy Color variant and boots to black). Full notes in SETUP.md and INTEGRATION.md.

Status

The infinite roll is complete and confirmed on hardware: shoot past thirty, the oldest frames recycle; save-state to dump the photos — it resumes cleanly — and keep shooting. Next: a purpose-built camera-only homebrew ROM running on the same core.


A fork of budude2/openfpga-GBC. All of budude2's original work lives under src/ and pkg/, and the upstream README is preserved as README.budude2.md. The camera-format reverse-engineering stands on the work of Raphaël Boichot, insideGadgets, and the Pan Docs; .sta extraction follows Galkon/pokepocket-save-recovery.

About

An infinite roll of film for the 1998 Game Boy Camera on the Analogue Pocket — a custom openFPGA core that recycles the roll and dumps every photo to SD, no PC in the field. Plus the full making-of.

Topics

Resources

Stars

14 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages

  • Verilog 42.7%
  • VHDL 24.2%
  • SystemVerilog 19.4%
  • Tcl 6.0%
  • JavaScript 4.3%
  • Shell 2.8%
  • Other 0.6%