v0.1.2 Windows 10/11 x64 · Linux port in progress

PSP games, compiled into native PC programs.

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.

pspc-recomp

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]);
  …
Each guest function becomes a C++ function; each instruction calls the same semantics the interpreter uses. (Simplified recompiler output.)
  • 539/559 pspautotests pass, identical interpreted and native
  • 7 retail games reach gameplay
  • 99%+ recompiler code coverage on retail games
  • ~1 min to build native code for a whole disc
  • 8K rendering: up to 16× the PSP's 480×272

How it works

Recompile what is software. Reimplement what touches hardware.

“Recompile what is pure software; reimplement natively what touches hardware or CPU state. Use the decompiled firmware as the specification for everything we reimplement.”

— PSPC's design rule

Offline, once per game

  1. Your dump

    An ISO, CSO, ZSO, DAX or EBOOT.PBP of a game you own.

  2. pspc-decrypt

    Decrypts executables (KIRK, gzip/KL4E, PSAR). A separate GPL-3.0 program, never linked into PSPC.

  3. pspc-recomp

    Discovers the functions in each module, applies relocations and translates Allegrex MIPS into C++.

  4. Native module

    Compiled into a DLL or .so named after the module's SHA-1, and cached between runs.

At run time: the pspc runtime

Execution

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.

Native kernel

PSP threads on host fibers, sync objects, memory partitions, module loading, interrupts and timing — reimplemented, not emulated.

System libraries

The PSP's libraries reimplemented natively and keyed by NID, from sceAudio to sceUtility, sceMpeg and the network stack.

M33 layer

SystemCtrl, KUBridge, VshCtrl, config.se, plugins and the NID resolver, reproduced natively.

Devices

GE graphics renderers, audio and video decoding, disc images and the memory stick, host networking, SDL2 input.

Two engines, one semantics

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.

Why not just emulate?

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.

How PSPC differs from PPSSPP

Read the architecture

Features

Everything a PSP did, on your PC.

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.

Up to 8K

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.

Bit-exact GPU transform

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.

Sound and movies

sceAudio, SAS, ATRAC3 and ATRAC3+, MP3, AAC and the audio codec library. PSMF video and H.264 decoding, so game movies play with sound.

The real XMB

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.

M33 plugins

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.

Online, revived

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.

A real game library

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.

Big discs welcome

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

Retail games, in gameplay.

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 compatibility results
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

pspautotests

The community suite of hardware-recorded expectations.

Interpreter 539 of 559 539 / 559
Native (AOT) 539 of 559 539 / 559

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.

Frame-exact game checkpoints

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 servers went dark. PSPC brings its own.

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.

PSPC Network

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).

Combat Ops server

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.

GameSpy server

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.

Ad hoc play

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.

Host one for your community

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.

Server guide

$ cd server
$ python -m pspc_network serve
# http://0.0.0.0:8423, database pspc_network.sqlite

Get started

Up and playing in minutes.

The short version is below. For every step in detail, follow the first-game tutorial, or browse all the guides.

Windows 10/11 x64

  1. Install

    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.

  2. Add your games

    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.

  3. Play

    Double-click a game. Keyboard and controller controls, the renderer, the resolution and texture upscaling are under Settings.

  4. Go online

    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.

  5. Optional: the XMB

    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.

Linux (in progress)

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

From the command line

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
Useful command-line options
OptionWhat it does
--interpIgnore native code and interpret everything.
--renderer software|opengl|d3d11|noneSoftware (default), OpenGL (Linux), Direct3D 11 (Windows), or no drawing for dedicated servers.
--render-scale 1-16GPU internal resolution: 8 = 4K, 16 = 8K.
--texture-upscale 1-4Scale GPU textures up with xBR.
--vsh, --recoveryBoot the installed firmware's XMB, or M33's recovery menu.
--adhoc-serverRun a PPSSPP-compatible ad hoc server.
--headless --fast-timeNo window or audio, skip idle time (tests, batch runs).

pspc --help lists every option. Settings live in pspc.ini next to pspc.exe.

Default keyboard controls

↑↓←→
D-pad
IJKL
Analog stick
Z
Cross
X
Circle
A
Square
S
Triangle
QW
L / R
Enter
Start
Space
Select
Esc
Home
F11
Fullscreen
F12
Screenshot

Game controllers work through SDL: both sticks drive the PSP's analog stick. Every key and button can be remapped under Settings.

Status

What's working.

Status by area
AreaState
Allegrex CPU: decoder, interpreter, FPU, VFPU (bit-exact hardware model)Working cpu/ 42/42
AOT recompiler and native module pipelineWorking 99%+ coverage on retail games
Kernel: threads, sync objects, memory, modules, interrupts, timingWorking threads/ 152/158
GE graphics: software, Direct3D 11 and OpenGL renderersWorking gpu/ 111/111 (software)
Audio: sceAudio, SAS, ATRAC3/3+, MP3, AACWorking audio/ 73/74
Video (sceMpeg, PSMF, video codec) and JPEGWorking video/ 24/30, jpeg/ 8/11
I/O, UMD, memory stick, ISO/CSO/ZSO/DAXWorking
sceUtility (save data, dialogs, on-screen keyboard), PGF fontsWorking
Networking: infrastructure and ad hocWorking
PSPC Network, Combat Ops and GameSpy serversWorking tested on one PC
M33 layer: SystemCtrl, KUBridge, VshCtrl, config.se, pluginsWorking
Real 4.01 XMB (with Sony's official update)Working boots, navigates, launches games
Linux port: runtime, OpenGL renderer, GTK launcherIn progress

What that means in practice: what PSPC can and can't do

FAQ

Questions.

Is PSPC an emulator?

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.

Does PSPC come with games or firmware?

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.

Do I need developer tools to build native code?

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.

Why does Windows warn about the installer?

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.

Some text in a game is missing.

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.

A game doesn't work. How do I report it?

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.

Can I contribute?

Yes. The repository has the architecture, recompiler and testing docs, and the plan that drives the project.

Your PSP library, native.

PSPC 0.1.2 for Windows 10/11 x64. Free, open source, no administrator rights needed.

Download PSPC