notaz
Certified Guru
Hi,
Some of you may remember me after my Cyclone hacks. This time I did some more coding in ARM asm and rewrote the SPC700 emulation code (spc700.cpp) in asm. For those who didn't know SPC700 is CPU-like chip, which runs @~1MHz (which is not very far from main CPU speed) and controls the DSP in SNES. I wrote it while working on my SNES emu for Symbian UIQ phones, which is also derived from Yoyofr's OpenSnes9xGP.
Unfortunately it didn't improve performance as much as I expected, because Snes9x does too much sync between main CPU and SPC700 and the SPC700 context is constantly saved/loaded (so the idea of loading all frequently used stuff into registers and running for a while (like it is done in Cyclone/DrZ80) didn't work). Here is some comparison data (just don't laugh as it is from 156MHz phone which is doing GSM stuff in background and doesn't have fast screen access, etc.):
Avg FPS C code vs asm:
Super Mario World: ~10 vs ~15
Contra The Alien Wars: ~3.5 vs ~ 5.5
Final Fantasy VI: ~1 vs ~2.5 :unsure:
Adding some syncronization hacks gives another ~4fps, but breaks some games (added as an option in my emu).
Anyway, perhaps either Reesy or Squidge could take a look at the source code. Don't know if it would give any benefit, this was a (failed?) attempt to return something to GP32/GP2X community for their output to ARM based device world.
Some of you may remember me after my Cyclone hacks. This time I did some more coding in ARM asm and rewrote the SPC700 emulation code (spc700.cpp) in asm. For those who didn't know SPC700 is CPU-like chip, which runs @~1MHz (which is not very far from main CPU speed) and controls the DSP in SNES. I wrote it while working on my SNES emu for Symbian UIQ phones, which is also derived from Yoyofr's OpenSnes9xGP.
Unfortunately it didn't improve performance as much as I expected, because Snes9x does too much sync between main CPU and SPC700 and the SPC700 context is constantly saved/loaded (so the idea of loading all frequently used stuff into registers and running for a while (like it is done in Cyclone/DrZ80) didn't work). Here is some comparison data (just don't laugh as it is from 156MHz phone which is doing GSM stuff in background and doesn't have fast screen access, etc.):
Avg FPS C code vs asm:
Super Mario World: ~10 vs ~15
Contra The Alien Wars: ~3.5 vs ~ 5.5
Final Fantasy VI: ~1 vs ~2.5 :unsure:
Adding some syncronization hacks gives another ~4fps, but breaks some games (added as an option in my emu).
Anyway, perhaps either Reesy or Squidge could take a look at the source code. Don't know if it would give any benefit, this was a (failed?) attempt to return something to GP32/GP2X community for their output to ARM based device world.