TL;DR
Reverse engineering a 1983 game console to give Donkey Kong anatomical enhancements
Original ROM
0x1A40: 00 00 00 00
0x1A44: 00 3C 7E FF
0x1A48: FF 7E 3C 00
...
Modified ROM
0x1A40: 18 18 00 00
0x1A44: 00 3C 7E FF
0x1A48: FF 7E 3C 18
...
Result
🦍
now anatomically
enhanced
What We Built — for science, obviously
ROM Archaeology
The ColecoVision runs on a Z80 CPU with a TMS9918A video chip — the same setup as the MSX and SG-1000. Donkey Kong's 24KB ROM needed to be disassembled to understand where the sprite data lives.
Graphics are stored as 8x8 pixel patterns in the "pattern generator table" at specific memory addresses. Each pattern is 8 bytes — one byte per row, each bit representing a pixel. Finding DK's sprites meant hunting through hex dumps for recognizable pixel patterns.
The discovery: DK uses multiple sprite patterns composited together. Front-facing and side-profile poses are stored separately.
The Dong Mod
Once the sprite addresses were mapped, modifying them was straightforward hex editing. The challenge was working within the 8x8 grid constraint — you only get 64 pixels per pattern to work with.
Created a Python script to visualize tile patterns as ASCII art, making it easier to design modifications before committing them to the ROM. The final mod touches patterns for both the front-facing and climbing poses.
The result: Donkey Kong, now anatomically correct. The ROM runs on real hardware and emulators alike.
Why ROM Hacking?
Retro game modding is a gateway to understanding low-level computing. No operating system, no frameworks — just raw memory addresses and bit manipulation. The ColecoVision's architecture is simple enough to fully comprehend, yet complex enough to be interesting. Plus, sometimes you just want to see what happens when you give a gorilla proper anatomy.
Tech Stack
No modern toolchain required — just a hex editor, an emulator for testing, and Python for visualization scripts. The ROM itself is smaller than most favicons.