Fx3 wrote:
- The PPU address bit rising/falling thing seems too complex.
It's a simple concept -- although it does end up being difficult to impliment. (You should see my current MMC3 code... hoooo boy!)
Quote:
Is there an alternate method for proper MMC3 emulation, or near enough?
Before I implimented MMC3's IRQ counter based on A12 rises, I simply had a function which I called every scanline around cycle 260. That function would clock the IRQ counter once provided all of the following were true:
- PPU is on
- 8x8 sprites: BG uses different pattern table than sprites ($2000.3 != $2000.4)
- 8x16 sprites: BG uses left pattern table ($0xxx)
That seemed to work "good enough" for most games. I was even able to get some trickier games like Kickmaster working without CRC checks or anything.
Using this method meant that my MMC3 code was then tied to my PPU code -- something which was kind of weird (but I guess it worked). However this is avoidable.
Quote:
My PPU code renders using tilecaching + pixel-by-pixel, without pre-caching tiles like the NES does. Well, that's it.
If you want to stick with the A12 route -- how your PPU renders doesn't need to play any role in how you emulate MMC3's IRQ counter. In fact in my current emu -- the PPU and MMC3 counter operate completely independently (although my MMC3 does need to "see" certain things in the PPU). If you're interested I can explain how my current system works and perhaps draw some diagrams or something. But it'd be a pretty big explanation so I don't want to post it unless you're really interested.