TL;DR
Reverse engineering a 1983 game console to give Donkey Kong anatomical enhancements
Original ROM
0x2953: F0 FF F0 C0
0x2957: C0 C0 C0 00
0x295B: 07 FF 0F 03
...
Modified ROM
0x2953: F0 FF F3 C3
0x2957: C7 C0 C0 00
0x295B: 07 FF CF C3
...
Result
🦍
now anatomically
enhanced
The patched ROM booting in Gearcoleco — note the title screen
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 16KB 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.
Finding the tiles meant pausing on the pose in Gearcoleco's VDP viewer, clicking the sprite in the name table to read its VRAM address, then searching an xxd dump of the ROM for those exact bytes to locate them on disk. A short Python script applied the patches. The final mod touches patterns for both the front-facing and side-profile 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 xxd, an emulator for testing, and Python for visualization scripts. The ROM itself is smaller than most favicons.