Avoid calling function wrappers when loading append ARs.

For some reason they cause issues. Should investigate later.
This commit is contained in:
Skyth 2024-12-28 20:03:49 +03:00
parent be55288222
commit 28f1a57c56

View file

@ -285,24 +285,27 @@ PPC_FUNC(sub_82E0B500)
stream.seekg(0, std::ios::end);
size_t arFileSize = stream.tellg();
void* arFileData = __HH_ALLOC(arFileSize);
guest_stack_var<std::pair<be<uint32_t>, be<uint32_t>>> arFileDataHolder;
arFileDataHolder->first = g_memory.MapVirtual(arFileData);
GuestToHostFunction<void>(sub_8241F200, &arFileDataHolder->second, arFileData);
void* arFileData = g_userHeap.Alloc(arFileSize);
stream.seekg(0, std::ios::beg);
stream.read(reinterpret_cast<char*>(arFileData), arFileSize);
stream.close();
auto arFileDataHolder = reinterpret_cast<be<uint32_t>*>(g_userHeap.Alloc(sizeof(uint32_t) * 2));
arFileDataHolder[0] = g_memory.MapVirtual(arFileData);
arFileDataHolder[1] = NULL;
ctx.r3 = r3;
ctx.r4 = r4;
ctx.r5 = r5;
ctx.r6.u32 = g_memory.MapVirtual(arFileDataHolder.get());
ctx.r6.u32 = g_memory.MapVirtual(arFileDataHolder);
ctx.r7.u32 = uint32_t(arFileSize);
ctx.r8 = r8;
__imp__sub_82E0B500(ctx, base);
g_userHeap.Free(arFileDataHolder);
g_userHeap.Free(arFileData);
return true;
}