Archive for October, 2007

October 31st, 2007 by nkeynes
lxdream 0.8 released
Posted in Releases

With the work done in the last month both for performance and usability, it seems worthwhile to release a new version. And since this version is actually (hopefully) useable by people who aren’t me, lxdream now has a real version number rather than a milestone. W00t!
Download it and enjoy. And of course, let me know how it goes.

Note: Please do not report rendering problems at this stage – there are many known bugs and unimplemented features, and it’s looking like the whole rendering stage may need to be rewritten for the next version.


  • Implement more user-friendly GD-Rom changer (closes off #31)
  • Add recent GD-Rom image tracking
  • Fix for CDI images with more than 1 track per session
  • Save render buffers as part of the save state (issue #34)
  • Show preview screenshot in save state open dialog
  • Remove gnome dependency (now just depends on GTK 2.0+)

Screenshot of the shiny new GUI:

    The shiny new GUI
    October 26th, 2007 by nkeynes
    Slow week really…
    Posted in Development

    Finished off the GUI changes for the next release, and fixed a few audio issues. Still trying to figure out wtf is happening with the channel volume though, something’s not quite right there…

    • Finished rewriting the debug GUI to cooperate with the new main window – last remnants of glade-generated code are now gone.
    • More work on the controller settings dialog – it’s useable now (well, useable as in “it’s possible to use it” anyway), works, etc.
    • Fixed freelist bug in texcache (I don’t know how its gone so long without being triggered before, but…)
    • Fixed AICA save state data (wasn’t saving the channel or IO data)
    • Implemented AICA channel status registers
    October 19th, 2007 by nkeynes
    More user interface bits
    Posted in Development

    It’s been a GUI kind of week…


    • Maintain aspect-ratio when resizing window
    • Simplify command line – “lxdream disc-image” now boots off the specified disc.
    • Config file now loaded/saved from home directory by default, with system defaults in the sysconfdir.
    • Improve keyboard support to use unmodified key values (ie z and shift-z are now interpreted the same way).
    • Add initial controller settings dialog
    • Add path settings dialog
    • Unbreak the debugger (although the translator still doesn’t play well with it)
    • Add CDI V3.5 support (0×80000006) – looks to be barely distinct from V3 anyway.
    October 12th, 2007 by nkeynes
    Warnings, audio, and GUI updates
    Posted in Development

    I tracked down an ugly bug that only appeared in optimized builds to some highly dodgy code that’s probably been there since nearly the start of the project. As a result, it seemed like it might be a good idea to start building with -Wall, and actually fix the warnings (shock horror). Fixed a couple of real bugs in the process too. I also dug a little bit into the sound system (for the first time in nearly a year) and got the boot sound to play. Well, for a couple of seconds before it breaks into noise at least – there’s still some issues there.

    The biggest performance problem now appears to be the rendering code. For some typical scenes it’s taking 30-40ms/frame, where the original budget was around 25% cpu, or <5ms per frame. Yeah, it's bad. Working on it ^_^.

    • Fix (nearly) all of the compilation warnings gcc was generating under -Wall. Including a couple of actual bugs, which was nice.
    • Fix ADPCM sound to at least sort of work.
    • Fix AICA key-on/key-off behaviour.
    • First draft of shiny new GUI (unfortunately debugger is broken at the moment, not sure if its worth fixing – does anyone actually want it?)
    • Add support for output scaling
    • Clean out a batch of obsolete cruft from the video driver.
    October 5th, 2007 by nkeynes
    More speed, less bugs
    Posted in Development

    Fixed some minor bugs and improved the speed a little more – overall core speed is now roughly double that of M3 – not bad for a couple of weeks work. For certain use cases the system now runs at nearly 100% speed (under the unlikely assumption of 100,000,000 instructions/second[0]). Unfortunately I think I’ve just about tapped out the low-hanging fruit – further performance gains are likely to be obtained inch by painful inch.

    My plan for the moment is to get a decent user UI up and running, fix some of the nastier audio + video bugs, and shoot for an interim release later this month. It’d be particularly nice if the bootup sound was approximately correct (now that things are fast enough that you can actually tell that its b0rked).


    • Fix more translation cache bugs
    • Fix controller triggers (sense was inverted)
    • Remove MMU AT checks from sh4mem.c (needs to be in core anyway for exception correctness). Also #define out the trace checks by default – slight performance gain.
    • Add explicit branches in sh4mem.c for main memory access – it’s actually faster this way, if less flexible.
    • Fix save state loader bug (SH4).
    • Add command-line opt to change the SH4 speed scaling
    • Remove instruction counter in ESI (change to constant loads where needed)
    • Suppress redundant flag loads

    [0] Bloody complicated superscalar pipeline design… real code could run at anywhere between 10 MIPS and 400 MIPS for a 200Mhz clock. Getting even approximate cycle accuracy would be nice, just as soon as I have an efficient way to implement it.