Running pspc
pspc runs one program: a disc image (ISO, CSO, ZSO or DAX), an EBOOT.PBP, or a PRX or ELF module. On Windows, open a terminal in PSPC's folder:
cd %LOCALAPPDATA%\Programs\PSPC
pspc.exe Games\MyGame.iso
In PowerShell, use cd $env:LOCALAPPDATA\Programs\PSPC and .\pspc.exe. pspc --help lists the options and pspc --version prints the version. Options go before the file name.
To build a game's native code first, see Build from the command line.
Playing
| Option | What it does |
|---|---|
--interp | Ignore native code and interpret everything. |
--vsh | Boot the installed firmware's XMB instead of a file (install it first). |
--recovery | Boot M33's recovery menu (needs the M33 menu modules). |
--umd <image> | Insert a disc, while running the XMB or a PRX, ELF or PBP. |
--scale <n> | Window scale (default 2). |
--fw <version> | Firmware version reported to games, such as 6.60. |
--no-plugins | Don't load M33 plugins for this run. |
--config <file> | Use another settings file, or none for the built-in defaults. |
--set <key>=<value> | Override one setting for this run, such as --set fullscreen=1. |
--log <level> | trace, debug, info (default), warn or error. |
--log-file <path> | Write the log to a file. |
--timeout <seconds> | Stop after this many seconds. |
Graphics
| Option | What it does |
|---|---|
--renderer <name> | software (default); d3d11 or d3d11-warp on Windows (WARP is Windows' own slow software Direct3D, for testing); opengl on Linux source builds; or none, which runs display lists but draws nothing, for dedicated game servers without a GPU. |
--render-scale <1–16> | The GPU renderer's internal resolution in multiples of 480×272: 4 = 1080p, 8 = 4K, 16 = 8K. |
--texture-filter <mode> | auto (as the game sets it), nearest or linear. |
--texture-upscale <1–4> | Scale GPU textures up with xBR; 1 is off. |
Devices and folders
| Option | What it does |
|---|---|
--memstick <dir> | The memory stick's folder, with its saves (default: ms0 next to pspc.exe). A second instance running at the same time needs its own. |
--plugins <dir> | The M33 plugins folder laid over the memory stick (default: the nearest plugins folder). |
--flash0 <dir>--flash1 <dir> | Override the selected profile's firmware folders. On Windows, the defaults are firmware\<name>\flash0 and flash1 under PSPC's folder; firmware=<name> in pspc.ini selects the profile. |
--host0 <dir> | The host0: folder (default: the program's folder). |
--aot-dir <dir> | The native code cache (default: cache\aot next to pspc.exe). |
--ram <32|64> | Guest RAM in MB (default 64). |
--large-mem--no-large-mem | Let user code use RAM beyond 24 MB (the default for the XMB and for games that ask for it), or keep it at 24 MB, also for the XMB. |
--set firmware=4.01 --vsh boots a named profile for one run; --fw only changes the version number reported to games. pspc.exe --firmware-paths prints the resolved flash paths as JSON without booting a game. It can migrate older top-level flash folders, so stop other instances first: see firmware profiles.
Online
Dedicated game port. --set game_port=3659 (or game_port=3659 in pspc.ini) binds the game's UDP socket to a fixed host port for router forwarding. Choose a different free port for each dedicated session. If that port is busy, PSPC warns and uses another, which the existing forward won't reach. See public GameSpy hosting.
Ad hoc server. Instead of a game, pspc --adhoc-server runs a PPSSPP-compatible ad hoc server until you press Ctrl+C. --adhoc-port <n> changes its port (default 27312), and --adhoc-bind <address> the address it listens on (default all; 127.0.0.1 for two instances on this PC only).
PSPC Network account. --np does what the launcher's Network window does:
pspc.exe --np register --server https://np.example.org --id Gabe_Logan
pspc.exe --np signin --server https://np.example.org --id Gabe_Logan
pspc.exe --np status
pspc.exe --np friends
pspc.exe --np friend-add --id Lian_Xing
pspc.exe --np friend-remove --id Lian_Xing
pspc.exe --np signout
pspc.exe --np local --id Gabe_Logan
register and signin ask for the password. local forgets the server and signs games in locally under that name.
Scripted and headless runs
These are what PSPC's own tests use, and they are handy for reproducing a bug exactly:
| Option | What it does |
|---|---|
--headless | No window and no audio. |
--fast-time | Skip idle time instead of waiting for it; timing becomes deterministic. |
--press <v>:<buttons>[:<n>] | Hold buttons for n VBlanks (default 6) from VBlank v, such as 600:START or 900:CROSS+UP:4. AUP, ADOWN, ALEFT and ARIGHT tilt the analog stick. |
--dump-frames <dir> | Save the displayed frame as a BMP every --dump-every <n> VBlanks (default 60). |
--exit-vblank <n> | Stop at VBlank n, a point in game time (exit code 124). |
--rtc-base <seconds> | Start the PSP's clock at this time instead of the PC's, so runs with the same input repeat exactly. |
--osk-text <text> | What the on-screen keyboard returns in a headless run, such as a character's name. |
--strict-mem | Stop on a bad memory access instead of logging it. |
For example, this boots a game without a window, presses Start at VBlank 600, saves a frame every five seconds of game time and stops after one minute of it:
pspc.exe --headless --fast-time --press 600:START --dump-frames frames --dump-every 300 --exit-vblank 3600 Games\MyGame.iso
pspc.ini reference
pspc.ini sits next to pspc.exe. One key=value per line; command-line options override it. The launcher edits it for you, but every key can be set by hand:
| Key and default | What it sets |
|---|---|
scale=2 | Window scale, 1–4. |
fullscreen=0 | 1 starts in borderless fullscreen. |
vsync=1 | Vertical sync. |
aot=1 | 0 runs everything in the interpreter, like --interp. |
fw=6.60 | Firmware version reported to games. |
renderer= | Empty means software; or d3d11 or d3d11-warp, as for --renderer. |
render_scale=1 | GPU internal resolution, 1–16. |
texture_filter=auto | auto, nearest or linear. |
texture_upscale=1 | xBR texture upscaling, 1 (off) to 4. |
volume=100mute=0 | Volume 0–100; mute=1 silences. |
games_dir= | The games folder; empty means the Games folder. |
plugins=1 | 0 stops loading M33 plugins. |
plugins_dir= | The plugins folder; empty means the plugins folder. |
network=1 | 0 is offline: the WLAN switch reads off. |
adhoc_server=localhost | The ad hoc server to meet players through, host or host:port. |
np_server= | PSPC Network server; empty means games sign in locally. |
np_online_id= | Your online ID, or the name games see when signing in locally. |
np_token= | Written when you sign in. Keep it private. |
infra_dns= | A revival DNS server for every game's online services. |
key.<input>= | Keyboard keys by SDL name, comma-separated for several: key.select=Space,Right Shift. |
pad.<input>= | Controller buttons: a b x y back guide start leftstick rightstick leftshoulder rightshoulder dpup dpdown dpleft dpright lefttrigger righttrigger misc1, and paddle1–paddle4 and touchpad. |
pad.stick=both | The sticks that drive the PSP's analog stick: both, left, right or none. |
host_network=0host_sfco=0host_gamespy=0host_adhoc=0 | Servers the launcher starts when it opens (Start with PSPC on the Online page). Other host_ keys hold their port and address settings. |
The inputs for key. and pad. are up down left right cross circle square triangle l r start select home vol_up vol_down note screen analog_up analog_down analog_left analog_right.