Behold! An update!
Wow, it's been a long time since the last update. A really long time. How did that happen?
I've always found it quite hard to find the time to update the blog. Usually when I have some free time in the evenings (that's free time spent doing things other than eating, socialising, and getting stuff ready for work), the choices I have are:
* Do some new development on Daedalus
* Play games/watch TV/relax
* Reply to a few emails/comments, post a new entry here
Unfortunately over the past half year or so the first two bullet points have won out. So, apologies for neglecting the 'outside world' for so long. On the plus side, the existance of the first bullet points means that I have lots of exciting new developments to talk about over the next few days
I'm going to finish off this reintroduction with a broad overview of some of the stuff I've been working on. This is all stuff that will be present in R9, which I'd like to release this month.
* Added support for RGBA 4444 and 5551 textures, saving a bunch of memory in the front end.
* Tidied up all the texture conversion code, fixing a few bugs in the process
* Fixed the width/height of FillRect calls in 1 and 2 cycle mode (fixed a few small graphical issues)
* Fixed a blending bug (fixed a few small graphical issues)
* Use 16-bit textures on the PSP to represent 16-bit N64 textures. Saves time converting, saves memory, and faster rendering
* Added mirrored texture support (this fixes lots of small graphical glitches)
* Fixed a LoadTile bug, allowing a couple of hacks to be removed (this also fixes various small graphical glitches)
* Added some new blend modes for various roms
* Fixed the Tri2 command for F3DLX microcodes
* Fixed a bug in busy-wait detection (this wasn't working correctly with dynarec code, net result is a small speedup)
* Fixed a few dynarec stability issues (relating to exceptions occuring mid-trace)
* Added audio support
* Added the ability to dump textures (developer builds only at the moment)
* Fixed screenshots. Again.
* Implemented cmp.s, cvt.s, cvt.w, mtc1, mfc1, bc1f, bc1t, j, cfc1, ctc1, daddu, trunc.w.s, bc1t, bc1f, bc1tl, bcifl, bnel, beql, blezl, bgtzl, bltzl, blezl in dynarec (this gives a decent speedup)
* Avoid setting the branch delay flag and current PC in generated dynarec code unless absolutely necessary (this gives another small speedup)
* Much better memory access handling in dynamically recompiled code (this gives a BIG speedup
* Use a second code buffer for generated dynarec code, to avoid polluting the instruction cache (this gives another small speedup)
* Further improve the memory access handling in generated dynarec code (another small speedup)
* Fix register usage analysis for lwc1/swc1/mfc1/mtc1 which was preventing base registers used in these instructions from being cached (another small speedup)
* Have compensation blocks restore nobbled registers, so on-trace code does't need to reload (another small speedup)
There's quite a lot in that list, so I highlighted the two most significant points. In summary R9 will be much faster, with audio support. I'll write a bit more about these changes in particular over the next few days (promise!)