PPSSPP is a PSP emulator written in C++, and translates PSP CPU instructions directly into optimized x86, x64 and ARM machine code, using JIT recompilers (dynarecs).
PPSSPP can thus run on quite low-spec hardware, including stronger ARM-based phones and tablets, as long as there's support for OpenGL ES 2.0.
PPSSPP is an open source project, licensed under the GPL 2.0 (or later). Anyone is welcome to contribute their improvements to the code.
Following the Dolphin tradition, the PPSSPP project is very open. Anyone can participate directly in the development by making pull requests, and if you make substantial contributions you may be given rights to commit directly.
You can build for Android from Windows, MacOSX or Linux.
To build for Android, make sure that you have installed the Android SDK and NDK correctly, and that the $NDK environment variable is set to the path of the NDK.
It is also possible to build the Android version using Ant. If you know how to do that, well, it'll be easy for you anyway.
You'll find yourself relying on the logs a lot to figure out what's really going on. As PPSSPP simulates the PSP OS, we get something similar to an strace.
There's a headless (no display/audio) build, which is very useful when running the pspautotests through test.py - highly recommended way to find issues.
The Windows port and the Qt build have interactive debuggers (Qt currently broken). Currently this is not available for mobile platforms and "SDL" builds.
Since this emulator needs to implement the whole PSP OS, testing it against the real thing is critical. Some other PSP emulator authors have collaborated around creating a test suite called pspautotest, and we have picked that up and turned it into a proper test suite. There are two scripts: test.py and gentest.py. gentest.py uses psplink to run a test program on your real PSP and captures the text output and saves it as [test].expected. Then you can run the same test in PPSSPP by using test.py, which will automatically compare the output to the expected output.
PPSSPP has few dependencies: basically zlib and OpenGL, and its own fork of FFMPEG. It uses the OpenGL ES 2.0 subset of OpenGL, so that the same graphics code can be shared between all platforms. It does also include a few minor libraries like CityHash and libzip directly in the distribution, for ease of building on Windows.
PPSSPP is a HLE ("high level emulation") emulator, it simulates the PSP OS as seen by the game rather than the full hardware. A program running on the PSP OS can send raw display lists to the graphics chips, but can't access the flash controller or the Media Engine directly, instead it has to go through libraries and the PSP OS kernel. We simply simulate these. This is a lot of work though, the PSP OS is large and has plenty of functionality so achieving 100% compatibility is difficult bordering on the impossible. We can get close though.
This is no longer an issue as Maxim has added support in FFMPEG for decoding this proprietary Sony audio format!
Pick from the list of tasks below, go look at the open issues on GitHub, or just implement whatever missing feature you feel like. If you send a couple of good pull requests, you'll be added as a contributor and get your own commit access.
Submit pull requests by e-mailing them to the project mailing list or posting them in the development section of the forum.
Do not simply copy code from JPCSP or build frameworks to make that easy. Instead, write code for PPSSPP, in the PPSSPP style. Using JPCSP as documentation of the PSP hardware/OS is fine though.
The PPSSPP coding style is approximately the same as Dolphin's coding style.. The one exception is that private member variables are distinguished by a '_' suffix instead of a 'm_' prefix, also, we prefer opening braces on the same line as the statement. The style is not strictly enforced but you are encouraged to write code in the same style to make it easier for other contributors to read and edit your code.
If you don't know where to start, pick a task below and have at it!
You are encouraged to port PPSSPP to new platforms. Here's an incomplete list of platforms that PPSSPP could or could not plausibly be ported to:
|Windows||Done||JIT for x86 and x64|
|Android||Done||JIT for ARM|
|Ouya (Android)||Soon||Gamepad and JIT|
|Linux||Done||JIT for x86 and x64|
|MacOSX||Done||JIT for x86 and x64. Port still pretty bad.|
|Blackberry 10||Done||JIT for ARM|
|Symbian||Done||JIT for ARM|
|iOS||Done (unofficial)||JIT (Jailbreak required)|
|Windows Phone 7.x||NOT POSSIBLE||No native code support|
|Windows Phone 8||NOT POSSIBLE||JIT not allowed, will be slow|
|Windows RT||POSSIBLE||JIT not allowed, will be slow|
|Xbox 360||POSSIBLE||Hacked consoles only.|
|Playstation 3||POSSIBLE||Hacked consoles only.|
|Wii||POSSIBLE||Hacked consoles only.|
|Xbox Original||POSSIBLE||Slow. Hacked consoles only.|
|Playstation 2||NOT POSSIBLE||Lack of RAM, weak CPU.|
|Gamecube||NOT POSSIBLE||Lack of RAM|
|Dreamcast||NOT POSSIBLE||Lack of RAM, weak CPU.|
|P166MMX||NOT POSSIBLE||Weak CPU|
|Nintendo DS||Are you kidding?||Way below requirements|