Unrelated, I know you've already confirmed the multi-partition UMD GAME+MOVIE discs are most likely correct size in your original post, but out of curiosity if you have any on hand, could you provide the PFI for one of those too?
----------
Anyway:
sceUmdExecGetConfigurationCmd() - Sends the expected command 0x46
This function doesn't seem to exist in FW 6.60, at least not in
umdman.prx, so this is just what FW 3.52 does. (It's possible it maybe still lives on a different module, so it's worth trying regardless.)
Function that calls it creates a 0x36 byte buffer on the stack. The first 0x20 are meant for a different function call I'm pretty sure, but just for the sake of authenticity, I'm writing exactly how the function sets it up before calling.
- 0x00-0x10 - int32 x 4
- 0x20-0x28 - unk8 x 8 (it calls memset() with a pointer to 0x20 and writes the value 0xFF eight times)
- 0x30-0x32 - int16 x 1 (store 0x08)
- 0x32-0x34 - int16 x 1
- 0x34-0x36 - int8 x 2
(
Visualized)
sceUmdExecGetConfigurationCmd() is called with 3 arguments:
- $a0 - UMD drive returned by sceUmdManGetUmdDrive()
- $a1 - Pointer to 0x30 of that buffer
- $a2 - Pointer to 0x20 of that buffer
----------
Lastly:
sceUmdExecReadDiscInfoCmd() - Sends the expected command 0x51
While this function does exist in FW 6.60's
umdman.prx, there doesn't seem to be any function that calls it - so this is also just based off what FW 3.52 does and prepares before calling.
As with the function above, I'm pretty sure you can just create a 12 byte array, all
memset()'d to 0xFF and use that alone, but for the sake of authenticity - it creates a 0x2C byte buffer on the stack:
- 0x00-0x10 - int32 x 4
- 0x10-0x12 - int16 x 1
- 0x20-0x2C - unk8 x 12 (it calls memset() with a pointer to 0x20 and writes the value 0xFF 12 times
(
Visualized)
sceUmdExecReadDiscInfoCmd() is called with 3 arguments:
- $a0 - UMD drive returned by sceUmdManGetUmdDrive()
- $a1 - Number 12 (Likely the size of the buffer in the next arg)
- $a2 - Pointer to 0x20 of that buffer
----------
Random side note: The C library functions (at least the two that I've encountered -
strncmp(), and
memset()) seem to be unnamed in your asm dump. Instead they're generic
SysclibForKernel_NID() names, but luckily JPCSP has a more complete list of
resolved NID hashes which was useful in cases like these.