How I made friends PlayStation 2 and PlayStation Portable (spoiler - combined into one emulator)

    Hello readers. Last year I published my hobby project Red Omega PS2 emulator . The idea was to adapt the control of the original PCSX2 emulator for games on the Surface Pro via Touch Screen.

    The original PCSX2 emulator code was rewritten in the form of a DLL module, loaded into C # code with a graphical interface on WPF. The project turned out to be workable and successful - Final Fantasy X and Final Fantasy XII went off with a bang. But six months ago, I came across a link to Valkyria Chronicles 4 on Steam. I bought the first Valkyria Chronicles on the disc and “hit” me, but there is a question - where is the second and third!?! The answer was found quickly - these sequels came out only on game consoles. The versions available for the PlayStation Portable turned out to be the most accessible - through the PPSSPP emulator. The smartphone is not bad, but on the Surface Pro I didn’t like the controls via Touch. Yes, and switch from Omega Red to PPSSPP, and vice versa is not hunting. And then a "crazy" idea arose - to rewrite the original PPSSPP code in the form of a DLL module !!!


    Easy to say, but much harder to do. The original PPSSPP emulator is being developed as an Open Source project and is available in the form of complete code for study and modification. The code is interesting and can be run on a variety of graphical APIs: OpenGL, DirectX9, DirectX11, Vulkan. In addition, it has a built-in GUI. But the PPSSPP architecture is more “clear” than PCSX2 - more modularity and dependencies are simplified. The main key to realizing my idea was the ability to load a game disc and save it as an argument to the program. The elementary solution is to rewrite the input EXE function into the EXPORTED DLL function. Of course, there will be problems with creating a second “window”, redirecting the output of the graphic renderer to WPF graphic context, connecting Touch code, etc. etc., but I’ve already decided all this,

    What is the result - the solution works! It was possible to combine two so different emulators in one solution with seamless switching between games for different emulators. The result can be evaluated on the video:


    In addition, I would like to mention the following changes, compared to the first release of the Red Omega PS2 emulator :

    1. The color scheme has been changed - the comments indicated the inconvenience of the color scheme of the interface - red. A strange inconvenience - but I decided to add the inverted “Blue” gamut:

    image

    2. Tessellation - the “Tessellation” function from DirectX 11 was added for PCSX2 games - this function allows you to increase the number of polygons for models:

    image

    Tessellation is selected from the “Rendering schema” option:

    image

    DEFAULT

    image

    TESSELLATED

    image

    DEFAULT

    image

    TESSELLATED

    image

    3. FXAA - for PCSX2 games, the “Enable FXAA” function has been added to remove Steps along the boundaries of polygons - the solution does not work perfectly, but it works:

    image

    4. Quick save - save the state of the emulator with one command:

    image

    5. Volume control:

    image

    At the moment, the program is available at: Omega Red and is presented on GitHub: OmegaRed

    Also popular now: