Jay Jennings profile photo Jay Jennings
← Back to Gallery

Contra Force: MMC3 to VRC6 Port

A retro reverse-engineering project to fix the slowdown in Konami's 1992 NES game.

About the Project

Contra Force shipped in North America on Nintendo's MMC3 mapper instead of Konami's own VRC6 chip, and its infamous slowdown is largely the cost of working around that hardware. This project ports the game to the VRC6 mapper (iNES mapper 24) to remove that overhead. The work started with a bank-aware disassembly of all 16 PRG banks, every one verified to reassemble byte-for-byte against the original ROM, followed by a reorganized 256KB PRG layout that gives VRC6's single 16K switching window every bank pairing the game uses. The bank-switch, CHR and mirroring routines were rewritten in place, and the HUD raster split was redesigned around VRC6's CPU-cycle IRQ counter. Each optimization was proven equivalent with a custom 6502 emulator that runs tens of thousands of random machine states through the old and new code, then regression-tested frame by frame in FCEUX and Mesen2. The current prototype boots and plays pixel-identical to the original through the title, cutscenes, character select and level one, while cutting per-frame CPU cost by 8.3% and lag frames from 13.5% to 7.6%.

 

Inspiration for this project came from DisplacedGamers and their video. This project is ongoing, and I welcome any feedback or contributions.

Download the Patch

Apply the IPS patch to an unmodified Contra Force (USA) ROM with any IPS patcher, then play it in an emulator with mapper 24 (VRC6) support such as Mesen2 or FCEUX. This is a work-in-progress prototype.

Game has been tested on real hardware in one player mode with an Everdrive N8 Pro. Two player mode has not been tested.

Download IPS Patch ↓
Base ROM CRC32 (no header):
A94591B0
Patched ROM CRC32 (no header):
3AE97464

Game Genie Codes

Code Effect
TPNZSPZE Invincible A
OZNZXOOK Invincible B
AAVXSPYZ Invincible C
OPUYTTLE Extra Lives
KXNZLITA Pit Warp
APXZAPEI Walk on Water

Raw cheat list

{+,TPNZSPZE,"INVINCIBLE.A..."}
{+,OZNZXOOK,"INVINCIBLE.B..."}
{+,AAVXSPYZ,"INVINCIBLE.C..."}
{+,OPUYTTLE,"EXTRA.LIVES...."}
{+,KXNZLITA,"PIT.WARP......."}
{-,APXZAPEI,"WALK.ON.WATER.."}