Monday, June 26, 2006

32X Emulation Progress

Since this is my first post - if you dont know, jEnesis is a Java Genesis emulator and for some days now it emulates the 32X, too, for the first time in Java.

The 32X was an addon for the Sega Genesis, but didnt live very long, because it came out at the same time as the Saturn, which was superior, and not many games were produced for it.
Nevertheless, its not quite easy to emulate. The 32X has basically the same CPU setup as the Saturn: 2x Hitachi SH2 32Bit Risc @ 23MHz, 1xMotorola 68000 @ 8MHz and one Zilog Z80 @ 4MHz for sound mostly, and requires very accurate timing.

After my initial version of the SH2 core showed some results, i got ~15-35 fps, depending on the game on my 1.7GHz Athlon XP and my goal was and is to get it running fullspeed on my machine. At first i thought about dynamic recompilation, and i didnt completely dump the idea yet, but first i wanted to try what i can do with 'conventional' means.
So i made some improvements in the memory decoding and Java related things, but...
Last night i made a big step with idle loop detection, and some games even run at least fullspeed now. The detection is still basic and i think i can do more in this direction. The effect it has is already better than i anticipated though.

Here are some screens of it in action: