webMAN-MOD
webMAN-MOD copied to clipboard
Using vISOs with pre-existing header files
Not sure how ps3netsrv works internally, but would it be possible to use the real header file from a dumped ISO (e.g. the header files inside IRDs) as the base of the vISO (or as the vISO itself)? This would benefit in particular hybrid-games (movie + game) which seem to expect the UDF file system to run certain features. It could also improve compatibility of a number of games without having to rebuild a decrypted ISO file with an IRD.
Some possible problems I could foresee with this feature, though:
- Games looking for Thumbs.db files like the Ghost Recon Trilogy (may need to manually check for hidden files in Windows machines, or add a special case which returns null bytes when looking for them).
- Missing files in general (in particular PS3UPDAT.PUP files, though maybe the server could return NULL bytes when it is requested, which would be similar to what wMM does when re-mapping the file to dev/null).
I'm not sure that using IRDs would improve the compatibility on games using vISO images, unless the game has hardcoded LBA checks like PSP or PS2.
The vISO works like this:
- PS3 send the mount command to ps3netsrv
- ps3netsrv checks if it is a folder or an ISO / CD
- If it is a folder, an ISO header is built in memory reading the content of the folder recursively.
- If the vISO is built in PS3 mode, the sectors 0 & 1 are filled with metadata used for disc authentication.
- A table of files, with path, file size and virtual sectors is built in memory. Only the header is built.
- The function VIsoFile::seek() tracks the pointer to the current sector in the table. It emulates the
disc r/w head
- The VisoFile::read() checks the pointer, find the files contained in the range of sectors being read and fill the buffers.
As you see, the virtual table generates its own LBAs. To use the ones in the IRD header, it would be required to parse the file structure to build the internal table to be used by VisoFile::read().
I don't think the games check for file attributes. Usually they only check if the file exist. So a file of 0 byte may work.
In regards to PS3UPDAT.PUP, I don't know of any game that require that file. If needed, the user can create a dummy PUP and enable NTFS compression on it, so they don't waste disk space.
BTW Today I updated ps3netsrv 20220228 to improve the performance reading vISO containing large files.