So I've been developing an emulator (both as a learning experience and as a product for a certain platform... will get to that soon enough).
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).
Next, Megaman 6. The game looks and plays perfectly... except for ONE miniboss. The monkey/ape/wtfever in Plant Man's level. The (background?) tiles look like they're all one vertical index off. I couldn't find this bug in any other emulator. As soon as I defeat him, everything's normal again.
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!
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:
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
8641 F0 FB BEQ $863E A:40 X:10 Y:10 P:37 SP:FD CYC: 75 SL:87
Next, Megaman 6. The game looks and plays perfectly... except for ONE miniboss. The monkey/ape/wtfever in Plant Man's level. The (background?) tiles look like they're all one vertical index off. I couldn't find this bug in any other emulator. As soon as I defeat him, everything's normal again.
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!