From 199f0dd704faf42172308384fcf9f6151a84ff30 Mon Sep 17 00:00:00 2001 From: sum2012 Date: Wed, 1 Nov 2023 06:29:55 +0800 Subject: [PATCH] Record Atrac libersion Gripshift library version 0x101 ,crc 3dd5e32f --- Core/HLE/sceAtrac.cpp | 18 +++++++++++++++++- Core/HLE/sceAtrac.h | 3 ++- Core/HLE/sceKernelModule.cpp | 15 ++++++++++++--- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/Core/HLE/sceAtrac.cpp b/Core/HLE/sceAtrac.cpp index 86017681b6..680bb27345 100644 --- a/Core/HLE/sceAtrac.cpp +++ b/Core/HLE/sceAtrac.cpp @@ -657,9 +657,12 @@ const int PSP_NUM_ATRAC_IDS = 6; static bool atracInited = true; static Atrac *atracIDs[PSP_NUM_ATRAC_IDS]; static u32 atracIDTypes[PSP_NUM_ATRAC_IDS]; +static int atracLibVersion = 0; +static u32 atracLibCrc = 0; void __AtracInit() { atracInited = true; + INFO_LOG(ME, "AtracInit, atracLibVersion 0x%0x, atracLibcrc %x", atracLibVersion, atracLibCrc); memset(atracIDs, 0, sizeof(atracIDs)); // Start with 2 of each in this order. @@ -680,8 +683,13 @@ void __AtracInit() { #endif // USE_FFMPEG } +void __AtracLoadModule(int version, u32 crc) { + atracLibVersion = version; + atracLibCrc = crc; +} + void __AtracDoState(PointerWrap &p) { - auto s = p.Section("sceAtrac", 1); + auto s = p.Section("sceAtrac", 1, 2); if (!s) return; @@ -697,6 +705,14 @@ void __AtracDoState(PointerWrap &p) { } } DoArray(p, atracIDTypes, PSP_NUM_ATRAC_IDS); + if (s < 2) { + atracLibVersion = 0; + atracLibCrc = 0; + } + else { + Do(p, atracLibVersion); + Do(p, atracLibCrc); + } } void __AtracShutdown() { diff --git a/Core/HLE/sceAtrac.h b/Core/HLE/sceAtrac.h index 1f48b48cef..f0914c1c63 100644 --- a/Core/HLE/sceAtrac.h +++ b/Core/HLE/sceAtrac.h @@ -90,4 +90,5 @@ typedef struct u32 _AtracAddStreamData(int atracID, u32 bufPtr, u32 bytesToAdd); u32 _AtracDecodeData(int atracID, u8* outbuf, u32 outbufPtr, u32 *SamplesNum, u32* finish, int *remains); -int _AtracGetIDByContext(u32 contextAddr); \ No newline at end of file +int _AtracGetIDByContext(u32 contextAddr); +void __AtracLoadModule(int version, u32 crc); diff --git a/Core/HLE/sceKernelModule.cpp b/Core/HLE/sceKernelModule.cpp index 5b730160d5..1c850693a6 100644 --- a/Core/HLE/sceKernelModule.cpp +++ b/Core/HLE/sceKernelModule.cpp @@ -61,6 +61,7 @@ #include "Core/HLE/sceKernelMemory.h" #include "Core/HLE/sceMpeg.h" #include "Core/HLE/scePsmf.h" +#include "Core/HLE/sceAtrac.h" #include "Core/HLE/sceIo.h" #include "Core/HLE/KernelWaitHelpers.h" #include "Core/ELF/ParamSFO.h" @@ -1185,9 +1186,13 @@ static PSPModule *__KernelLoadELFFromPtr(const u8 *ptr, size_t elfSize, u32 load if (!strcmp(head->modname, "sceMpeg_library")) { __MpegLoadModule(ver, module->crc); } - if (!strcmp(head->modname, "scePsmfP_library") || !strcmp(head->modname, "scePsmfPlayer")) { - __PsmfPlayerLoadModule(head->devkitversion, module->crc); + if (!strcmp(head->modname, "scePsmfP_library") || !strcmp(head->modname, "scePsmfPlayer") || !strcmp(head->modname, "libpsmfplayer") || !strcmp(head->modname, "psmf_jk") || !strcmp(head->modname, "jkPsmfP_librar")) { + __PsmfPlayerLoadModule(devkitVersion, module->crc); } + if (!strcmp(head->modname, "sceATRAC3plus_Library")) { + __AtracLoadModule(ver, module->crc); + } + } const u8 *in = ptr; @@ -1631,9 +1636,13 @@ static PSPModule *__KernelLoadELFFromPtr(const u8 *ptr, size_t elfSize, u32 load if (!strcmp(modinfo->name, "sceMpeg_library")) { __MpegLoadModule(modinfo->moduleVersion, module->crc); } - if (!strcmp(modinfo->name, "scePsmfP_library") || !strcmp(modinfo->name, "scePsmfPlayer")) { + if (!strcmp(modinfo->name, "scePsmfP_library") || !strcmp(modinfo->name, "scePsmfPlayer") || !strcmp(modinfo->name, "libpsmfplayer") || !strcmp(modinfo->name, "psmf_jk") || !strcmp(modinfo->name, "jkPsmfP_librar")){ __PsmfPlayerLoadModule(devkitVersion, module->crc); } + if (!strcmp(modinfo->name, "sceATRAC3plus_Library")) { + __AtracLoadModule(modinfo->moduleVersion, module->crc); + } + } System_Notify(SystemNotification::SYMBOL_MAP_UPDATED);