En cours de mise à jour
How to make one of the most shittiest NES game ever made run for real
on a modified MMC1 cart !
So, you're tired of emulators and you want to experience playing Cheetahmen II on your NES, but you can't afford the real cartridge ? No problem, make your own !
It would be way easier if all the NES games were based on the same type of cartridge ("easy" is relative of course, I'm aware that not anyone can or has the time to do such modifications).
As Active Enterprises wanted to stay totally independent from Nintendo to avoid paying them royalties, they made their own unique mapper chip using a simple PAL instead of the common MMC1 mapper that Nintendo invented. One could always program a similar PAL to mimic the behavior of their custom mapper, but that would imply making a custom circuit board from scratch and having an appropriate programming device. Expensive and complicated...
They also had to come up with a solution to defeat the famous CIC chip, but that's another story, and it won't be a problem for us since we'll modify a cart which already has it.
Cheetahmen II's mapper and the MMC1 being completly different in their operation, the game can't be written to some EEPROMs and dropped in a SLROM board for example. The MMC1 won't understand a thing and the game won't work. That's what we have to work on: modifying the Cheetahmen II ROM to make it compatible with the MMC1 mapper.
First of all, we need to see what fails. We can use the very handy No$NES emulator, which has a great debugger with breakpoints and memory editing capabilities.
Some people had suggested that each level had its own engine, because the bugs (what a reference) and controls acted differently. Those people were right. As written in the intro, the game has 6 levels, each one having its own engine and bank of code in the PRG ROM. Now that's some serious space optimization. So in 1992, producing 128K mask ROMs instead of 32K ones was cheaper than hiring good programmers ?
The entire game is like having 6 slightly different cartridges plugged into your NES. Completing each levels gets you to the next one, losing all your lifes gets you back to the first.
For such a crude game, one would expect to find only 3 or 4 kBytes of code at most. But if you look at the PRG ROM banks in a graphics editor like Tile Layer, you'll see that they're packed ! I'm not sure if all the code is used or if some of it is actually garbage from their dev system. The music tables seem to start at the 3rd quarter of the bank 0.
The funny thing is that even though the PRG ROM banks are switched in 32K blocks (all of what can be seen by the NES CPU at once), the music still plays without glitching. It wouldn't surprise me if the music player routine was copied at the exact same position in every PRG bank...