Wander rides Agro through a foggy forest, light falling between the trees
Celosia · Shadow of the Colossus (PS2) on macOS and PS Vita

Port progress

The game already runs from start to end on both machines. It got there in two steps. The recompilation turned all of the PS2's MIPS code into C++ that compiles for ARM and x86, and replaced the PS2 hardware it talked to. The decompilation, still going, rewrites that machine-translated code by hand as readable native code, which is what makes it fast enough on the Vita.

Where the Vita spends the game's frame
Native code (decompiled)Recompiled MIPSRuntime around it

Loading the latest measurement…

Native codeRewritten by hand in C++, proven equal to the original, fast on the Vita.
Recompiled MIPSStill the machine translation of the PS2 code. Correct, but slow.
RuntimeThe engine room around the game: DMA, memory, the scheduler.
Click the mapsEvery area opens into its functions or features. Hover for the numbers.

Recompilation

Complete

PS2Recomp reads the game's executables and writes every MIPS function out as C++. Nothing is interpreted at run time. The PS2's graphics chip, vector units, DMA and sound processor were then replaced, piece by piece, by native code that draws with Metal on the Mac and with the Vita's GPU.

—MIPS functions recompiled to C++, every one the game has
—of MIPS code translated (boot executable, kernel, SDK, libc and GAMECORE)
—features of the native renderer working
—PS2 hardware parts replaced by native code

Native renderer

What the game draws, drawn from its own data instead of emulating the PS2's GS. One tile per feature.

PS2 hardware

The chips the game was written for. Each one is now handled natively.

Nothing left to port here.

Every feature on both maps works natively. Picture and timing fixes still land, but the remaining work on speed is the decompilation below.

Decompilation

In progress

Recompiled code is correct but slow: every guest register lives in memory, every float goes through PS2 rounding rules, and every call goes through a table. A decompiled function is written by hand as plain C++, then proven equal to the recompiled one on the same machine state before it replaces it. It is a functional decompilation, not a matching one: the goal is the same behaviour, faster, not a byte-identical rebuild of the original executable. The hottest functions go first, so a small share of the code already carries a large share of the time.

—of the Vita game thread's time runs in native code
—still runs as recompiled MIPS
—of the game's function calls land in native code
—of the MIPS code rewritten (— functions)

By code size

How much there is to write. Click an area to open its functions. Each area of the game is sized by its MIPS code and split into what is already native and what is not. Most of the game is code that runs rarely (menus, events, one boss's behaviour), so this map stays mostly grey for a long time.

By game thread time

What decides the frame rate. Click an area to see which functions take the time. Each area is sized by its share of the Vita game thread's instructions in a profile of the same route (shrine, ride and plains). Green here is time already won; grey is where the next rounds can still win time.

Native codeRecompiled MIPSRuntime (DMA chain walk, memory copies, scheduler, the glue that calls guest code)

By area

AreaCode nativeFunctionsTime nativeTime in MIPS

Over time

Each point is one measurement. The time share is measured from round 32 on; the call share switched to a larger call sample on 2026-10-27, which explains its dip.

Game thread time nativeCalls nativeCode native (by size)

Next targets

The recompiled functions that cost the game thread the most, from the same profile. They are spread thin: no single one is above two percent, so the gains now come from rewriting whole subsystems. The address is the function's place in the PS2 executable.

Still recompiled

FunctionAreaTime

Already native, hottest

FunctionAreaTime

Runtime

FunctionTime

Rounds

Work happens in rounds: one target, a change that must keep the game exactly the same, a measurement. Console figures come from the real PS Vita; the others from a Vita3K tuned to match it.

The Forbidden Land

What all of this is for: Fumito Ueda and Team Ico’s 2005 game, playable natively on a Mac and in the hand on a PS Vita.