Glossary: PS4 and port terms
A running glossary for terms used across the devlog and the system pages. Hover any of them on another page for a short definition.
Functional decompilation
Rewriting the game's code as readable source that behaves exactly like the original, checked by running both on the same inputs. A matching decompilation goes further and requires the rebuilt bytes to be identical; this project does not, because the goal is a native port, not the original binary. What it does require is that every replaced function does the same thing: the same return value, the same memory written, the same calls made.
Source port
The game rebuilt from source to run natively somewhere else, here on a PC. It is where Paleblood is headed, not what it is today: the game does not run on Paleblood until its own runtime is far enough along.
Replaced, edge-verified and verified
A function is replaced once a hook sends every call to our C++ and the game library builds. It is edge-verified once the harness found no difference from the original on every generated edge case, but nobody has recorded it in the game yet: some code only runs in places a recording can't reach without the right save, such as the Chalice Dungeons. It is verified once the harness also found no difference on every case recorded in the game, deliberately wrong versions of it failed, and the game ran with it in place. An edge-verified function becomes verified on its own: tools/promote.py re-checks it when recordings for it appear, and promotes it only if all of them pass.
Boot milestone and import coverage
The runtime track measures how far the game's executable gets on Paleblood's own runtime. Import coverage is the share of the system functions the executable imports that the runtime implements. A boot milestone is the first call to a family of system functions, in the runtime roadmap's order: entry, threads, files, input, audio, video out, GPU, first flip. A boot stops at the first import that isn't implemented yet, and the boot harness names it.
Hook
A 14-byte jump written over the first bytes of an original function, pointing at the replacement. Every caller still calls the original address and lands in the replacement. A function shorter than the jump cannot be hooked this way. The hook table is installed by the runtime once it runs the game; the verification harness calls replacements directly.
Harness, captures and edge cases
The harness runs the original function from your own dump and its replacement, natively, outside the game, on the same inputs. Captures are inputs recorded while the game ran (so far on the old borrowed runtime; Paleblood's own runtime will record them generically); edge cases are generated for situations a short run does not reach.
Mutation test
Deliberately wrong versions of a replacement go through verification too: each must fail. If one passes, the cases cannot see that difference, and they are fixed before anything is called verified.
PS4, Orbis
The PlayStation 4 runs an AMD x86-64 CPU (Jaguar) and Orbis OS, derived from FreeBSD. Because the CPU is x86-64 like a PC's, the game's code can run directly on a PC once something provides the operating system around it.
SELF, ELF, PRX, eboot
An ELF is the standard executable format of Linux and FreeBSD. The PS4 wraps executables in a SELF (signed ELF); ours are fake-signed and unencrypted, so turning them back into ELFs only unwraps them. The main executable is eboot.bin; PRX files are the PS4's shared libraries.
NID
PS4 programs link to library functions by NID: a hash of the function's name. GhidraOrbis carries a database that turns NIDs back into names, so sceKernelUsleep shows up instead of a hash.
Thunk
A tiny piece of code that only forwards a call. The game calls each PS4 library function through a thunk; our replacements call the same thunks, so whatever answers the original's calls (the harness's scripted stubs, or the runtime) answers the replacement's the same way.
Runtime and loader
The runtime is what the game's code runs on: Paleblood's own loader, which maps the executable and the game's own C library and file system modules and binds every system import, and its own versions of the PS4 system libraries, written clean-room. Until October 2026 the project used a borrowed runtime, a fork of bbport; it is being removed. See Runtime.
GNM, PM4, GCN
GNM is the PS4's low-level graphics API; the game builds PM4 command packets for its AMD GCN graphics chip. Paleblood does not plan to emulate that chip: the graphics are to be rebuilt at the level of the game's own graphics layer, on Vulkan.
FDE
A Frame Description Entry: one function's unwind record in the executable's .eh_frame. Counting them gave an independent check on how many functions Ghidra found.
vblank and flip
The screen refreshes at a fixed rate; the gap between two refreshes is the vertical blank. A flip shows a finished frame at a vblank. The frame limiter can flip every vblank (60 frames a second on a 60 Hz screen) or every other one (30).