Hello!
I've been working on my emulator, Nintendoish for the last 10 months or so.
Progress is going great! I've retargeted the emulator to be an iOS emulator. While there are Windows/Mac build targets, they don't have great UI and are mostly meant for ease of development. The main user experience for the emu is definitely as an iOS app.
I currently pass all of Blargg's PPU tests (including ppu_vbl_nmi) and all of his CPU tests except for the last test in cpu_interrupts_v2. I have to thank everyone on this forum for my progress. Even though I haven't posted many questions directly, searching this forum I've been able to almost always find an answer.
My main problem right now is the only way I can get the emu to pass ppu_vbl_nmi, get through Battletoads level 2, and not shake the status bar in Bart vs the Space Mutants is through dirty PPU hacks. Delay Vblank a couple cycles here, delay Sprite 0 hit a couple cycles there, etc.
Obviously that's not ideal. I want a hack free PPU if possible.
My question is this: Is it possible to get those timings right without implementing a CPU that executes cycle by cycle microcodes? Has anyone successfully written an emulator that executes a whole instruction in one cycle, runs the PPU by the timing of that instruction * 3, repeat with next instruction, and still gets through Battletoads, doesn't shake Bart's status bar, and passes ppu timing tests without PPU hacks?
If not then sounds like I probably should rewrite my CPU. Because I really do want to make it through those timings without dirty PPU hacks if possible.
For what's it worth, currently my CPU looks like this:
1. Load an instruction. (But don't execute)
2. Step the PPU as many times as the loaded instruction timing requires * 3.
3. Poll for interrupts and set them to pending.
4. Execute the loaded instruction.
5. Execute any pending interrupts.
6. Step the PPU for any additional cycles caught in execution. (Crossed pages.)
7. Goto Step 1.
Thank you!
I've been working on my emulator, Nintendoish for the last 10 months or so.
Progress is going great! I've retargeted the emulator to be an iOS emulator. While there are Windows/Mac build targets, they don't have great UI and are mostly meant for ease of development. The main user experience for the emu is definitely as an iOS app.
I currently pass all of Blargg's PPU tests (including ppu_vbl_nmi) and all of his CPU tests except for the last test in cpu_interrupts_v2. I have to thank everyone on this forum for my progress. Even though I haven't posted many questions directly, searching this forum I've been able to almost always find an answer.
My main problem right now is the only way I can get the emu to pass ppu_vbl_nmi, get through Battletoads level 2, and not shake the status bar in Bart vs the Space Mutants is through dirty PPU hacks. Delay Vblank a couple cycles here, delay Sprite 0 hit a couple cycles there, etc.
Obviously that's not ideal. I want a hack free PPU if possible.
My question is this: Is it possible to get those timings right without implementing a CPU that executes cycle by cycle microcodes? Has anyone successfully written an emulator that executes a whole instruction in one cycle, runs the PPU by the timing of that instruction * 3, repeat with next instruction, and still gets through Battletoads, doesn't shake Bart's status bar, and passes ppu timing tests without PPU hacks?
If not then sounds like I probably should rewrite my CPU. Because I really do want to make it through those timings without dirty PPU hacks if possible.
For what's it worth, currently my CPU looks like this:
1. Load an instruction. (But don't execute)
2. Step the PPU as many times as the loaded instruction timing requires * 3.
3. Poll for interrupts and set them to pending.
4. Execute the loaded instruction.
5. Execute any pending interrupts.
6. Step the PPU for any additional cycles caught in execution. (Crossed pages.)
7. Goto Step 1.
Thank you!