diff --git a/docs/dev/debt/libSceAppContent.md b/docs/dev/debt/libSceAppContent.md index 969273f4e6..d511282b57 100644 --- a/docs/dev/debt/libSceAppContent.md +++ b/docs/dev/debt/libSceAppContent.md @@ -18,7 +18,8 @@ - [libSceAppContent pending exports](../../../core/libs/prx/libSceAppContent/Export.cpp) - 8 named callable exports are listed in the [PS5 3.20 export table](https://github.com/DNNDHH/PS5-3.20_Libs/blob/b2a77c09cd71c01f34c790cfbe98c751a13262ad/libSceAppContent.c) and were cross-checked against the same module in PS5 firmware 13.60. Their signatures and behaviour are unverified; the declarations use the no-parameter unknown-signature convention and throw through `NotImplemented_nid_no_patch`. ### Functional -- [sceAppContentGetDownloadedStoreCountry](../../../core/libs/prx/libSceAppContent/Export.cpp) (libSceAppContent) - the firmware 4.03 `libSceAppContent.sprx` body is a thin RPC client: initialization guard, null-parameter checks, an entitlement-label padding gate at SDK 0x01500000, then a vtable call marshalling a system-service request (selector `0x20005`, request `{serviceLabel}`, a 0x14-byte label input and a 0x18-byte reply buffer) and translating the reply status into the `0x80d9xxxx` family; its translator passes `0x80d91000` GET_STORE_COUNTRY through unchanged. The export signature is thunk-verified (`uint32_t serviceLabel, const NpUnifiedEntitlementLabel* entitlementLabel, void* storeCountry`; the former `()` declaration was an inventory placeholder). No system service exists on host, so after the verified checks it answers `GET_STORE_COUNTRY`, the dedicated error the firmware translator reserves for this query; the real service replies and the 0x18-byte reply layout are unverified. +- [sceAppContentGetDownloadedStoreCountry](../../../core/libs/prx/libSceAppContent/Export.cpp) (libSceAppContent) - the firmware 4.03 `libSceAppContent.sprx` body (SHA-256 `36039805f77483b32861b7936ddcd859708b764682984a4625cb7f8d1efdabc4`) is a thin RPC client: initialization guard, null-parameter checks, an entitlement-label padding gate at SDK 0x01500000, then a vtable call marshalling a system-service request (selector `0x20005`, `{serviceLabel}` + a 0x14-byte label input + a 0x18-byte reply buffer) and translating the reply status into the `0x80d9xxxx` family; the translator passes `0x80d91000` GET_STORE_COUNTRY through unchanged. + - The export signature is thunk-verified (`uint32_t serviceLabel, const NpUnifiedEntitlementLabel* entitlementLabel, void* storeCountry`); the body was not compared with 13.60 — its export inventory establishes symbol presence only. With no host system service the export answers `GET_STORE_COUNTRY` after the verified checks as the chosen fallback for an absent service, not a measured native result; the real service replies and the 0x18-byte reply layout are unverified. - [Initialization](../../../core/libs/prx/libSceAppContent/Export.cpp) - service readiness and boot attributes are not modeled; successful initialization returns a zero boot record. Initialization-state guards, SDK 0x01500000 repeated-initialization errors and reserved-field checks are recovered. SDK-dependent service-error translation remains incomplete. - [Additional content](../../../core/libs/prx/libSceAppContent/Export.cpp) (libSceAppContent) is not installed or mounted: `sceAppContentAddcontMount` answers `NOT_FOUND` for every entitlement label and `sceAppContentAddcontUnmount` for every mount point, as no add-content mount is ever handed out; `sceAppContentGetAddcontInfo` answers `DRM_NO_ENTITLEMENT` for every label and `sceAppContentGetAddcontInfoList` reports 0 entries; `sceAppContentAddcontEnqueueDownload` answers `PARAMETER` for a null label and `NOT_FOUND` otherwise, since no download is ever queued; `sceAppContentAddcontDelete` answers `PARAMETER` for a null label and `NOT_FOUND` otherwise, since no additional content is ever installed. `sceAppContentGetAddcontDownloadProgress` answers `PARAMETER` for a null label or progress and `NOT_FOUND` otherwise, as [dlc_emu](https://github.com/drakmor/dlc_emu/blob/fcf69b16d46a9850578bce19dc2c1b4dc867cbb5/src/dlc_modules/dlc_content.cpp#L2328-L2341) does for a label that is not installed additional content, and never writes the progress. Its 16-byte layout (`DataSize`, then `DownloadedSize`, both 64-bit) follows [SharpProspero](https://github.com/SvenGDK/SharpProspero/blob/5dfdb4b0b166e83dc9ae275001afb695f12c7174/src/SharpProspero/Interop/AppContent/AppContent.cs#L45-L54) and is unused here. The signatures of `sceAppContentAddcontEnqueueDownload` and `sceAppContentGetAddcontDownloadProgress` follow [SharpProspero](https://github.com/SvenGDK/SharpProspero/blob/5dfdb4b0b166e83dc9ae275001afb695f12c7174/src/SharpProspero/Interop/AppContent/AppContent.cs#L140-L148), and the signature of `sceAppContentAddcontDelete` follows [dlc_emu](https://github.com/drakmor/dlc_emu/blob/fcf69b16d46a9850578bce19dc2c1b4dc867cbb5/src/dlc_modules/dlc_content.h#L91-L92); dlc_emu is not a console measurement and no console source gives the error codes, so the signatures and the error codes are unverified