Case study

ICO decompilation: byte-identical PAL and Japanese PlayStation 2 boot ELFs

Rebuilds the boot ELFs of ICO’s PAL (SCES-50760) and Japanese (SCPS-11003) PlayStation 2 discs from one source tree with the game’s original compiler versions, and checks that every loaded byte and the whole ELF file match the disc’s SHA-1. The 73 data-only archive members are generated at build time from the user’s own ELF, so most read-only data still comes from the disc rather than from source. Separate branches target the USA, Korean and August 2001 prototype builds, and the catalog’s ICO PC port is a fork of this tree.

Requirements & limits

  • README reports every section of both targets identical to its base ELF; .rodata is about 9.5% from source and 90.5% generated from the disc, and .data about 73% from source. The Japanese build is an earlier link of the same program, kept as VERSION_JPN blocks in the shared PAL-based tree, while kor, ntsc and aug6 are separate single-target branches not yet merged into main. The output is a PS2 boot ELF and ROM image, not a PC port.
  • Each target needs the user’s own disc image, the PAL .iso or the Japanese .bin/.cue, from which the build extracts the boot ELF and checks it against config/sha1sums. docs/LEGAL.md excludes disc images, boot ELFs, assets, data tables and bulk symbol or map tables from the repository, and forbids leaked SDKs and leaked source as inputs. It says the Sony runtime libraries reconstructed under sce/ were written from the shipped instructions using the SDK’s public naming, and the newlib and libgcc members follow their published source.
  • Builds on 64-bit Linux with 32-bit libraries and multilib gcc, Python 3, mips-linux-gnu-objcopy and network access on the first run. tools/setup.sh fetches ee-gcc 2.9-991111-01 and the SCE ee-as from decomp.me’s compiler releases, builds GNU ld 2.10 with two patches and builds a patched ps2dev dvp-as for the five VU1 microprograms; README says nothing comes from a Sony SDK.
  • ./build.sh ends with tools/check_elf.py --gate, which compares every allocated section with the base ELF by address and requires the whole-file SHA-1 to match; progress badges and the dashboard are regenerated from the built ELF and link map. The only CI workflow publishes that dashboard, and building needs a disc that CI does not have. Matching establishes the identity of the two boot ELFs, not of other disc files or of runtime behaviour, and this collection built nothing.
  • MIT covers the project’s own code, scripts and documentation and grants no rights in the game, its data or Sony and Team Ico property; the toolchain components keep their GPL licences. README states the project is unaffiliated with Sony Interactive Entertainment or Team Ico, and the reviewed sources establish no AI or REA attribution.

About this entry

Type
Case study
Category
Independent reconstruction cases
Relationship
Independent reconstruction project
Targets
Game

Sources reviewed

The description was reviewed against primary sources. This does not establish runtime testing, security auditing or verified compatibility.

Report an outdated entry Suggest a translation fix

Primary sources

  1. README.md GitHub · nathanialf/ico · Revision 73f7365
  2. docs/LEGAL.md GitHub · nathanialf/ico · Revision 73f7365
  3. docs/BUILDING.md GitHub · nathanialf/ico · Revision 73f7365
  4. docs/TARGETS.md GitHub · nathanialf/ico · Revision 73f7365
  5. docs/PORT.md GitHub · nathanialf/ico · Revision 73f7365
  6. docs/pal/PROGRESS.md GitHub · nathanialf/ico · Revision 73f7365
  7. config/sha1sums.pal.txt GitHub · nathanialf/ico · Revision 73f7365
  8. .github/workflows/pages.yml GitHub · nathanialf/ico · Revision 73f7365
  9. LICENSE GitHub · nathanialf/ico · Revision 73f7365
  10. https://nathanialf.github.io/ico/

More in Games

All 242 entries in GamesGames case studies (200)