Now Playing: Sun Devoured Earth
Topic: PSX PS1 PS
Extraction of PSX CD images from PSP EBOOT.PBP container.
Definition of problem: We need to extract one or several PSX CD images that are encapsulated inside of PSP EBOOT.PBP file.
It's straightforward with files containing single image. You'll need latest version of PSX2PSP [i'm working with v.1.4.2.] Launch this application with 'PSX2PSP.exe' and you should see dialog similar to this:
So, what you'd do, you'd click on ellipsis following 'ISO/PBP File' combobox and select .pbp file. [You might receive 'I/O error 998.' warning now. If so, some of textboxes might not fill properly, but, despite this, extraction should carry out just fine afterwards.] Then click 'Extract ISO', fill in output file name and click 'Save'. You should see extraction progress reported at the bottom of dialog now. Wait until it reaches 100% and you're done.
For extraction of multiple images you'll need hex editor as well [For actual editing i use MadEdit, as it supports SHIFT-JIS encoding, which is useful for translations. Otherwise it's quite basic editor. But most of the time it's enought with just FAR manager's built-in viewer. So, just stick with your favorite one.]. And some means to binary manipulate (split/join) files [being more comfortable with command-line than GUIs, i use my own programs for this purpose but your hex editor probably has this functionality].
Example 1: Strider Hiryuu 1 & 2 (SLPS-02620/SLPS-02621) Size: 284448402 CRC32: e75392d3
Extract 1st image just the same as single image. Search for 'PSTITLEIMG' in .pbp container and cut this file here (before this string), to separate header [remove --size=$10000 --direction=left hdr EBOOT.PBP]. Search and cut before each 'PSISOIMG' [remove --size=$8000 --direction=left crap EBOOT.PBP; remove --size=$1cf0000 --direction=left cd1 EBOOT.PBP]. What's left in .pbp now is CD2 and footer. Join it with header [copy /b hdr+EBOOT.PBP CD2.PBP] and extract as single image container.
Example 2: Dancing Blade Katte ni Momotenshi II: Tears of Eden (SLPM-86210/SLPM-86211/SLPM-86212) Size: 1343468306 CRC32: 94125c2e
Extract 1st image. Separate header [remove --size=$10000 --direction=left hdr EBOOT.PBP]. Cut at each 'PSISOIMG' [remove --size=$8000 --direction=left crap EBOOT.PBP; remove --size=$1eec0000 --direction=left cd1 EBOOT.PBP; remove --size=$19ba8000 --direction=left cd2 EBOOT.PBP]. Prepend header to remaining .pbp file (last CD + footer) [copy /b hdr+EBOOT.PBP CD3.PBP] and extract it. Search EBOOT.PBP file for 'STARTDAT' and separate footer from there [sextract --offset=$176baac0 EBOOT.PBP]. Add header + cd2 + footer [copy /b hdr + cd2 + EBOOT.xtr CD2.PBP] and extract it.
Would there be some difficulties extracting middle CDs this way, try removing trailing null characters (0x00) from data fragments containing images so, that last meaningful byte would be followed by just enought null characters to reach first round hex offset (one, that ends with 0 - divides with 16 without remainder) and hex-edit those null characters to zeroes (0x30) [for an example take a look at last .pbp fragment, how footer is attached to last CD image.].