I've been messing with Ghidra and the EE plugin located here:
https://github.com/beardypig/ghidra-emotionengine
First, I looked at the HDDOSD 110 and how it scrambles the first 512 bytes of the resources.
https://gist.github.com/uyjulian/7048f061148774bf807570143dee1703
Quite a bit more complicated than I expected (a simple XOR with buffer). 0x20ab98 is the function with the asset loading code, and the header decoding code can be found in multiple places due to loop unrolling (I'm looking at 0x20b564).
I haven't able to nicely isolate this code. It would be nice to descramble this data without needing PS2 hardware.
If you want to take a look yourself, there's a "decrypted HDD OSD" somewhere. Alternatively, e-mail me.
Second, I looked at the OSDSYS from 2.30 to see how it decompresses the assets.
https://gist.github.com/uyjulian/14388e84b008a6433aa805f5d0436c87
0x2067f0 is the function with the asset loading code. 0x200ed0 appears to be the decompression code with first param as destination and second param as source.
Ghidra names some things CONCATxx. Does that mean bitwise or and/or left shift? Not sure about this.
There is a structure (usually starts with a pointer to string containing a font asset name) located at 0x2ad24c for HDDOSD and 0x27b478 for ROM:
0. address to string containing asset name
1. null
2. null
3. type:
* 1: file
* 2: ROMIMG
* 3: ?
* 4: file in ROMIMG
---
There's a "Legacy Dashboard Theme" on PS4 which replicates the look of the PS2 menu. If it's possible to extract and decrypt the files, I am interested in them.