February 23, 2007
I basically spent the last couple weeks just working on fixing things in the core emulation. The next release after 0.9.0b1 has some new features including:
- Full-fledged exceptions. Previously there were a number of places TLB and other exceptions couldn't occur, including delay slots. This has been overhauled and all exceptions can now occur anywhere anytime.
- Special handling for a delay slot that resides on a separate code page. The MIPS r4300 TLB can map pages of memory as small as 4kb. A problem comes up if the delay slot exists on a separate page from the branch instruction it's paired with AND the page it is on is not currently mapped by the TLB. You might think this would never happen. At a peak of 90 million instructions per second, it happens more often than you might think.
The new core also has lots of fixes including:
- Bug fixes for the Intel recompiler instructions: ldr, ldl, sdl, sdr, syscall
- Bug fixes for the PowerPC recompiler instructions: sdl, sdr
- Bug fixes and new instructions implemented in the DSP recompiler for Intel and PowerPC.
- A massive bug that was causing the recompiled code cache to execute stale code. This was causing emulated crashes that took a long time to track down, but this alone has bumped compatibility up all over the place.
So the big question is: If all this is such a huge improvement, why hasn't it been released yet?
Two reasons:
- Some of the fixes currently only exist in the PowerPC or Intel core, and need to be brought over to the other side. (For ex: There is at least one game freezing on the PowerPC that runs fine with the Intel recompiler.)
- The current code cache bug fix, plus the new exceptions have hurt speed quite a bit. Luckily, these are both very fixable problems and I expect to get the speed back to where the previous release was, but it's going to take a bit more work.
The good news is, I can tell you without a doubt the next release is going to have the highest core compatibility sixtyforce has ever seen!