Back to Aladdin for a bit, seeing if it still worked.
And back again to Super Mario World to play around again after fixing mapper 90 for
hardware nametables, to make sure it still worked!
I love bashing Yoshi's head in to make him stick his tongue out.
After doing mapper 90, I decided I'd implement the largest multicart to date- 3Mbytes
total. This required some redesign of the loader hardware so I could address all of the
ROM data. This is the menu for it. All the games worked fine.
Because I like abuse, I had to play around with the Sachen mappers. I went for the most
common 8259 mapper, since many games used it. Implementing it wasn't too tough.
This is possibly one of the most fucked-up and neat NES game intros ever. It's on the game
Pipe 5. This dood walks along and climbs a ladder, then opens the valve and water floods in
filling the screen. Finally, bubbles rise up from his head and stuff. This nifty little tune
plays as it happens.
My favourite Sachen game ever: Strategist! It's an NES version of the game Milles Bournes. A
card game my sis and I used to play the hell out of when we were younger. There's two variations
which is really nice.
After that diversion, I decided to expand on mapper 90, and "multiplex" it with MMC5. MMC5 was the
other "huge" mapper that I needed to implement. Interestingly, much of the mapper 90 stuff was
directly applicable. The interrupt structure of course wasn't, and the split screen wasn't, but
alot of the PRG and CHR banking was. I spent around 2 days to get it this far.
Things were working OK, but there were still some interrupt problems here and there. I got
them working good enough, however, to get the vertical scrolling screen working.
It took some doing to get Just Breed going, however. I didn't have the multiplier implemented
right so the game wouldn't even start until that was fixed.
This game is the largest licensed/legit NES game made. It's got 512K of PRG and 512K of CHR. I had
to do some MMC5 reverse engineering to figure out how to get the MMC5 to address all of its
CHR. Turns out there's another register that provides 2 more bank bits!
If this looks right, then you got banking right.
Gunsight was a game I used alot to debug interrupts. It uses the HELL out of interrupts! Also,
it uses the "nametable fill" mode to scroll the graphics in from a blank screen. I dunno why
the MMC5 supports this, but it does and you have to emulate it properly for this game to look
If interrupts are not right, this screen is all hosed. They trigger around 6 or 7 interrupts
on here to do a really neat "parallax" scroll when you take off.
SDF was the first MMC5 game I got running. It doesn't use much of the MMC5 hardware for the
game, but it is the only game that uses the vertical split screen mode.
I spent another 2-3 days heavily reverse engineering the MMC5 mapper to figure out EXACTLY how the
split screen mode worked, and how everything interacts. There are LOTS of interactions between the
split screen function and the desired nametable and the EXRAM and all that crap. I meticulously
reverse engineered it all so that my MMC5 is an exact clone of the real deal. If you get this
demo loop of SDF working, you're doing very good.
This is one of the Koei games. All of their games were written in C, and are very slow as a
result. They also use some of the more odd features of the MMC5 like the "in VBLANK" flag
and stuff. If this is not emulated right, the game will write to the PPU during rendering
which hoses everything up!
If this looks good, then your VBLANK flag on the MMC5 is working properly.
This is a pirate of the game Bio Miracle. This was poorly titled "Mario Baby" on the
top of the cart in english. It is the FDS version of Bio Miracle, stuffed onto a cart!
The coolest part (that I wouldn't learn until later) is the FDS music is still intact!
I use this later to debug my FDS audio circuitry.
On world 4, you gotta crawl over some circuitry. Just don't walk on the chips with
their pins sticking up. It hurts a whole lot. The "LED" thing cracks me up.