diff --git a/Core/HLE/sceKernelModule.cpp b/Core/HLE/sceKernelModule.cpp index a8815ea545..1e683ff7d8 100644 --- a/Core/HLE/sceKernelModule.cpp +++ b/Core/HLE/sceKernelModule.cpp @@ -1802,9 +1802,27 @@ u32 sceKernelQueryModuleInfo(u32 uid, u32 infoAddr) return 0; } -u32 sceKernelGetModuleIdList(u32 resultBuffer, u32 resultBufferSize,u32 idCountAddr) +u32 sceKernelGetModuleIdList(u32 resultBuffer, u32 resultBufferSize, u32 idCountAddr) { - ERROR_LOG_REPORT(SCEMODULE, "UNIMPL sceKernelGetModuleIdList(%08x, %i,%08x)", resultBuffer, resultBufferSize, idCountAddr); + ERROR_LOG(SCEMODULE, "UNTESTED sceKernelGetModuleIdList(%08x, %i, %08x)", resultBuffer, resultBufferSize, idCountAddr); + + int idCount = 0; + int resultBufferOffset = 0; + + u32 error; + for (auto mod = loadedModules.begin(), modend = loadedModules.end(); mod != modend; ++mod) { + Module *module = kernelObjects.Get(*mod, error); + if (!module->isFake) { + if (resultBufferOffset < resultBufferSize) { + Memory::Write_U32(module->GetUID(), resultBuffer + resultBufferOffset); + resultBufferOffset += 4; + } + idCount++; + } + } + + Memory::Write_U32(idCount, idCountAddr); + return 0; }