Anyone with more knowledge that myself with regards to emulation care to chip in? I’d love some insight, or related articles.
Saturn emulation has been a fascination of mine for 15-some years.
The PS3 does not have self-modifying PPC code (SCEI forbade it), which means the PPE blob can be compiled ahead-of-time (RPCS3 converts it into LLVM). The SPE data can self-modify, however, but (to my knowledge) does not require extensive synchronisation, therefore each SPE core can be put on a thread.
The PS2 code has fairly extensive use of self-modifying code; Naughty Dog in particular will frequently load parts of the executable in and out of memory on both the PS2 main processor (the EE) and the PS1 processor (the IOP), and rely on the synchronisation between these two separate processors to be fairly tight. Trying to make the EE and IOP separate threads running simultaneously breaks this synchronisation, so the EE and IOP have to run on the same thread.
Additionally, the PS2 has two vector units; VU0 is associated with the EE (it can be used as a floating-point SIMD unit in the EE instruction stream) and VU1 is associated with the GS [the PS2's GPU, the Graphics Synthesizer] Interface (GIF) (it can directly output primitives to the GS). This means that VU0 needs to run on the same thread that the EE runs on (because there is instruction stream interlocking), and VU1 needs relatively tight synchronisation to the GS (it is feasible to put it on its own thread, but games can be quite picky with timings)
Sony did manage to ship a PS2 emulator that ran on the second-generation PS3 though (1st generation PS3 had actual PS2 hardware inside, but the second generation was software-only emulation if I recall correctly?). Besides knowing exactly about every hardware detail, any idea how they pulled that off on hardware that was much weaker relative to a PS2, compared to a modern PC?
For sort of 80/20 compat the PS2 is easier. You can HLE a couple of the processors, the GPU side of things is from the fixed function days, and has a split VRAM like your PC. The PS3 also has a nasty habit of making the SPEs make up for the anemic GPU and what would traditionally be pixel shader post processing tasks.
For Dolphin level full compat, IMO the PS3 is easier. The complexity memory subsystem and just plain number of jobs in flight meant that synchronization was very explicit between the components, as you couldn't really get away with "I'm just going to assume some happens before relationship is valid because I counted the requisite number of cycles". So you can rely quite a bit more as an emulator author that the game authors will make their intentions clearer. There's also more legacy in the PS2; the IO processor is itself a full PS1, that's how backwards compat worked. So you're really looking at all the work to make two emulators in one.
Try emulating any of the "Need For Speed" games, which made tonnes of use of graphics tricks.
That said I do appreciate their efforts, it's just we're still a way off until it could be considered complete.
Timing remains my main problem with emulation. Input and output lag have gotten really bad and so hard to predict until you start actually messing with the equipment you'll be using, and even then little config quirks or the way things are hooked up (adding a receiver to the mix, for instance) can throw it all over the place. Lots of games become unplayable or unreasonably hard with just a little extra lag, so it's a real problem.
For most games, VU borrowing "cycles" from CPU can help a great deal, so can enabling the threading. The defaults are the most compatible, but also slowest.
Also, GSDX is the only gpu plugin that works semi-decently, and only with actual DirectX. Opengl is all over the place.
Most games work fine even on a ten year old computer, with these settings, as long as you're on Windows.
Linux support could be better, but there's no manpower for that. It is kept alive by one or two developers who use Linux, most of the team being on Windows.
It's not open source, though. That means whatever improvements for preserving Dreamcast games will be taken to the author's grave. A lot of emulator development revolves around people sharing knowledge about how things work and making incremental improvements.
Taken to an extreme, if you were trying to fully map out a system from top to bottom for the explicit purpose of preservation like byuu's higan[1], it would make no sense to keep the source closed. There's an article[2] describing his request for help mapping the SNES PPU at the transistor level for the purpose of perfectly emulating it. The kind of effort moving in the direction of preseration requires is nontrivial and open source would be a massive benefit. And if there are any flaws there's no need to rely on the motivations of a single contributor to fix them.
I don't believe such a goal is compatible with a profit motive.