PARAM.SFO
SFO (System File Object) are used in folders wich content needs to be displayed in the XMB.
The basic file/folder structure of a PS3 content is composed by a SFO, the multimedia Content Information Files, and for special content like Game Saves or Trophy files there is a PARAM.PFD for security reasons, other type of content like games or apps needs an structure of subfolders with names as HTMLDIR, INSDIR, LICDIR, PKGDIR, TRPDIR, USRDIR, etc...
The parameters contained in a SFO can be simplyfied as inputs/outputs for/from the content:
- Boot modifyers (flags) that are sent to the content when is executed to activate special modes (e.g. audio and video modes of a game).
- Information texts about the content and his restrictions (e.g. title and version of a game).
SFX (System File in XML format) is similar than SFO but without the data related to his structure (the SFO metadata that has no real value).
The conversion between the 2 formats is direct because the important values contained in both formats are the same (File_Version, Parameter (name), Data_Type, Data_Total_Size & Parameter (value)).
SFO's and SFX's can be chained in a structure of subfolders where the "main" SFO activates a special subfolder, and the subfolder contains another SFO that activates another subfolder and so on.
This structures are limited by the system and activated by a combination of CATEGORY and special flags on ATTRIBUTE.
In Blu-Ray discs, the "main" PARAM.SFO itself is activated by another flag inside PS3_DISC.SFB.
Internal Structure
Header
struct Header { uint32_t File_Signature; /* Always PSF */ uint32_t File_Version; /* Usually 1.1 */ uint32_t Name_Table_Start; /* Start position of the Name_Table */ uint32_t Data_Table_Start; /* Start position of the Data_Table */ uint32_t Entries_Number; /* Number of entries */ };
Definition_Table
This structure repeats one time for every Entries_Number defined in the header. All values are in Little Endian.
struct Definition_Table { uint16_t Name_Table_Offset; /* Offset of the Name of the entry, from start of Name_Table */ uint16_t Data_Type; /* Type of data of the entry in the Data_Table */ uint32_t Data_Size_Used; /* Used Bytes by the entry in the Data_Table */ uint32_t Data_Size_Total; /* Total bytes reserved for the entry in the Data_Table */ uint32_t Data_Table_Offset; /* Offset of the Data of the entry, from start of Data_Table */ };
Data_Type
Partially known based in some examples found in different content
Data_Type | Description | Used in |
---|---|---|
04 00 | utf-8 Special Mode | Data generated by the system: Game Saves (ACCOUNT_ID, PARAMS, PARAMS2, SAVEDATA_FILE_LIST, SAVEDATA_PARAMS)... and Trophies (PADDING) |
04 02 | utf-8 | |
04 04 | integer |
- Speculation
The Data_Type = 0400 marked as "utf-8 Special Mode" has the particularity of return a "right" or "wrong" when comparing the string with a reference value, so it can be said that the difference between the simple "utf-8" and "utf-8 Special Mode" is only from the point of view of how the system manipulate this data. For more info read the section ACCOUNT_ID.
If the "scale" used for the second byte follows the proportion of 2^X (e.g. 1, 2, 4, 8, 16, 32, etc...) then we are missing a "04 01" valid data type in the list
Name_Table
The entries of this table (and the next table) can vary depending of the kind of content, but are always ordered by names (alphabetically from A to Z), each entry of this table needs 1 blank byte after the name to separate them. The valid values used in known formats are grouped in Parameters Table for a fast reference.
The table has padding at the end to fit the total size in bytes to a multiply or 4, this padding is added after the last blank byte of the last entry. If the last entry (included his blank byte) matches with a multiply of 4 this padding doesn't exist.
Data_Table
This table has no padding between entries neither at the end, Data_Size_Total for each entry is stored in the Definition_Table and this sizes are fixed by each entry (e.g. RESOLUTION always has a Data_Size_Total of 4 bytes), so the space in Data_Table can be considered reserved (filled with zeroes when not used).
- Integer entries uses all the reserved bytes, so the Data_Size_Used is the same as Data_Size_Total.
- utf-8 entries never uses all the reserved bytes, needs 1 blank byte after the last character of the text string, this blank byte can be considered part of the string to count the Data_Size_Used bytes for this entry (e.g. the title "my homebrew " has a Data_Size_Used of 12 bytes from the total of 128 reserved in Data_Size_Total).
Internal Structure Examples
SFO
This is an example of a hand made SFO structure, it contains only 1 entry (TITLE_ID), i used this one because the Data_Size_Total is short enough (16 bytes) to build the full structure in a minimal size, needs padding at the end of the Name_Table, and the Data_Size_Used is smaller than Data_Size_Total.
0x0000 00 50 53 46 01 01 00 00 24 00 00 00 30 00 00 00 | .PSF....$...0... | 0x0010 01 00 00 00 00 00 04 02 0A 00 00 00 0F 00 00 00 | ................ | 0x0020 00 00 00 00 54 49 54 4C 45 5F 49 44 00 00 00 00 | ....TITLE_ID.... | 0x0030 41 42 43 44 31 32 33 34 35 00 00 00 00 00 00 00 | ABCD12345....... |
All the blocks of the file are explained in the next list, it has separated sections for header and the three tables.
Offset | Size | Content | Conversion | Value | Notes |
---|---|---|---|---|---|
Header | |||||
0x0000 | 0x04 | 00 50 53 46 | To utf-8 | PSF | Signature |
0x0004 | 0x04 | 01 01 00 00 | Big endian, decimal | 1.1 | Version (the point is added by the system) |
0x0008 | 0x04 | 24 00 00 00 | Big endian | 0x0024 | Start of Name_Table |
0x000C | 0x04 | 30 00 00 00 | Big endian | 0x0030 | Start of Data_Table |
0x0010 | 0x04 | 01 00 00 00 | Big endian, decimal | 1 | Number of entries in the tables |
Definition_Table | |||||
0x0014 | 0x02 | 0000 | Big endian | 0 | (Start of Name) - (Start of Name_Table) = 0x0024-0x0024 = 0 |
0x0016 | 0x02 | 0402 | Unknown | Data_Type | |
0x0018 | 0x04 | 0A000000 | Big endian, decimal | 10 | Data_Size_Used (ABCD12345 are 9 bytes + 1 blank = 10) |
0x001C | 0x04 | 0F000000 | Big endian, decimal | 16 | Data_Size_Total (TITLE_ID Data_Size_Total is always 16 bytes) |
0x0020 | 0x04 | 00000000 | Big endian | 0 | (Start of Data) - (Start of Data_Table) = 0x0030-0x0030 = 0 |
Name_Table | |||||
0x0024 | 0x09 | 5449544C455F494400 | To utf-8 | TITLE_ID | Name, included 1 blank byte at the end |
0x002D | 0x03 | 000000 | Padding (9 from the previous entry + 3 padding = 12 bytes) | ||
Data_Table | |||||
0x0030 | 0x0F | 41424344313233343500000000000000 | To utf-8 | ABCD12345 | Data. (Data_Size_Total=16 bytes. Data_Size_Used=10 bytes) |
SFX
This is the same file converted to SFX format, its more simple because it has no metadata related with the structure. Are used by some blu-rays, and can be used as "templates" to generate SFO files (manually by now, because there is no tool yet).
The entries and values are self explanatory, can be created using a SFO as the source with the program SFO2SFX.
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <paramsfo add_hidden="false"> <param key="TITLE_ID" fmt="utf8" max_len="16">ABCD12345</param> </paramsfo>
Parameters Table
This table contains all the parameters known/found in standard contents for a fast view and fast relinking to other sections of the page.
Columns of the table are named by the CATEGORY used by this content. Note Trophies doesn't have CATEGORY inside his PARAM.SFO, the "♦" simbol is used as a reference.
Other bootable content in other columns of XMB (CATEGORY's AP, AM, AV, AT, CB, HM) uses the same parameters than HG
Parameter | Data_Type | Data_Size_Total | Data_Size_Used | HG | 1P | 2G | 2P | MN | GD | 2D | SD | MS | ♦ | PP | VT? |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Bootable | System Data | Saves | Trophy | Transferable | |||||||||||
ACCOUNT_ID | utf-8 Special Mode | 16 (0x10) | 16 (0x10) | No | No | No | No | No | No | No | Yes | No | No | No | No |
ACCOUNTID | utf-8 | 16 (0x10) | 16 (0x10) | No | No | No | No | No | No | No | No | No | Yes | No | No |
ANALOG_MODE | integer | 4 (0x4) | 4 (0x4) | No | Yes | No | No | No | No | No | No | No | No | No | ??? |
APP_VER | utf-8 | 8 (0x8) | 6 (0x6) | Opt | No | No | No | Yes | Opt | No | No | No | No | No | ?? |
ATTRIBUTE | integer | 4 (0x4) | 4 (0x4) | Opt | Yes | Yes | Opt | Yes | Opt | No | Yes | No | No | Yes | ? |
BOOTABLE | integer | 4 (0x4) | 4 (0x4) | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | Yes | |
CATEGORY | utf-8 | 4 (0x4) | 3 (0x3) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | |
CONTENT_ID | utf-8 | 48 (0x30) | 37 (0x25) | Opt | No | No | No | No | No | No | No | No | No | No | |
DETAIL | utf-8 | 1024 (0x400) | variable | No | No | No | No | No | No | No | Opt | No | No | No | |
ITEM_PRIORITY | integer | 4 (0x4) | 4 (0x4) | No | No | Yes | No | No | No | No | No | No | No | No | |
LANG | integer | 4 (0x4) | 4 (0x4) | No | No | No | No | No | No | No | No | No | Yes | No | |
LICENSE | utf-8 | 512 (0x200) | variable | Yes | No | Yes | No | No | No | No | No | No | No | No | |
NP_COMMUNICATION_ID | utf-8 | 16 (0x10) | 13 (0xD) | Opt | No | No | No | No | No | No | No | No | No | No | |
NPCOMMID | utf-8 | 16 (0x10) | 12 (0xC) | No | No | No | No | No | No | No | No | No | Yes | No | |
PADDING | utf-8 Special Mode | 8 (0x8) | 0 (0x0) | No | No | No | No | No | No | No | No | No | Yes | No | |
PARAMS | utf-8 Special Mode | 1024 (0x400) | 1024 (0x400) | No | No | No | No | No | No | No | Yes | No | No | No | |
PARAMS2 | utf-8 Special Mode | 12 (0xC) | 12 (0xC) | No | No | No | No | No | No | No | Yes | No | No | No | |
PARENTAL_LEVEL_x | integer | 4 (0x4) | 4 (0x4) | Opt | No | No | No | No | No | No | No | No | No | No | |
PARENTAL_LEVEL | integer | 4 (0x4) | 4 (0x4) | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | |
PARENTALLEVEL | integer | 4 (0x4) | 4 (0x4) | No | Yes | No | No | No | No | No | No | No | Yes | No | |
PS3_SYSTEM_VER | utf-8 | 8 (0x8) | 8 (0x8) | Yes | Yes | Yes | Yes | Yes | Opt | Yes | No | No | No | Yes | |
REGION_DENY | integer | 4 (0x4) | 4 (0x4) | Opt | No | No | Opt | No | No | No | No | No | No | No | |
RESOLUTION | integer | 4 (0x4) | 4 (0x4) | Yes | Yes | Yes | No | Yes | No | No | No | No | No | No | |
SAVEDATA_DETAIL | utf-8 | 1024 (0x400) | variable | No | No | No | No | No | No | No | No | Yes | No | No | |
SAVEDATA_DIRECTORY | utf-8 | 64 (0x40) | variable | No | No | No | No | No | No | No | Yes | Yes | No | No | |
SAVEDATA_FILE_LIST | utf-8 Special Mode | 3168 (0xC60) | 3168 (0xC60) | No | No | No | No | No | No | No | No | Yes | No | No | |
SAVEDATA_LIST_PARAM | utf-8 | 8 (0x8) | variable | No | No | No | No | No | No | No | Yes | No | No | No | |
SAVEDATA_PARAMS | utf-8 Special Mode | 128 (0x80) | 128 (0x80) | No | No | No | No | No | No | No | No | Yes | No | No | |
SAVEDATA_TITLE | utf-8 | 128 (0x80) | variable | No | No | No | No | No | No | No | No | Yes | No | No | |
SOUND_FORMAT | integer | 4 (0x4) | 4 (0x4) | Yes | Yes | Yes | No | Yes | No | No | No | No | No | No | |
SOURCE | integer | 4 (0x4) | 4 (0x4) | No | No | No | No | No | No | No | No | No | Yes | No | |
SUB_TITLE | utf-8 | 128 (0x80) | variable | No | No | No | No | No | No | No | Opt | No | No | No | |
TARGET_APP_VER | utf-8 | 8 (0x8) | 6 (0x6) | No | No | No | No | No | Opt | No | No | No | No | No | |
TITLE | utf-8 | 128 (0x80) | variable | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | |
TITLE_ID | utf-8 | 16 (0x10) | 10 (0xA) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | Yes | |
TITLE_xx | utf-8 | 128 (0x80) | variable | Opt | No | Yes | No | No | No | No | No | No | No | No | |
TITLEID0xx | utf-8 | 16 (0x10) | 9 (0x9) | No | No | No | No | No | No | No | No | No | Yes | No | |
VERSION | utf-8 | 8 (0x8) | 6 (0x6) | Yes | Yes | Yes | No | Yes | Yes | Yes | No | No | Yes | Yes |
Parameters Descriptions
ACCOUNT_ID
Data_Type: utf-8 Special Mode Data_Size_Total: 16 bytes Data_Size_Used: 16 bytes Used by: Save Data
PSN User Account stored as utf-8 Special Mode. The string is compared with the info contained in XRegistry.sys. The comparison can only return two values, right, or wrong, if the comparison returns right the SaveData is valid.
Filled with zeroes when the user has not been registered in PSN.
ACCOUNTID
Data_Type: utf-8 Data_Size_Total: 16 bytes Data_Size_Used: 16 bytes Used by: Trophy
Same string than ACCOUNT_ID but stored as utf-8 because the system uses it for normal functions (in this case is sent to PSN to synchronize the trophy data with your online account).
ANALOG_MODE
Data_Type: uint32_t Data_Size_Total: 4 bytes Data_Size_Used: 4 bytes Used by: PS1 Game
Enables compatibility with the analog sticks of the Dualshock Controller.
Little Endian | Big Endian | Flags (Binary) | Description |
---|---|---|---|
00 00 00 00 | 00 00 00 00 | 00000000 00000000 00000000 00000000 | Disabled |
01 00 00 00 | 00 00 00 01 | 00000000 00000000 00000000 00000001 | Enabled |
APP_VER
Data_Type: utf-8 Data_Size_Total: 8 bytes Data_Size_Used: 6 bytes Used by: HDD Game, Minis Game, Game Data
Application version (or patch version). Not used in old games.
The format is XX.YY where "XX" and "YY" are numbers, and the point "." is included in the string, e.g: 01.00 for the first stable version released.
- Cummulative Patches
Game patches uses a bigger APP_VER as 01.01 for the first patch, but keeping the same TITLE_ID from the original release.
ATTRIBUTE
Data_Type: uint32_t Data_Size_Total: 4 bytes Data_Size_Used: 4 bytes Used by: HDD Game, PS1 Game, Minis Game, PCEngine game, NEOGEO game, Game Data, Save Data
Contains a maximun of 32 flags that can be turned on/off to activate/deactivate special boot modes and features of the content.
Values are stored in "Little Endian" format inside the SFO, to represent the whole tables in a "human readable" format has been needed to convert them to "Big Endian" and then to "Binary".
ATTRIBUTE in SaveData
Little Endian | Big Endian | Flags (Binary) | Description |
---|---|---|---|
00 00 00 00 | 00 00 00 00 | 00000000 00000000 00000000 00000000 | Copy Allowed |
01 00 00 00 | 00 00 00 01 | 00000000 00000000 00000000 00000001 | Copy Protected |
- Copy Protected
Used only in SaveData (SD), not in MInis SaveData (MS). Removes the option "copy" from the side menu when pressing triangle over his icon in XMB.
ATTRIBUTE in Discs Subfolders
Little Endian | Big Endian | Flags (Binary) | Description |
---|---|---|---|
00 00 00 00 | 00 00 00 00 | 00000000 00000000 00000000 00000000 | Subfolder Deactivated |
01 00 00 00 | 00 00 00 01 | 00000000 00000000 00000000 00000001 | Subfolder Activated |
- Subfolder Activated
Used in Discs subfolders (CATEGORY TR, VR, DP, XR) to activate another subfolder.
ATTRIBUTE in Patches
Little Endian | Big Endian | Flags (Binary) | Description |
---|---|---|---|
00 00 04 00 | 00 04 00 00 | 00000000 00000100 00000000 00000000 | Overwrite RESOLUTION, SOUND_FORMAT, PSP Remote_Play |
00 00 10 00 | 00 10 00 00 | 00000000 00010000 00000000 00000000 | Overwrite XMB In-Game |
00 00 20 00 | 00 20 00 00 | 00000000 00100000 00000000 00000000 | Overwrite Move Controller warning screen |
00 00 40 00 | 00 40 00 00 | 00000000 01000000 00000000 00000000 | Overwrite 3D warning screen |
- Patch.
- Patch..
- Patch...
ATTRIBUTE In Bootable content
Little Endian | Big Endian | Flags (Binary) | Description | Introduced in | Flag Nº | Requires flag Nº |
---|---|---|---|---|---|---|
First Byte | ||||||
01 00 00 00 | 00 00 00 01 | 00000000 00000000 00000000 00000001 | PSP Remote Play (v1) | fw1.10 (Nov 2006) | 01 | |
02 00 00 00 | 00 00 00 02 | 00000000 00000000 00000000 00000010 | PSP Export | fw1.70 (Apr 2007) | 02 | |
04 00 00 00 | 00 00 00 04 | 00000000 00000000 00000000 00000100 | PSP Remote Play (v2) | fw1.80 (May 2007) ? | 03 | 01 |
08 00 00 00 | 00 00 00 08 | 00000000 00000000 00000000 00001000 | XMB In-Game (v2) Forced Enabled | fw2.40 (Jul 2008) | 04 | |
10 00 00 00 | 00 00 00 10 | 00000000 00000000 00000000 00010000 | XMB In-Game (v2) Disabled | fw2.40 (Jul 2008) | 05 | |
20 00 00 00 | 00 00 00 20 | 00000000 00000000 00000000 00100000 | XMB In-Game (v2) Background Music | fw2.40 (Jul 2008) | 06 | |
40 00 00 00 | 00 00 00 40 | 00000000 00000000 00000000 01000000 | System Chat Voice Disabled??? | 07 | ||
80 00 00 00 | 00 00 00 80 | 00000000 00000000 00000000 10000000 | PSvita Remote Play ??? | fw4.00 (Nov 2011) | 08 | |
Second Byte | ||||||
00 01 00 00 | 00 00 01 00 | 00000000 00000000 00000001 00000000 | Move Controller (warning screen) | fw3.40 (Jun 2010) | 09 | |
00 02 00 00 | 00 00 02 00 | 00000000 00000000 00000010 00000000 | Navigation Controller (warning screen) | fw3.40 (Jun 2010) | 10 | 09 |
00 04 00 00 | 00 00 04 00 | 00000000 00000000 00000100 00000000 | Eye Cam (warning screen) | fw3.40 (Jun 2010) | 11 | 09 |
00 08 00 00 | 00 00 08 00 | 00000000 00000000 00001000 00000000 | Calibration (notification screen) | fw3.40 (Jun 2010) | 12 | |
00 10 00 00 | 00 00 10 00 | 00000000 00000000 00010000 00000000 | 3D (warning screen) | fw3.40 (Jun 2010) | 13 | |
00 20 00 00 | 00 00 20 00 | 00000000 00000000 00100000 00000000 | Not used yet ? | 14 | ||
00 40 00 00 | 00 00 40 00 | 00000000 00000000 01000000 00000000 | Not used yet ? | 15 | ||
00 80 00 00 | 00 00 80 00 | 00000000 00000000 10000000 00000000 | Not used yet ? | 16 | ||
Third Byte | ||||||
00 00 01 00 | 00 01 00 00 | 00000000 00000001 00000000 00000000 | Install Disc | 17 | ||
00 00 02 00 | 00 02 00 00 | 00000000 00000010 00000000 00000000 | Install Packages | 18 | ||
00 00 04 00 | 00 04 00 00 | 00000000 00000100 00000000 00000000 | Unknown ! | 19 | ||
00 00 08 00 | 00 08 00 00 | 00000000 00001000 00000000 00000000 | Game Purchase Enabled | 20 | ||
00 00 10 00 | 00 10 00 00 | 00000000 00010000 00000000 00000000 | Unknown ! | 21 | ||
00 00 20 00 | 00 20 00 00 | 00000000 00100000 00000000 00000000 | PCEngine (X0) | (Jul 2009) | 22 | |
00 00 40 00 | 00 40 00 00 | 00000000 01000000 00000000 00000000 | License Text Hidden | 23 | ||
00 00 80 00 | 00 80 00 00 | 00000000 10000000 00000000 00000000 | Move Controller Compatible | fw3.40 (Jun 2010) | 24 | |
Fourth Byte | ||||||
00 00 00 01 | 01 00 00 00 | 00000001 00000000 00000000 00000000 | Reserved (X1) | 25 | 22 | |
00 00 00 02 | 02 00 00 00 | 00000010 00000000 00000000 00000000 | Reserved (X2) | 26 | 22 | |
00 00 00 03 | 03 00 00 00 | 00000011 00000000 00000000 00000000 | Reserved (X3) | 25+26 | 22 | |
00 00 00 04 | 04 00 00 00 | 00000100 00000000 00000000 00000000 | NeoGeo (X4) | fw3.55 (Dec 2010) ? | 27 | 22 |
00 00 00 05 | 05 00 00 00 | 00000101 00000000 00000000 00000000 | Reserved (X5) | 25+27 | 22 | |
00 00 00 06 | 06 00 00 00 | 00000110 00000000 00000000 00000000 | Reserved (X6) | 26+27 | 22 | |
00 00 00 07 | 07 00 00 00 | 00000111 00000000 00000000 00000000 | Reserved (X7) | 25+26+27 | 22 | |
00 00 00 08 | 08 00 00 00 | 00001000 00000000 00000000 00000000 | Not used yet ? | 28 | ||
00 00 00 10 | 10 00 00 00 | 00010000 00000000 00000000 00000000 | Not used yet ? | 29 | ||
00 00 00 20 | 20 00 00 00 | 00100000 00000000 00000000 00000000 | Not used yet ? | 30 | ||
00 00 00 40 | 40 00 00 00 | 01000000 00000000 00000000 00000000 | Not used yet ? | 31 | ||
00 00 00 80 | 80 00 00 00 | 10000000 00000000 00000000 00000000 | Not used yet ? | 32 | ||
Examples | ||||||
05 17 80 00 | 00 80 17 05 | 00000000 10000000 00010111 00000101 | killzone 3 (disc) | 01+03+09+10+11+13+24 | ||
20 00 02 00 | 00 02 00 20 | 00000000 00000010 00000000 00100000 | Dead Space 2 (disc) | 06+18 | ||
85 00 00 00 | 00 00 00 85 | 00000000 00000000 00000000 10000101 | Torne v3.52 (patch) | 01+03+08 |
- PSP Remote Play v1 and v2
Remote play is a feature that displays the PS3 screen on a PSP to enable remote operation over a wireless LAN. There are two PSP Remote Play modes, "v1" is in low quality using MPEG4 SP/ATRAC codecs, and "v2" uses MPEG4 AVC/AAC. See: Remote Play page and Official video in youtube.
- PSP Export
Allows the copy of the content to a PSP by pressing triangle over his icon in XMB and the option "copy" in the side menu. Used by "PS1 Game" and "Minis Game". See: PS3 User Guide/Copying games to play on a PSP.
- XMB In-Game v2 Forced Enable
XMB In-Game v2 was implemented in firmware 2.40, before 2.40 there was an old XMB In-Game v1. Games released before firmware 2.40 uses "XMB In-Game v1" even when launched in higher firmwares. This flag activates "XMB In-Game v2" for this old games, it has no effect in games released after 2.40 because this ones has XMB In-Game v2 activated by default. See: Official introduction video of the feature in fw 2.40.
If pressing for fews seconds, XMB In-Game V1 will appear in recents games. Somes games such as Fritz chess got even 3 differents XMB In Game: V2 when the game is launched, V1 during autosave feature screen, and a kind of V1.5 after (ICONS barely visible and no background visible)
- XMB In-Game v2 Disabled
Replaces "XMB In-Game v2" by "XMB In-Game v1", works with all games, useful to free ram and to improve the loading time of the menu.
- XMB In-Game v2 Background Music
Allows to pause the game (with the PS button), play your own music from the files stored in your HDD, and return to the game while your music is playing.
- Move/Navigation/Eye (warning screens)
This warning screens are displayed before the game is launched (around 3 seconds each), are an explain of the correct way to use the "move controller", "navigation controller", and "eye cam" respectively. The game waits for them to appear so is a good idea to remove them to improve the loading time, the removing of this 3 screens has no effect over the controller, move controller will work without them.
- Calibration (notification screen)
This is a calibration screen that appears when the controller has not been calibrated previously (or when is miss-configured).
- Stereoscopic 3D (warning screen)
This is a warning screen similar than the ones related with move peripherals, only appears when the TV is "3D compatible".
- Instal Disc
Hides the primary icon of the disc (only the secondary icon is displayed), used when the disc contains only "Install Packages" and there is no bootable content on the "main" path (PS3_GAME/USRDIR/EBOOT.BIN).
- Instal Packages
Activates the subfolder structure PS3_GAME/PKGDIR in discs by loading another SFO from this subfolder (the system loads the "main" SFO from PS3_GAME, and then "jumps" to the "secondary" SFO), every time one of these SFO's inside substructures/subfolders is loaded... a new subicon/mount point is loaded in XMB. See the "fake disc structure" examples in CATEGORY For Disc contents
- Game Purchase Enabled
Activates the option to purchase the content by pressing triangle over his icon in XMB. is directly related with CONTENT_ID. When the content is purchased his CONTENT_ID is checked online to obtain the license. After the license is retrieved the game loads another PARAM.SFO from a subfolder with different values (e.g. PARAM.SFO from the subfolder, as C00, with the TITLE "Full" is loaded, and the main PARAM.SFO with the TITLE "Demo" is ignored)
- Move Controller Compatible
Enables support for the Move Controller (Navigation Controller and Eye Cam doesn't have/needs a flag)
- License Text Hidden
Removes the "About this Game" option in Side Menu (by pressing triangle over the icon in XMB). This option ignores the LICENSE text. Used by games that has his own license and not the sony one (e.g: PCengine & NeoGeo)
- Unknown flags, specifics, not tested or incomplete descriptions and speculation
PSvita Remote Play (Flag Nº8) <----- used for first time by "patch v3.52" for "torne" (IP9100-BCJB95006_00-TORNE0PATCH00352-A0352-V0352-PE). Previously torne had 2 flags for the two PSP remote play modes. This patch was released few days after PS3 firmware 4.00, in his chagelog there is a clear reference to PSvita conectivity with PS3 but its not verifyed (and cant be tested in a firmware before 4.00)
System Chat Voice Disable :Not tested or found, function (implemented directly on FW and associated with Playstation ID or flag and if so it was only for short period before it was from FW) have been used for PlayStation Home after peoples reported chat voice disturbance. Kept as flag for convenience (to disable per game through update game and not FW)
There are may be a way to test it (on 3.55):
if connected online (PSN-SEN only?Xlink?) and trying to set chat voice in game (need microphone or camera otherwise it automatically disable? Go for xmb/friend/start new chat...and/or with this flag activated, you probably not should heard any chat voice in game but i don t have play online so much and never used chat because don t have required hardware) Please report test here or on the link forum at the end (same with flag N8) and correct the way chat voice/video/text can be used. Best will be with chattering DG game.
This theory make sense only if it was kept as flag for quick update....but can be "system reminiscent" and not working. To set this flag...hexa edit it.
(Attribute value and description found indirectly...and confirmed)
Boot logo Disable ? <-- this is the "license text hidden" flag ? FW max: 2.80 for ps3 fat?
Some flags may only be effective with some hardwares (PSP/PSVITA/Torne/Nasne...), FW, Games, or Category and/or in a cumulative way and others conditions.
Descriptions For X0 to X7
X category appear as HG (sub cat)but with different parameters and need cumulative flag (n22 at least+ 4th byte: half byte) The 4th byte is not used as binary (only?) but as Hexa value for half byte (right nibble, left nibble is ignored?) to set X category. If the value is 0 or end up with 0, and the X maker flag is set under right SFO X parameters, X0 (PCEngine) is read by the system.
SFO TEST Tool from Deroad can boot and return to XMB even under X category (when MINIS don t and are stuck after being X categorized)
Folder position in XMB (in fw 3.55 with hand-made PARAM.SFO's):
By pressing square, group content format position (the 8 X category folders can be displayed at the same time in XMB):
- Playstation 3
- minis
- Playstation 2
- Playstation
- X1
Mini icon: not present (-)
Attribute used (01 00 60 01)on EBOOT.PBP SFO for Minis (group content format on PSP: minis)
- X2
Mini icon: not present (-)
When Attribute used on EBOOT.PBP SFO on PSP: NEOGEO
- X0
Mini icon: PCEngine
Enables X category. Introduced initially as PCEngine.
Jul 15, 2009 Works alone and can be used with any "HG" category content, its not clear what does this flag other than the content has his own "tiny grey icon" with a "PCE" logo and are placed inside his own subfolder when ordering contents (with square button) in the XMB (3.55, 3.41?). Same attributes on PSP
- X3
Mini icon: not present (-)
- X4
Mini icon: NEOGEO
Dec 21, 2010 (Few days after 3.55) Can be used with any "HG" category content. It has his own "tiny grey icon" with a "NEOGEO" logo and are placed inside his own subfolder when ordering contents (with square button) in the XMB (3.55, 3.41?).
- X5 (same for X6 and X7)
Mini icon: not present (-)
(X3 may already have been used, X5,X6 and X7 can be not used yet)
Others: From Deroad HV dumps:
/dev_bdvd/PS3_GAME/PARAM.SFO /setting/system/licenseArea /dev_bdvd/PS3_GAME/L00/PARAM.SFO /dev_bdvd/PS3_GAME/L01/PARAM.SFO /dev_bdvd/PS3_GAME/L02/PARAM.SFO /dev_bdvd/PS3_GAME/L03/PARAM.SFO /dev_bdvd/PS3_GAME/L04/PARAM.SFO /dev_bdvd/PS3_GAME/L05/PARAM.SFO
BOOTABLE
Data_Type: uint32_t Data_Size_Total: 4 bytes Data_Size_Used: 4 bytes Used by: HDD Game, PS1 Game, Minis Game
If the content is bootable or not, useful when you are going to make a data pkg.
Little Endian | Big Endian | Flags (Binary) | Description |
---|---|---|---|
00 00 00 00 | 00 00 00 00 | 00000000 00000000 00000000 00000000 | Not bootable |
01 00 00 00 | 00 00 00 01 | 00000000 00000000 00000000 00000001 | Bootable |
CATEGORY
Data_Type: utf-8 Data_Size_Total: 4 bytes Data_Size_Used: 3 bytes Used by: All but Trophy
CATEGORY For HDD contents
This table represent the columns where the content is placed in the XMB and the CATEGORY asociated.
Photo | Music | Video | TV | Game | Network | PSN | Standard name | Notes & Examples |
---|---|---|---|---|---|---|---|---|
System Data | ||||||||
GD | Game Data (PS3) | Game Partial Installations from discs, Game patches, Game Expansions, Data generated by the game common for all users (in few games e.g: GT5) | ||||||
2D | PS2 Emulator Data | Special patches/data for PS2 Emulator. See: [PS3 manual - HDD install] | ||||||
Save Data | ||||||||
SD | Save Data (PS3) | PS3 Game Saves | ||||||
MS | Minis Save | Format inherited from PSP. See: Minis_Saved_Games | ||||||
Trophy Data | ||||||||
♦ | Trophy Data | Trophies uses a PARAM.SFO without CATEGORY, identifyed by the XMB by his path in internal HDD | ||||||
Bootable Content | ||||||||
AP | App Photo | PlayMemories | ||||||
AM | App Music | Qriocity Music Unlimited | ||||||
AV | App Video | Netflix, LoveFilm | ||||||
AT | App TV | QOOK TV, Now TV, Torne (Column hidden when no installed content) | ||||||
CB | ? | Life with PlayStation, Folding@home | ||||||
HM | Home | PlayStation Home | ||||||
HG | HDD Game (PS3 .PKG) | Some special contents (e.g: PCengine and NeoGeo Games) uses HG but are identifyed by the XMB by "speciall flags" inside his ATTRIBUTE | ||||||
2G | PS2 Game (PS2 Disc) | Real PS2 Discs installed in internal HDD, feature only available for "backward compatible" PS3's, and only a few games | ||||||
1P | PS1 Classics (PS1 .PKG) | Re-edited PS1 games released as a .pkg in "PlayStation Store" | ||||||
2P | PS2 Classics (PS2 .PKG) | Re-edited PS2 games released as a .pkg in "PlayStation Store" | ||||||
MN | Minis (Game) | Format inherited from PSP | ||||||
Transferable content | ||||||||
PP | PSP (Game) | Not bootable, but can be copyed to a PSP | ||||||
VT ? | PSvita (Game) | Not bootable, but can be copyed to a PSvita (not confirmed) |
There are 2 different "PS2 game" bootable contents (2P and 2G). 2P are released from PSN as "PS2 Classic", and 2G are a few real "PS2 DVD discs" that can be installed in the HDD (e.g. Final Fantasy XI online). List of the games [1]
Chronologically the implementation of the "DVD install process" is several years older (PSX : [2] ) and the files are installed in a special partition of the HDD. Its not clear yet how sony managed both types, how the "2G" installation works, where is this partition, and even if the XMB displays them as different.
The tests with "2G" was done with hand-made SFO's and no more files, when trying to boot the game there is an interesting error message: The game partition for this game cannot be created because the installed game is corrupted. To perform this operation, delete the game, and then reinstall the game using the disc.
- Unknown, untested, not listed yet, or speculation
XI - Confirmed ---> System File for Extra Content Item , related to another disc structure, related with folders EX_GAME & EX_VIDEO ?
VT - Speculation, refered as "VT" in one his related PS3 packages: NP0001-NPXS10002_00-VTSTORELIVEAREA0.pkg
CATEGORY For Disc contents
This table represent the columns where the content is placed in the XMB and the CATEGORY asociated. Note values inside parentesis indicates the structure has another subfolder with another PARAM.SFO.
Photo | Music | Video | TV | Game | Network | PSN | Standard name | Path | Notes |
---|---|---|---|---|---|---|---|---|---|
DG | Disc Game | dev_bdvd/TITLE_ID/PS3_GAME/PARAM.SFO | Main content of a Game Disc | ||||||
DP (IP) | Disc Packages (Install package) | dev_bdvd/TITLE_ID/PS3_GAME/PKGDIR/PARAM.SFO (.../PKG00/PARAM.SFO) | Installable Packages | ||||||
AR | Auto PKG for Disc Game Root | dev_bdvd/TITLE_ID/PS3_GAME/INSDIR/PARAM.SFO | Game Patches and Installable Packages | ||||||
XR (IP, TI, VI) | Extra Root (Install package, Theme Item, Video Item) | dev_bdvd/TITLE_ID/PS3_EXTRA/PARAM.SFO (.../D000/PARAM.SFX) | Installable Packages, Themes, and Videos | ||||||
TR | Theme Root | dev_bdvd/TITLE_ID/PS3_CONTENT/THEMEDIR/PARAM.SFO | Themes | ||||||
VR (VI) | Video Root (Video Item) | dev_bdvd/TITLE_ID/PS3_CONTENT/VIDEODIR/PARAM.SFO (.../D000/PARAM.SFO) | Videos | ||||||
DM | Disc Movie | dev_bdvd/TITLE_ID/PS3_VPRM/PARAM.SFO | Main content of a Movie Disc |
These are "fake Blu-Ray discs" with the minimal parameters inside SFO's/SFX's needed for the structure to work, and the needed HYBRID_FLAG's inside the main PS3_DISC.SFB. All the files are 100% hand made from scratch and tested.
Game discs in folder PS3_GAME The basic structure of a game disc.
0GAM00001 |--- PS3_DISC.SFB <--- HYBRID_FLAG (g), TITLE_ID (0GAM00001) |--- PS3_GAME |--- PARAM.SFO <--- CATEGORY (DG), TITLE_ID (0GAM00001) |--- USRDIR |--- EBOOT.BIN
Movie discs in folder PS3_VPRM This is the part of a Blue-Ray movie structure related with the PS3 system... the rest are the standard folders/files of a Blue-Ray movie and is not needed to be explained here.
0MOV00001 |--- PS3_DISC.SFB <--- HYBRID_FLAG (v), TITLE_ID (blank) |--- PS3_VPRM |--- PARAM.SFO <--- CATEGORY (DM)
Game discs in folder PS3_CONTENT Themes folder is mounted as a "secndary icon" under the "main game icon". Doesn't need/admit an SFO/SFX, the icon contained in the theme is resized and displayed inside a bubble, also the TITLE of the Theme is used for the content.
0CONT00001 |--- PS3_DISC.SFB <--- HYBRID_FLAG (TV), TITLE_ID (0CONT00001) |--- PS3_CONTENT |--- THEMEDIR | |--- PARAM.SFO <--- ATTRIBUTE (01000000), CATEGORY (TR), TITLE (Themes) | |--- D000 | |--- DATA001.P3T | |--- DATA002.P3T |--- VIDEODIR |--- PARAM.SFO <--- ATTRIBUTE (01000000), CATEGORY (VR), TITLE (Videos) |--- D001 | |--- PARAM.SFO <--- CATEGORY (VI), TITLE (Video 1) | |--- DATA000.MP4 |--- D002 |--- PARAM.SFO <--- CATEGORY (VI), TITLE (Video 2) |--- DATA000.MP4
Game discs in folder PS3_GAME/PKGDIR Can be considered an "expansion" of the basic blu-ray structure of a game disc, activated by the flag 00000200 in the ATTRIBUTE of the PARAM.SFO inside PS3_GAME. Packages are displayed in subfolders inside bubbles with his icons resized.
When the packages are installed, the file PARAM.SFO from PKGDIR is renamed to DISC.SFO and copyed inside the installation folder with the purpose of ??? (unknown, his info is not displayed in XMB)
0PKG00001 |--- PS3_DISC.SFB <--- HYBRID_FLAG (g), TITLE_ID (0PKG00001) |--- PS3_GAME |--- PARAM.SFO <--- ATTRIBUTE (00000200), CATEGORY (DG) |--- PKGDIR |--- PARAM.SFO <--- ATTRIBUTE (0100000), CATEGORY (DP), TITLE (Packages) |--- PKG01 | |--- PARAM.SFO <--- CATEGORY (IP), TITLE (Package 1) | |--- INSTALL.PKG |--- PKG02 |--- PARAM.SFO <--- CATEGORY (IP), TITLE (Package 2) |--- INSTALL.PKG
Game discs in folder PS3_GAME/INSDIR Can be considered an "expansion" of the basic blu-ray structure of a game disc, activated by default ?
Used for "game patches" and "game expansion packs". The PARAM.SFO inside "INSDIR" contains the "APP_VER" of the bigger patch of the folder. Note that "download content" packages doesnt contains "APP_VER" so his installation doesnt updates the main game. For this reason "APP_VER" is only related with patches and is only needed when there are patches in the foler.
0INS00001 |--- PS3_DISC.SFB <--- HYBRID_FLAG (g), TITLE_ID (0INS00001) |--- PS3_GAME |--- PARAM.SFO <--- CATEGORY (DG) |--- INSDIR |--- PARAM.SFO <--- APP_VER (01.02), CATEGORY (AR) |--- DATA000.PKG |--- DATA001.PKG
Game discs in folder PS3_EXTRA Icon sizes is the same used in "PStore news" menu ([big squares of 486x405 pixels]). see: [Content_Information_Files|Content Information Files]] Similar as PKGDIR, the file PARAM.SFO from PKGDIR is renamed to DISC.SFO Used in BLJM60372 Biohazard revival
0EXT00001 |--- PS3_DISC.SFB <--- HYBRID_FLAG (g), TITLE_ID (0EXT00001) |--- PS3_GAME | |--- PARAM.SFO <--- CATEGORY (DG) |--- PS3_EXTRA |--- PARAM.SFO <--- ATTRIBUTE (0100000), CATEGORY (XR), TITLE (Extras) |--- D001 | |--- PARAM.SFX <--- CATEGORY (IP), TITLE (Package 1) | |--- DATA000.PKG |--- D002 | |--- PARAM.SFX <--- CATEGORY (IP), TITLE (Package 2) | |--- DATA000.PKG |--- D003 | |--- PARAM.SFX <--- CATEGORY (VI), TITLE (Video 1) | |--- DATA000.MP4 |--- D004 | |--- PARAM.SFX <--- CATEGORY (VI), TITLE (Video 2) | |--- DATA000.MP4 |--- D005 | |--- PARAM.SFX <--- CATEGORY (TI), TITLE (Theme 1) | |--- DATA000.P3T |--- D006 |--- PARAM.SFX <--- CATEGORY (TI), TITLE (Theme 2) |--- DATA000.P3T
You can download this structures to experiment with them or to look how SFO's SFX's are built ---> [Blu-Ray fake discs by sandungas]
CONTENT_ID
Data_Type: utf-8 Data_Size_Total: 48 bytes Data_Size_Used: 37 bytes Used by: HDD Game
Content Identificator for Gamepurchase feature. Used in games that runs in "demo mode" and can be purchased (unlocked) by pressing triangle over his icon in XMB.
The format is: XXYYYY-NP_COMMUNICATION_ID-LICENSE_ID where:
- XX is ?
- YYYY is ?
- - is a separator character (mandatory)
- NP_COMMUNICATION_ID is explained in NP_COMMUNICATION_ID
- - is a separator character (mandatory)
- LICENSE_ID is ?
This games has a minimal folder structure with two PARAM.SFO like this:
NPxx12345 |--- PARAM.SFO <--- ATTRIBUTE (00000800), CATEGORY (HG), TITLE (GAME Trial) ... & others |--- USRDIR | |--- EBOOT.BIN |--- C00 |--- PARAM.SFO <--- ATTRIBUTE (00000800), CATEGORY (HG), TITLE (GAME Full) ... & others
DETAIL
Data_Type: utf-8 Data_Size_Total: 1024 bytes Data_Size_Used: variable Used by: Save Data
Text lines displayed under SUBTITLE text. Used only for SaveData to store long texts from the game like the name of the level you was playing, the equipment of your character (in a RPG), or the car you was driving (in a race simulator), etc...
When the text is too long to fit in the screen it scrolls vertically from bottom to top, if the Data_Used_Size is not correct this scroll doesn't flow properly.
To displace the text to the next row is used the special byte "0A", this way it can be done long messages with several horizontall lines.
ITEM_PRIORITY
Data_Type: integer Data_Size_Total: 4 (0x4) Data_Size_Used: 4 (0x4) Used by: PS2 Disc Game
Used only in category "2G" for "PS2 game discs" that can be installed in the PS3 internal HDD. Always filled with zeroes in the examples found
- Speculation
Related with features of the PS2 emulator like hardware emulation priority ? Related with PS2 virtual HDD images (IMAGE.DAT) ?
LANG
Data_Type: uint32_t Data_Size_Total: 4 bytes Data_Size_Used: 4 bytes Used by: Trophy
Language used when the "trophy config file" TROPCONF.SFM was installed. Valid values for languages are the same ones used for Regional codes
LICENSE
Data_Type: utf-8 Data_Size_Total: 512 bytes Data_Size_Used: variable Used by: HDD Game
License text of the content, hidden by the system in actual firmwares
NP_COMMUNICATION_ID
Data_Type: utf-8 Data_Size_Total: 16 bytes Data_Size_Used: 13 bytes Used by: HDD Game
Name of the folder containing the trophy installer (TROPHY.TRP)
The format is NPWRxxyyy_zz (e.g. NPWR00001_00)
NPCOMMID
Data_Type: utf-8 Data_Size_Total: 16 bytes Data_Size_Used: 12 bytes Used by: Trophy
Same than NP_COMMUNICATION_ID but with a Data_Size_Used of 12 bytes
PADDING
Data_Type: utf-8 Special Mode Data_Size_Total: 8 bytes Data_Size_Used: 0 bytes Used by: Trophy
Unknown
PARAMS
Data_Type: utf-8 Special Mode Data_Size_Total: 1024 bytes Data_Size_Used: 1024 bytes Used by: Save Data
This parameter is intended to store user (and console?) specific data.
Offset | length | Example | Description | Notes |
---|---|---|---|---|
0x0000 | 12 (0xC) | 030401020300000000000000 | Unknown | |
0x000C | 4 (0x4) | 08000000 | Unknown | |
0x0010 | 4 (0x4) | 7D000000 | Unknown | |
0x0014 | 4 (0x4) | 03000000 | Unknown | |
0x0018 | 4 (0x4) | 01000000 | userid | User identification number from XRegistry.sys |
0x001C | 16 (0x10) | FEDCBA9876543210FEDCBA9876543210 | psid | More info: PSID |
0x002C | 4 (0x4) | 01000000 | userid | User identification number from XRegistry.sys |
0x0030 | 16 (0x10) | 0123456789ABCDEF0123456789ABCDEF | accountid | PSN account identification from XRegistry.sys |
0x0040 | 960 (0x3C0) | 00000000........ | Unknown | Big chunk of zeroes, probably used or reserved for other formats |
- Notes:
- The string used in the paramater ACCOUNT_ID is the same than accountid inside PARAMS. When PARAMS & ACCOUNT_ID are present in the SFO the string can be found twice in the file.
PARAMS2
Data_Type: utf-8 Special Mode Data_Size_Total: 12 bytes Data_Size_Used: 12 bytes Used by: Save Data
Unknown, usually filled with zeroes
PARENTAL_LEVEL_x
Data_Type: uint32_t Data_Size_Total: 4 bytes Data_Size_Used: 4 bytes Used by: HDD Game
Used to restrict the content to a specific License Area
The "x" at the end of the name PARENTAL_LEVEL_x defines the License Area wich is one of this list.
Parameter | License Area | Regions |
---|---|---|
PARENTAL_LEVEL_A | SCEA | US, Canada (North America), Mexico, Central America, South America |
PARENTAL_LEVEL_C | SCH | China |
PARENTAL_LEVEL_E | SCEE | Europe/Middle East/Africa, U.K./Ireland, Australia/New Zealand (Oceania), Russia, Ukraine, India, Central Asia |
PARENTAL_LEVEL_H | SCEH | Singapore/Malaysia (Southeast Asia), Taiwan, Hong Kong |
PARENTAL_LEVEL_J | SCEJ | Japan |
PARENTAL_LEVEL_K | SCEK | Korea (South Korea) |
- All this parameters are used in group, and preceded by a "standard" PARENTAL_LEVEL with the value 00000000 (disabled)
- Valid values are the same than PARENTAL_LEVEL (an scale from 1 to 11) with the only difference that the value for disable is FFFFFFFF
---example string--- 00000000 05000000 0A000000 01000000 FFFFFFFF 06000000 0B000000 ---example explain--- PARENTAL_LEVEL = 00000000 (disabled) PARENTAL_LEVEL_A = 05000000 (level 5) PARENTAL_LEVEL_C = 0A000000 (level 10) PARENTAL_LEVEL_E = 01000000 (level 1) PARENTAL_LEVEL_H = FFFFFFFF (disabled) PARENTAL_LEVEL_J = 06000000 (level 6) PARENTAL_LEVEL_K = 0B000000 (level 11)
PARENTAL_LEVEL
Data_Type: uint32_t Data_Size_Total: 4 bytes Data_Size_Used: 4 bytes Used by: HDD Game, Minis Game, Game Data, Save Data, Minis Save Data
It is a scale to rate the content for the different users based in user profile settings and international rating systems as: [| PEGI], [| ESRB], [| CERO], etc...
The higher the level the higher the restriction e.g:
- A game rated 11 will be displayed with an "locked" icon in XMB and requires the "unlock PIN" for a user with level 1.
- A game rated 1 can be played by all levels, from 1 to 11.
- Level 0 is disabled.
Little Endian | Big Endian | Decimal | Rating |
---|---|---|---|
00 00 00 00 | 00 00 00 00 | 0 | Disabled |
01 00 00 00 | 00 00 00 01 | 1 | Lower restriction |
02 00 00 00 | 00 00 00 02 | 2 | |
03 00 00 00 | 00 00 00 03 | 3 | |
04 00 00 00 | 00 00 00 04 | 4 | |
05 00 00 00 | 00 00 00 05 | 5 | |
06 00 00 00 | 00 00 00 06 | 6 | |
07 00 00 00 | 00 00 00 07 | 7 | |
08 00 00 00 | 00 00 00 08 | 8 | |
09 00 00 00 | 00 00 00 09 | 9 | |
0A 00 00 00 | 00 00 00 0A | 10 | |
0B 00 00 00 | 00 00 00 0B | 11 | Higher restriction |
PARENTALLEVEL
Data_Type: uint32_t Data_Size_Total: 4 bytes Data_Size_Used: 4 bytes Used by: PS1 Game, Trophy
Same than PARENTAL_LEVEL
PS3_SYSTEM_VER
Data_Type: utf-8 Data_Size_Total: 8 bytes Data_Size_Used: 8 bytes Used by: HDD Game, PS1 Game, Minis Game, Game Data
Minimum PS3 System Software required for the content to be bootable.
The format is XX.YYYY where "XX" and "YYYY" are numbers, and the point "." is included in the string, e.g: 03.4100.
REGION_DENY
Data_Type: uint32_t Data_Size_Total: 4 bytes Data_Size_Used: 4 bytes Used by: HDD Game
Regional restrictions for the content.
There are 12 valid Regions, each region has a position assigned in the binary string, this positions are marked with an "1" when the region is prohibited, and a "0". when is allowed.
Little Endian | Big Endian | Flags (Binary) | Region Nº | Allowed Region | Notes | |
---|---|---|---|---|---|---|
FE FF FF FF | FF FF FF FE | 11111111 11111111 11111111 11111110 | 0 | Japan | ||
FD FF FF FF | FF FF FF FD | 11111111 11111111 11111111 11111101 | 1 | US, Canada (North America) | Used in Netflix | |
FB FF FF FF | FF FF FF FB | 11111111 11111111 11111111 11111011 | 2 | Europe / Middle East / Africa | ||
F7 FF FF FF | FF FF FF F7 | 11111111 11111111 11111111 11110111 | 3 | Korea (South Korea) | ||
EF FF FF FF | FF FF FF EF | 11111111 11111111 11111111 11101111 | 4 | U.K. / Ireland | ||
DF FF FF FF | FF FF FF DF | 11111111 11111111 11111111 11011111 | 5 | Mexico, Central America, South America | ||
BF FF FF FF | FF FF FF BF | 11111111 11111111 11111111 10111111 | 6 | Australia / New Zealand (Oceania) | ||
7F FF FF FF | FF FF FF 7F | 11111111 11111111 11111111 01111111 | 7 | Singapore / Malaysia (Southeast Asia) | ||
FF FE FF FF | FF FF FE FF | 11111111 11111111 11111110 11111111 | 8 | Taiwan | ||
FF FD FF FF | FF FF FD FF | 11111111 11111111 11111101 11111111 | 9 | Russia, Ukraine, India, Central Asia | ||
FF FB FF FF | FF FF FB FF | 11111111 11111111 11111011 11111111 | 10 | China | ||
FF F7 FF FF | FF FF F7 FF | 11111111 11111111 11110111 11111111 | 11 | Hong Kong | ||
Examples | ||||||
01 F0 FF FF | FF FF F0 01 | 11111111 11111111 11110000 00000001 | Allowed Region From 1 to 11 | [| Photo] of a PS3 DEX with Allowed Region=1-11 (note region 0=Japan is not allowed) |
RESOLUTION
Data_Type: uint32_t Data_Size_Total: 4 bytes Data_Size_Used: 4 bytes Used by: HDD Game, PS1 Classics Game, Minis Game
TV video modes supported by the content.
When there are several flags activated the PS3 will use the one with higher quality supported by the TV.
Little Endian | Big Endian | Decimal | Binary (Flags) | Description |
---|---|---|---|---|
01 00 00 00 | 00 00 00 01 | 1 | 00000000 00000000 00000000 00000001 | 480 (4:3) |
02 00 00 00 | 00 00 00 02 | 2 | 00000000 00000000 00000000 00000010 | 576 (4:3) |
04 00 00 00 | 00 00 00 04 | 4 | 00000000 00000000 00000000 00000100 | 720 (16:9) |
08 00 00 00 | 00 00 00 08 | 8 | 00000000 00000000 00000000 00001000 | 1080 (16:9) |
10 00 00 00 | 00 00 00 10 | 16 | 00000000 00000000 00000000 00010000 | 480 (16:9) |
20 00 00 00 | 00 00 00 20 | 32 | 00000000 00000000 00000000 00100000 | 576 (16:9) |
Examples | ||||
3F 00 00 00 | 00 00 00 3F | 63 | 00000000 00000000 00000000 00111111 | All video modes supported |
- Note the resolution for originall PS1 disc games can vary (See: Emulation Resolution). The RESOLUTION flags used in PARAM.SFO's of "PS1 Classics Game" from PSN seems to be specific and not fixed sizes (e.g: 01 00 00 00). This will need another table if more are found
SAVEDATA_DETAIL
Data_Type: utf-8 Data_Size_Total: 1024 bytes Data_Size_Used: variable Used by: Minis Save Data
Used to store texts generated by the game, the format s the same than DETAIL
SAVEDATA_DIRECTORY
Data_Type: utf-8 Data_Size_Total: 64 bytes Data_Size_Used: variable Used by: Save Data, Minis Save Data
Name of the folder where the game stores his SaveData. The format is: TITLE_ID-xxx, e.g;: BLUS00001-savedata where:
- TITLE_ID is explained in TITLE_ID.
- - is a separation character (mandatory).
- xxx is a variable string with variable lenght, are texts to separate different SaveDatas from the same game.
SAVEDATA_FILE_LIST
Data_Type: 04 00 Data_Size_Total: 3168 bytes Data_Size_Used: 3168 bytes Used by: Minis Save Data
Contains a list with an space reserved for 99 entries, each entry 32 bytes long, for a total size of 3168 bytes (99 * 32 = 3168)
Entries refer to other files from the folder, example of one entry:
0x0550 53 45 43 55 52 45 2E 42 49 4E 00 00 00 72 93 A5 | SECURE.BIN...... | 0x0560 8B 8A D4 FA 8E B8 2B 3F A6 61 BC ED A6 00 00 00 | .z....+?.a...... |
53 45 43 55 52 45 2E 42 49 4E <------------------------ file name 72 93 A5 8B 8A D4 FA 8E B8 2B 3F A6 61 BC ED A6 <----- file hash ??? (changes when the file is updated)
SAVEDATA_LIST_PARAM
Data_Type: utf-8 Data_Size_Total: 8 bytes Data_Size_Used: variable Used by: Save Data
Unknown, usually filled with zeroes, but with a Data_Used_Size of 1 byte
- Gran turismo 5 contains the string "GAMEDAT"
SAVEDATA_PARAMS
Data_Type: 04 00 Data_Size_Total: 128 bytes Data_Size_Used: 128 bytes Used by: Minis Save Data
Example
Offset | length | Example | Description | Notes |
---|---|---|---|---|
0x11B0 | 16 (0x10) | 41000000000000000000000000000000 | Unknown | allways the same value found ("A" in utf-8) |
0x11C0 | 16 (0x10) | FEDCBA9876543210FEDCBA9876543210 | Unknown | changes when the savedata is updated |
0x11D0 | 16 (0x10) | 0123456789ABCDEF0123456789ABCDEF | Unknown | changes when the savedata is updated |
0x11E0 | 16 (0x10) | 00000000000000000000000000000000 | Unknown | allways the same value found (blank) |
0x11F0 | 16 (0x10) | 00000000000000000000000000000000 | Unknown | allways the same value found (blank) |
0x1200 | 16 (0x10) | 00000000000000000000000000000000 | Unknown | allways the same value found (blank) |
0x1210 | 16 (0x10) | 00000000000000000000000000000000 | Unknown | allways the same value found (blank) |
0x1220 | 16 (0x10) | ABCDEF0123456789ABCDEF0123456789 | Unknown | changes when the savedata is updated |
SAVEDATA_TITLE
Data_Type: utf-8 Data_Size_Total: 128 bytes Data_Size_Used: variable Used by: Minis Save Data
Subtitle of the Save, the format is the same than SUBTITLE
SOUND_FORMAT
Data_Type: uint32_t Data_Size_Total: 4 bytes Data_Size_Used: 4 bytes Used by: HDD Game, PS1 Game, Minis Game
Sound modes supported by the content.
Little Endian | Big Endian | Decimal | Binary (Flags) | Description | Flag Nº | Requires Flag Nº |
---|---|---|---|---|---|---|
01 00 00 00 | 00 00 00 01 | 1 | 00000000 00000000 00000000 00000001 | [LPCM] 2.0 | 01 | |
02 00 00 00 | 00 00 00 02 | 2 | 00000000 00000000 00000000 00000010 | 02 | ||
04 00 00 00 | 00 00 00 04 | 4 | 00000000 00000000 00000000 00000100 | [LPCM] 5.1 | 03 | |
10 00 00 00 | 00 00 00 10 | 16 | 00000000 00000000 00000000 00010000 | [LPCM] 7.1 | 05 | |
00 01 00 00 | 00 00 01 00 | 256 | 00000000 00000000 00000001 00000000 | [Dolby Digital] 5.1 | 09 | 02 |
00 02 00 00 | 00 00 02 00 | 512 | 00000000 00000000 00000010 00000000 | [Digital Theater Systems (DTS)] 5.1 | 10 | 02 |
Examples | ||||||
15 00 00 00 | 00 00 00 15 | 21 | 00000000 00000000 00000000 00010101 | All LPCM modes | 1+3+5 | |
02 01 00 00 | 00 00 01 02 | 258 | 00000000 00000000 00000001 00000010 | Only Dolby Digital 5.1 | 2+9 | |
02 02 00 00 | 00 00 02 02 | 514 | 00000000 00000000 00000010 00000010 | Only Digital Theater Systems (DTS) 5.1 | 2+10 | |
17 03 00 00 | 00 00 03 17 | 791 | 00000000 00000000 00000011 00010111 | All sound modes | 1+2+3+5+9+10 |
- Speculation
A new "7.1 virtual surround" sound mode has been announced officially, it will be implemented in the next firmware (aparently version 4.20). This sound mode will need one (or two) new flags for being activated in games
Blu-ray disc movies supports "virtual surround 7.1" time ago, no problem with them, but there are 2 ways to implement this in games:
-By using the LPCM 7.1 channels and aplying digital filters (this way the old games that contains LPCM 7.1 separated channels can use it by converting this channels to 7.1 virtual surround)
-Or by adding new sound channels in the game files, (actually there is no PS3 game with them)
This give us one (for the "native" support") or two (another for the dgital filter conversor) flags... there is no point in speculate wich one can be, but seems obvious one of them will be this one:
Little Endian | Big Endian | Decimal | Binary (Flags) | Description | Flag Nº | Requires Flag Nº |
---|---|---|---|---|---|---|
00 04 00 00 | 00 00 04 00 | 1024 | 00000000 00000000 00000100 00000000 | [Virtual Surround] 7.1 | 11 | 02 |
Expect to see this new flag in the game patches released after 4.20... mostly the games from companyes property of sony (e.g: uncharted, killzone, god of war, etc...). Be aware of it and catch them all !!!
SOURCE
Data_Type: uint32_t Data_Size_Total: 4 bytes Data_Size_Used: 4 bytes Used by: Trophy
Unknown, usually filled with zeroes
SUB_TITLE
Data_Type: utf-8 Data_Size_Total: 128 bytes Data_Size_Used: variable Used by: Save Data
The line of text displayed under TITLE text, used only in SaveData to store short texts from the game like your player name, your play time, photo used or your rank in the game
When the text is too long to fit in the screen it scrolls horizontally from right to left, if the Data_Used_Size is not correct this scroll doesn't flow properly. The same behaviour happens with TITLE, TITLE_xx, TITLEID0xx and TITLE_ID
TARGET_APP_VER
Data_Type: utf-8 Data_Size_Total: 8 bytes Data_Size_Used: 6 bytes Used by: Game Data
Target application version for incremental patches. Patches containing TARGET_APP_VER can be installed over the game with the same APP_VER.
The format is XX.YY where "XX" and "YY" are numbers, and the point "." is included in the string, e.g: 01.00
TITLE
Data_Type: utf-8 Data_Size_Total: 128 bytes Data_Size_Used: variable Used by: All but Trophy
Default "title of the game" for all languages. The text is displayed right to the ICON0.PNG.
TITLE_ID
Data_Type: utf-8 Data_Size_Total: 16 bytes Data_Size_Used: 10 Used by: HDD Game, PS1 Game, Minis Game, Game Data
Identifier of the content, in the format WXYZ12345. Must be the same ID inside the Makefile when compiling the .SELF, or/and when creating the .PKG
- Discs:
- W is the media: (B=Blu-ray, S=CD/DVD)
- X is the license: (C=Official, L=Licensed)
- Y is the region: (A=Asia, E=Europe, J=Japan, U=USA)
- Z is the kind of content: (D=Demo, M=Malayan Release, S=Retail release)
- 12345 is the game ID in chronological order
- HDD games or apps:
- WX is the Network Environment: (NP=Retail)
- Y is the region: (E=Europe, I=International?, H=Hong Kong, J=Japan, U=USA)
- Z is the ?: (A=?, B=?, F=?, G=?, I=?, J=?, K=?, L=?, O=?, W=?, Z=?)
- 12345
- Other TITLE_ID's
- TEST12345 (in savedata). When mounting a disc in a backup manager using the option "direct boot", the mounted disc use the TITLE_ID from backup manager (TITLE_ID from backup manager has not been unloaded properly and the disc adopts it). The savedata of this game will use TEST12345. When several different games are mounted and "direct launched", the savedata will be corrupted/invalid (because the overwriting of PARAM.SFO). TEST12345 seems to a common TITLE_ID used in all backup managers, the name probably is derived from official tools or internal firmware functions (Described as tips with ps3.gen.exe:"setting the TITLE_ID to TEST-XXXXX or disc version to "00.00" enable the program to build the disc image even when errors are found).
- MRTC00001 STAR OCEAN THE LAST HOPE (the first international blu-ray release)
TITLE_xx
Data_Type: utf-8 Data_Size_Total: 128 bytes Data_Size_Used: variable Used by: HDD Game
Same than TITLE but for localized languages.
An .SFO can contain several TITLE_xx where xx is a number for a regional code. See: Content Information Files.
The "default" TITLE is always present when other "localized" TITLE_xx are used.
TITLEID0xx
Data_Type: utf-8 Data_Size_Total: 16 bytes Data_Size_Used: 9 Used by: Trophy
SFO's for trophies contains a full list of 16 TITLEID0xx parameters for all languages where xx is a number for a regional code. See: Content Information Files.
All them can contain data, or only the default TITLEID000. The ones without data are marked with a Data_Used_Size = 0 bytes
The text contained inside default TITLEID000 is the same than TITLE_ID
VERSION
Data_Type: utf-8 Data_Size_Total: 8 bytes Data_Size_Used: 6 bytes (or 3 bytes when used in trophy) Used by: HDD Game, PS1 Game, Minis Game, Game Data, Trophy
Disc revision, or Package revision. The number increases when the content is re-released or re-packaged for whatever reason that doesn't affect the main executable (e.g. when a disc game reaches platinum sales, or "game of the year edition" including extra contents).
When the main executable is updated, the APP_VER increases (this can be done with patches)... but the VERSION of the patch (or the re-released disc) returns to 01.00.
Additionally this gives the possibility to release different versions of the same patch (used when the original patch contains a bug, needs to be replaced, and is not cumulative)
The format is XX.YY where "XX" and "YY" are numbers, and the point "." is included in the string, e.g: 01.00.
- When used in a SFO for a trophy it has a Data_Size_Used of 3 bytes, with the format: X.Y e.g: 1.0
Tips & Tricks
This section is to add more extended explains about features that cant been easily clasifyed inside other sections
Replacing a PARAM.SFO manually
When replacing a PARAM.SFO manually in the internall HDD (using a file manager, FTP, etc...) the system ignores it. This happens because the system is storing a "duplicated" copy of the old one.
To be sure that the new PARAM.SFO has been loaded you can change the TITLE (Paid attention also to TITLE_xx) , this way you can see the new name displayed in XMB, is a good idea to use something that identifyes the change as "My test 01".
- The most convenient and quick way to "refresh" the XMB is as simple as booting the game one time (by pressing X button over his icon)... inside the game press "PS" button and exit with "quit"... then return to the XMB and the new PARAM.SFO has been loaded. So in resume... the XMB is refreshed when you boot it for first time so you need to boot it one time and quit to load the new PARAM.SFO.
- The other solution is by using the option "rebuild database" from the recovery menu (this re-indexes all the files in the internall HDD), is long but can fix rare problems. This can be used when the PARAM.SFO you are playing with is not BOOTABLE (you cant boot it to "refresh" the XMB)
When replacing a PARAM.SFO manually in a Game Disc (to be loaded later by a backup manager) sometimes the system ignores it. This happens because the system is storing a "duplicated" copy of the old disc structure included his PARAM.SFO (iirc). The trick to "refresh the XMB" is again by booting the game (pressing X in the main icon)... for this to work is needed to have a EBOOT.BIN in the main path inside USRDIR folder (e.g: the EBOOT.BIN from the "move demo disc" just plays a video in .MP4 and is tiny)
Creating a frankenstein PARAM.SFO
The first step is to go to the Parameters Table to look what parameters are mandatory and wich ones can be removed or zeroed (note this table has a lot of YES that probably are OPT, is just that this ones has not been verifyed or found)
- When you generate a non proper file you can have a nice icon of "corrupted data", but in some cases the game boots normally. In other cases when adding or removing parameters the file is "partially" corrupted because there is a "break point" in the structure and the file is "partially" loaded (the PS3 loads the values before the structure "break point" normally, but after this point the values shown as corrupted or missing).
- When adding "non-standard" parameters to a "standard" SFO the system blocks this "not-expected" parameters. The SFO is loaded without problems, but the added parameters are ignored (e.g. when adding SUB_TITLE to a SFO for category "HG").
- The minimal structure tested (and working) for a homebrew can be copied/downloaded at the bottom of the page, its not "standard" but the PS3 doesn't complain, and probably can be reduced even more.
- If Error 80028F08:
can be resolved by pressing triangle one time and launch the game from start or back from the ICON.
Creating Discs
The "fake blu-ray" structures that can be downloaded from this page uses two "dirty tricks" that was usefull to identify the critic values needed to work, but can be a bit confusing to replicate them.
The first one is the removing of TITLE and TITLE_ID from most of the SFO's, this can generate a strange behaviour mostly for the primary icon. The second one is the ATTRIBUTE flag to hide the main icon. The other factor involved in this weird behaviours are the "backup managers" that are hardcoded to look for files and format in some specific structures.
When playing with this fake blu-rays use a USB pendrive (is faster to connect/disconnect to ps3/pc) with a "GAMEZ" folder in the root, and remember to "dismount" the game before disconecting the USB to avoid the XMB to go crazy, also remember the XMB sometimes keeps a backup copy of the old PARAM.SFO
For install packages (max: 100, FW min: 1.80) you can use PS3_EXTRA or PKGDIR both will work but are displayed different
For themes ( max: 200, FW min: 2.50) and videos (max: 200, FW min: 2.40) use PS3_EXTRA or PS3_CONTENT remember themes includes his own icon and title, videos are mounted in video colum when using PS3_CONTENT pretty nice for chapters of series, video manuals, etc...
(Max items & FW min are theory, not tested)
For patches use INSDIR, his installation is more automated
Creating Patches
The type of patch is defined by his APP_VER, TARGET_APP_VER, and VERSION. There is no way to update an installed content without APP_VER The standard way to install a patch is by using the same TITLE_ID of the previous release and a bigger APP_VER, when the patch is installed his PARAM.SFO replaces the old one, consequently his APP_VER increases
But there are some tricks related with this patching system that can be used to add files to the install folder without keeping this standard:
- Using a "blank" APP_VER
This is as easy as filling the value for APP_VER in the patch with zeroes, the undesired effect is the app will have no version. The benefit is this will work for installing cummulating files as "themes", "roms" etc...
- Using the same APP_VER and TARGET_APP_VER in the patch and in the app
This will replace the PARAM.SFO by other with the same values, so is similar than the previous one, but keeping his version. Additionally this assures you that the files are compatibles with this version of the app (e.g: a theme that only works with a specific version)
Tools, manuals and external links
Sorry if im missing some link, several things of this page was copy-pasted months ago by googling in random forums.
- Tools
SFO_tools_-_linux-64bit-compiles.rar (23.61 KB)
https://github.com/an0nym0u5/PSL1GHT/commit/75013299710d2bde224e2052284461a665a071bf
SFO Test(217.99KB) Deroad SFO test homebrew ( really usefull for fast test, can boot under X category so it refresh the SFO and avoid stuck SFO and games, XMB in game is not "visible")
[PkgView] (by ifcaro): The fastest, lighter, and intuitive PKG extractor ever. Very usefull to extract individual files or to take a look inside the PKG without extracting
- Sources
http://www.ps3hax.net/showthread.php?t=28704
http://ps3dev.wikispaces.com/PARAM.SFO
- Examples
A little collection of SFO's ordered by categories http://www.sendspace.com/file/oy270g
CATEGORY "2P"(PSN Converted PS2 game/saves) SFO examples http://dl.dropbox.com/u/60710927/XMBMPLUS/DEVELOPMENT_SOURCES/PS2_GAME_SFO/PS2_GAME_SFO.rar. There are three files, one SFO file taken from the PS2 Game directory and two SFO files taken from two different saves generated by that game.