1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-04 06:54:33 +00:00

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>
This commit is contained in:
Tharo 2020-05-11 01:04:41 +01:00 committed by GitHub
parent 8e7ca2d497
commit 74a654ecae
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 182 additions and 385 deletions

View file

@ -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);
}

View file

@ -1,6 +1,5 @@
#include <global.h>
#include <ultra64/hardware.h>
#include <sched.h>
#include <vt.h>
#include <PR/os_cont.h>

View file

@ -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);

View file

@ -1,6 +1,5 @@
#include <ultra64.h>
#include <global.h>
#include <sched.h>
#pragma GLOBAL_ASM("asm/non_matchings/code/sched/func_800C82A0.s")

View file

@ -1,6 +1,5 @@
#include <ultra64.h>
#include <global.h>
#include <sched.h>
#include <vt.h>
#define MARKER_SOI 0xD8

View file

@ -1,6 +1,5 @@
#include <ultra64.h>
#include <global.h>
#include <sched.h>
void MsgEvent_SendNullTask() {
u32 pad[4];