I have a good understanding of the NES architecture, and things are to the point where they're pretty solid. The EMU passes most of blargg's tests (including CPU/official, PPU, IRQ/NMI, MMC3). Most games (that I have mapper support for) run without a hiccup; this includes a lot of notoriously tough games like Megaman 3, Super Mario 3, Double Dragon 3, and Solar Jetman.
I've run into problems with the aforementioned trio of games.
First off, Battletoads. Everything looks great right off the bat; the title screen, game play, the entire first level... accuracy is right up there with Nestopia. But, not long into the second level (the chasm), everything just suddenly freezes. (Interestingly, it has the same problem on Nintendulator. Nestopia runs it perfectly.)
Looking at my debug info, it seems to loop in the following code. (Looks like it's waiting for the Sprite Overflow flag to be set, but it never does... Would seem to point to a Sprite Overflow implementation bug, but the EMU passes all of blargg's Overflow/Sprite0 tests).
Code: Select all
863E 2C 02 20 BIT $2002 = 00 A:40 X:10 Y:10 P:37 SP:FD CYC: 63 SL:87 8641 F0 FB BEQ $863E A:40 X:10 Y:10 P:37 SP:FD CYC: 75 SL:87
Finally, TMNT. Basically, the overhead view looks fine, the pause/map screen looks perfect. But, once you actually enter a level... everything, again, seems like one vertical tile off. There's no status bar. Everything seems to run very slowly as well, whereas any other game is full-speed.
My emulator has per-cycle accuracy, so everything is basically by-the-book. I tried holding off posting for this long, because I usually come up with answers on my own. Any help at all would be appreciated!