Native code in one click
Choose Build native code in the launcher, or let Play build it first. The Windows installer brings the recompiler, a portable compiler, the AOT SDK and a private Python — no Visual Studio, LLVM or Python install needed.
v0.1.2 Windows 10/11 x64 · Linux port in progress
PSPC recompiles PlayStation Portable game code ahead of time, from Allegrex MIPS into
C++, and builds it into native modules — DLLs on Windows, .so files on
Linux. The PSP's operating system, firmware 4.01 with M33, is reimplemented natively,
using the decompiled firmware as its specification. An interpreter covers anything the
recompiler misses.
Free and open source (GPL-2.0-or-later). Games and Sony firmware are not included: bring dumps of games you own.
New in v0.1.2: faster high-resolution graphics, named firmware profiles, fewer rebuild prompts and Super Squadron online.
Allegrex MIPS in
08804A20 addiu sp, sp, -16
08804A24 sw ra, 12(sp)
08804A28 jal 0x08804B00
08804A2C nop
C++ out
void B_08804A20(Ctx *c, u32 ra0, u32 sp0) {
sem_ADDIU(c, 0x27BDFFF0u);
sem_SW(c, 0xAFBF000Cu);
c->budget -= 4;
c->r[31] = 0x08804A30u;
B_08804B00(c, c->r[31], c->r[29]);
…
How it works
“Recompile what is pure software; reimplement natively what touches hardware or CPU state. Use the decompiled firmware as the specification for everything we reimplement.”
An ISO, CSO, ZSO, DAX or EBOOT.PBP of a game you own.
Decrypts executables (KIRK, gzip/KL4E, PSAR). A separate GPL-3.0 program, never linked into PSPC.
Discovers the functions in each module, applies relocations and translates Allegrex MIPS into C++.
Compiled into a DLL or .so named after the module's SHA-1, and cached between runs.
Native code from the AOT modules, with an interpreter for any address the static pass missed. The interpreter calls back into native code as soon as it reaches a compiled function.
PSP threads on host fibers, sync objects, memory partitions, module loading, interrupts and timing — reimplemented, not emulated.
The PSP's libraries reimplemented natively and keyed by NID, from sceAudio to sceUtility, sceMpeg and the network stack.
SystemCtrl, KUBridge, VshCtrl, config.se, plugins and the NID resolver, reproduced natively.
GE graphics renderers, audio and video decoding, disc images and the memory stick, host networking, SDL2 input.
Every instruction's behavior is written once, in semantics shared by the interpreter and the generated code. The interpreter calls it with the instruction word it fetched; generated code calls it with the word as a constant, so the C++ compiler folds the decoding away.
That makes the test suite a differential test of the recompiler: pspautotests runs interpreted and as native code, and the results are identical, test by test.
PPSSPP already plays nearly every PSP game through emulation, and it is PSPC's most important correctness oracle. PSPC takes a different path: game code is compiled to native code ahead of time, and the PSP's own 4.01 M33 system software — the XMB, the VSH menu, recovery — runs as recompiled code on a natively reimplemented kernel.
Features
Choose Build native code in the launcher, or let Play build it first. The Windows installer brings the recompiler, a portable compiler, the AOT SDK and a private Python — no Visual Studio, LLVM or Python install needed.
A multithreaded software renderer is the accuracy reference. Direct3D 11 (Windows) and OpenGL (Linux) render at 1–16× resolution, supersampled to your window, with xBR texture upscaling and texture filtering.
Transform, lighting and clipping run on the GPU in Direct3D 11 and OpenGL, bit for bit as on the CPU. Remaining vertex work runs on worker threads. v0.1.2 also cuts high-resolution texture sampling costs and redraws system overlays only when they change.
sceAudio, SAS, ATRAC3 and ATRAC3+, MP3, AAC and the audio codec library. PSMF video and H.264 decoding, so game movies play with sound.
Bring Sony's official 4.01 update and build a named profile in Firmware Manager. Boot XMB starts the active profile: launch ISOs and manage saved data in the genuine XMB. M33's menus run too, from the M33 installer's modules.
Cheat devices such as CWCheat and DarkFrost, screenshot and button-remap plugins load as on a PSP running 4.01 M33 — no Pandora battery or recovery menu. Toggle them from the launcher.
PSPC Network stands in for PlayStation Network, with servers for Syphon Filter: Combat Ops and GameSpy games, plus PPSSPP-compatible ad hoc play — started from the launcher's Online page.
Drop dumps in the Games folder. The launcher tags native builds (NATIVE, PARTIAL, REBUILD), searches with Ctrl+F, and maps the keyboard and SDL game controllers.
ISO, CSO, ZSO, DAX and EBOOT.PBP. Nothing depends on the UMD's 1.8 GB limit: ISO, CSO and ZSO images of patched or extended games can reach 8 TB.
Compatibility
Results from PSPC's own testing, newest first. “Gameplay” is the furthest screen confirmed by a frame dump; most runs are headless with scripted input. These results are not a cross-platform parity claim.
| Game | Native (AOT) | Interpreter | Highlights |
|---|---|---|---|
| DaxterNPUG80329 | Gameplay first level | Gameplay | The intro movie plays with sound. |
| Syphon Filter: Combat OpsNPUG80114 | Online match two instances; Mission Modifier offline | Mission Modifier | Signs in through PSPC Network; lobby, mission downloads, ranked deathmatch, leaderboards and the message board. Ad hoc hosting and joining. |
| Syphon Filter: Logan's ShadowUCUS98606 | Gameplay training, story episode 1 | Gameplay | Story cutscenes play. Missions run at about half real time for now. |
| Monster Hunter Freedom UniteULUS10391 | Gameplay village, first quest | Gameplay | Character naming with the on-screen keyboard; saves, Continue and Data Install work. Needs the system fonts. |
| Star Wars Battlefront: Elite SquadronULUS10390 | Online match two instances; Instant Action, campaign | Gameplay Instant Action | Ground and space battles, Galactic Conquest. Online via GameSpy: accounts, hosting and joining Conquest, friends, Player Rankings. |
| Star Wars Battlefront: Renegade SquadronULUS10292 | Gameplay Instant Action, campaign, space | Gameplay | Profiles save and load. |
| Star Wars Battlefront IIULUS10053 | Not built yet | Gameplay Instant Action, space, challenges | Battles run at about 30% of real time interpreted, until native code is built. |
Full notes and known issues: docs/COMPATIBILITY.md
The community suite of hardware-recorded expectations.
The other 20 are recorded hardware differences (such as timing jitter, or the recording PSP's uptime and memory map), listed with their reasons. The gate is zero unexpected failures.
All seven games replay scripted input to fixed points in game time, with a fixed guest clock and a fresh memory stick, and their frames must match references recorded on the same machine, pixel for pixel.
A change that alters how far a game gets, or what it shows on the way, fails the run.
Online
The launcher's Online page runs every server on your PC with one click, for you and your friends, or points your games at someone else's. Everything they need comes with PSPC. The online guide walks through each one.
A PlayStation Network stand-in: accounts, signed NP tickets in Sony's format and friend lists. Games that sign in to PSN, like Combat Ops, sign in here. It can also point games' old server names at community revival servers (PPSSPP infra-dns.json compatible).
SCE-RT/Medius lobby and game servers, the SVO portal, mission sharing, leaderboards, cells and the message board for Syphon Filter: Combat Ops. Instances meet in the lobby and play unranked and ranked matches.
Accounts, friends, hosted games, stats and leaderboards for Star Wars Battlefront: Elite Squadron and its mod Star Wars Super Squadron. Super Squadron connects to swss.pspc.online by default; running your own server or choosing OpenSpy overrides that.
A PPSSPP-compatible ad hoc server (pspc --adhoc-server), so PPSSPP players and public PPSSPP servers work too. Run two instances on one PC, or play across your LAN.
The PSPC Network server needs only Python 3.9 or later — standard library, one SQLite file. Put it behind a TLS reverse proxy on the internet; plain HTTP is fine on a LAN.
Match tests used game instances on one PC; the public Super Squadron server runs on the internet. GameSpy hosting now has connection and parsing limits, dedicated sessions and optional Cloudflare Tunnel support: see the public-server setup and security review.
$ cd server
$ python -m pspc_network serve
# http://0.0.0.0:8423, database pspc_network.sqlite
Get started
The short version is below. For every step in detail, follow the first-game tutorial, or browse all the guides.
Download PSPC-0.1.2-x64.msi from the v0.1.2 release and open it. It installs for your Windows account in %LOCALAPPDATA%\Programs\PSPC without administrator rights, and adds PSPC to the Start menu and the desktop.
The installer isn't signed yet, so Windows may say it's from an unknown publisher: choose More info, then Run anyway. Its SHA-256 checksum is in the install guide.
Start PSPC. Put ISO, CSO or EBOOT.PBP dumps of games you own in its Games folder, or click Choose a folder… where they already are.
Double-click a game. Keyboard and controller controls, the renderer, the resolution and texture upscaling are under Settings.
The sidebar's Online page starts PSPC Network, the Combat Ops server, the GameSpy server and the ad hoc server with one click, or connects to someone else's.
With Sony's PSP system software update 4.01 (its EBOOT.PBP), open Firmware Manager, choose Build from update… and name your profile. Boot XMB starts the active profile. The firmware also brings the system fonts some games draw their text with.
Updating: open a newer MSI. It replaces the old version and keeps your settings, saves, firmware and server accounts.
The Linux runtime, the OpenGL renderer and a native GTK launcher build from source and pass the port's scoped checks. The v0.1.2 source includes the port, but this release publishes only the Windows installer; Linux is still in progress, without full Windows parity. You need a C++20 compiler, CMake 3.21+, Ninja, Python 3, and development packages for SDL2, FFmpeg, FreeType, fontconfig, libcurl 7.85+, GTK 3.22+ and OpenGL. Native game builds from the launcher use Clang.
$ git clone --branch v0.1.2 --depth 1 https://github.com/Gattic/PSPC.git && cd PSPC
$ cmake -S . -B build/LinuxRuntime -G Ninja \
-DCMAKE_BUILD_TYPE=RelWithDebInfo -DPSPC_BUILD_RUNTIME=ON
$ cmake --build build/LinuxRuntime --parallel 4
$ build/LinuxRuntime/bin/pspc-launcher Games
Build native code for every module on a disc once, then play. From an installed copy's folder:
python\python.exe -I -B -X utf8 tools\pspc_build.py Games\MyGame.iso
pspc.exe Games\MyGame.iso
| Option | What it does |
|---|---|
--interp | Ignore native code and interpret everything. |
--renderer software|opengl|d3d11|none | Software (default), OpenGL (Linux), Direct3D 11 (Windows), or no drawing for dedicated servers. |
--render-scale 1-16 | GPU internal resolution: 8 = 4K, 16 = 8K. |
--texture-upscale 1-4 | Scale GPU textures up with xBR. |
--vsh, --recovery | Boot the installed firmware's XMB, or M33's recovery menu. |
--adhoc-server | Run a PPSSPP-compatible ad hoc server. |
--headless --fast-time | No window or audio, skip idle time (tests, batch runs). |
pspc --help lists every option. Settings live in pspc.ini next to pspc.exe.
Game controllers work through SDL: both sticks drive the PSP's analog stick. Every key and button can be remapped under Settings.
Status
| Area | State |
|---|---|
| Allegrex CPU: decoder, interpreter, FPU, VFPU (bit-exact hardware model) | Working cpu/ 42/42 |
| AOT recompiler and native module pipeline | Working 99%+ coverage on retail games |
| Kernel: threads, sync objects, memory, modules, interrupts, timing | Working threads/ 152/158 |
| GE graphics: software, Direct3D 11 and OpenGL renderers | Working gpu/ 111/111 (software) |
| Audio: sceAudio, SAS, ATRAC3/3+, MP3, AAC | Working audio/ 73/74 |
| Video (sceMpeg, PSMF, video codec) and JPEG | Working video/ 24/30, jpeg/ 8/11 |
| I/O, UMD, memory stick, ISO/CSO/ZSO/DAX | Working |
| sceUtility (save data, dialogs, on-screen keyboard), PGF fonts | Working |
| Networking: infrastructure and ad hoc | Working |
| PSPC Network, Combat Ops and GameSpy servers | Working tested on one PC |
| M33 layer: SystemCtrl, KUBridge, VshCtrl, config.se, plugins | Working |
| Real 4.01 XMB (with Sony's official update) | Working boots, navigates, launches games |
| Linux port: runtime, OpenGL renderer, GTK launcher | In progress |
What that means in practice: what PSPC can and can't do
FAQ
Not in the usual sense. Game code is translated to C++ and compiled to native code ahead of time, and the PSP's operating system is reimplemented natively. Hardware without public documentation — the Media Engine's codecs, the GE graphics chip, KIRK crypto — is handled at the library boundary. An interpreter that shares the recompiler's instruction semantics covers anything the static pass missed. See how PSPC differs from PPSSPP.
No. Use dumps of discs and downloads you own; PSN titles need your own license files. Sony's 4.01 firmware is optional, for the XMB and the system fonts. It is not included and PSPC never downloads it.
Not on Windows: the installer includes the recompiler, a portable LLVM/MinGW compiler, the matching AOT SDK and a private Python runtime. A whole disc builds in about a minute, and native code is cached between runs. After an update, the launcher offers to rebuild outdated code. Games can also run in the interpreter.
The installer isn't code-signed yet. Choose More info, then Run anyway. You can check the download against its SHA-256 checksum: see the install guide.
Games that draw text with the PSP's system fonts need PGF files in the active profile's firmware\<name>\flash0\font folder. Install Sony's official 4.01 update with Firmware Manager, or add a compatible PGF set there: see system fonts. Without them the game keeps running, but that text is invisible.
Run it with --log info --log-file run.log; on a crash PSPC prints a symbolized backtrace, with native frames named by guest function. Trying --interp tells recompiler problems from system-library problems. Then open an issue. Troubleshooting covers the common problems first.
Yes. The repository has the architecture, recompiler and testing docs, and the plan that drives the project.
PSPC 0.1.2 for Windows 10/11 x64. Free, open source, no administrator rights needed.