diff options
| author | Tharo <17233964+Thar0@users.noreply.github.com> | 2020-05-11 01:04:41 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-10 20:04:41 -0400 |
| commit | 74a654ecae4359177cee27d1fb83373aae8b1524 (patch) | |
| tree | 1a1ef0f02397a632c1cda8025facd33995b7f665 /src/code | |
| parent | 8e7ca2d497d41c00871de43b00bdf6e2380c70b1 (diff) | |
Decompile audioMgr (#124)
* Decompile most of AudioMgr
* Decompile most of audioMgr
* Decompile audioMgr
* Remove commented out rodata from spec
* Small cleanup
* Last function OK, renamed functions and removed asm
* Remove sched.h and audiomgr.h and include contents in z64.h
* Un-comment prototypes in functions.h
Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
* Remove prototypes from audioMgr.c
Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
Co-authored-by: Roman971 <32455037+Roman971@users.noreply.github.com>
Diffstat (limited to 'src/code')
| -rw-r--r-- | src/code/audioMgr.c | 107 | ||||
| -rw-r--r-- | src/code/graph.c | 1 | ||||
| -rw-r--r-- | src/code/main.c | 7 | ||||
| -rw-r--r-- | src/code/sched.c | 1 | ||||
| -rw-r--r-- | src/code/z_jpeg.c | 1 | ||||
| -rw-r--r-- | src/code/z_msgevent.c | 1 |
6 files changed, 103 insertions, 15 deletions
diff --git a/src/code/audioMgr.c b/src/code/audioMgr.c index 2372355de..e87813503 100644 --- a/src/code/audioMgr.c +++ b/src/code/audioMgr.c @@ -1,16 +1,109 @@ #include <ultra64.h> #include <global.h> -#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/pad_800C3C70.s") +void func_800C3C80(AudioMgr* audioMgr) { + Sub_AudioMgr_18* sub; -#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3C80.s") + sub = audioMgr->unk_70; + if (audioMgr->unk_70->unk_40 != NULL) { + osSendMesg(sub->unk_40, NULL, OS_MESG_BLOCK); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3CB8.s") +void AudioMgr_HandleRetrace(AudioMgr* audioMgr) { + Sub_AudioMgr_18* sub; -#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3E40.s") + if (SREG(20) > 0) { + audioMgr->unk_70 = NULL; + } + if (audioMgr->unk_70 != NULL) { + audioMgr->unk_8 = NULL; + audioMgr->unk_10 = 2; + audioMgr->unk_14 = 0; -#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3E70.s") + audioMgr->unk_18.unk_0 = audioMgr->unk_70->unk_0; + audioMgr->unk_18.unk_40 = &audioMgr->unk_AC; -#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3FC4.s") + audioMgr->unk_5C = NULL; + osSendMesg(&audioMgr->sched->cmdQ, &audioMgr->unk_8, OS_MESG_BLOCK); + func_800C95F8(audioMgr->sched); + } + D_8016A550 = osGetTime(); + if (SREG(20) >= 2) { + sub = NULL; + } else { + sub = func_800E4FE0(); + } + D_8016A558 += osGetTime() - D_8016A550; + D_8016A550 = 0; + if (audioMgr->unk_70 != NULL) { + osRecvMesg(&audioMgr->unk_AC, NULL, OS_MESG_BLOCK); + func_800C3C80(audioMgr); + } + audioMgr->unk_70 = sub; +} -#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3FEC.s") +void AudioMgr_HandlePRENMI(AudioMgr* audioMgr) { + // Audio manager received OS_SC_PRE_NMI_MSG + osSyncPrintf("オーディオマネージャが OS_SC_PRE_NMI_MSG を受け取りました\n"); + func_800F6C14(); +} + +void AudioMgr_ThreadEntry(void* arg0) { + AudioMgr* audioMgr; + IrqMgrClient irqClient; + s16* msg; + + audioMgr = (AudioMgr*)arg0; + msg = NULL; + // Start running audio manager thread + osSyncPrintf("オーディオマネージャスレッド実行開始\n"); + func_800F70F8(); + func_800E301C(DmaMgr_DmaCallback0); + func_800F711C(); + osSendMesg(&audioMgr->unk_C8, NULL, OS_MESG_BLOCK); + IrqMgr_AddClient(audioMgr->irqMgr, &irqClient, &audioMgr->unk_74); + + while (true) { + osRecvMesg(&audioMgr->unk_74, (OSMesg*)&msg, OS_MESG_BLOCK); + switch (*msg) { + case OS_SC_RETRACE_MSG: + AudioMgr_HandleRetrace(audioMgr); + while (audioMgr->unk_74.validCount != 0) { + osRecvMesg(&audioMgr->unk_74, (OSMesg*)&msg, OS_MESG_BLOCK); + switch (*msg) { + case OS_SC_RETRACE_MSG: + break; + case OS_SC_PRE_NMI_MSG: + AudioMgr_HandlePRENMI(audioMgr); + break; + } + } + break; + case OS_SC_PRE_NMI_MSG: + AudioMgr_HandlePRENMI(audioMgr); + break; + } + } +} + +void AudioMgr_Unlock(AudioMgr* audioMgr) { + osRecvMesg(&audioMgr->unk_C8, NULL, OS_MESG_BLOCK); +} + +void AudioMgr_Start(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedContext* sched, IrqMgr* irqMgr) { + bzero(audioMgr, sizeof(AudioMgr)); + + audioMgr->sched = sched; + audioMgr->irqMgr = irqMgr; + audioMgr->unk_70 = NULL; + + osCreateMesgQueue(&audioMgr->unk_AC, &audioMgr->unk_C4, 1); + osCreateMesgQueue(&audioMgr->unk_74, &audioMgr->unk_8C, 8); + osCreateMesgQueue(&audioMgr->unk_C8, &audioMgr->unk_E0, 1); + + osSendMesg(&audioMgr->unk_AC, NULL, OS_MESG_BLOCK); + + osCreateThread(&audioMgr->unk_E8, id, AudioMgr_ThreadEntry, audioMgr, stack, pri); + osStartThread(&audioMgr->unk_E8); +} diff --git a/src/code/graph.c b/src/code/graph.c index 68fccaca6..3071fa3a2 100644 --- a/src/code/graph.c +++ b/src/code/graph.c @@ -1,6 +1,5 @@ #include <global.h> #include <ultra64/hardware.h> -#include <sched.h> #include <vt.h> #include <PR/os_cont.h> diff --git a/src/code/main.c b/src/code/main.c index 38949d73c..dc9f26d94 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -1,6 +1,5 @@ #include <global.h> #include <vt.h> -#include <sched.h> s32 gScreenWidth = SCREEN_WIDTH; s32 gScreenHeight = SCREEN_HEIGHT; @@ -22,7 +21,7 @@ StackEntry sSchedStackInfo; StackEntry sAudioStackInfo; StackEntry sPadMgrStackInfo; StackEntry sIrqMgrStackInfo; -u8 gAudioMgr[0x298]; // type should be AudioMgr +AudioMgr gAudioMgr; OSMesgQueue sSiIntMsgQ; OSMesg sSiIntMsgBuf[1]; @@ -85,12 +84,12 @@ void Main(void* arg0) { IrqMgr_AddClient(&gIrqMgr, &irqClient, &irqMgrMsgQ); StackCheck_Init(&sAudioStackInfo, sAudioStack, sAudioStack + sizeof(sAudioStack), 0, 0x100, "audio"); - func_800C3FEC(&gAudioMgr, sAudioStack + sizeof(sAudioStack), 0xc, 0xa, &gSchedContext, &gIrqMgr); + AudioMgr_Start(&gAudioMgr, sAudioStack + sizeof(sAudioStack), 0xc, 0xa, &gSchedContext, &gIrqMgr); StackCheck_Init(&sPadMgrStackInfo, sPadMgrStack, sPadMgrStack + sizeof(sPadMgrStack), 0, 0x100, "padmgr"); PadMgr_Init(&gPadMgr, &sSiIntMsgQ, &gIrqMgr, 7, 0xe, &sIrqMgrStack); - func_800C3FC4(&gAudioMgr); + AudioMgr_Unlock(&gAudioMgr); StackCheck_Init(&sGraphStackInfo, sGraphStack, sGraphStack + sizeof(sGraphStack), 0, 0x100, "graph"); osCreateThread(&sGraphThread, 4, Graph_ThreadEntry, arg0, sGraphStack + sizeof(sGraphStack), 0xb); diff --git a/src/code/sched.c b/src/code/sched.c index b7306425d..a22b60ad2 100644 --- a/src/code/sched.c +++ b/src/code/sched.c @@ -1,6 +1,5 @@ #include <ultra64.h> #include <global.h> -#include <sched.h> #pragma GLOBAL_ASM("asm/non_matchings/code/sched/func_800C82A0.s") diff --git a/src/code/z_jpeg.c b/src/code/z_jpeg.c index c18a8c869..070cdadf7 100644 --- a/src/code/z_jpeg.c +++ b/src/code/z_jpeg.c @@ -1,6 +1,5 @@ #include <ultra64.h> #include <global.h> -#include <sched.h> #include <vt.h> #define MARKER_SOI 0xD8 diff --git a/src/code/z_msgevent.c b/src/code/z_msgevent.c index 8995189f7..c0fb5c897 100644 --- a/src/code/z_msgevent.c +++ b/src/code/z_msgevent.c @@ -1,6 +1,5 @@ #include <ultra64.h> #include <global.h> -#include <sched.h> void MsgEvent_SendNullTask() { u32 pad[4]; |
