The Playstation 3 isn’t released in the UK yet but I’m already working on tools based on what files I can get hold of.
The first (of hopefully many) is PSV Exporter.
When you play a Playstation 2 game on a Playstation 3 a ‘virtual’ PS2 save is created with the extension .PSV, this ultility allows you to extract the files, perfect for transferring your save back to the PS2 memorycard using a program such as uLaunchELF
As for adding files back to the .PSV file, a friend of mine told me recently that the file has a digital signature in it and this appears to be the case from the limited time I spent creating this tool. Therefore I’m opening up the work I’ve done with the hopes that the community can help finish mapping this format and we can eventually discover the key used for the digital signature (ala Xbox saves resigning)
Here’s the data structures I mapped within the file, updates and corrections are most welcome!
THeader = record
magic : array[0..3] of char;
unknown1 : integer; //Start of digital sig?
unknown2 : integer;
unknown3 : integer;
unknown4 : integer;
unknown5 : integer;
unknown6 : integer;
unknown7 : integer;
unknown8 : integer;
unknown9 : integer;
unknown10 : integer; //End of digital sig?
unknown11 : integer;
unknown12 : integer;
unknown13 : integer;
unknown14 : integer;
unknown15 : integer;
unknown16 : integer;
unknown17 : integer;
unknown18 : integer;
unknown19 : integer;
unknown20 : integer;
unknown21 : integer;
unknown22 : integer;
unknown23 : integer;
unknown24 : integer;
numberOfFiles : integer;
end;
TMainDirInfo = record
unknown1 : integer;
unknown2 : integer;
unknown3 : integer;
unknown4 : integer;
filesize : integer;
attribute : integer;
filename : array[0..31] of char;
end;
TFileInfo = record
unknown1 : integer;
unknown2 : integer;
unknown3 : integer;
unknown4 : integer;
filesize : integer;
attribute : integer;
filename : array[0..31] of char;
positionInFile : integer;
end;
The PSV file starts with the Header record, then the MainDirInfo record and then the FileInfo record repeated as many times as the number files indicated in the header. Directly following the last FileInfo record is the actual raw data.