Rumbleminze, a fan of all things retro tech, is co-author of the Kid Icarus Randomizer romhack and whose recent work includes porting NES games to run natively on the SNES. You can follow these and other projects via Rumbleminze’s IA, Github, YouTube, or Ko-Fi.
Writes Rumbleminze, the port author, in his release post:
Excited to release version 1.0 of my SNES port of the NES game Life Force! A classic Konami Shoot-em-up, now with no sprite flicker, no slowdown, FIVE sick CD Quality soundtracks . . . 8 palettes, difficulty selection, and optional lives adjustment!
By Rumbleminze on April 15, 2024. Reproduced with permission.
Rumbleminze, a fan of all things retro tech, is co-author of the Kid Icarus Randomizer romhack and whose recent work includes porting NES games to run natively on the SNES. You can follow these and other projects via Rumbleminze’s IA, Github, YouTube, or Ko-Fi.
Intro
This [post] is going to go over the process I use to port NES games to the Super Nintendo. Something to keep in mind while we go through this process: I’m by no means an expert on all these things. But I do know what’s worked for me. If you have ideas on ways to improve it, I’d love to hear them! Please reach out to me on Bsky.
Why though?
The most frequent question I get is “why?”. There are a lot of great reasons for porting games from the NES to the SNES. Here’s a few:
eliminate slowdown
eliminate sprite flicker
allow for MSU-1 enhancements like CD quality music and videos
Take advantage of FastROM cartridge chips
Up-rez-ing the sprites to 16-bit
better video output on SNES instead of NES
Much, much more room for romhacks/enhancements
Most importantly, it’s fun!! Finding ways to port these games is, to me, like solving a big puzzle.
The Overall Process
To accomplish my ports, I follow this general approach:
Take the original NES ROM, and break it up into it’s requisite memory banks by creating .asm files for each bank.
Use a buildable SNES game skeleton, with the NES games memory banks mapped to various convienent banks in the SNES game.
Hook up the SNES skeleton to jump to the NES initialization/nmi at the proper times
Slowly replace routines of the NES byte code with decompiled assembly, aquired from running the NES game in Mesen2.
Find and modify the NES specific logic and tile graphics to work on the nes. Especially things like:
All writes to Video Memory
Deal with differences in screen resolution / BG size / Mirroring
Update audio to use Membler’s 2A03 emulator
Properly handle bank switching
[Editor’s note: for the remainder of this post, covering tools, goals, and limitations, please visit Rumbleminze’s blog.]