summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authorTharo <17233964+Thar0@users.noreply.github.com>2020-05-11 01:04:41 +0100
committerGitHub <noreply@github.com>2020-05-10 20:04:41 -0400
commit74a654ecae4359177cee27d1fb83373aae8b1524 (patch)
tree1a1ef0f02397a632c1cda8025facd33995b7f665 /src/code
parent8e7ca2d497d41c00871de43b00bdf6e2380c70b1 (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.c107
-rw-r--r--src/code/graph.c1
-rw-r--r--src/code/main.c7
-rw-r--r--src/code/sched.c1
-rw-r--r--src/code/z_jpeg.c1
-rw-r--r--src/code/z_msgevent.c1
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];