Skip to content

Releases: nathanialf/ico

jpn-v1.0.0: ICO Japanese retail boot ELF rebuilt from source

Choose a tag to compare

@nathanialf nathanialf released this 15 Oct 05:38

ICO Japanese retail boot ELF, SCPS-11003 (SCPS_110.03; SYSTEM.CNF VER = 1.02, VMODE = NTSC; the debug menu dates the build Nov 2 2001), rebuilt from source.

Every object of the link is built from the C and assembly under ico2/ and sce/ with the toolchain the game was built with (ee-gcc 2.9-991111 and its assembler for the game, newlib and libgcc; Sony's 2.10 assembler for the SDK archives; GNU ld 2.10 with the EE and DVP patches; dvp-as for the five VU1 microprograms), or, for the game's 73 code-less data members, generated at build time from the user's own disc image and the committed record schema. The stub list is empty. Every allocated section of build/ico.elf is byte-identical to the disc's SCPS_110.03, the ROM image SHA-1 is 58ef44cfeeacd060ffb2acfbf42d8a21bbffd318 and the ELF file SHA-1 is 580da1dcc4c239a1608a10300e7e220fe5d35525.

To build, clone the branch and copy the disc image into baserom/:

git clone -b jpn https://github.com/nathanialf/ico.git && cd ico && mkdir -p baserom
cp "/path/to/Ico (Japan).bin" baserom/Ico_JPN.bin && cp "/path/to/Ico (Japan).cue" baserom/Ico_JPN.cue && ./build.sh

The jpn branch is main's source with the Japanese build's differences, and it is not merged with main. docs/README.md, section "How the Japanese build differs from PAL's", lists those differences. No disc data is in the repository.

pal-v1.0.2: the generator constructor's argument, found through the PC port

Choose a tag to compare

@nathanialf nathanialf released this 14 Oct 01:56

ICO PAL retail boot ELF, SCES-50760 (SCES_507.60), rebuilt from source: the generator constructor's argument, found through the PC port.

The build is unchanged in its bytes: every allocated section of build/ico.elf is byte-identical to the disc's SCES_507.60, the ROM image SHA-1 is a401d1e5a20b1659189a8b1026a8eb35811dc9ca and the ELF file SHA-1 is da3644c54c26fe760f3b6a591a5fc2eab396ed2b. What changed is the source's reading of the program, where a host build of pal-v1.0.1 showed it was wrong.

Fixes since pal-v1.0.1 (each commit's gate passed; no byte moved):

  • InitGeneratorGeo takes the scene object's SObjSimpleSetting, which CreateLayoutedGObj hands a kind's constructor, instead of the GenGeo layout row. The ROM reads the enemy kind as the word at 0x30 (lw v1,0x30(s0) at 0x19BC8C) and the aim angle as the float at 0x14: the setting's obj word and its Y rotation, rot[1]. Typed as a GenGeo the same offsets were accessary and rot[2], so the bytes matched while the meaning did not; the PC port's 64-bit GenGeo moved accessary and the generator read stack contents (ico-pc cc1ab085a). GenGeo.accessary's comment no longer says the generator reads it.
  • docs/PORT.md no longer points at a file in the port repository; the port documents how it differs from the PS2 in its own tree.

docs/PORT.md describes the PC port (nathanialf/ico-pc) and what flows between the two repositories.

pal-v1.0.1: reconstruction fixes found through the PC port

Choose a tag to compare

@nathanialf nathanialf released this 08 Oct 23:46

ICO PAL retail boot ELF, SCES-50760 (SCES_507.60), rebuilt from source: reconstruction fixes found through the PC port.

The build is unchanged in its bytes: every allocated section of build/ico.elf is byte-identical to the disc's SCES_507.60, the ROM image SHA-1 is a401d1e5a20b1659189a8b1026a8eb35811dc9ca and the ELF file SHA-1 is da3644c54c26fe760f3b6a591a5fc2eab396ed2b. What changed is the source's reading of the program, where a host build of pal-v1.0.0 showed it was wrong or underspecified.

Fixes since pal-v1.0.0 (each commit's gate passed; no byte moved):

  • default_item_select hands the menu select callback the current item, as the ROM passes it in a0; the argumentless call matched only because the register still held it (the PC port's Continue crash on arm64).
  • QueenBarrierGeo copies its node matrix from one 64-byte rotation-and-translation record instead of two neighbouring locals (the Queen's shield hit point).
  • quaternion.c declares GetTableArcCos short, as tableSin.h defines it; a_p_1.c keeps the int declaration the ROM needs, and says so.
  • The stage sound routines in stageSEProc.c are handed s_init's SeSlot, exported to s_init.h, instead of a second view of the record with mislabelled fields (vol, pitch, mail were volumeRate, stereoRate and the environment row).
  • subEnemyBrain_Irregular clears its status bit through Act.flags20; the pad-32 view of the Act is gone.
  • Nine definitions take the arguments their callers pass instead of a K&R or (void) signature: GirlBrainClearTarget, dispSkelton, execWeaponLightOff and its slot type, jimakuMgrEnd, InitKeyInput, InitStaticBlur, AdpcmInterStereoVolumeSet, soundSeDefPitchSet, iosThreadName, and the game system's memory handlers pass memcpy its size.
  • set_bridge clears its two waypoint pairs by their size.

docs/PORT.md describes the PC port (nathanialf/ico-pc) and what flows between the two repositories.

pal-v1.0.0: ICO PAL retail boot ELF rebuilt from source

Choose a tag to compare

@nathanialf nathanialf released this 02 Oct 02:37

ICO PAL retail boot ELF, SCES-50760 (SCES_507.60), rebuilt from source.

Every object of the link is built from the C and assembly under ico2/ and sce/ with the toolchain the game was built with (ee-gcc 2.9-991111 and its assembler for the game, newlib and libgcc; Sony's 2.10 assembler for the SDK archives; GNU ld 2.10 with the EE and DVP patches; dvp-as for the five VU1 microprograms), or, for the game's code-less data members, generated at build time from the user's own disc image and the committed record schema. Every allocated section of build/ico.elf is byte-identical to the disc's SCES_507.60, the ROM image SHA-1 is a401d1e5a20b1659189a8b1026a8eb35811dc9ca and the ELF file SHA-1 is da3644c54c26fe760f3b6a591a5fc2eab396ed2b. A fresh clone builds with one command after the disc image is copied into baserom/. No disc data is in the repository.