What’s on a PS5 game disc? (Part 1)

This is part 1 of a series where I’ll be doing a deep dive on what’s on a PlayStation 5 game’s disc. This has value for those interested in the PS5 “homebrew” scene, or in the long-term, emulating or modding PS5 games.
To start, PS5 game discs all have the same name - PS5Volume.
The file structure is here:
.
├── app
│ └── PPSA07783
│ ├── app_0.pkg
│ ├── app.crc
│ ├── app.json
│ └── app_sc.pkg
├── bd
│ └── param.json
├── license
│ └── rif
└── PS5
└── UPDATE
└── PS5UPDATE.PUP
7 directories, 7 files
For this part, we’re only going to be looking at the param.json files on the system; the “app” dir and PUP files will be in a later post.
SFO files have been used by Sony since the PlayStation 3 days, they include important information about the game that the console will need to load it. SFO files used to be purely binary, but now, Sony has switched to using JSON, but preserving a binary section at the beginning for compatibility.
So to summarize:
- The first 640 bytes (0x280) of
param.jsonare binary. These define an SFO object. - Starting from byte 2048 (0x800) on, the
param.jsonincludes JSON text.
Here’s what the JSON included for one of my game discs - Star Wars: Jedi Survivor
{
"disc": [
{
"masterDataId": "PPSA07783",
"role": "Play Disc"
}
],
"discNumber": 0,
"discTotal": 1,
"masterVersion": "01.00",
"pubtoolsVersion": "1.89",
"requiredSystemSoftwareVersion": "0x0700000000000000"
}
The master data ID is the unique game ID. You will not find this printed anywhere on the game itself, but it is used on the Sony website as the SKU:

The “role” field only applies to multi-disc games. There is a Play disc, which is required to be used first for the console to begin loading the game. Then, once the data is loaded, you switch to the “Data disc” for the console to load the rest of the game, or a game update. This is again reflected in the discTotal and discNumber fields.
Switching gears now to look at the binary section of the param.json, there’s unfortunately not a lot that’s been decoded yet.
The important fields are:
- The file’s “magic”,
SCECDF, which identify it as a Playstation SFO object - The product code, stored in bytes 0x260 through 0x360
- The file version, encoded in bytes 0x08 through 0xA
On my game disc, these are the values I got:
Product Code: 'PPSA07783'
File/SFO version: '2.1'
Part 2 coming soon..
Leave a comment