mirror of https://github.com/zeldaret/mm.git
AudioMgr OK and Mostly Documented (#208)
* AudioMgr OK * Cleanup * Improve naming from PR Feedback
This commit is contained in:
parent
594a3ceaff
commit
7b154c23e1
|
|
@ -37,8 +37,8 @@ void* Yaz0_FirstDMA(void);
|
|||
void* Yaz0_NextDMA(void* curSrcPos);
|
||||
s32 Yaz0_DecompressImpl(u8* hdr, u8* dst);
|
||||
void Yaz0_Decompress(u32 romStart, void* dst, u32 size);
|
||||
void IrqMgr_AddClient(IrqMgr* irqmgr, OSMesgQueueListNode* param_2, OSMesgQueue* param_3);
|
||||
void IrqMgr_RemoveClient(IrqMgr* irqmgr, OSMesgQueueListNode* remove);
|
||||
void IrqMgr_AddClient(IrqMgr* irqmgr, IrqMgrClient* add, OSMesgQueue* msgQ);
|
||||
void IrqMgr_RemoveClient(IrqMgr* irqmgr, IrqMgrClient* remove);
|
||||
void IrqMgr_SendMesgForClient(IrqMgr* irqmgr, OSMesg msg);
|
||||
void IrqMgr_JamMesgForClient(IrqMgr* irqmgr, OSMesg msg);
|
||||
void IrqMgr_HandlePreNMI(IrqMgr* irqmgr);
|
||||
|
|
@ -174,7 +174,7 @@ void func_800863AC(u32 param_1, s32 param_2, s32 param_3, UNK_PTR param_4);
|
|||
// void func_800864EC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
|
||||
// void func_80086588(void);
|
||||
void StartHeap_Init(u32 base, u32 size);
|
||||
s32 func_80086620(OSMesgQueue* param_1, PadmgrThreadStruct* param_2, OSContStatus* param_3);
|
||||
s32 func_80086620(OSMesgQueue* param_1, PadMgr* param_2, OSContStatus* param_3);
|
||||
// void func_80086760(void);
|
||||
// void func_80086794(void);
|
||||
// void func_800867B4(void);
|
||||
|
|
@ -3143,12 +3143,12 @@ void THA_Init(TwoHeadArena* tha);
|
|||
void THA_Ct(TwoHeadArena* tha, void* ptr, u32 size);
|
||||
void THA_Dt(TwoHeadArena* tha);
|
||||
void func_80172BC0(void);
|
||||
void func_80172C30(AudioThreadStruct* audio);
|
||||
void func_80172C68(AudioThreadStruct* audio);
|
||||
// void Audio_Stop(void);
|
||||
void Audio_ThreadEntry(AudioThreadStruct* audio);
|
||||
void Audio_WaitForInit(AudioThreadStruct* param_1);
|
||||
void Audio_Start(AudioThreadStruct* audio, s32* audioThreadStackEnd, OSPri pri, OSId id, SchedThreadStruct* sched, IrqMgr* irq);
|
||||
void func_80172C30(AudioMgr* audioMgr);
|
||||
void AudioMgr_HandleRetrace(AudioMgr* audioMgr);
|
||||
void AudioMgr_HandlePRENMI(AudioMgr* audioMgr);
|
||||
void AudioMgr_ThreadEntry(void* arg);
|
||||
void AudioMgr_Unlock(AudioMgr* audioMgr);
|
||||
void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedContext* sched, IrqMgr* irqMgr);
|
||||
void TitleSetup_GameStateResetContext(void);
|
||||
void TitleSetup_InitImpl(GameState* gameState);
|
||||
void TitleSetup_Destroy(GameState* gameState);
|
||||
|
|
@ -3223,32 +3223,32 @@ void Padmgr_CalcStickEdges(Input* input);
|
|||
void func_80175E68(Input* input, s32 param_2);
|
||||
void Padmgr_GetInput(Input* input, s32 param_2);
|
||||
void Padmgr_GetInput2(Input* input, s32 param_2);
|
||||
void Padmgr_ThreadEntry(PadmgrThreadStruct* padmgr);
|
||||
void Padmgr_ThreadEntry(PadMgr* padmgr);
|
||||
void Padmgr_Start(OSMesgQueue* siEventCallbackQueue, IrqMgr* irqmgr, OSId threadId, OSPri threadPri, void* stack);
|
||||
// void func_80176280(void);
|
||||
// void func_80176314(void);
|
||||
void Sched_Nop80176364(SchedThreadStruct* sched);
|
||||
void func_80176370(SchedThreadStruct* sched);
|
||||
void func_80176394(SchedThreadStruct* sched);
|
||||
void func_801764F0(SchedThreadStruct* sched);
|
||||
void func_8017668C(SchedThreadStruct* sched, UNK_PTR puParm2);
|
||||
void Sched_Nop80176364(SchedContext* sched);
|
||||
void func_80176370(SchedContext* sched);
|
||||
void func_80176394(SchedContext* sched);
|
||||
void func_801764F0(SchedContext* sched);
|
||||
void func_8017668C(SchedContext* sched, UNK_PTR puParm2);
|
||||
// void func_801766F0(void);
|
||||
// void func_80176748(void);
|
||||
// void func_801767B8(void);
|
||||
// void func_801768E0(void);
|
||||
// void func_8017691C(void);
|
||||
// void func_80176988(void);
|
||||
void func_80176B34(SchedThreadStruct* sched);
|
||||
void func_80176C24(SchedThreadStruct* sched);
|
||||
void func_80176CF4(SchedThreadStruct* sched);
|
||||
void func_80176F2C(SchedThreadStruct* sched);
|
||||
void func_80177018(SchedThreadStruct* sched);
|
||||
void func_8017703C(SchedThreadStruct* sched);
|
||||
void func_80177060(SchedThreadStruct* sched);
|
||||
void func_80177084(SchedThreadStruct* sched);
|
||||
void Sched_ThreadEntry(SchedThreadStruct* sched);
|
||||
void func_80176B34(SchedContext* sched);
|
||||
void func_80176C24(SchedContext* sched);
|
||||
void func_80176CF4(SchedContext* sched);
|
||||
void func_80176F2C(SchedContext* sched);
|
||||
void Sched_SendEntryMsg(SchedContext* sched);
|
||||
void func_8017703C(SchedContext* sched);
|
||||
void func_80177060(SchedContext* sched);
|
||||
void func_80177084(SchedContext* sched);
|
||||
void Sched_ThreadEntry(SchedContext* sched);
|
||||
// void func_80177280(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5, UNK_TYPE1 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11, UNK_TYPE4 param_12);
|
||||
// void Sched_Start(SchedThreadStruct* sched, void* stack, OSPri pri, UNK_TYPE4 param_4, UNK_TYPE4 param_5, IrqMgr* irqmgrStruct);
|
||||
// void Sched_Start(SchedContext* sched, void* stack, OSPri pri, UNK_TYPE4 param_4, UNK_TYPE4 param_5, IrqMgr* irqmgrStruct);
|
||||
// void func_80177390(void);
|
||||
void func_801773A0(void* arg0);
|
||||
void func_801773C4(void* arg0);
|
||||
|
|
@ -3644,7 +3644,7 @@ s32 func_80185F90(u32 param_1);
|
|||
// void func_8019075C(void);
|
||||
// void func_8019077C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
|
||||
// void func_80190B08(void);
|
||||
// void func_80190B38(void);
|
||||
void func_80190B38(void* callback);
|
||||
// void func_80190B50(void);
|
||||
// void func_80190BB0(void);
|
||||
// void func_80190F50(void);
|
||||
|
|
@ -3676,7 +3676,7 @@ s32 func_80185F90(u32 param_1);
|
|||
// void func_80192AE8(void);
|
||||
// void func_80192B54(void);
|
||||
// void func_80192BAC(void);
|
||||
// void func_80192BE0(void);
|
||||
AudioTask* func_80192BE0(void);
|
||||
// void func_80192C00(void);
|
||||
// void func_8019319C(void);
|
||||
// void func_801936D8(void);
|
||||
|
|
@ -3967,7 +3967,7 @@ void audio_setBGM(u32 bgmID);
|
|||
// void func_801A4348(void);
|
||||
// void func_801A4380(void);
|
||||
// void func_801A4428(void);
|
||||
// void func_801A44A4(void);
|
||||
void Audio_PreNMI(void);
|
||||
// void func_801A44C4(void);
|
||||
// void func_801A44D4(void);
|
||||
// void func_801A46F8(void);
|
||||
|
|
@ -3977,9 +3977,9 @@ void audio_setBGM(u32 bgmID);
|
|||
// void func_801A48E0(void);
|
||||
// void func_801A4A28(void);
|
||||
// void func_801A4B80(void);
|
||||
// void func_801A4C30(void);
|
||||
void func_801A4C30(void);
|
||||
// void func_801A4C54(void);
|
||||
// void func_801A4D00(void);
|
||||
void func_801A4D00(void);
|
||||
// void func_801A4D50(void);
|
||||
// void func_801A4DA4(void);
|
||||
// void func_801A4DF4(void);
|
||||
|
|
|
|||
|
|
@ -1669,7 +1669,7 @@ extern u32 D_801D1514[3];
|
|||
extern s32 gScreenWidth;
|
||||
extern s32 gScreenHeight;
|
||||
// extern UNK_TYPE4 startHeapSize;
|
||||
extern PadmgrThreadStruct* padmgrContext;
|
||||
extern PadMgr* padmgrContext;
|
||||
// extern UNK_TYPE4 controllerInputsCaptured;
|
||||
// extern UNK_TYPE4 D_801D1538;
|
||||
extern UNK_PTR D_801D1540;
|
||||
|
|
@ -3443,8 +3443,8 @@ extern u64 lastRenderFrameTimestamp;
|
|||
extern OSMesgQueue siEventCallbackQueue;
|
||||
extern OSMesg siEventCallbackBuffer[1];
|
||||
extern u32 gSegments[NUM_SEGMENTS];
|
||||
extern SchedThreadStruct schedContext;
|
||||
extern OSMesgQueueListNode mainIrqmgrCallbackNode;
|
||||
extern SchedContext schedContext;
|
||||
extern IrqMgrClient mainIrqmgrCallbackNode;
|
||||
extern OSMesgQueue mainIrqmgrCallbackQueue;
|
||||
extern OSMesg mainIrqCallbackBuffer[60];
|
||||
extern OSThread graphOSThread;
|
||||
|
|
@ -3456,8 +3456,8 @@ extern StackEntry graphStackEntry;
|
|||
extern StackEntry schedStackEntry;
|
||||
extern StackEntry audioStackEntry;
|
||||
extern StackEntry padmgrStackEntry;
|
||||
extern AudioThreadStruct audioContext;
|
||||
extern PadmgrThreadStruct D_801FB620;
|
||||
extern AudioMgr audioContext;
|
||||
extern PadMgr D_801FB620;
|
||||
// extern UNK_TYPE1 D_801FBAA0;
|
||||
// extern UNK_TYPE1 D_801FBAB0;
|
||||
// extern UNK_TYPE1 D_801FBAB4;
|
||||
|
|
|
|||
|
|
@ -1221,8 +1221,6 @@ struct FileChooseContext {
|
|||
/* 0x24550 */ s16 unk_24550;
|
||||
}; // size = 0x24558
|
||||
|
||||
typedef struct AudioThreadStruct AudioThreadStruct;
|
||||
|
||||
typedef struct GlobalContext GlobalContext;
|
||||
|
||||
typedef s32 (*ColChkResetFunc)(GlobalContext*, Collider*);
|
||||
|
|
@ -1373,10 +1371,10 @@ typedef enum {
|
|||
QUAKE2_SETUP,
|
||||
} Quake2State;
|
||||
|
||||
typedef struct OSMesgQueueListNode_t {
|
||||
/* 0x0 */ struct OSMesgQueueListNode_t* next;
|
||||
typedef struct IrqMgrClient_t {
|
||||
/* 0x0 */ struct IrqMgrClient_t* next;
|
||||
/* 0x4 */ OSMesgQueue* queue;
|
||||
} OSMesgQueueListNode; // size = 0x8
|
||||
} IrqMgrClient; // size = 0x8
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ OSScMsg verticalRetraceMesg;
|
||||
|
|
@ -1385,7 +1383,7 @@ typedef struct {
|
|||
/* 0x060 */ OSMesgQueue irqQueue;
|
||||
/* 0x078 */ OSMesg irqBuffer[8];
|
||||
/* 0x098 */ OSThread thread;
|
||||
/* 0x248 */ OSMesgQueueListNode* callbacks;
|
||||
/* 0x248 */ IrqMgrClient* callbacks;
|
||||
/* 0x24C */ u8 prenmiStage;
|
||||
/* 0x250 */ OSTime lastPrenmiTime;
|
||||
/* 0x258 */ OSTimer prenmiTimer;
|
||||
|
|
@ -1402,7 +1400,7 @@ typedef struct {
|
|||
/* 0x04C */ OSMesgQueue siEventCallbackQueue;
|
||||
/* 0x064 */ OSMesgQueue lock;
|
||||
/* 0x07C */ OSMesgQueue irqmgrCallbackQueue;
|
||||
/* 0x094 */ OSMesgQueueListNode irqmgrCallbackQueueNode;
|
||||
/* 0x094 */ IrqMgrClient irqmgrCallbackQueueNode;
|
||||
/* 0x09C */ IrqMgr* irqmgr;
|
||||
/* 0x0A0 */ OSThread thread;
|
||||
/* 0x250 */ Input input[4];
|
||||
|
|
@ -1413,13 +1411,23 @@ typedef struct {
|
|||
/* 0x47D */ u8 unk47D;
|
||||
/* 0x47E */ u8 hasStopped;
|
||||
/* 0x47F */ UNK_TYPE1 pad47F[0x1];
|
||||
} PadmgrThreadStruct; // size = 0x480
|
||||
} PadMgr; // size = 0x480
|
||||
|
||||
#define OS_SC_NEEDS_RDP 0x0001
|
||||
#define OS_SC_NEEDS_RSP 0x0002
|
||||
#define OS_SC_DRAM_DLIST 0x0004
|
||||
#define OS_SC_PARALLEL_TASK 0x0010
|
||||
#define OS_SC_LAST_TASK 0x0020
|
||||
#define OS_SC_SWAPBUFFER 0x0040
|
||||
|
||||
#define OS_SC_RCP_MASK 0x0003
|
||||
#define OS_SC_TYPE_MASK 0x0007
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ OSMesgQueue unk0;
|
||||
/* 0x018 */ UNK_TYPE4 unk18[64];
|
||||
/* 0x118 */ OSMesgQueue unk118;
|
||||
/* 0x130 */ UNK_TYPE4 unk130[8];
|
||||
/* 0x000 */ OSMesgQueue interruptQ;
|
||||
/* 0x018 */ OSMesg intMsgBuf[64];
|
||||
/* 0x118 */ OSMesgQueue cmdQ;
|
||||
/* 0x130 */ OSMesg cmdMsgBuf[8];
|
||||
/* 0x150 */ OSThread thread;
|
||||
/* 0x300 */ UNK_TYPE4 unk300;
|
||||
/* 0x304 */ UNK_TYPE4 unk304;
|
||||
|
|
@ -1433,23 +1441,8 @@ typedef struct {
|
|||
/* 0x324 */ UNK_TYPE4 unk324;
|
||||
/* 0x328 */ UNK_TYPE1 pad328[0x7];
|
||||
/* 0x32F */ s8 unk32F;
|
||||
/* 0x330 */ OSMesgQueueListNode unk330;
|
||||
} SchedThreadStruct; // size = 0x338
|
||||
|
||||
struct AudioThreadStruct {
|
||||
/* 0x000 */ IrqMgr* irqmgr;
|
||||
/* 0x004 */ SchedThreadStruct* sched;
|
||||
/* 0x008 */ UNK_TYPE1 pad8[0x58];
|
||||
/* 0x060 */ UNK_TYPE4 unk60;
|
||||
/* 0x064 */ OSMesgQueue irqQueue;
|
||||
/* 0x07C */ OSMesg irqBuffer[30];
|
||||
/* 0x0F4 */ OSMesgQueue unkF4;
|
||||
/* 0x10C */ UNK_TYPE4 unk10C;
|
||||
/* 0x110 */ OSMesgQueue initDoneCallback;
|
||||
/* 0x128 */ OSMesg initDoneCallbackMsgBuffer[1];
|
||||
/* 0x12C */ UNK_TYPE1 pad12C[0x4];
|
||||
/* 0x130 */ OSThread thread;
|
||||
}; // size = 0x2E0
|
||||
/* 0x330 */ IrqMgrClient irqClient;
|
||||
} SchedContext; // size = 0x338
|
||||
|
||||
typedef struct StackEntry_t {
|
||||
/* 0x00 */ struct StackEntry_t* next;
|
||||
|
|
@ -1485,6 +1478,32 @@ struct ActorListEntry {
|
|||
/* 0x8 */ UNK_TYPE1 pad8[0x4];
|
||||
}; // size = 0xC
|
||||
|
||||
#define OS_SC_RETRACE_MSG 1
|
||||
#define OS_SC_DONE_MSG 2
|
||||
#define OS_SC_NMI_MSG 3 // name is made up, 3 is OS_SC_RDP_DONE_MSG in the original sched.c
|
||||
#define OS_SC_PRE_NMI_MSG 4
|
||||
|
||||
typedef struct {
|
||||
/* 0x0000 */ OSTask task;
|
||||
/* 0x0040 */ OSMesgQueue* taskQueue;
|
||||
/* 0x0044 */ char unk_44[0xC];
|
||||
} AudioTask; // size = 0x50
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ IrqMgr* irqMgr;
|
||||
/* 0x004 */ SchedContext* sched;
|
||||
/* 0x008 */ OSScTask audioTask;
|
||||
/* 0x060 */ AudioTask* rspTask;
|
||||
/* 0x064 */ OSMesgQueue interruptMsgQ;
|
||||
/* 0x07C */ OSMesg interruptMsgBuf[30];
|
||||
/* 0x0F4 */ OSMesgQueue cmdQ;
|
||||
/* 0x10C */ OSMesg cmdMsgBuf[1];
|
||||
/* 0x110 */ OSMesgQueue lockMsgQ;
|
||||
/* 0x128 */ OSMesg lockMsgBuf[1];
|
||||
/* 0x12C */ UNK_TYPE1 pad_12C[0x4];
|
||||
/* 0x130 */ OSThread thread;
|
||||
} AudioMgr; // size = 0x2E0
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ MtxF displayMatrix;
|
||||
/* 0x40 */ Actor* actor;
|
||||
|
|
|
|||
|
|
@ -447,7 +447,7 @@ SECTIONS
|
|||
build/src/code/TwoHeadGfxArena.o(.text)
|
||||
build/src/code/TwoHeadArena.o(.text)
|
||||
build/asm/code/code_0x80172BC0.o(.text)
|
||||
build/asm/code/code_0x80172C30.o(.text)
|
||||
build/src/code/audioMgr.o(.text)
|
||||
build/src/code/title_setup.o(.text)
|
||||
build/src/code/game.o(.text)
|
||||
build/asm/code/gamealloc.o(.text)
|
||||
|
|
@ -549,7 +549,7 @@ SECTIONS
|
|||
build/asm/code/code_data_z_fbdemo_circle.o(.data)
|
||||
build/asm/code/code_data_z_play.o(.data)
|
||||
build/asm/code/code_data_z_play_hireso.o(.data)
|
||||
build/asm/code/code_data_0x80172C30.o(.data)
|
||||
build/src/code/audioMgr.o(.data)
|
||||
build/src/code/game.o(.data)
|
||||
build/asm/code/code_data_graph.o(.data)
|
||||
build/asm/code/code_data_padmgr.o(.data)
|
||||
|
|
@ -623,7 +623,7 @@ SECTIONS
|
|||
build/asm/code/code_rodata_z_play_hireso.o(.rodata)
|
||||
build/asm/code/code_rodata_PreRender.o(.rodata)
|
||||
build/asm/code/code_rodata_0x80172BC0.o(.rodata)
|
||||
build/asm/code/code_rodata_0x80172C30.o(.rodata)
|
||||
build/src/code/audioMgr.o(.rodata)
|
||||
build/src/code/game.o(.rodata)
|
||||
build/asm/code/code_rodata_graph.o(.rodata)
|
||||
build/asm/code/code_rodata_main.o(.rodata)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ volatile OSTime sIrqMgrResetTime = 0;
|
|||
volatile OSTime sIrqMgrRetraceTime = 0;
|
||||
s32 sIrqMgrRetraceCount = 0;
|
||||
|
||||
void IrqMgr_AddClient(IrqMgr* irqmgr, OSMesgQueueListNode* param_2, OSMesgQueue* param_3) {
|
||||
void IrqMgr_AddClient(IrqMgr* irqmgr, IrqMgrClient* param_2, OSMesgQueue* param_3) {
|
||||
u32 saveMask;
|
||||
|
||||
saveMask = osSetIntMask(1);
|
||||
|
|
@ -25,9 +25,9 @@ void IrqMgr_AddClient(IrqMgr* irqmgr, OSMesgQueueListNode* param_2, OSMesgQueue*
|
|||
}
|
||||
}
|
||||
|
||||
void IrqMgr_RemoveClient(IrqMgr* irqmgr, OSMesgQueueListNode* remove) {
|
||||
OSMesgQueueListNode* iter;
|
||||
OSMesgQueueListNode* last;
|
||||
void IrqMgr_RemoveClient(IrqMgr* irqmgr, IrqMgrClient* remove) {
|
||||
IrqMgrClient* iter;
|
||||
IrqMgrClient* last;
|
||||
u32 saveMask;
|
||||
|
||||
iter = irqmgr->callbacks;
|
||||
|
|
@ -52,7 +52,7 @@ void IrqMgr_RemoveClient(IrqMgr* irqmgr, OSMesgQueueListNode* remove) {
|
|||
}
|
||||
|
||||
void IrqMgr_SendMesgForClient(IrqMgr* irqmgr, OSMesg msg) {
|
||||
OSMesgQueueListNode* iter = irqmgr->callbacks;
|
||||
IrqMgrClient* iter = irqmgr->callbacks;
|
||||
|
||||
while (iter != NULL) {
|
||||
osSendMesg(iter->queue, msg, 0);
|
||||
|
|
@ -61,7 +61,7 @@ void IrqMgr_SendMesgForClient(IrqMgr* irqmgr, OSMesg msg) {
|
|||
}
|
||||
|
||||
void IrqMgr_JamMesgForClient(IrqMgr* irqmgr, OSMesg msg) {
|
||||
OSMesgQueueListNode* iter = irqmgr->callbacks;
|
||||
IrqMgrClient* iter = irqmgr->callbacks;
|
||||
|
||||
while (iter != NULL) {
|
||||
if (iter->queue->validCount < iter->queue->msgCount) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,136 @@
|
|||
#include "global.h"
|
||||
|
||||
void func_80172C30(AudioMgr* audioMgr) {
|
||||
AudioTask* task = audioMgr->rspTask;
|
||||
|
||||
if (audioMgr->rspTask->taskQueue != NULL) {
|
||||
osSendMesg(task->taskQueue, NULL, OS_MESG_BLOCK);
|
||||
}
|
||||
}
|
||||
|
||||
void AudioMgr_HandleRetrace(AudioMgr* audioMgr) {
|
||||
static s32 retryCount = 10;
|
||||
AudioTask* rspTask;
|
||||
s32 timerMsgVal = 666;
|
||||
OSTimer timer;
|
||||
s32 msg;
|
||||
|
||||
if (SREG(20) > 0) {
|
||||
audioMgr->rspTask = NULL;
|
||||
}
|
||||
|
||||
while (audioMgr->cmdQ.validCount != 0) {
|
||||
osRecvMesg(&audioMgr->cmdQ, NULL, OS_MESG_NOBLOCK);
|
||||
}
|
||||
|
||||
if (audioMgr->rspTask != NULL) {
|
||||
audioMgr->audioTask.next = NULL;
|
||||
audioMgr->audioTask.flags = OS_SC_NEEDS_RSP;
|
||||
audioMgr->audioTask.framebuffer = NULL;
|
||||
|
||||
audioMgr->audioTask.list = audioMgr->rspTask->task;
|
||||
audioMgr->audioTask.msgQ = &audioMgr->cmdQ;
|
||||
|
||||
audioMgr->audioTask.msg = NULL;
|
||||
osSendMesg(&audioMgr->sched->cmdQ, &audioMgr->audioTask, OS_MESG_BLOCK);
|
||||
Sched_SendEntryMsg(audioMgr->sched);
|
||||
}
|
||||
|
||||
if (SREG(20) >= 2) {
|
||||
rspTask = NULL;
|
||||
} else {
|
||||
rspTask = func_80192BE0();
|
||||
}
|
||||
|
||||
if (audioMgr->rspTask != NULL) {
|
||||
while (true) {
|
||||
osSetTimer(&timer, OS_USEC_TO_CYCLES(32000), 0, &audioMgr->cmdQ, (OSMesg)timerMsgVal);
|
||||
osRecvMesg(&audioMgr->cmdQ, (OSMesg*)&msg, OS_MESG_BLOCK);
|
||||
osStopTimer(&timer);
|
||||
if (msg == timerMsgVal) {
|
||||
Fault_Log("AUDIO SP TIMEOUT %08x %08x\n", audioMgr->rspTask, audioMgr->rspTask->task);
|
||||
if (retryCount >= 0) {
|
||||
retryCount--;
|
||||
func_8017703C(audioMgr->sched);
|
||||
} else {
|
||||
Fault_Log("audioMgr.c:もうダメ!死ぬ!\n");
|
||||
osDestroyThread(NULL);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
func_80172C30(audioMgr);
|
||||
}
|
||||
|
||||
audioMgr->rspTask = rspTask;
|
||||
}
|
||||
|
||||
void AudioMgr_HandlePRENMI(AudioMgr* audioMgr) {
|
||||
Audio_PreNMI();
|
||||
}
|
||||
|
||||
void AudioMgr_ThreadEntry(void* arg) {
|
||||
AudioMgr* audioMgr = (AudioMgr*)arg;
|
||||
IrqMgrClient irqClient;
|
||||
s16* msg = NULL;
|
||||
s32 exit;
|
||||
|
||||
func_801A4C30();
|
||||
func_80190B38(DmaMgr_DmaCallback0);
|
||||
func_801A4D00();
|
||||
osSendMesg(&audioMgr->lockMsgQ, NULL, OS_MESG_BLOCK);
|
||||
IrqMgr_AddClient(audioMgr->irqMgr, &irqClient, &audioMgr->interruptMsgQ);
|
||||
|
||||
exit = false;
|
||||
while (!exit) {
|
||||
osRecvMesg(&audioMgr->interruptMsgQ, (OSMesg*)&msg, OS_MESG_BLOCK);
|
||||
switch (*msg) {
|
||||
case OS_SC_RETRACE_MSG:
|
||||
AudioMgr_HandleRetrace(audioMgr);
|
||||
while (audioMgr->interruptMsgQ.validCount != 0) {
|
||||
osRecvMesg(&audioMgr->interruptMsgQ, (OSMesg*)&msg, OS_MESG_BLOCK);
|
||||
switch (*msg) {
|
||||
case OS_SC_RETRACE_MSG:
|
||||
break;
|
||||
case OS_SC_PRE_NMI_MSG:
|
||||
AudioMgr_HandlePRENMI(audioMgr);
|
||||
break;
|
||||
case OS_SC_NMI_MSG:
|
||||
exit = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case OS_SC_PRE_NMI_MSG:
|
||||
AudioMgr_HandlePRENMI(audioMgr);
|
||||
break;
|
||||
case OS_SC_NMI_MSG:
|
||||
exit = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
IrqMgr_RemoveClient(audioMgr->irqMgr, &irqClient);
|
||||
}
|
||||
|
||||
void AudioMgr_Unlock(AudioMgr* audioMgr) {
|
||||
osRecvMesg(&audioMgr->lockMsgQ, NULL, OS_MESG_BLOCK);
|
||||
}
|
||||
|
||||
void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedContext* sched, IrqMgr* irqMgr) {
|
||||
bzero(audioMgr, sizeof(AudioMgr));
|
||||
|
||||
audioMgr->sched = sched;
|
||||
audioMgr->irqMgr = irqMgr;
|
||||
audioMgr->rspTask = NULL;
|
||||
|
||||
osCreateMesgQueue(&audioMgr->cmdQ, audioMgr->cmdMsgBuf, ARRAY_COUNT(audioMgr->cmdMsgBuf));
|
||||
osCreateMesgQueue(&audioMgr->interruptMsgQ, audioMgr->interruptMsgBuf, ARRAY_COUNT(audioMgr->interruptMsgBuf));
|
||||
osCreateMesgQueue(&audioMgr->lockMsgQ, audioMgr->lockMsgBuf, ARRAY_COUNT(audioMgr->lockMsgBuf));
|
||||
|
||||
osCreateThread(&audioMgr->thread, id, AudioMgr_ThreadEntry, audioMgr, stack, pri);
|
||||
osStartThread(&audioMgr->thread);
|
||||
}
|
||||
|
|
@ -3120,11 +3120,11 @@
|
|||
0x80172B9C:("THA_Dt",),
|
||||
0x80172BC0:("func_80172BC0",),
|
||||
0x80172C30:("func_80172C30",),
|
||||
0x80172C68:("func_80172C68",),
|
||||
0x80172EAC:("Audio_Stop",),
|
||||
0x80172ED0:("Audio_ThreadEntry",),
|
||||
0x80173048:("Audio_WaitForInit",),
|
||||
0x80173074:("Audio_Start",),
|
||||
0x80172C68:("AudioMgr_HandleRetrace",),
|
||||
0x80172EAC:("AudioMgr_HandlePRENMI",),
|
||||
0x80172ED0:("AudioMgr_ThreadEntry",),
|
||||
0x80173048:("AudioMgr_Unlock",),
|
||||
0x80173074:("AudioMgr_Init",),
|
||||
0x80173130:("TitleSetup_GameStateResetContext",),
|
||||
0x801732DC:("TitleSetup_InitImpl",),
|
||||
0x8017332C:("TitleSetup_Destroy",),
|
||||
|
|
@ -3218,7 +3218,7 @@
|
|||
0x80176C24:("func_80176C24",),
|
||||
0x80176CF4:("func_80176CF4",),
|
||||
0x80176F2C:("func_80176F2C",),
|
||||
0x80177018:("func_80177018",),
|
||||
0x80177018:("Sched_SendEntryMsg",),
|
||||
0x8017703C:("func_8017703C",),
|
||||
0x80177060:("func_80177060",),
|
||||
0x80177084:("func_80177084",),
|
||||
|
|
@ -4005,7 +4005,7 @@
|
|||
0x801A4348:("func_801A4348",),
|
||||
0x801A4380:("func_801A4380",),
|
||||
0x801A4428:("func_801A4428",),
|
||||
0x801A44A4:("func_801A44A4",),
|
||||
0x801A44A4:("Audio_PreNMI",),
|
||||
0x801A44C4:("func_801A44C4",),
|
||||
0x801A44D4:("func_801A44D4",),
|
||||
0x801A46F8:("func_801A46F8",),
|
||||
|
|
|
|||
|
|
@ -351,7 +351,7 @@
|
|||
0x801727F0:"TwoHeadGfxArena",
|
||||
0x80172A00:"TwoHeadArena",
|
||||
0x80172BC0:"",
|
||||
0x80172C30:"",
|
||||
0x80172C30:"audioMgr",
|
||||
0x80173130:"game",
|
||||
0x80173BF0:"gamealloc",
|
||||
0x80173D30:"graph",
|
||||
|
|
|
|||
|
|
@ -2265,7 +2265,7 @@
|
|||
0x801D1520:("gScreenWidth","s32","",0x4),
|
||||
0x801D1524:("gScreenHeight","s32","",0x4),
|
||||
0x801D1528:("startHeapSize","UNK_TYPE4","",0x4),
|
||||
0x801D1530:("padmgrContext","PadmgrThreadStruct*","",0x4),
|
||||
0x801D1530:("padmgrContext","PadMgr*","",0x4),
|
||||
0x801D1534:("controllerInputsCaptured","UNK_TYPE4","",0x4),
|
||||
0x801D1538:("D_801D1538","UNK_TYPE4","",0x4),
|
||||
0x801D1540:("D_801D1540","UNK_PTR","",0x4),
|
||||
|
|
@ -4210,8 +4210,8 @@
|
|||
0x801F8160:("siEventCallbackQueue","OSMesgQueue","",0x18),
|
||||
0x801F8178:("siEventCallbackBuffer","OSMesg","[1]",0x4),
|
||||
0x801F8180:("gSegments","u32","[16]",0x40),
|
||||
0x801F81C0:("schedContext","SchedThreadStruct","",0x338),
|
||||
0x801F84F8:("mainIrqmgrCallbackNode","OSMesgQueueListNode","",0x8),
|
||||
0x801F81C0:("schedContext","SchedContext","",0x338),
|
||||
0x801F84F8:("mainIrqmgrCallbackNode","IrqMgrClient","",0x8),
|
||||
0x801F8500:("mainIrqmgrCallbackQueue","OSMesgQueue","",0x18),
|
||||
0x801F8518:("mainIrqCallbackBuffer","OSMesg","[60]",0xf0),
|
||||
0x801F8608:("graphOSThread","OSThread","",0x1b0),
|
||||
|
|
@ -4223,8 +4223,8 @@
|
|||
0x801FB2D8:("schedStackEntry","StackEntry","",0x1c),
|
||||
0x801FB2F8:("audioStackEntry","StackEntry","",0x1c),
|
||||
0x801FB318:("padmgrStackEntry","StackEntry","",0x1c),
|
||||
0x801FB338:("audioContext","AudioThreadStruct","",0x2e0),
|
||||
0x801FB620:("D_801FB620","PadmgrThreadStruct","",0x480),
|
||||
0x801FB338:("audioContext","AudioMgr","",0x2e0),
|
||||
0x801FB620:("D_801FB620","PadMgr","",0x480),
|
||||
0x801FBAA0:("D_801FBAA0","UNK_TYPE1","",0x1),
|
||||
0x801FBAB0:("D_801FBAB0","UNK_TYPE1","",0x1),
|
||||
0x801FBAB4:("D_801FBAB4","UNK_TYPE1","",0x1),
|
||||
|
|
|
|||
Loading…
Reference in New Issue