Monday, June 05, 2006

Source updated

Earlier this evening I updated the project CVS repository with the latest version of the code. Normally I only do this when I release a new build, but I know people have been playing with the code and have expressed an interest in seeing the latest developments.

I'm not quite ready to release a new binary yet (still a few more optimisations I want to make and various bugs to fix first), but I'll try and do this within the coming week.

Incidentally, updating the source normally only takes 20 minutes or so, but it took a good couple of hours tonight. Sourceforge updated their CVS service recently (May 12th) and as a result I had to spend a couple of hours updating WinCVS, generating new SSH keys and the like. Hopefully it won't be so painful next time around, or I might just lose the will to live.

As a more general update, I cleared a couple of things from my TODO list sorted this weekend. I'm caching floating point registers for most of the single-precision Cop1 instructions, which are now implemented directly in the dynarec code. I've not timed this in depth yet, but it's shaving 10-20ms/frame off the intro to Mario 64 (Mario's Head), which is particularly FPU heavy (i.e. I'm getting ~160ms/frame rather than ~180ms)

Finally I need to have a good think about how to go about optimising the double-precision floating point performance. As the PSP doesn't have hardware support for double precision floating point this is currently very expensive (i.e. adding 2 doubles on the n64 takes just one instruction - on the psp this balloons to several hundred as it all has to be done in software).

Currently I cheat and cast all the double-precision floats to single-precision values before performing the calculations. Although this is much faster it obviously loses a lot of precision, so I need to be careful it's not going to break any roms. Also even the float->double/double->float conversions are pretty expensive so it's still not an ideal solution. Fortunately not many roms seem to use double-precision maths extensively (presumably because it was relatively expensive on the n64), and where they do use it they don't seem to be too sensitive to the fact that I'm throwing most of their mantissa away :)

6 comments:

_Psycho said...

Just curious, I was compiling with the pspdevkit your source and it crash at the .S (asm) file (everything else was fine). Im not sure why yet, I didn't had a look, but just curious. Are you using the pspsdk toolchain from ps2dev in cygwin or something? I might go ahead and install everything but I was wondering first.

Thanks

_Psycho said...
This comment has been removed by a blog administrator.
_Psycho said...
This comment has been removed by a blog administrator.
PSdonkey said...

Everyone has been asking me that they cannot compile the new source and that they have been getting errors. I went ahead and compiled the new source for everyone and also added a couple of minor changes to the source for speed improvements. I also added an eboot icon and background to go with them. Here are the new compiled eboots for Daedalus Pre R5

Daedalus Pre R5 for version 1.00
http://rapidshare.de/files/22670349/Daedalus_100.rar.html

Daedalus Pre R5 for version 1.50
http://rapidshare.de/files/22670495/Daedalus_150_Pre_R5.rar.html

StrmnNrmn said...

insert display name here: I'll add an option to support the expansion pack. Theoretically it is just as easy as allocating an extra 4MB for the emulator, but obviously that's only possible if there is enough available memory. Currently memory is very tight, so I think it might take a fair bit of tweaking before this becomes possible.

wally: What errors are you getting? If you paste your error messages here I might be able to see what's going wrong.
There is limited (but out of date) support for compiling under GCC, so it probably wouldn't take too long to get things working (especially considering the codebase compiled under GCC for the PSP build.) I don't have time at the moment, but it's a possibility for the future. If you're looking to compile the PC version, you should be able to use the (free) Express Edition of VC++.

psycho: Yep - I'm using the pspdev toolchain (rebuilt about 2 months ago now).

For everyone who's having problems getting things compiling under the pspdev toolchain, this is a good guide to getting started. If you post your specific error messages etc I'll see what I can do to help you out.

Finally psdonkey: I'd appreciate it if you would post a link to your modified version of the source (as you're required to do as a condition of the license.) That way I can incorporate your speed improvements into the main build. Also, your links aren't working. I wonder why that is?

Antonio said...

kersplatty, you have to push "Select" to obtain the actual framerate!

Cheers!

AtaruZ