Hi there, I'm Squarepusher from the psx-scene forums - long-time fanboy of the Xbox scene though - it's what gave me the motivation to update these PS3 emulator ports regularly because I wanted to see it flourish like the Xbox 1 scene.
Great that somebody has finally ported over a recent version of SNES9x to Xbox 1 now.
I do know for a fact that zones' IRQ/SA-1 changes have had a big performance impact in 1.53 (Jikkyou Oshaberi Parodius for instance is well above 60fps in the character select screen without them - with the zones IRQ/SA-1 changes, it dips below 53fps) - that's why I'm not using them (I develop the PS3 port) and neither does the Wii devs (dborth).
It would be interesting to see how well this code runs on x86. I know a couple of games that are very demanding on PS3 that you could test:
1 - Star Fox 2 - this will drop to 55/56fps regularly - perhaps even a bit more in some of the indoor areas.
2 - Romancing Saga 3 - when you go to the 'equip'/'menu screen' (with the 6 characters/sprites on top of a hi-res 512x224 screen) - the framerate will drop to 40fps.
3 - Seiken Densetsu 3 - if you select Angela as your first character and bring up the 'equip/menu screen' when you're outside, it will drop to 40fps. The equip menu screen is another one of these instances where the SNES goes into hi-res 512x224 - but for some reason, it seems to only drop down massively with these two games in particular - Kirby's Dreamland 3 runs at well above 60fps in levels where 512x224 gets used.
Now the weird thing is - for ANY of the other characters (Duran/Hawk/Kevin/Riesz/whatever), this does not happen at all. That's what makes me think it's some kind of display bug in SNES9x.
4- Vortex - similarly slow as Star Fox 2 - drops to about 57/55/53fps depending on the situation.
I've put most of these performance problems down to the fact that the original code is full of branches and made some amends to make the code blocks bigger so there are less branches which would flush the pipeline all the time.
One way I cut down on some of the branches is to make three codepaths - one for SuperFX games, one for SA-1 and one for regular games - no SA-1/SuperFX basically. That way, I can leave out all of the SuperFX/SA-1 branches in the regualr codepath - you can setup these codepaths easily in SNES9x because Settings.SA1 or Settings.SuperFX always gets set in memmap.cpp while the ROM is loaded by SNES9x - so we know when a game has been loaded that has a SA-1 or SuperFX co-chip. Based on that knowledge, we can point it to a modified S9xMainLoop.
Now obviously, an x86 out-of-order CPU should have far less problems with this codebase, so let's hear how this Xbox version performs with the above mentioned games. Hell, I'd gladly whip out my Xbox 1 and go test it myself - it will certainly be laughable if a Celeron 733 performs better than the Cell 3.2GHz PPU.
Another thing that made a big difference on PS3 - removing virtual function call overhead - you can take a look at how I modified the APU code in the PS3 port - perhaps it will make a difference on Xbox 1 as well.
This post has been edited by Dante_Ali: Apr 24 2011, 02:42 PM