diff options
| author | hatal175 <hatal175@users.noreply.github.com> | 2023-10-15 13:27:52 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-10-15 03:27:52 -0700 |
| commit | 3625dae703409951352e33d4ef33691268ca91d0 (patch) | |
| tree | 4f436354d1077093b771a05e7cde68b70185101d /libs/JSystem/JAudio2/JASTaskThread.cpp | |
| parent | 69e9173e0f7b8ec09fd7b1a42493dba4d3626029 (diff) | |
JASSoundParams imported. Work on JASTaskThread (#1961)
Diffstat (limited to 'libs/JSystem/JAudio2/JASTaskThread.cpp')
| -rw-r--r-- | libs/JSystem/JAudio2/JASTaskThread.cpp | 154 |
1 files changed, 103 insertions, 51 deletions
diff --git a/libs/JSystem/JAudio2/JASTaskThread.cpp b/libs/JSystem/JAudio2/JASTaskThread.cpp index daf2e8d525..5013df614c 100644 --- a/libs/JSystem/JAudio2/JASTaskThread.cpp +++ b/libs/JSystem/JAudio2/JASTaskThread.cpp @@ -4,16 +4,12 @@ // #include "JSystem/JAudio2/JASTaskThread.h" +#include "JSystem/JAudio2/JASCalc.h" +#include "JSystem/JAudio2/JASCriticalSection.h" +#include "JSystem/JKernel/JKRSolidHeap.h" #include "dol2asm.h" #include "dolphin/os/OSInterrupt.h" - -// -// Types: -// - -struct JASCalc { - /* 8028F354 */ void bcopy(void const*, void*, u32); -}; +#include "dolphin/os/OS.h" // // Forward References: @@ -45,7 +41,6 @@ extern "C" void _savegpr_28(); extern "C" void _restgpr_26(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); -extern "C" extern u8 JASDram[4]; extern "C" u8 sSystemHeap__7JKRHeap[4]; // @@ -62,16 +57,25 @@ SECTION_DATA extern void* __vt__13JASTaskThread[4] = { }; /* 8028F6C4-8028F724 28A004 0060+00 0/0 1/1 0/0 .text __ct__13JASTaskThreadFiiUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JASTaskThread::JASTaskThread(int param_0, int param_1, u32 param_2) { - nofralloc -#include "asm/JSystem/JAudio2/JASTaskThread/__ct__13JASTaskThreadFiiUl.s" +JASTaskThread::JASTaskThread(int param_0, int param_1, u32 param_2) : JKRThread(JASDram, param_2, param_1, param_0) { + field_0x84 = false; + OSInitThreadQueue(&mpThreadQueue); } -#pragma pop /* 8028F724-8028F850 28A064 012C+00 1/0 0/0 0/0 .text __dt__13JASTaskThreadFv */ +// vtable maybe +#ifdef NONMATCHING +JASTaskThread::~JASTaskThread() { + OSMessage msg; + BOOL received; + waitmsg: + msg = waitMessage(&received); + if (!received) return; + u32 heap = JASKernel::getCommandHeap(); + ((ThreadMemPool*)msg)->free((void*)heap); + goto waitmsg; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -81,49 +85,93 @@ extern "C" asm void __dt__13JASTaskThreadFv() { #include "asm/JSystem/JAudio2/JASTaskThread/__dt__13JASTaskThreadFv.s" } #pragma pop +#endif /* 8028F850-8028F9EC 28A190 019C+00 1/1 0/0 0/0 .text allocCallStack__13JASTaskThreadFPFPv_vPCvUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASTaskThread::allocCallStack(void (*param_0)(void*), void const* param_1, u32 param_2) { - nofralloc -#include "asm/JSystem/JAudio2/JASTaskThread/allocCallStack__13JASTaskThreadFPFPv_vPCvUl.s" +void* JASTaskThread::allocCallStack(void (*param_0)(void*), void const* param_1, u32 param_2) { + ThreadMemPool* heap; + u32 size = param_2 + 8; + heap = + (ThreadMemPool*)JASKernel::getCommandHeap(); + JASThreadCallStack *callStack = (JASThreadCallStack*) heap->alloc(size); + if (callStack == NULL) { + return NULL; + } + callStack->field_0x4 = 1; + JASCalc::bcopy(param_1, callStack->field_0x8.buffer, param_2); + callStack->mRunFunc = param_0; + return callStack; } -#pragma pop /* 8028F9EC-8028FB5C 28A32C 0170+00 1/1 0/0 0/0 .text allocCallStack__13JASTaskThreadFPFPv_vPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASTaskThread::allocCallStack(void (*param_0)(void*), void* param_1) { - nofralloc -#include "asm/JSystem/JAudio2/JASTaskThread/allocCallStack__13JASTaskThreadFPFPv_vPv.s" +void* JASTaskThread::allocCallStack(void (*runFunc)(void*), void* param_1) { + ThreadMemPool* heap; + JASThreadCallStack *callStack; + heap = + (ThreadMemPool*)JASKernel::getCommandHeap(); + callStack = (JASThreadCallStack*)heap->alloc(0xc); + if (callStack == NULL) { + return NULL; + } + callStack->field_0x4 = 0; + callStack->field_0x8.pBuffer = param_1; + callStack->mRunFunc = runFunc; + return callStack; } -#pragma pop /* 8028FB5C-8028FC54 28A49C 00F8+00 0/0 6/6 0/0 .text sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void const* param_1, u32 param_2) { - nofralloc -#include "asm/JSystem/JAudio2/JASTaskThread/sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl.s" +int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void const* param_1, u32 param_2) { + void* pvVar1; + + pvVar1 = allocCallStack(param_0, param_1, param_2); + if (pvVar1 == NULL) { + return 0; + } + int iVar2 = sendMessage(pvVar1); + if (iVar2 == 0) { + u32 heap = JASKernel::getCommandHeap(); + ((ThreadMemPool*)pvVar1)->free((void*)heap); + } + return iVar2; } -#pragma pop /* 8028FC54-8028FD4C 28A594 00F8+00 0/0 3/3 0/0 .text sendCmdMsg__13JASTaskThreadFPFPv_vPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASTaskThread::sendCmdMsg(void (*param_0)(void*), void* param_1) { - nofralloc -#include "asm/JSystem/JAudio2/JASTaskThread/sendCmdMsg__13JASTaskThreadFPFPv_vPv.s" +int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void* param_1) { + void* pvVar1; + + pvVar1 = allocCallStack(param_0, param_1); + if (pvVar1 == NULL) { + return 0; + } + int iVar2 = sendMessage(pvVar1); + if (iVar2 == 0) { + u32 heap = JASKernel::getCommandHeap(); + ((ThreadMemPool*)pvVar1)->free((void*)heap); + } + return iVar2; } -#pragma pop /* 8028FD4C-8028FE88 28A68C 013C+00 1/0 0/0 0/0 .text run__13JASTaskThreadFv */ +// Regalloc +#ifdef NONMATCHING +void JASTaskThread::run() { + i_OSInitFastCast(); + do { + JASThreadCallStack* ppcVar1 = (JASThreadCallStack*)waitMessageBlock(); + if (field_0x84) { + OSSleepThread(&mpThreadQueue); + } + if (ppcVar1->field_0x4) { + ppcVar1->mRunFunc(ppcVar1->field_0x8.buffer); + } else { + ppcVar1->mRunFunc(ppcVar1->field_0x8.pBuffer); + } + u32 heap = JASKernel::getCommandHeap(); + ((ThreadMemPool*)ppcVar1)->free((void*)heap); + } while (true); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -132,13 +180,17 @@ asm void JASTaskThread::run() { #include "asm/JSystem/JAudio2/JASTaskThread/run__13JASTaskThreadFv.s" } #pragma pop +#endif /* 8028FE88-8028FEFC 28A7C8 0074+00 0/0 1/1 0/0 .text pause__13JASTaskThreadFb */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JASTaskThread::pause(bool param_0) { - nofralloc -#include "asm/JSystem/JAudio2/JASTaskThread/pause__13JASTaskThreadFb.s" +void JASTaskThread::pause(bool param_0) { + JASCriticalSection aJStack_14; + if (param_0) { + field_0x84 = 1; + } else { + if (field_0x84) { + OSWakeupThread(&mpThreadQueue); + } + field_0x84 = 0; + } } -#pragma pop |
