PS2PSXe Downloads and Updates
Where has the old good, big, hard to navigate and useless thread gone? Nevermind.
I'm not dead nor anything like that (just in case anyone wondered ;) ). I'll try to make it short:
I am not going to work on PS2PSXe anymore. Right now I'm occupied with another project, so you'll most likely hear from me again sooner or later.
Yes, most recent public r202 had some additional issues that were introduced with the hw XA playback code.
Yes, I guess I can publish the source code (or hand it over to someone). I should have somewhere all the most recent source as well as full svn repository (going back to one of the very first non-public, non-operational versions). But... (yup, this word tends to be annoiyng) It seems that some time ago I lost all the changes I made to ps2sdk and gskit (I did a proper backup of the application's sources, but never backed up my ps2sdk/gskit sources nor binaries - I considered it all temporary solution - which remained permanent ;) )... And since the application relies heavily on the changes, it doesn't compile at all (actually, it is quite easy to make it compile, but not so easy to make it work). I probably could redo all the changes, provided I had sufficient time and will. So it would require some work to even make it work the way it did at the most recent r209.
The main problem is, that it still isn't fast enough and I can't think of a good way to make it considerably faster (except for scraping all the code and starting anew). Most of the issues are fixable, but would make the app even slower.
The CPU emulation is quite efficient (there is still some nasty bug in the recompiler, though). The dynamic recompiler does it's work quite well. There is no virtualization support on PS2, so it has to be a recompiler, which has some limitations (even though it's few times faster than interpreter... which is no longer present at all in the app - was scrapped at very early stage). Branches could be made faster (a lot of checks during branches - interrupts and stuff) and here is a good place to start. The PSX registers are allocated quite efficiently to saved hardware PS2 registers (and in some cases, when there is no need to preserve the values or register is used for computation between memory reads and writes - which can cause a hw related function being called - in temporary registers). There are some check to even optimize multiple blocks (to not flush the registers to memory between blocks).
The memory layout is being totally remapped (using hw TLB capabilities), to make it as close to PSX memory map as possible, including mapping (not really a good word in this case) PSX registers and trapping them properly. So even though in recompiled code, there is simple write (sw) to a PSX memory mapped hardware, appropriate PS2 emulation functions are being called instead of simple write being done (this saves a lot of time for checking every write and read for hardware access, thus the need to either exit recompiled code to a PS2 function at every single write/read, or make the recompiled code huge, thus causing more cache issues). To make it even faster, checking for code self modifications is stripped to bare minimum, which is still enough to make it pass in most of the cases).
The SPU is mostly "translated" not emulated (no speed decrease at all).
PAD is being translated instead of emulating it. Memory cards are emulated (but all the sio emulation is simple enough, to not cause any speed issues).
The GPU emulation (although bugged), could be improved (speed wise)... Yet not as much as we need. The GS is configurable enough to support all PSX capabilities (not directly, but at very minimum cost) - (all the blending functions, texture windows, etc, that can be set up to work exactly as on PSX - on PC it's usually done with pixel shaders, so it's not a big deal, but since PS2 doesn't support that, it could become a chore, if the functionality wasn't there).
CDROM access is not a big deal (separate IOP thread that feeds EE with data in asynchronous mode) - doesn't cause to much trouble.
MDECS are being decoded (and color space transformed) using IPU hardware capabilities. It's fast enough to run at really good framerates, but is being held back by the CPU emulation taking place at the same time.
I still consider it quite fast (at least comparing to other emulators running at 300MHz CPU with 32MB of ram - heck, even the PS3 port of pcsx - PS3x was it? - wasn't fast enough to make all the games run at 100%... It was using software GPU emulation and no SPEs, though)... Though it definitely could be faster. But it doesn't matter that much, since it's bugged as hell.
But, since I lost interest in the project anyway, it doesn't really matter that much. I simply wanted to write few words, saying where the project has actually stopped.