mirror of https://github.com/zeldaret/oot.git
Decompile most of AudioMgr
This commit is contained in:
parent
51c85fe660
commit
9ee04cf092
|
@ -1,3 +1,10 @@
|
||||||
|
.rdata
|
||||||
|
glabel D_80144C80
|
||||||
|
# EUC-JP: オーディオマネージャが OS_SC_PRE_NMI_MSG を受け取りました | Audio manager received OS_SC_PRE_NMI_MSG
|
||||||
|
.asciz "オーディオマネージャが OS_SC_PRE_NMI_MSG を受け取りました\n"
|
||||||
|
.balign 4
|
||||||
|
|
||||||
|
.text
|
||||||
glabel func_800C3E40
|
glabel func_800C3E40
|
||||||
/* B3AFE0 800C3E40 27BDFFE8 */ addiu $sp, $sp, -0x18
|
/* B3AFE0 800C3E40 27BDFFE8 */ addiu $sp, $sp, -0x18
|
||||||
/* B3AFE4 800C3E44 AFA40018 */ sw $a0, 0x18($sp)
|
/* B3AFE4 800C3E44 AFA40018 */ sw $a0, 0x18($sp)
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
.rdata
|
||||||
|
glabel D_80144CBC
|
||||||
|
# EUC-JP: オーディオマネージャスレッド実行開始 | Start running audio manager thread
|
||||||
|
.asciz "オーディオマネージャスレッド実行開始\n"
|
||||||
|
.balign 4
|
||||||
|
|
||||||
|
.text
|
||||||
glabel func_800C3E70
|
glabel func_800C3E70
|
||||||
/* B3B010 800C3E70 27BDFFB8 */ addiu $sp, $sp, -0x48
|
/* B3B010 800C3E70 27BDFFB8 */ addiu $sp, $sp, -0x48
|
||||||
/* B3B014 800C3E74 AFB50028 */ sw $s5, 0x28($sp)
|
/* B3B014 800C3E74 AFB50028 */ sw $s5, 0x28($sp)
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
.include "macro.inc"
|
|
||||||
|
|
||||||
# assembler directives
|
|
||||||
.set noat # allow manual use of $at
|
|
||||||
.set noreorder # don't insert nops after branches
|
|
||||||
.set gp=64 # allow use of 64-bit general purposee registers
|
|
||||||
|
|
||||||
.section .rodata
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
|
|
||||||
glabel D_80144C80
|
|
||||||
.asciz "オーディオマネージャが OS_SC_PRE_NMI_MSG を受け取りました\n"
|
|
||||||
# EUC-JP: オーディオマネージャが OS_SC_PRE_NMI_MSG を受け取りました | Audio manager received OS_SC_PRE_NMI_MSG
|
|
||||||
.balign 4
|
|
||||||
|
|
||||||
glabel D_80144CBC
|
|
||||||
.asciz "オーディオマネージャスレッド実行開始\n"
|
|
||||||
# EUC-JP: オーディオマネージャスレッド実行開始 | Start running audio manager thread
|
|
||||||
.balign 4
|
|
|
@ -1495,12 +1495,13 @@ void THA_Init(TwoHeadArena* tha);
|
||||||
void THA_Ct(TwoHeadArena* tha, void* ptr, u32 size);
|
void THA_Ct(TwoHeadArena* tha, void* ptr, u32 size);
|
||||||
void THA_Dt(TwoHeadArena* tha);
|
void THA_Dt(TwoHeadArena* tha);
|
||||||
// ? func_800C3C20(?);
|
// ? func_800C3C20(?);
|
||||||
// ? func_800C3C80(?);
|
void func_800C3C80(AudioMgr* audioMgr);
|
||||||
// ? func_800C3CB8(?);
|
void func_800C3CB8(AudioMgr* audioMgr);
|
||||||
// ? func_800C3E40(?);
|
void func_800C3E40(AudioMgr* audioMgr);
|
||||||
// ? func_800C3FC4(?);
|
void func_800C3FC4(AudioMgr* audioMgr);
|
||||||
// ? func_800C3FEC(?);
|
void func_800C3E70(AudioMgr* audioMgr);
|
||||||
// ? func_800C3E70(?);
|
void func_800C3FC4(AudioMgr* audioMgr);
|
||||||
|
void func_800C3FEC(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedContext* sched, IrqMgr* irqMgr);
|
||||||
void TitleSetup_InitImpl(GameState* gameState);
|
void TitleSetup_InitImpl(GameState* gameState);
|
||||||
void TitleSetup_Destroy(GameState* gameState);
|
void TitleSetup_Destroy(GameState* gameState);
|
||||||
void TitleSetup_Init(GameState* gameState);
|
void TitleSetup_Init(GameState* gameState);
|
||||||
|
@ -1934,7 +1935,7 @@ void FaultDrawer_SetDefault();
|
||||||
// ? func_800E2BE0(?);
|
// ? func_800E2BE0(?);
|
||||||
// ? func_800E2CE0(?);
|
// ? func_800E2CE0(?);
|
||||||
// ? func_800E2FEC(?);
|
// ? func_800E2FEC(?);
|
||||||
// ? func_800E301C(?);
|
void func_800E301C(void* callback);
|
||||||
// ? func_800E3034(?);
|
// ? func_800E3034(?);
|
||||||
// ? func_800E3094(?);
|
// ? func_800E3094(?);
|
||||||
// ? func_800E3400(?);
|
// ? func_800E3400(?);
|
||||||
|
@ -2154,13 +2155,13 @@ void func_800F68BC(s8);
|
||||||
void func_800F6964(u16);
|
void func_800F6964(u16);
|
||||||
// ? func_800F6B68(?);
|
// ? func_800F6B68(?);
|
||||||
// ? func_800F6BB8(?);
|
// ? func_800F6BB8(?);
|
||||||
// ? func_800F6C14(?);
|
void func_800F6C14();
|
||||||
// ? func_800F6C34(?);
|
// ? func_800F6C34(?);
|
||||||
// ? func_800F6D58(?);
|
// ? func_800F6D58(?);
|
||||||
// ? func_800F6E7C(?);
|
// ? func_800F6E7C(?);
|
||||||
// ? func_800F6FB4(?);
|
// ? func_800F6FB4(?);
|
||||||
// ? func_800F70F8(?);
|
void func_800F70F8();
|
||||||
// ? func_800F711C(?);
|
void func_800F711C();
|
||||||
// ? func_800F7170(?);
|
// ? func_800F7170(?);
|
||||||
// ? func_800F71BC(?);
|
// ? func_800F71BC(?);
|
||||||
void func_800F7260(u16);
|
void func_800F7260(u16);
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include <ichain.h>
|
#include <ichain.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <regs.h>
|
#include <regs.h>
|
||||||
|
#include <sched.h>
|
||||||
|
|
||||||
#define SCREEN_WIDTH 320
|
#define SCREEN_WIDTH 320
|
||||||
#define SCREEN_HEIGHT 240
|
#define SCREEN_HEIGHT 240
|
||||||
|
@ -1217,6 +1218,36 @@ typedef struct {
|
||||||
/* 0x278 */ OSTime retraceTime;
|
/* 0x278 */ OSTime retraceTime;
|
||||||
} IrqMgr; // size = 0x280
|
} IrqMgr; // size = 0x280
|
||||||
|
|
||||||
|
// this is likely an existing struct (possibly for another manager), replace when that is found
|
||||||
|
typedef struct {
|
||||||
|
/* 0x0000 */ char unk_0[0x40];
|
||||||
|
/* 0x0040 */ OSMesgQueue* unk_40;
|
||||||
|
} Sub_AudioMgr_70; // size >= 0x44
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* 0x0000 */ IrqMgr* irqMgr;
|
||||||
|
/* 0x0004 */ SchedContext* sched;
|
||||||
|
/* 0x0008 */ OSMesg unk_8;
|
||||||
|
/* 0x000C */ char unk_C[0x04];
|
||||||
|
/* 0x0010 */ s32 unk_10;
|
||||||
|
/* 0x0014 */ s32 unk_14;
|
||||||
|
/* 0x0018 */ char unk_18[0x40];
|
||||||
|
/* 0x0058 */ OSMesgQueue* unk_58;
|
||||||
|
/* 0x005C */ UNK_PTR unk_5C;
|
||||||
|
/* 0x0060 */ char unk_60[0x10];
|
||||||
|
/* 0x0070 */ Sub_AudioMgr_70* unk_70;
|
||||||
|
/* 0x0074 */ OSMesgQueue unk_74;
|
||||||
|
/* 0x008C */ OSMesg unk_8C;
|
||||||
|
/* 0x0090 */ OSMesgQueue unk_90;
|
||||||
|
/* 0x00A8 */ OSMesg unk_A8;
|
||||||
|
/* 0x00AC */ OSMesgQueue unk_AC;
|
||||||
|
/* 0x00C4 */ OSMesg unk_C4;
|
||||||
|
/* 0x00C8 */ OSMesgQueue unk_C8;
|
||||||
|
/* 0x00E0 */ OSMesg unk_E0;
|
||||||
|
/* 0x00E4 */ char unk_E4[0x04];
|
||||||
|
/* 0x00E8 */ OSThread unk_E8;
|
||||||
|
} AudioMgr; // size = 0x298
|
||||||
|
|
||||||
struct ArenaNode;
|
struct ArenaNode;
|
||||||
|
|
||||||
typedef struct Arena {
|
typedef struct Arena {
|
||||||
|
|
2
spec
2
spec
|
@ -420,7 +420,7 @@ beginseg
|
||||||
include "build/asm/code_800C3C20.o"
|
include "build/asm/code_800C3C20.o"
|
||||||
include "build/data/code_800C3C20.data.o"
|
include "build/data/code_800C3C20.data.o"
|
||||||
include "build/src/code/audioMgr.o"
|
include "build/src/code/audioMgr.o"
|
||||||
include "build/data/audioMgr.rodata.o"
|
//include "build/data/audioMgr.rodata.o"
|
||||||
include "build/src/code/title_setup.o"
|
include "build/src/code/title_setup.o"
|
||||||
include "build/asm/game.o"
|
include "build/asm/game.o"
|
||||||
include "build/data/game.data.o"
|
include "build/data/game.data.o"
|
||||||
|
|
|
@ -1,16 +1,92 @@
|
||||||
#include <ultra64.h>
|
#include <ultra64.h>
|
||||||
#include <global.h>
|
#include <global.h>
|
||||||
|
#include <sched.h>
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/pad_800C3C70.s")
|
#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/pad_800C3C70.s")
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3C80.s")
|
//#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3C80.s")
|
||||||
|
void func_800C3C80(AudioMgr* audioMgr) {
|
||||||
|
Sub_AudioMgr_70* sub_70;
|
||||||
|
|
||||||
|
sub_70 = audioMgr->unk_70;
|
||||||
|
if (audioMgr->unk_70->unk_40 != NULL) {
|
||||||
|
osSendMesg(sub_70->unk_40, NULL, OS_MESG_BLOCK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// references un-decompiled data in sched .bss
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3CB8.s")
|
#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3CB8.s")
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3E40.s")
|
//#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3E40.s")
|
||||||
|
void func_800C3E40(AudioMgr* audioMgr) {
|
||||||
|
// Audio manager received OS_SC_PRE_NMI_MSG
|
||||||
|
osSyncPrintf("オーディオマネージャが OS_SC_PRE_NMI_MSG を受け取りました\n");
|
||||||
|
func_800F6C14();
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef NON_MATCHING
|
||||||
|
// minor regalloc (branches involving *msg swapped, s5 is unused but should be)
|
||||||
|
void func_800C3E70(AudioMgr* audioMgr) {
|
||||||
|
OSMesgQueue* queue1;
|
||||||
|
IrqMgrClient irqClient;
|
||||||
|
s16* msg;
|
||||||
|
|
||||||
|
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);
|
||||||
|
queue1 = &audioMgr->unk_74;
|
||||||
|
IrqMgr_AddClient(audioMgr->irqMgr, &irqClient, queue1);
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
osRecvMesg(queue1, (OSMesg*)&msg, OS_MESG_BLOCK);
|
||||||
|
if (*msg != 1) {
|
||||||
|
if (*msg != OS_SC_PRE_NMI_MSG) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
func_800C3CB8(audioMgr);
|
||||||
|
if (audioMgr->unk_74.validCount == 0) {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
do {
|
||||||
|
osRecvMesg(queue1, (OSMesg*)&msg, OS_MESG_BLOCK);
|
||||||
|
if (*msg != 1 && *msg == OS_SC_PRE_NMI_MSG) {
|
||||||
|
func_800C3E40(audioMgr);
|
||||||
|
}
|
||||||
|
} while (audioMgr->unk_74.validCount != 0);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
func_800C3E40(audioMgr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3E70.s")
|
#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3E70.s")
|
||||||
|
#endif
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3FC4.s")
|
//#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3FC4.s")
|
||||||
|
void func_800C3FC4(AudioMgr* audioMgr) {
|
||||||
|
osRecvMesg(&audioMgr->unk_C8, NULL, OS_MESG_BLOCK);
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3FEC.s")
|
//#pragma GLOBAL_ASM("asm/non_matchings/code/audioMgr/func_800C3FEC.s")
|
||||||
|
void func_800C3FEC(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, func_800C3E70, audioMgr, stack, pri);
|
||||||
|
osStartThread(&audioMgr->unk_E8);
|
||||||
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ StackEntry sSchedStackInfo;
|
||||||
StackEntry sAudioStackInfo;
|
StackEntry sAudioStackInfo;
|
||||||
StackEntry sPadMgrStackInfo;
|
StackEntry sPadMgrStackInfo;
|
||||||
StackEntry sIrqMgrStackInfo;
|
StackEntry sIrqMgrStackInfo;
|
||||||
u8 gAudioMgr[0x298]; // type should be AudioMgr
|
AudioMgr gAudioMgr;
|
||||||
OSMesgQueue sSiIntMsgQ;
|
OSMesgQueue sSiIntMsgQ;
|
||||||
OSMesg sSiIntMsgBuf[1];
|
OSMesg sSiIntMsgBuf[1];
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue