1
0
mirror of https://github.com/zeldaret/oot.git synced 2024-09-21 04:24:43 +00:00

Message Queues, Threads, and surroundings cleanup (#1178)

* message queues, threads, and surroundings cleanup

* Format, make the formatter prefer clang-format-11 if found

* Fix __osThreadTail type

* Q -> Queue, thread defines renamed

* Reformat, add missing NULL

* Suggested changes and further casting cleanup

* Reformat

* padmgr name fixes
This commit is contained in:
Tharo 2022-04-09 01:20:23 +01:00 committed by GitHub
parent 9984c267d9
commit 7068ad3703
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
45 changed files with 311 additions and 296 deletions

View File

@ -21,13 +21,13 @@ export -f add_final_newline
shopt -s globstar
if [ $(command -v clang-format) ]
if [ $(command -v clang-format-${FORMAT_VER}) ]
then
CLANG_FORMAT="clang-format"
CLANG_FORMAT="clang-format-${FORMAT_VER}"
else
if [ $(command -v clang-format-${FORMAT_VER}) ]
if [ $(command -v clang-format) ]
then
CLANG_FORMAT="clang-format-${FORMAT_VER}"
CLANG_FORMAT="clang-format"
else
echo "Neither clang-format nor clang-format-${FORMAT_VER} found. Exiting."
exit 1

View File

@ -31,7 +31,7 @@ void DmaMgr_Error(DmaRequest* req, const char* file, const char* errorName, cons
const char* DmaMgr_GetFileNameImpl(u32 vrom);
const char* DmaMgr_GetFileName(u32 vrom);
void DmaMgr_ProcessMsg(DmaRequest* req);
void DmaMgr_ThreadEntry(void* arg0);
void DmaMgr_ThreadEntry(void* arg);
s32 DmaMgr_SendRequestImpl(DmaRequest* req, u32 ram, u32 vrom, u32 size, u32 unk, OSMesgQueue* queue, OSMesg msg);
s32 DmaMgr_SendRequest0(u32 ram, u32 vrom, u32 size);
void DmaMgr_Init(void);
@ -79,7 +79,7 @@ s32 sprintf(char* dst, const char* fmt, ...);
void __osPiCreateAccessQueue(void);
void __osPiGetAccess(void);
void __osPiRelAccess(void);
s32 osSendMesg(OSMesgQueue* mq, OSMesg mesg, s32 flag);
s32 osSendMesg(OSMesgQueue* mq, OSMesg msg, s32 flag);
void osStopThread(OSThread* thread);
void osViExtendVStart(u32 arg0);
s32 osRecvMesg(OSMesgQueue* mq, OSMesg* msg, s32 flag);
@ -101,7 +101,7 @@ void __osSetSR(u32);
u32 __osGetSR(void);
void osWritebackDCache(void* vaddr, s32 nbytes);
void* osViGetNextFramebuffer(void);
void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt);
void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQueue, OSMesg* cmdBuf, s32 cmdMsgCnt);
void __osDevMgrMain(void* arg);
s32 __osPiRawStartDma(s32 dir, u32 cartAddr, void* dramAddr, size_t size);
u32 osVirtualToPhysical(void* vaddr);
@ -122,7 +122,7 @@ void osInvalICache(void* vaddr, s32 nbytes);
void osCreateMesgQueue(OSMesgQueue* mq, OSMesg* msg, s32 count);
void osInvalDCache(void* vaddr, s32 nbytes);
s32 __osSiDeviceBusy(void);
s32 osJamMesg(OSMesgQueue* mq, OSMesg mesg, s32 flag);
s32 osJamMesg(OSMesgQueue* mq, OSMesg msg, s32 flag);
void osSetThreadPri(OSThread* thread, OSPri pri);
OSPri osGetThreadPri(OSThread* thread);
s32 __osEPiRawReadIo(OSPiHandle* handle, u32 devAddr, u32* data);
@ -1646,7 +1646,7 @@ void PadMgr_HandlePreNMI(PadMgr* padmgr);
// This function must remain commented out, because it is called incorrectly in
// fault.c (actual bug in game), and the compiler notices and won't compile it
// void PadMgr_RequestPadData(PadMgr* padmgr, Input* inputs, s32 mode);
void PadMgr_Init(PadMgr* padmgr, OSMesgQueue* siIntMsgQ, IrqMgr* irqMgr, OSId id, OSPri priority, void* stack);
void PadMgr_Init(PadMgr* padmgr, OSMesgQueue* serialEventQueue, IrqMgr* irqMgr, OSId id, OSPri priority, void* stack);
void Sched_SwapFrameBuffer(CfbInfo* cfbInfo);
void func_800C84E4(SchedContext* sc, CfbInfo* cfbInfo);
void Sched_HandleReset(SchedContext* sc);

View File

@ -40,7 +40,7 @@ typedef struct {
void IrqMgr_Init(IrqMgr* irqMgr, void* stack, OSPri pri, u8 retraceCount);
void IrqMgr_AddClient(IrqMgr* irqMgr, IrqMgrClient* client, OSMesgQueue* msgQ);
void IrqMgr_AddClient(IrqMgr* irqMgr, IrqMgrClient* client, OSMesgQueue* msgQueue);
void IrqMgr_RemoveClient(IrqMgr* irqMgr, IrqMgrClient* client);
#endif

View File

@ -12,12 +12,12 @@ typedef struct {
typedef struct PadMgr {
/* 0x0000 */ OSContStatus padStatus[4];
/* 0x0010 */ OSMesg serialMsgBuf[1];
/* 0x0010 */ OSMesg serialLockMsgBuf[1];
/* 0x0014 */ OSMesg lockMsgBuf[1];
/* 0x0018 */ OSMesg interruptMsgBuf[4];
/* 0x0028 */ OSMesgQueue serialMsgQ;
/* 0x0040 */ OSMesgQueue lockMsgQ;
/* 0x0058 */ OSMesgQueue interruptMsgQ;
/* 0x0028 */ OSMesgQueue serialLockQueue;
/* 0x0040 */ OSMesgQueue lockQueue;
/* 0x0058 */ OSMesgQueue interruptQueue;
/* 0x0070 */ IrqMgrClient irqClient;
/* 0x0078 */ IrqMgr* irqMgr;
/* 0x0080 */ OSThread thread;

View File

@ -3,7 +3,6 @@
#include "message.h"
#define SIAccessQueueSize 2
#define BLOCKSIZE 32
#define MAXCONTROLLERS 4
#define PFS_ONE_PAGE 8

View File

@ -30,6 +30,7 @@ typedef union {
/* 0x00 */ f32 f_odd;
/* 0x04 */ f32 f_even;
} f;
f64 d;
} __OSfp; // size = 0x08
typedef struct {
@ -63,4 +64,9 @@ typedef struct OSThread {
/* 0x20 */ __OSThreadContext context;
} OSThread; // size = 0x1B0
typedef struct {
OSThread* next;
OSPri priority;
} __OSThreadTail; // size = 0x8
#endif

View File

@ -64,7 +64,7 @@ typedef struct {
/* 0x08 */ OSViMode* modep;
/* 0x0C */ u32 features;
/* 0x10 */ OSMesgQueue* mq;
/* 0x14 */ OSMesg* msg;
/* 0x14 */ OSMesg msg;
/* 0x18 */ __OSViScale x;
/* 0x24 */ __OSViScale y;
} OSViContext; // size = 0x30

View File

@ -28,7 +28,7 @@ extern OSViMode osViModePalLan1;
extern s32 osViClock;
extern u32 __osShutdown;
extern OSHWIntr __OSGlobalIntMask;
extern OSThread* __osThreadTail[];
extern __OSThreadTail __osThreadTail;
extern OSThread* __osRunQueue;
extern OSThread* __osActiveQueue;
extern OSThread* __osRunningThread;
@ -45,7 +45,7 @@ extern u32 __additional_scanline;
extern u8 gBuildTeam[];
extern u8 gBuildDate[];
extern u8 gBuildMakeOption[];
extern OSMesgQueue gPiMgrCmdQ;
extern OSMesgQueue gPiMgrCmdQueue;
extern OSViMode gViConfigMode;
extern u8 D_80013960;
extern OSMesgQueue __osPiAccessQueue;

View File

@ -42,13 +42,28 @@
#define REGION_JP 2
#define REGION_EU 3
#define Z_PRIORITY_MAIN 10
#define Z_PRIORITY_GRAPH 11
#define Z_PRIORITY_AUDIOMGR 12
#define Z_PRIORITY_PADMGR 14
#define Z_PRIORITY_SCHED 15
#define Z_PRIORITY_DMAMGR 16
#define Z_PRIORITY_IRQMGR 17
#define THREAD_PRI_IDLE_INIT 10
#define THREAD_PRI_MAIN_INIT 10
#define THREAD_PRI_DMAMGR_LOW 10 // Used when decompressing files
#define THREAD_PRI_GRAPH 11
#define THREAD_PRI_AUDIOMGR 12
#define THREAD_PRI_PADMGR 14
#define THREAD_PRI_MAIN 15
#define THREAD_PRI_SCHED 15
#define THREAD_PRI_DMAMGR 16
#define THREAD_PRI_IRQMGR 17
#define THREAD_PRI_FAULT_CLIENT (OS_PRIORITY_APPMAX - 1)
#define THREAD_PRI_FAULT OS_PRIORITY_APPMAX
#define THREAD_ID_IDLE 1
#define THREAD_ID_FAULT 2
#define THREAD_ID_MAIN 3
#define THREAD_ID_GRAPH 4
#define THREAD_ID_SCHED 5
#define THREAD_ID_PADMGR 7
#define THREAD_ID_AUDIOMGR 10
#define THREAD_ID_DMAMGR 18
#define THREAD_ID_IRQMGR 19
#define STACK(stack, size) \
u64 stack[ALIGN8(size) / sizeof(u64)]
@ -118,9 +133,10 @@ typedef struct OSScTask {
/* 0x08 */ u32 flags;
/* 0x0C */ CfbInfo* framebuffer;
/* 0x10 */ OSTask list;
/* 0x50 */ OSMesgQueue* msgQ;
/* 0x50 */ OSMesgQueue* msgQueue;
/* 0x54 */ OSMesg msg;
} OSScTask;
/* 0x58 */ char unk_58[0x10];
} OSScTask; // size = 0x68
typedef struct GraphicsContext {
/* 0x0000 */ Gfx* polyOpaBuffer; // Pointer to "Zelda 0"
@ -130,11 +146,11 @@ typedef struct GraphicsContext {
/* 0x0014 */ u32 unk_014;
/* 0x0018 */ char unk_018[0x20];
/* 0x0038 */ OSMesg msgBuff[0x08];
/* 0x0058 */ OSMesgQueue* schedMsgQ;
/* 0x0058 */ OSMesgQueue* schedMsgQueue;
/* 0x005C */ OSMesgQueue queue;
/* 0x0074 */ char unk_074[0x04];
/* 0x0078 */ OSScTask task; // size of OSScTask might be wrong
/* 0x00D0 */ char unk_0D0[0xE0];
/* 0x0078 */ OSScTask task;
/* 0x00E0 */ char unk_0E0[0xD0];
/* 0x01B0 */ Gfx* workBuffer;
/* 0x01B4 */ TwoHeadGfxArena work;
/* 0x01C4 */ char unk_01C4[0xC0];
@ -1576,9 +1592,9 @@ typedef struct {
} FrameBufferSwap;
typedef struct {
/* 0x0000 */ OSMesgQueue interruptQ;
/* 0x0018 */ OSMesg intBuf[8];
/* 0x0038 */ OSMesgQueue cmdQ;
/* 0x0000 */ OSMesgQueue interruptQueue;
/* 0x0018 */ OSMesg interruptMsgBuf[8];
/* 0x0038 */ OSMesgQueue cmdQueue;
/* 0x0050 */ OSMesg cmdMsgBuf[8];
/* 0x0070 */ OSThread thread;
/* 0x0220 */ OSScTask* audioListHead;
@ -1607,18 +1623,14 @@ typedef struct {
/* 0x0000 */ IrqMgr* irqMgr;
/* 0x0004 */ SchedContext* sched;
/* 0x0008 */ OSScTask audioTask;
/* 0x0060 */ char unk_60[0x10];
/* 0x0070 */ AudioTask* rspTask;
/* 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;
/* 0x0074 */ OSMesgQueue interruptQueue;
/* 0x008C */ OSMesg interruptMsgBuf[8];
/* 0x00AC */ OSMesgQueue taskQueue;
/* 0x00C4 */ OSMesg taskMsgBuf[1];
/* 0x00C8 */ OSMesgQueue lockQueue;
/* 0x00E0 */ OSMesg lockMsgBuf[1];
/* 0x00E8 */ OSThread thread;
} AudioMgr; // size = 0x298
struct ArenaNode;
@ -1626,7 +1638,7 @@ struct ArenaNode;
typedef struct Arena {
/* 0x00 */ struct ArenaNode* head;
/* 0x04 */ void* start;
/* 0x08 */ OSMesgQueue lock;
/* 0x08 */ OSMesgQueue lockQueue;
/* 0x20 */ u8 unk_20;
/* 0x21 */ u8 isInit;
/* 0x22 */ u8 flag;
@ -1793,7 +1805,6 @@ typedef struct {
/* 0x28 */ u32 mode; // 0 if Y V0 is 1 and 2 if Y V0 is 2
/* 0x2C */ char unk_2C[4];
/* 0x30 */ OSScTask scTask;
/* 0x88 */ char unk_88[0x10];
/* 0x98 */ OSMesgQueue mq;
/* 0xB0 */ OSMesg msg;
/* 0xB4 */ JpegWork* workBuf;

View File

@ -716,7 +716,7 @@ typedef struct {
/* 0x18 */ s32 bytesRemaining;
/* 0x1C */ s8* isDone;
/* 0x20 */ SoundFontSample sample;
/* 0x30 */ OSMesgQueue msgqueue;
/* 0x30 */ OSMesgQueue msgQueue;
/* 0x48 */ OSMesg msg;
/* 0x4C */ OSIoMesg ioMesg;
} AudioSlowLoad; // size = 0x64
@ -741,7 +741,7 @@ typedef struct {
typedef struct {
/* 0x00 */ OSTask task;
/* 0x40 */ OSMesgQueue* taskQueue;
/* 0x40 */ OSMesgQueue* msgQueue;
/* 0x44 */ void* unk_44; // probably a message that gets unused.
/* 0x48 */ char unk_48[0x8];
} AudioTask; // size = 0x50
@ -779,12 +779,12 @@ typedef struct {
/* 0x1E18 */ OSPiHandle* cartHandle;
/* 0x1E1C */ OSPiHandle* driveHandle;
/* 0x1E20 */ OSMesgQueue externalLoadQueue;
/* 0x1E38 */ OSMesg externalLoadMesgBuf[0x10];
/* 0x1E38 */ OSMesg externalLoadMsgBuf[16];
/* 0x1E78 */ OSMesgQueue preloadSampleQueue;
/* 0x1E90 */ OSMesg preloadSampleMesgBuf[0x10];
/* 0x1E90 */ OSMesg preloadSampleMsgBuf[16];
/* 0x1ED0 */ OSMesgQueue currAudioFrameDmaQueue;
/* 0x1EE8 */ OSMesg currAudioFrameDmaMesgBuf[0x40];
/* 0x1FE8 */ OSIoMesg currAudioFrameDmaIoMesgBuf[0x40];
/* 0x1EE8 */ OSMesg currAudioFrameDmaMsgBuf[64];
/* 0x1FE8 */ OSIoMesg currAudioFrameDmaIoMsgBuf[64];
/* 0x25E8 */ OSMesgQueue syncDmaQueue;
/* 0x2600 */ OSMesg syncDmaMesg;
/* 0x2604 */ OSIoMesg syncDmaIoMesg;
@ -876,9 +876,9 @@ typedef struct {
/* 0x5BF0 */ OSMesgQueue taskStartQueue;
/* 0x5C08 */ OSMesgQueue cmdProcQueue;
/* 0x5C20 */ OSMesgQueue audioResetQueue;
/* 0x5C38 */ OSMesg taskStartMsgs[1];
/* 0x5C3C */ OSMesg audioResetMesgs[1];
/* 0x5C40 */ OSMesg cmdProcMsgs[4];
/* 0x5C38 */ OSMesg taskStartMsgBuf[1];
/* 0x5C3C */ OSMesg audioResetMsgBuf[1];
/* 0x5C40 */ OSMesg cmdProcMsgBuf[4];
/* 0x5C50 */ AudioCmd cmdBuf[0x100];
} AudioContext; // size = 0x6450

View File

@ -24,6 +24,7 @@ void bootproc(void) {
Locale_Init();
StackCheck_Init(&sIdleThreadInfo, sIdleThreadStack, STACK_TOP(sIdleThreadStack), 0, 256, "idle");
osCreateThread(&sIdleThread, 1, Idle_ThreadEntry, NULL, STACK_TOP(sIdleThreadStack), Z_PRIORITY_MAIN);
osCreateThread(&sIdleThread, THREAD_ID_IDLE, Idle_ThreadEntry, NULL, STACK_TOP(sIdleThreadStack),
THREAD_PRI_IDLE_INIT);
osStartThread(&sIdleThread);
}

View File

@ -5,7 +5,7 @@ OSThread gMainThread;
STACK(sMainStack, 0x900);
StackEntry sMainStackInfo;
OSMesg sPiMgrCmdBuff[50];
OSMesgQueue gPiMgrCmdQ;
OSMesgQueue gPiMgrCmdQueue;
OSViMode gViConfigMode;
u8 D_80013960;
@ -78,9 +78,9 @@ void Idle_ThreadEntry(void* arg) {
ViConfig_UpdateVi(1);
osViBlack(1);
osViSwapBuffer(0x803DA80); //! @bug Invalid vram address (probably intended to be 0x803DA800)
osCreatePiManager(OS_PRIORITY_PIMGR, &gPiMgrCmdQ, sPiMgrCmdBuff, 50);
osCreatePiManager(OS_PRIORITY_PIMGR, &gPiMgrCmdQueue, sPiMgrCmdBuff, ARRAY_COUNT(sPiMgrCmdBuff));
StackCheck_Init(&sMainStackInfo, sMainStack, STACK_TOP(sMainStack), 0, 0x400, "main");
osCreateThread(&gMainThread, 3, Main_ThreadEntry, arg, STACK_TOP(sMainStack), Z_PRIORITY_MAIN);
osCreateThread(&gMainThread, THREAD_ID_MAIN, Main_ThreadEntry, arg, STACK_TOP(sMainStack), THREAD_PRI_MAIN_INIT);
osStartThread(&gMainThread);
osSetThreadPri(NULL, OS_PRIORITY_IDLE);

View File

@ -3,7 +3,7 @@
StackEntry sDmaMgrStackInfo;
OSMesgQueue sDmaMgrMsgQueue;
OSMesg sDmaMgrMsgs[0x20];
OSMesg sDmaMgrMsgBuf[32];
OSThread sDmaMgrThread;
STACK(sDmaMgrStack, 0x500);
const char* sDmaMgrCurFileName;
@ -70,7 +70,7 @@ s32 DmaMgr_DmaRomToRam(u32 rom, u32 ram, u32 size) {
if (gDmaMgrVerbose == 10) {
osSyncPrintf("%10lld ノーマルDMA %08x %08x %08x (%d)\n", OS_CYCLES_TO_USEC(osGetTime()), ioMsg.dramAddr,
ioMsg.devAddr, ioMsg.size, gPiMgrCmdQ.validCount);
ioMsg.devAddr, ioMsg.size, MQ_GET_COUNT(&gPiMgrCmdQueue));
}
ret = osEPiStartDma(gCartHandle, &ioMsg, OS_READ);
@ -79,12 +79,14 @@ s32 DmaMgr_DmaRomToRam(u32 rom, u32 ram, u32 size) {
}
if (gDmaMgrVerbose == 10) {
osSyncPrintf("%10lld ノーマルDMA START (%d)\n", OS_CYCLES_TO_USEC(osGetTime()), gPiMgrCmdQ.validCount);
osSyncPrintf("%10lld ノーマルDMA START (%d)\n", OS_CYCLES_TO_USEC(osGetTime()),
MQ_GET_COUNT(&gPiMgrCmdQueue));
}
osRecvMesg(&queue, NULL, OS_MESG_BLOCK);
if (gDmaMgrVerbose == 10) {
osSyncPrintf("%10lld ノーマルDMA END (%d)\n", OS_CYCLES_TO_USEC(osGetTime()), gPiMgrCmdQ.validCount);
osSyncPrintf("%10lld ノーマルDMA END (%d)\n", OS_CYCLES_TO_USEC(osGetTime()),
MQ_GET_COUNT(&gPiMgrCmdQueue));
}
size -= buffSize;
@ -102,7 +104,7 @@ s32 DmaMgr_DmaRomToRam(u32 rom, u32 ram, u32 size) {
if (gDmaMgrVerbose == 10) {
osSyncPrintf("%10lld ノーマルDMA %08x %08x %08x (%d)\n", OS_CYCLES_TO_USEC(osGetTime()), ioMsg.dramAddr,
ioMsg.devAddr, ioMsg.size, gPiMgrCmdQ.validCount);
ioMsg.devAddr, ioMsg.size, MQ_GET_COUNT(&gPiMgrCmdQueue));
}
ret = osEPiStartDma(gCartHandle, &ioMsg, OS_READ);
@ -112,7 +114,7 @@ s32 DmaMgr_DmaRomToRam(u32 rom, u32 ram, u32 size) {
osRecvMesg(&queue, NULL, OS_MESG_BLOCK);
if (gDmaMgrVerbose == 10) {
osSyncPrintf("%10lld ノーマルDMA END (%d)\n", OS_CYCLES_TO_USEC(osGetTime()), gPiMgrCmdQ.validCount);
osSyncPrintf("%10lld ノーマルDMA END (%d)\n", OS_CYCLES_TO_USEC(osGetTime()), MQ_GET_COUNT(&gPiMgrCmdQueue));
}
end:
@ -131,7 +133,7 @@ s32 DmaMgr_DmaHandler(OSPiHandle* pihandle, OSIoMesg* mb, s32 direction) {
if (gDmaMgrVerbose == 10) {
osSyncPrintf("%10lld サウンドDMA %08x %08x %08x (%d)\n", OS_CYCLES_TO_USEC(osGetTime()), mb->dramAddr,
mb->devAddr, mb->size, gPiMgrCmdQ.validCount);
mb->devAddr, mb->size, MQ_GET_COUNT(&gPiMgrCmdQueue));
}
ret = osEPiStartDma(pihandle, mb, direction);
@ -160,7 +162,6 @@ void DmaMgr_DmaFromDriveRom(u32 ram, u32 rom, u32 size) {
osEPiStartDma(handle, &ioMsg, OS_READ);
osRecvMesg(&queue, NULL, OS_MESG_BLOCK);
return;
}
void DmaMgr_Error(DmaRequest* req, const char* file, const char* errorName, const char* errorDesc) {
@ -280,9 +281,9 @@ void DmaMgr_ProcessMsg(DmaRequest* req) {
"圧縮されたセグメントの一部だけをDMA転送することはできません");
}
osSetThreadPri(NULL, Z_PRIORITY_MAIN);
osSetThreadPri(NULL, THREAD_PRI_DMAMGR_LOW);
Yaz0_Decompress(romStart, ram, romSize);
osSetThreadPri(NULL, Z_PRIORITY_DMAMGR);
osSetThreadPri(NULL, THREAD_PRI_DMAMGR);
found = true;
if (0) {
@ -308,7 +309,7 @@ void DmaMgr_ProcessMsg(DmaRequest* req) {
}
}
void DmaMgr_ThreadEntry(void* arg0) {
void DmaMgr_ThreadEntry(void* arg) {
OSMesg msg;
DmaRequest* req;
@ -351,19 +352,17 @@ s32 DmaMgr_SendRequestImpl(DmaRequest* req, u32 ram, u32 vrom, u32 size, u32 unk
req->notifyQueue = queue;
req->notifyMsg = msg;
if (1) {
if ((sDmaMgrQueueFullLogged == 0) && (sDmaMgrMsgQueue.validCount >= sDmaMgrMsgQueue.msgCount)) {
sDmaMgrQueueFullLogged++;
osSyncPrintf("%c", BEL);
osSyncPrintf(VT_FGCOL(RED));
osSyncPrintf("dmaEntryMsgQが一杯です。キューサイズの再検討をおすすめします。");
LOG_NUM("(sizeof(dmaEntryMsgBufs) / sizeof(dmaEntryMsgBufs[0]))", ARRAY_COUNT(sDmaMgrMsgs),
"../z_std_dma.c", 952);
osSyncPrintf(VT_RST);
}
if (1 && (sDmaMgrQueueFullLogged == 0) && MQ_IS_FULL(&sDmaMgrMsgQueue)) {
sDmaMgrQueueFullLogged++;
osSyncPrintf("%c", BEL);
osSyncPrintf(VT_FGCOL(RED));
osSyncPrintf("dmaEntryMsgQが一杯です。キューサイズの再検討をおすすめします。");
LOG_NUM("(sizeof(dmaEntryMsgBufs) / sizeof(dmaEntryMsgBufs[0]))", ARRAY_COUNT(sDmaMgrMsgBuf), "../z_std_dma.c",
952);
osSyncPrintf(VT_RST);
}
osSendMesg(&sDmaMgrMsgQueue, req, OS_MESG_BLOCK);
osSendMesg(&sDmaMgrMsgQueue, (OSMesg)req, OS_MESG_BLOCK);
return 0;
}
@ -421,9 +420,10 @@ void DmaMgr_Init(void) {
Fault_AddHungupAndCrash("../z_std_dma.c", 1055);
}
osCreateMesgQueue(&sDmaMgrMsgQueue, sDmaMgrMsgs, ARRAY_COUNT(sDmaMgrMsgs));
osCreateMesgQueue(&sDmaMgrMsgQueue, sDmaMgrMsgBuf, ARRAY_COUNT(sDmaMgrMsgBuf));
StackCheck_Init(&sDmaMgrStackInfo, sDmaMgrStack, STACK_TOP(sDmaMgrStack), 0, 0x100, "dmamgr");
osCreateThread(&sDmaMgrThread, 0x12, DmaMgr_ThreadEntry, 0, STACK_TOP(sDmaMgrStack), Z_PRIORITY_DMAMGR);
osCreateThread(&sDmaMgrThread, THREAD_ID_DMAMGR, DmaMgr_ThreadEntry, NULL, STACK_TOP(sDmaMgrStack),
THREAD_PRI_DMAMGR);
osStartThread(&sDmaMgrThread);
}

View File

@ -56,15 +56,15 @@ void ArenaImpl_SetDebugInfo(ArenaNode* node, const char* file, s32 line, Arena*
}
void ArenaImpl_LockInit(Arena* arena) {
osCreateMesgQueue(&arena->lock, &sArenaLockMsg, 1);
osCreateMesgQueue(&arena->lockQueue, &sArenaLockMsg, 1);
}
void ArenaImpl_Lock(Arena* arena) {
osSendMesg(&arena->lock, NULL, OS_MESG_BLOCK);
osSendMesg(&arena->lockQueue, NULL, OS_MESG_BLOCK);
}
void ArenaImpl_Unlock(Arena* arena) {
osRecvMesg(&arena->lock, NULL, OS_MESG_BLOCK);
osRecvMesg(&arena->lockQueue, NULL, OS_MESG_BLOCK);
}
ArenaNode* ArenaImpl_GetNextBlock(ArenaNode* node) {

View File

@ -1,11 +1,10 @@
#include "global.h"
void func_800C3C80(AudioMgr* audioMgr) {
AudioTask* task;
AudioTask* task = audioMgr->rspTask;
task = audioMgr->rspTask;
if (audioMgr->rspTask->taskQueue != NULL) {
osSendMesg(task->taskQueue, NULL, OS_MESG_BLOCK);
if (audioMgr->rspTask->msgQueue != NULL) {
osSendMesg(task->msgQueue, NULL, OS_MESG_BLOCK);
}
}
@ -17,14 +16,14 @@ void AudioMgr_HandleRetrace(AudioMgr* audioMgr) {
}
if (audioMgr->rspTask != NULL) {
audioMgr->audioTask.next = NULL;
audioMgr->audioTask.flags = 2;
audioMgr->audioTask.flags = OS_SC_NEEDS_RSP;
audioMgr->audioTask.framebuffer = NULL;
audioMgr->audioTask.list = audioMgr->rspTask->task;
audioMgr->audioTask.msgQ = &audioMgr->unk_AC;
audioMgr->audioTask.msgQueue = &audioMgr->taskQueue;
audioMgr->audioTask.msg = NULL;
osSendMesg(&audioMgr->sched->cmdQ, &audioMgr->audioTask, OS_MESG_BLOCK);
osSendMesg(&audioMgr->sched->cmdQueue, (OSMesg)&audioMgr->audioTask, OS_MESG_BLOCK);
Sched_SendEntryMsg(audioMgr->sched);
}
@ -37,7 +36,7 @@ void AudioMgr_HandleRetrace(AudioMgr* audioMgr) {
D_8016A558 += osGetTime() - D_8016A550;
D_8016A550 = 0;
if (audioMgr->rspTask != NULL) {
osRecvMesg(&audioMgr->unk_AC, NULL, OS_MESG_BLOCK);
osRecvMesg(&audioMgr->taskQueue, NULL, OS_MESG_BLOCK);
func_800C3C80(audioMgr);
}
audioMgr->rspTask = rspTask;
@ -58,16 +57,16 @@ void AudioMgr_ThreadEntry(void* arg0) {
Audio_Init();
AudioLoad_SetDmaHandler(DmaMgr_DmaHandler);
Audio_InitSound();
osSendMesg(&audioMgr->unk_C8, NULL, OS_MESG_BLOCK);
IrqMgr_AddClient(audioMgr->irqMgr, &irqClient, &audioMgr->unk_74);
osSendMesg(&audioMgr->lockQueue, NULL, OS_MESG_BLOCK);
IrqMgr_AddClient(audioMgr->irqMgr, &irqClient, &audioMgr->interruptQueue);
while (true) {
osRecvMesg(&audioMgr->unk_74, (OSMesg*)&msg, OS_MESG_BLOCK);
osRecvMesg(&audioMgr->interruptQueue, (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);
while (!MQ_IS_EMPTY(&audioMgr->interruptQueue)) {
osRecvMesg(&audioMgr->interruptQueue, (OSMesg*)&msg, OS_MESG_BLOCK);
switch (*msg) {
case OS_SC_RETRACE_MSG:
break;
@ -85,7 +84,7 @@ void AudioMgr_ThreadEntry(void* arg0) {
}
void AudioMgr_Unlock(AudioMgr* audioMgr) {
osRecvMesg(&audioMgr->unk_C8, NULL, OS_MESG_BLOCK);
osRecvMesg(&audioMgr->lockQueue, NULL, OS_MESG_BLOCK);
}
void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedContext* sched, IrqMgr* irqMgr) {
@ -95,12 +94,12 @@ void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedCon
audioMgr->irqMgr = irqMgr;
audioMgr->rspTask = 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);
osCreateMesgQueue(&audioMgr->taskQueue, audioMgr->taskMsgBuf, ARRAY_COUNT(audioMgr->taskMsgBuf));
osCreateMesgQueue(&audioMgr->interruptQueue, audioMgr->interruptMsgBuf, ARRAY_COUNT(audioMgr->interruptMsgBuf));
osCreateMesgQueue(&audioMgr->lockQueue, audioMgr->lockMsgBuf, ARRAY_COUNT(audioMgr->lockMsgBuf));
osSendMesg(&audioMgr->unk_AC, NULL, OS_MESG_BLOCK);
osSendMesg(&audioMgr->taskQueue, NULL, OS_MESG_BLOCK);
osCreateThread(&audioMgr->unk_E8, id, AudioMgr_ThreadEntry, audioMgr, stack, pri);
osStartThread(&audioMgr->unk_E8);
osCreateThread(&audioMgr->thread, id, AudioMgr_ThreadEntry, audioMgr, stack, pri);
osStartThread(&audioMgr->thread);
}

View File

@ -58,7 +58,7 @@ void AudioLoad_ProcessSlowLoads(s32 resetStatus);
void AudioLoad_DmaSlowCopyUnkMedium(s32 devAddr, u8* ramAddr, s32 size, s32 arg3);
OSMesgQueue sScriptLoadQueue;
OSMesg sScriptLoadMesgBuf[0x10];
OSMesg sScriptLoadMsgBuf[16];
s8* sScriptLoadDonePointers[0x10];
s32 sAudioLoadPad1[2]; // file padding
@ -193,7 +193,7 @@ void* AudioLoad_DmaSampleData(u32 devAddr, u32 size, s32 arg2, u8* dmaIndexRef,
dma->ttl = 3;
dma->devAddr = dmaDevAddr;
dma->sizeUnused = transfer;
AudioLoad_Dma(&gAudioContext.currAudioFrameDmaIoMesgBuf[gAudioContext.curAudioFrameDmaCount++], OS_MESG_PRI_NORMAL,
AudioLoad_Dma(&gAudioContext.currAudioFrameDmaIoMsgBuf[gAudioContext.curAudioFrameDmaCount++], OS_MESG_PRI_NORMAL,
OS_READ, dmaDevAddr, dma->ramAddr, transfer, &gAudioContext.currAudioFrameDmaQueue, medium,
"SUPERDMA");
*dmaIndexRef = dmaIndex;
@ -442,7 +442,7 @@ s32 AudioLoad_SyncLoadInstrument(s32 fontId, s32 instId, s32 drumId) {
void AudioLoad_AsyncLoad(s32 tableType, s32 id, s32 nChunks, s32 retData, OSMesgQueue* retQueue) {
if (AudioLoad_AsyncLoadInner(tableType, id, nChunks, retData, retQueue) == NULL) {
osSendMesg(retQueue, 0xFFFFFFFF, OS_MESG_NOBLOCK);
osSendMesg(retQueue, (OSMesg)0xFFFFFFFF, OS_MESG_NOBLOCK);
}
}
@ -967,7 +967,7 @@ void* AudioLoad_AsyncLoadInner(s32 tableType, s32 id, s32 nChunks, s32 retData,
ret = AudioLoad_SearchCaches(tableType, realId);
if (ret != NULL) {
status = 2;
osSendMesg(retQueue, MK_ASYNC_MSG(retData, 0, 0, 0), OS_MESG_NOBLOCK);
osSendMesg(retQueue, (OSMesg)MK_ASYNC_MSG(retData, 0, 0, 0), OS_MESG_NOBLOCK);
} else {
sp50 = AudioLoad_GetLoadTable(tableType);
size = sp50->entries[realId].size;
@ -1106,11 +1106,12 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
gAudioContext.rspTask[0].task.t.data_size = 0;
gAudioContext.rspTask[1].task.t.data_size = 0;
osCreateMesgQueue(&gAudioContext.syncDmaQueue, &gAudioContext.syncDmaMesg, 1);
osCreateMesgQueue(&gAudioContext.currAudioFrameDmaQueue, gAudioContext.currAudioFrameDmaMesgBuf, 0x40);
osCreateMesgQueue(&gAudioContext.externalLoadQueue, gAudioContext.externalLoadMesgBuf,
ARRAY_COUNT(gAudioContext.externalLoadMesgBuf));
osCreateMesgQueue(&gAudioContext.preloadSampleQueue, gAudioContext.preloadSampleMesgBuf,
ARRAY_COUNT(gAudioContext.externalLoadMesgBuf));
osCreateMesgQueue(&gAudioContext.currAudioFrameDmaQueue, gAudioContext.currAudioFrameDmaMsgBuf,
ARRAY_COUNT(gAudioContext.currAudioFrameDmaMsgBuf));
osCreateMesgQueue(&gAudioContext.externalLoadQueue, gAudioContext.externalLoadMsgBuf,
ARRAY_COUNT(gAudioContext.externalLoadMsgBuf));
osCreateMesgQueue(&gAudioContext.preloadSampleQueue, gAudioContext.preloadSampleMsgBuf,
ARRAY_COUNT(gAudioContext.externalLoadMsgBuf));
gAudioContext.curAudioFrameDmaCount = 0;
gAudioContext.sampleDmaCount = 0;
gAudioContext.cartHandle = osCartRomInit();
@ -1161,7 +1162,7 @@ void AudioLoad_Init(void* heap, u32 heapSize) {
AudioHeap_AllocPoolInit(&gAudioContext.permanentPool, temp_v0_3, D_8014A6C4.permanentPoolSize);
gAudioContextInitalized = true;
osSendMesg(gAudioContext.taskStartQueueP, (void*)gAudioContext.totalTaskCnt, OS_MESG_NOBLOCK);
osSendMesg(gAudioContext.taskStartQueueP, (OSMesg)gAudioContext.totalTaskCnt, OS_MESG_NOBLOCK);
}
void AudioLoad_InitSlowLoads(void) {
@ -1273,7 +1274,7 @@ void AudioLoad_ProcessSlowLoads(s32 resetStatus) {
switch (gAudioContext.slowLoads[i].status) {
case LOAD_STATUS_LOADING:
if (slowLoad->medium != MEDIUM_UNK) {
osRecvMesg(&slowLoad->msgqueue, NULL, OS_MESG_BLOCK);
osRecvMesg(&slowLoad->msgQueue, NULL, OS_MESG_BLOCK);
}
if (resetStatus != 0) {
@ -1313,9 +1314,9 @@ void AudioLoad_ProcessSlowLoads(s32 resetStatus) {
void AudioLoad_DmaSlowCopy(AudioSlowLoad* slowLoad, s32 size) {
Audio_InvalDCache(slowLoad->curRamAddr, size);
osCreateMesgQueue(&slowLoad->msgqueue, &slowLoad->msg, 1);
osCreateMesgQueue(&slowLoad->msgQueue, &slowLoad->msg, 1);
AudioLoad_Dma(&slowLoad->ioMesg, OS_MESG_PRI_NORMAL, 0, slowLoad->curDevAddr, slowLoad->curRamAddr, size,
&slowLoad->msgqueue, slowLoad->medium, "SLOWCOPY");
&slowLoad->msgQueue, slowLoad->medium, "SLOWCOPY");
}
void AudioLoad_DmaSlowCopyUnkMedium(s32 devAddr, u8* ramAddr, s32 size, s32 arg3) {
@ -1376,7 +1377,7 @@ AudioAsyncLoad* AudioLoad_StartAsyncLoadUnkMedium(s32 unkMediumParam, u32 devAdd
return NULL;
}
osSendMesg(&gAudioContext.asyncLoadUnkMediumQueue, asyncLoad, OS_MESG_NOBLOCK);
osSendMesg(&gAudioContext.asyncLoadUnkMediumQueue, (OSMesg)asyncLoad, OS_MESG_NOBLOCK);
asyncLoad->unkMediumParam = unkMediumParam;
return asyncLoad;
}
@ -2017,5 +2018,5 @@ void AudioLoad_ProcessScriptLoads(void) {
}
void AudioLoad_InitScriptLoads(void) {
osCreateMesgQueue(&sScriptLoadQueue, sScriptLoadMesgBuf, ARRAY_COUNT(sScriptLoadMesgBuf));
osCreateMesgQueue(&sScriptLoadQueue, sScriptLoadMsgBuf, ARRAY_COUNT(sScriptLoadMsgBuf));
}

View File

@ -67,7 +67,7 @@ AudioTask* func_800E5000(void) {
}
}
osSendMesg(gAudioContext.taskStartQueueP, gAudioContext.totalTaskCnt, OS_MESG_NOBLOCK);
osSendMesg(gAudioContext.taskStartQueueP, (OSMesg)gAudioContext.totalTaskCnt, OS_MESG_NOBLOCK);
gAudioContext.rspTaskIdx ^= 1;
gAudioContext.curAIBufIdx++;
gAudioContext.curAIBufIdx %= 3;
@ -99,7 +99,7 @@ AudioTask* func_800E5000(void) {
}
}
sp48 = gAudioContext.currAudioFrameDmaQueue.validCount;
sp48 = MQ_GET_COUNT(&gAudioContext.currAudioFrameDmaQueue);
if (sp48 != 0) {
for (i = 0; i < sp48; i++) {
osRecvMesg(&gAudioContext.currAudioFrameDmaQueue, NULL, OS_MESG_NOBLOCK);
@ -114,7 +114,8 @@ AudioTask* func_800E5000(void) {
if (gAudioContext.resetStatus != 0) {
if (AudioHeap_ResetStep() == 0) {
if (gAudioContext.resetStatus == 0) {
osSendMesg(gAudioContext.audioResetQueueP, gAudioContext.audioResetSpecIdToLoad, OS_MESG_NOBLOCK);
osSendMesg(gAudioContext.audioResetQueueP, (OSMesg)(u32)gAudioContext.audioResetSpecIdToLoad,
OS_MESG_NOBLOCK);
}
sWaitingAudioTask = NULL;
@ -171,7 +172,7 @@ AudioTask* func_800E5000(void) {
gWaveSamples[8] = (s16*)(((u8*)func_800E4FE0) + (gAudioContext.audioRandom & 0xFFF0));
index = gAudioContext.rspTaskIdx;
gAudioContext.currTask->taskQueue = NULL;
gAudioContext.currTask->msgQueue = NULL;
gAudioContext.currTask->unk_44 = NULL;
task = &gAudioContext.currTask->task.t;
@ -348,11 +349,12 @@ void Audio_InitMesgQueuesInternal(void) {
gAudioContext.taskStartQueueP = &gAudioContext.taskStartQueue;
gAudioContext.cmdProcQueueP = &gAudioContext.cmdProcQueue;
gAudioContext.audioResetQueueP = &gAudioContext.audioResetQueue;
osCreateMesgQueue(gAudioContext.taskStartQueueP, gAudioContext.taskStartMsgs,
ARRAY_COUNT(gAudioContext.taskStartMsgs));
osCreateMesgQueue(gAudioContext.cmdProcQueueP, gAudioContext.cmdProcMsgs, ARRAY_COUNT(gAudioContext.cmdProcMsgs));
osCreateMesgQueue(gAudioContext.audioResetQueueP, gAudioContext.audioResetMesgs,
ARRAY_COUNT(gAudioContext.audioResetMesgs));
osCreateMesgQueue(gAudioContext.taskStartQueueP, gAudioContext.taskStartMsgBuf,
ARRAY_COUNT(gAudioContext.taskStartMsgBuf));
osCreateMesgQueue(gAudioContext.cmdProcQueueP, gAudioContext.cmdProcMsgBuf,
ARRAY_COUNT(gAudioContext.cmdProcMsgBuf));
osCreateMesgQueue(gAudioContext.audioResetQueueP, gAudioContext.audioResetMsgBuf,
ARRAY_COUNT(gAudioContext.audioResetMsgBuf));
}
void Audio_QueueCmd(u32 opArgs, void** data) {
@ -398,7 +400,7 @@ s32 Audio_ScheduleProcessCmds(void) {
ret =
osSendMesg(gAudioContext.cmdProcQueueP,
(void*)(((gAudioContext.cmdRdPos & 0xFF) << 8) | (gAudioContext.cmdWrPos & 0xFF)), OS_MESG_NOBLOCK);
(OSMesg)(((gAudioContext.cmdRdPos & 0xFF) << 8) | (gAudioContext.cmdWrPos & 0xFF)), OS_MESG_NOBLOCK);
if (ret != -1) {
gAudioContext.cmdRdPos = gAudioContext.cmdWrPos;
ret = 0;
@ -514,7 +516,7 @@ s32 func_800E5EDC(void) {
void func_800E5F34(void) {
// macro?
// clang-format off
s32 chk = -1; s32 sp28; do {} while (osRecvMesg(gAudioContext.audioResetQueueP, (OSMesg*)&sp28, OS_MESG_NOBLOCK) != chk);
s32 chk = -1; OSMesg msg; do {} while (osRecvMesg(gAudioContext.audioResetQueueP, &msg, OS_MESG_NOBLOCK) != chk);
// clang-format on
}

View File

@ -128,8 +128,8 @@ void Fault_ClientRunTask(FaultClientTask* task) {
// Run the fault client callback on a separate thread
thread = alloca(sizeof(OSThread));
osCreateThread(thread, 2, Fault_ClientProcessThread, task, sFaultInstance->clientThreadSp,
OS_PRIORITY_APPMAX - 1);
osCreateThread(thread, THREAD_ID_FAULT, Fault_ClientProcessThread, task, sFaultInstance->clientThreadSp,
THREAD_PRI_FAULT_CLIENT);
osStartThread(thread);
} else {
// Run the fault client callback on this thread
@ -1265,7 +1265,8 @@ void Fault_Init(void) {
gFaultMgr.faultHandlerEnabled = true;
osCreateMesgQueue(&sFaultInstance->queue, &sFaultInstance->msg, 1);
StackCheck_Init(&sFaultThreadInfo, &sFaultStack, STACK_TOP(sFaultStack), 0, 0x100, "fault");
osCreateThread(&sFaultInstance->thread, 2, Fault_ThreadEntry, 0, STACK_TOP(sFaultStack), OS_PRIORITY_APPMAX);
osCreateThread(&sFaultInstance->thread, THREAD_ID_FAULT, Fault_ThreadEntry, 0, STACK_TOP(sFaultStack),
THREAD_PRI_FAULT);
osStartThread(&sFaultInstance->thread);
}

View File

@ -227,7 +227,7 @@ void Graph_TaskSet00(GraphicsContext* gfxCtx) {
gfxCtx->fbIdx--;
}
scTask->msgQ = &gfxCtx->queue;
scTask->msgQueue = &gfxCtx->queue;
scTask->msg = NULL;
cfb = &sGraphCfbInfos[sGraphCfbInfoIdx++];
@ -245,9 +245,9 @@ void Graph_TaskSet00(GraphicsContext* gfxCtx) {
if (1) {}
gfxCtx->schedMsgQ = &gSchedContext.cmdQ;
gfxCtx->schedMsgQueue = &gSchedContext.cmdQueue;
osSendMesg(&gSchedContext.cmdQ, scTask, OS_MESG_BLOCK);
osSendMesg(&gSchedContext.cmdQueue, (OSMesg)scTask, OS_MESG_BLOCK);
Sched_SendEntryMsg(&gSchedContext);
}

View File

@ -50,18 +50,18 @@ u32 sIrqMgrRetraceCount = 0;
*
* @param irqMgr the IrqMgr instance to register with.
* @param client client to register.
* @param msgQ message queue to send notifications of interrupts to, associated with the client.
* @param msgQueue message queue to send notifications of interrupts to, associated with the client.
*/
void IrqMgr_AddClient(IrqMgr* irqMgr, IrqMgrClient* client, OSMesgQueue* msgQ) {
void IrqMgr_AddClient(IrqMgr* irqMgr, IrqMgrClient* client, OSMesgQueue* msgQueue) {
OSIntMask prevInt;
LogUtils_CheckNullPointer("this", irqMgr, "../irqmgr.c", 96);
LogUtils_CheckNullPointer("c", client, "../irqmgr.c", 97);
LogUtils_CheckNullPointer("msgQ", msgQ, "../irqmgr.c", 98);
LogUtils_CheckNullPointer("msgQ", msgQueue, "../irqmgr.c", 98);
prevInt = osSetIntMask(OS_IM_NONE);
client->queue = msgQ;
client->queue = msgQueue;
client->prev = irqMgr->clients;
irqMgr->clients = client;
@ -298,6 +298,6 @@ void IrqMgr_Init(IrqMgr* irqMgr, void* stack, OSPri pri, u8 retraceCount) {
osCreateMesgQueue(&irqMgr->queue, irqMgr->msgBuf, ARRAY_COUNT(irqMgr->msgBuf));
osSetEventMesg(OS_EVENT_PRENMI, &irqMgr->queue, (OSMesg)IRQ_PRENMI_MSG);
osViSetEvent(&irqMgr->queue, (OSMesg)IRQ_RETRACE_MSG, retraceCount);
osCreateThread(&irqMgr->thread, 19, IrqMgr_ThreadEntry, irqMgr, stack, pri);
osCreateThread(&irqMgr->thread, THREAD_ID_IRQMGR, IrqMgr_ThreadEntry, irqMgr, stack, pri);
osStartThread(&irqMgr->thread);
}

View File

@ -22,8 +22,8 @@ StackEntry sAudioStackInfo;
StackEntry sPadMgrStackInfo;
StackEntry sIrqMgrStackInfo;
AudioMgr gAudioMgr;
OSMesgQueue sSiIntMsgQ;
OSMesg sSiIntMsgBuf[1];
OSMesgQueue sSerialEventQueue;
OSMesg sSerialMsgBuf[1];
void Main_LogSystemHeap(void) {
osSyncPrintf(VT_FGCOL(GREEN));
@ -35,7 +35,7 @@ void Main_LogSystemHeap(void) {
void Main(void* arg) {
IrqMgrClient irqClient;
OSMesgQueue irqMgrMsgQ;
OSMesgQueue irqMgrMsgQueue;
OSMesg irqMgrMsgBuf[60];
u32 systemHeapStart;
u32 fb;
@ -69,37 +69,38 @@ void Main(void* arg) {
R_ENABLE_ARENA_DBG = 0;
osCreateMesgQueue(&sSiIntMsgQ, sSiIntMsgBuf, ARRAY_COUNT(sSiIntMsgBuf));
osSetEventMesg(OS_EVENT_SI, &sSiIntMsgQ, NULL);
osCreateMesgQueue(&sSerialEventQueue, sSerialMsgBuf, ARRAY_COUNT(sSerialMsgBuf));
osSetEventMesg(OS_EVENT_SI, &sSerialEventQueue, NULL);
Main_LogSystemHeap();
osCreateMesgQueue(&irqMgrMsgQ, irqMgrMsgBuf, ARRAY_COUNT(irqMgrMsgBuf));
osCreateMesgQueue(&irqMgrMsgQueue, irqMgrMsgBuf, ARRAY_COUNT(irqMgrMsgBuf));
StackCheck_Init(&sIrqMgrStackInfo, sIrqMgrStack, STACK_TOP(sIrqMgrStack), 0, 0x100, "irqmgr");
IrqMgr_Init(&gIrqMgr, STACK_TOP(sIrqMgrStack), Z_PRIORITY_IRQMGR, 1);
IrqMgr_Init(&gIrqMgr, STACK_TOP(sIrqMgrStack), THREAD_PRI_IRQMGR, 1);
osSyncPrintf("タスクスケジューラの初期化\n"); // "Initialize the task scheduler"
StackCheck_Init(&sSchedStackInfo, sSchedStack, STACK_TOP(sSchedStack), 0, 0x100, "sched");
Sched_Init(&gSchedContext, STACK_TOP(sSchedStack), Z_PRIORITY_SCHED, D_80013960, 1, &gIrqMgr);
Sched_Init(&gSchedContext, STACK_TOP(sSchedStack), THREAD_PRI_SCHED, D_80013960, 1, &gIrqMgr);
IrqMgr_AddClient(&gIrqMgr, &irqClient, &irqMgrMsgQ);
IrqMgr_AddClient(&gIrqMgr, &irqClient, &irqMgrMsgQueue);
StackCheck_Init(&sAudioStackInfo, sAudioStack, STACK_TOP(sAudioStack), 0, 0x100, "audio");
AudioMgr_Init(&gAudioMgr, STACK_TOP(sAudioStack), Z_PRIORITY_AUDIOMGR, 10, &gSchedContext, &gIrqMgr);
AudioMgr_Init(&gAudioMgr, STACK_TOP(sAudioStack), THREAD_PRI_AUDIOMGR, THREAD_ID_AUDIOMGR, &gSchedContext,
&gIrqMgr);
StackCheck_Init(&sPadMgrStackInfo, sPadMgrStack, STACK_TOP(sPadMgrStack), 0, 0x100, "padmgr");
PadMgr_Init(&gPadMgr, &sSiIntMsgQ, &gIrqMgr, 7, Z_PRIORITY_PADMGR, STACK_TOP(sPadMgrStack));
PadMgr_Init(&gPadMgr, &sSerialEventQueue, &gIrqMgr, THREAD_ID_PADMGR, THREAD_PRI_PADMGR, STACK_TOP(sPadMgrStack));
AudioMgr_Unlock(&gAudioMgr);
StackCheck_Init(&sGraphStackInfo, sGraphStack, STACK_TOP(sGraphStack), 0, 0x100, "graph");
osCreateThread(&sGraphThread, 4, Graph_ThreadEntry, arg, STACK_TOP(sGraphStack), Z_PRIORITY_GRAPH);
osCreateThread(&sGraphThread, THREAD_ID_GRAPH, Graph_ThreadEntry, arg, STACK_TOP(sGraphStack), THREAD_PRI_GRAPH);
osStartThread(&sGraphThread);
osSetThreadPri(NULL, 15);
osSetThreadPri(NULL, THREAD_PRI_MAIN);
while (true) {
msg = NULL;
osRecvMesg(&irqMgrMsgQ, (OSMesg)&msg, OS_MESG_BLOCK);
osRecvMesg(&irqMgrMsgQueue, (OSMesg*)&msg, OS_MESG_BLOCK);
if (msg == NULL) {
break;
}

View File

@ -4,47 +4,47 @@
s32 D_8012D280 = 1;
OSMesgQueue* PadMgr_LockSerialMesgQueue(PadMgr* padMgr) {
OSMesgQueue* ctrlrQ = NULL;
OSMesgQueue* serialEventQueue = NULL;
if (D_8012D280 > 2) {
// "serialMsgQ Waiting for lock"
osSyncPrintf("%2d %d serialMsgQロック待ち %08x %08x %08x\n", osGetThreadId(NULL),
padMgr->serialMsgQ.validCount, padMgr, &padMgr->serialMsgQ, &ctrlrQ);
MQ_GET_COUNT(&padMgr->serialLockQueue), padMgr, &padMgr->serialLockQueue, &serialEventQueue);
}
osRecvMesg(&padMgr->serialMsgQ, (OSMesg)&ctrlrQ, OS_MESG_BLOCK);
osRecvMesg(&padMgr->serialLockQueue, (OSMesg*)&serialEventQueue, OS_MESG_BLOCK);
if (D_8012D280 > 2) {
// "serialMsgQ Locked"
osSyncPrintf("%2d %d serialMsgQをロックしました %08x\n", osGetThreadId(NULL),
padMgr->serialMsgQ.validCount, ctrlrQ);
MQ_GET_COUNT(&padMgr->serialLockQueue), serialEventQueue);
}
return ctrlrQ;
return serialEventQueue;
}
void PadMgr_UnlockSerialMesgQueue(PadMgr* padMgr, OSMesgQueue* ctrlrQ) {
void PadMgr_UnlockSerialMesgQueue(PadMgr* padMgr, OSMesgQueue* serialEventQueue) {
if (D_8012D280 > 2) {
// "serialMsgQ Unlock"
osSyncPrintf("%2d %d serialMsgQロック解除します %08x %08x %08x\n", osGetThreadId(NULL),
padMgr->serialMsgQ.validCount, padMgr, &padMgr->serialMsgQ, ctrlrQ);
MQ_GET_COUNT(&padMgr->serialLockQueue), padMgr, &padMgr->serialLockQueue, serialEventQueue);
}
osSendMesg(&padMgr->serialMsgQ, ctrlrQ, OS_MESG_BLOCK);
osSendMesg(&padMgr->serialLockQueue, (OSMesg)serialEventQueue, OS_MESG_BLOCK);
if (D_8012D280 > 2) {
// "serialMsgQ Unlocked"
osSyncPrintf("%2d %d serialMsgQロック解除しました %08x %08x %08x\n", osGetThreadId(NULL),
padMgr->serialMsgQ.validCount, padMgr, &padMgr->serialMsgQ, ctrlrQ);
MQ_GET_COUNT(&padMgr->serialLockQueue), padMgr, &padMgr->serialLockQueue, serialEventQueue);
}
}
void PadMgr_LockPadData(PadMgr* padMgr) {
osRecvMesg(&padMgr->lockMsgQ, NULL, OS_MESG_BLOCK);
osRecvMesg(&padMgr->lockQueue, NULL, OS_MESG_BLOCK);
}
void PadMgr_UnlockPadData(PadMgr* padMgr) {
osSendMesg(&padMgr->lockMsgQ, NULL, OS_MESG_BLOCK);
osSendMesg(&padMgr->lockQueue, NULL, OS_MESG_BLOCK);
}
void PadMgr_RumbleControl(PadMgr* padMgr) {
@ -52,7 +52,7 @@ void PadMgr_RumbleControl(PadMgr* padMgr) {
static u32 frame;
s32 temp = 1;
s32 triedRumbleComm;
OSMesgQueue* ctrlrQ = PadMgr_LockSerialMesgQueue(padMgr);
OSMesgQueue* serialEventQueue = PadMgr_LockSerialMesgQueue(padMgr);
s32 var4;
s32 i;
@ -133,7 +133,7 @@ void PadMgr_RumbleControl(PadMgr* padMgr) {
i = frame % 4;
if (padMgr->ctrlrIsConnected[i] && (padMgr->padStatus[i].status & 1) && (padMgr->pakType[i] != 1)) {
var4 = osMotorInit(ctrlrQ, &padMgr->pfs[i], i);
var4 = osMotorInit(serialEventQueue, &padMgr->pfs[i], i);
if (var4 == 0) {
padMgr->pakType[i] = 1;
@ -156,15 +156,15 @@ void PadMgr_RumbleControl(PadMgr* padMgr) {
}
frame++;
PadMgr_UnlockSerialMesgQueue(padMgr, ctrlrQ);
PadMgr_UnlockSerialMesgQueue(padMgr, serialEventQueue);
}
void PadMgr_RumbleStop(PadMgr* padMgr) {
s32 i;
OSMesgQueue* ctrlrQ = PadMgr_LockSerialMesgQueue(padMgr);
OSMesgQueue* serialEventQueue = PadMgr_LockSerialMesgQueue(padMgr);
for (i = 0; i < 4; i++) {
if (osMotorInit(ctrlrQ, &padMgr->pfs[i], i) == 0) {
if (osMotorInit(serialEventQueue, &padMgr->pfs[i], i) == 0) {
if ((gFaultMgr.msgId == 0) && (padMgr->rumbleOnFrames != 0)) {
osSyncPrintf(VT_FGCOL(YELLOW));
// "Stop vibration pack"
@ -176,7 +176,7 @@ void PadMgr_RumbleStop(PadMgr* padMgr) {
}
}
PadMgr_UnlockSerialMesgQueue(padMgr, ctrlrQ);
PadMgr_UnlockSerialMesgQueue(padMgr, serialEventQueue);
}
void PadMgr_RumbleReset(PadMgr* padMgr) {
@ -265,23 +265,23 @@ void PadMgr_ProcessInputs(PadMgr* padMgr) {
void PadMgr_HandleRetraceMsg(PadMgr* padMgr) {
s32 i;
OSMesgQueue* queue = PadMgr_LockSerialMesgQueue(padMgr);
OSMesgQueue* serialEventQueue = PadMgr_LockSerialMesgQueue(padMgr);
u32 mask;
osContStartReadData(queue);
osContStartReadData(serialEventQueue);
if (padMgr->retraceCallback) {
padMgr->retraceCallback(padMgr, padMgr->retraceCallbackValue);
}
osRecvMesg(queue, NULL, OS_MESG_BLOCK);
osRecvMesg(serialEventQueue, NULL, OS_MESG_BLOCK);
osContGetReadData(padMgr->pads);
if (padMgr->preNMIShutdown) {
bzero(padMgr->pads, sizeof(padMgr->pads));
}
PadMgr_ProcessInputs(padMgr);
osContStartQuery(queue);
osRecvMesg(queue, NULL, OS_MESG_BLOCK);
osContStartQuery(serialEventQueue);
osRecvMesg(serialEventQueue, NULL, OS_MESG_BLOCK);
osContGetQuery(padMgr->padStatus);
PadMgr_UnlockSerialMesgQueue(padMgr, queue);
PadMgr_UnlockSerialMesgQueue(padMgr, serialEventQueue);
mask = 0;
for (i = 0; i < 4; i++) {
@ -351,22 +351,22 @@ void PadMgr_RequestPadData(PadMgr* padMgr, Input* inputs, s32 mode) {
}
void PadMgr_ThreadEntry(PadMgr* padMgr) {
s16* mesg = NULL;
s16* msg = NULL;
s32 exit;
osSyncPrintf("コントローラスレッド実行開始\n"); // "Controller thread execution start"
exit = false;
while (!exit) {
if ((D_8012D280 > 2) && (padMgr->interruptMsgQ.validCount == 0)) {
if ((D_8012D280 > 2) && MQ_IS_EMPTY(&padMgr->interruptQueue)) {
// "Waiting for controller thread event"
osSyncPrintf("コントローラスレッドイベント待ち %lld\n", OS_CYCLES_TO_USEC(osGetTime()));
}
osRecvMesg(&padMgr->interruptMsgQ, (OSMesg)&mesg, OS_MESG_BLOCK);
LogUtils_CheckNullPointer("msg", mesg, "../padmgr.c", 563);
osRecvMesg(&padMgr->interruptQueue, (OSMesg*)&msg, OS_MESG_BLOCK);
LogUtils_CheckNullPointer("msg", msg, "../padmgr.c", 563);
switch (*mesg) {
switch (*msg) {
case OS_SC_RETRACE_MSG:
if (D_8012D280 > 2) {
osSyncPrintf("padmgr_HandleRetraceMsg START %lld\n", OS_CYCLES_TO_USEC(osGetTime()));
@ -393,19 +393,19 @@ void PadMgr_ThreadEntry(PadMgr* padMgr) {
osSyncPrintf("コントローラスレッド実行終了\n"); // "Controller thread execution end"
}
void PadMgr_Init(PadMgr* padMgr, OSMesgQueue* siIntMsgQ, IrqMgr* irqMgr, OSId id, OSPri priority, void* stack) {
void PadMgr_Init(PadMgr* padMgr, OSMesgQueue* serialEventQueue, IrqMgr* irqMgr, OSId id, OSPri priority, void* stack) {
osSyncPrintf("パッドマネージャ作成 padmgr_Create()\n"); // "Pad Manager creation"
bzero(padMgr, sizeof(PadMgr));
padMgr->irqMgr = irqMgr;
osCreateMesgQueue(&padMgr->interruptMsgQ, padMgr->interruptMsgBuf, 4);
IrqMgr_AddClient(padMgr->irqMgr, &padMgr->irqClient, &padMgr->interruptMsgQ);
osCreateMesgQueue(&padMgr->serialMsgQ, padMgr->serialMsgBuf, 1);
PadMgr_UnlockSerialMesgQueue(padMgr, siIntMsgQ);
osCreateMesgQueue(&padMgr->lockMsgQ, padMgr->lockMsgBuf, 1);
osCreateMesgQueue(&padMgr->interruptQueue, padMgr->interruptMsgBuf, ARRAY_COUNT(padMgr->interruptMsgBuf));
IrqMgr_AddClient(padMgr->irqMgr, &padMgr->irqClient, &padMgr->interruptQueue);
osCreateMesgQueue(&padMgr->serialLockQueue, padMgr->serialLockMsgBuf, ARRAY_COUNT(padMgr->serialLockMsgBuf));
PadMgr_UnlockSerialMesgQueue(padMgr, serialEventQueue);
osCreateMesgQueue(&padMgr->lockQueue, padMgr->lockMsgBuf, ARRAY_COUNT(padMgr->lockMsgBuf));
PadMgr_UnlockPadData(padMgr);
PadSetup_Init(siIntMsgQ, (u8*)&padMgr->validCtrlrsMask, padMgr->padStatus);
PadSetup_Init(serialEventQueue, (u8*)&padMgr->validCtrlrsMask, padMgr->padStatus);
padMgr->nControllers = 4;
osContSetCh(padMgr->nControllers);

View File

@ -82,12 +82,12 @@ void Sched_HandleReset(SchedContext* sc) {
if (sc->curRSPTask != NULL) {
LOG_TIME("(((u64)(now - graph_rsp_start_time)*(1000000LL/15625LL))/((62500000LL*3/4)/15625LL))",
OS_CYCLES_TO_USEC(now - sRSPGFXStartTime), "../sched.c", 427);
osSendMesg(&sc->interruptQ, RSP_DONE_MSG, OS_MESG_NOBLOCK);
osSendMesg(&sc->interruptQueue, (OSMesg)RSP_DONE_MSG, OS_MESG_NOBLOCK);
}
if (sc->curRDPTask != NULL) {
LOG_TIME("(((u64)(now - rdp_start_time)*(1000000LL/15625LL))/((62500000LL*3/4)/15625LL))",
OS_CYCLES_TO_USEC(now - sRDPStartTime), "../sched.c", 431);
osSendMesg(&sc->interruptQ, RDP_DONE_MSG, OS_MESG_NOBLOCK);
osSendMesg(&sc->interruptQueue, (OSMesg)RDP_DONE_MSG, OS_MESG_NOBLOCK);
}
}
}
@ -231,8 +231,8 @@ void func_800C8BC4(SchedContext* sc, OSScTask* task) {
u32 Sched_IsComplete(SchedContext* sc, OSScTask* task) {
if (!(task->state & (OS_SC_DP | OS_SC_SP))) {
if (task->msgQ != NULL) {
osSendMesg(task->msgQ, task->msg, OS_MESG_BLOCK);
if (task->msgQueue != NULL) {
osSendMesg(task->msgQueue, task->msg, OS_MESG_BLOCK);
}
if (task->flags & OS_SC_SWAPBUFFER) {
@ -292,10 +292,10 @@ void Sched_HandleEntry(SchedContext* sc) {
OSScTask* nextRSP = NULL;
OSScTask* nextRDP = NULL;
s32 state;
OSMesg msg = NULL;
OSScTask* task = NULL;
while (osRecvMesg(&sc->cmdQ, &msg, OS_MESG_NOBLOCK) != -1) {
Sched_QueueTask(sc, msg);
while (osRecvMesg(&sc->cmdQueue, (OSMesg*)&task, OS_MESG_NOBLOCK) != -1) {
Sched_QueueTask(sc, task);
}
if (sc->doAudio != 0 && sc->curRSPTask != NULL) {
@ -425,22 +425,20 @@ void Sched_SendEntryMsg(SchedContext* sc) {
osSyncPrintf("osScKickEntryMsg\n");
}
osSendMesg(&sc->interruptQ, ENTRY_MSG, OS_MESG_BLOCK);
osSendMesg(&sc->interruptQueue, (OSMesg)ENTRY_MSG, OS_MESG_BLOCK);
}
void Sched_ThreadEntry(void* arg) {
void* msg;
OSMesg msg = NULL;
SchedContext* sc = (SchedContext*)arg;
msg = NULL;
while (true) {
if (sLogScheduler) {
// "%08d: standby"
osSyncPrintf("%08d:待機中\n", (u32)OS_CYCLES_TO_USEC(osGetTime()));
}
osRecvMesg(&sc->interruptQ, &msg, OS_MESG_BLOCK);
osRecvMesg(&sc->interruptQueue, &msg, OS_MESG_BLOCK);
switch ((s32)msg) {
case ENTRY_MSG:
@ -461,8 +459,6 @@ void Sched_ThreadEntry(void* arg) {
}
Sched_HandleRDPDone(sc);
continue;
default:
break;
}
switch (((OSScMsg*)msg)->type) {
case 1:
@ -481,11 +477,11 @@ void Sched_ThreadEntry(void* arg) {
void Sched_Init(SchedContext* sc, void* stack, OSPri priority, UNK_TYPE arg3, UNK_TYPE arg4, IrqMgr* irqMgr) {
bzero(sc, sizeof(SchedContext));
sc->unk_24C = 1;
osCreateMesgQueue(&sc->interruptQ, sc->intBuf, 8);
osCreateMesgQueue(&sc->cmdQ, sc->cmdMsgBuf, 8);
osSetEventMesg(OS_EVENT_SP, &sc->interruptQ, RSP_DONE_MSG);
osSetEventMesg(OS_EVENT_DP, &sc->interruptQ, RDP_DONE_MSG);
IrqMgr_AddClient(irqMgr, &sc->irqClient, &sc->interruptQ);
osCreateThread(&sc->thread, 5, Sched_ThreadEntry, sc, stack, priority);
osCreateMesgQueue(&sc->interruptQueue, sc->interruptMsgBuf, ARRAY_COUNT(sc->interruptMsgBuf));
osCreateMesgQueue(&sc->cmdQueue, sc->cmdMsgBuf, ARRAY_COUNT(sc->cmdMsgBuf));
osSetEventMesg(OS_EVENT_SP, &sc->interruptQueue, RSP_DONE_MSG);
osSetEventMesg(OS_EVENT_DP, &sc->interruptQueue, RDP_DONE_MSG);
IrqMgr_AddClient(irqMgr, &sc->irqClient, &sc->interruptQueue);
osCreateThread(&sc->thread, THREAD_ID_SCHED, Sched_ThreadEntry, sc, stack, priority);
osStartThread(&sc->thread);
}

View File

@ -55,12 +55,12 @@ void Jpeg_ScheduleDecoderTask(JpegContext* ctx) {
ctx->scTask.next = NULL;
ctx->scTask.flags = OS_SC_NEEDS_RSP;
ctx->scTask.msgQ = &ctx->mq;
ctx->scTask.msgQueue = &ctx->mq;
ctx->scTask.msg = NULL;
ctx->scTask.framebuffer = NULL;
ctx->scTask.list.t = sJpegTask;
osSendMesg(&gSchedContext.cmdQ, (OSMesg)&ctx->scTask, OS_MESG_BLOCK);
osSendMesg(&gSchedContext.cmdQueue, (OSMesg)&ctx->scTask, OS_MESG_BLOCK);
Sched_SendEntryMsg(&gSchedContext); // osScKickEntryMsg
osRecvMesg(&ctx->mq, NULL, OS_MESG_BLOCK);
}

View File

@ -731,11 +731,11 @@ void Environment_UpdateSkybox(u8 skyboxId, EnvironmentContext* envCtx, SkyboxCon
}
if ((envCtx->skyboxDmaState == SKYBOX_DMA_FILE1_START) || (envCtx->skyboxDmaState == SKYBOX_DMA_FILE2_START)) {
if (osRecvMesg(&envCtx->loadQueue, 0, OS_MESG_NOBLOCK) == 0) {
if (osRecvMesg(&envCtx->loadQueue, NULL, OS_MESG_NOBLOCK) == 0) {
envCtx->skyboxDmaState++;
}
} else if (envCtx->skyboxDmaState >= SKYBOX_DMA_FILE1_DONE) {
if (osRecvMesg(&envCtx->loadQueue, 0, OS_MESG_NOBLOCK) == 0) {
if (osRecvMesg(&envCtx->loadQueue, NULL, OS_MESG_NOBLOCK) == 0) {
envCtx->skyboxDmaState = SKYBOX_DMA_INACTIVE;
}
}

View File

@ -1,7 +1,6 @@
#include "global.h"
void MsgEvent_SendNullTask(void) {
s32 pad[4];
OSScTask task;
OSMesgQueue queue;
OSMesg msg;
@ -9,12 +8,12 @@ void MsgEvent_SendNullTask(void) {
task.next = NULL;
task.flags = OS_SC_RCP_MASK;
task.msgQ = &queue;
task.msgQueue = &queue;
task.msg = NULL;
task.framebuffer = NULL;
task.list.t.type = M_NULTASK;
osCreateMesgQueue(task.msgQ, &msg, 1);
osSendMesg(&gSchedContext.cmdQ, &task, OS_MESG_BLOCK);
osCreateMesgQueue(task.msgQueue, &msg, 1);
osSendMesg(&gSchedContext.cmdQueue, (OSMesg)&task, OS_MESG_BLOCK);
Sched_SendEntryMsg(&gSchedContext);
osRecvMesg(&queue, NULL, OS_MESG_BLOCK);
}

View File

@ -1307,7 +1307,7 @@ void Player_DrawGetItemImpl(GlobalContext* globalCtx, Player* this, Vec3f* refPo
}
void Player_DrawGetItem(GlobalContext* globalCtx, Player* this) {
if (!this->giObjectLoading || !osRecvMesg(&this->giObjectLoadQueue, NULL, OS_MESG_NOBLOCK)) {
if (!this->giObjectLoading || osRecvMesg(&this->giObjectLoadQueue, NULL, OS_MESG_NOBLOCK) == 0) {
this->giObjectLoading = false;
Player_DrawGetItemImpl(globalCtx, this, &sGetItemRefPos, ABS(this->unk_862));
}

View File

@ -569,7 +569,7 @@ s32 func_8009728C(GlobalContext* globalCtx, RoomContext* roomCtx, s32 roomNum) {
s32 func_800973FC(GlobalContext* globalCtx, RoomContext* roomCtx) {
if (roomCtx->status == 1) {
if (!osRecvMesg(&roomCtx->loadQueue, NULL, OS_MESG_NOBLOCK)) {
if (osRecvMesg(&roomCtx->loadQueue, NULL, OS_MESG_NOBLOCK) == 0) {
roomCtx->status = 0;
roomCtx->curRoom.segment = roomCtx->unk_34;
gSegments[3] = VIRTUAL_TO_PHYSICAL(roomCtx->unk_34);

View File

@ -91,7 +91,7 @@ void Object_UpdateBank(ObjectContext* objectCtx) {
osSyncPrintf("OBJECT EXCHANGE BANK-%2d SIZE %8.3fK SEG=%08x\n", i, size / 1024.0f, status->segment);
DmaMgr_SendRequest2(&status->dmaRequest, status->segment, objectFile->vromStart, size, 0,
&status->loadQueue, NULL, "../z_scene.c", 266);
} else if (!osRecvMesg(&status->loadQueue, NULL, OS_MESG_NOBLOCK)) {
} else if (osRecvMesg(&status->loadQueue, NULL, OS_MESG_NOBLOCK) == 0) {
status->id = -status->id;
}
}

View File

@ -4,7 +4,7 @@
typedef struct {
/* 0x00 */ OSPiHandle piHandle;
/* 0x74 */ OSIoMesg ioMesg;
/* 0x8C */ OSMesgQueue mesgQ;
/* 0x8C */ OSMesgQueue msgQueue;
} SsSramContext; // size = 0xA4
SsSramContext sSsSramContext = { 0 };
@ -32,20 +32,20 @@ void SsSram_Init(u32 addr, u8 handleType, u8 handleDomain, u8 handleLatency, u8
__osRestoreInt(prevInt);
sSsSramContext.ioMesg.hdr.pri = OS_MESG_PRI_NORMAL;
sSsSramContext.ioMesg.hdr.retQueue = &sSsSramContext.mesgQ;
sSsSramContext.ioMesg.hdr.retQueue = &sSsSramContext.msgQueue;
sSsSramContext.ioMesg.devAddr = addr;
}
}
void SsSram_Dma(void* dramAddr, size_t size, s32 direction) {
OSMesg mesg;
OSMesg msg;
osCreateMesgQueue(&sSsSramContext.mesgQ, &mesg, 1);
osCreateMesgQueue(&sSsSramContext.msgQueue, &msg, 1);
sSsSramContext.ioMesg.dramAddr = dramAddr;
sSsSramContext.ioMesg.size = size;
osWritebackDCache(dramAddr, size);
osEPiStartDma(&sSsSramContext.piHandle, &sSsSramContext.ioMesg, direction);
osRecvMesg(&sSsSramContext.mesgQ, &mesg, OS_MESG_BLOCK);
osRecvMesg(&sSsSramContext.msgQueue, &msg, OS_MESG_BLOCK);
osInvalDCache(dramAddr, size);
}

View File

@ -44,10 +44,10 @@ s32 __osContRamWrite(OSMesgQueue* mq, s32 channel, u16 address, u8* buffer, s32
ret = __osSiRawStartDma(OS_WRITE, &gPifMempakBuf);
crc = __osContDataCrc(buffer);
osRecvMesg(mq, (OSMesg*)NULL, OS_MESG_BLOCK);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
ret = __osSiRawStartDma(OS_READ, &gPifMempakBuf);
osRecvMesg(mq, (OSMesg*)NULL, OS_MESG_BLOCK);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
ret = ((((__OSContRamHeader*)ptr)->rxsize & 0xC0) >> 4);
if (!ret) {

View File

@ -5,7 +5,7 @@ u8 __osContLastPoll;
u8 __osMaxControllers; // always 4
OSTimer __osEepromTimer;
OSMesgQueue __osEepromTimerMsgQ;
OSMesgQueue __osEepromTimerMsgQueue;
OSMesg __osEepromTimerMsg;
u32 gOSContInitialized = 0;
@ -13,7 +13,7 @@ u32 gOSContInitialized = 0;
#define HALF_SECOND OS_USEC_TO_CYCLES(500000)
s32 osContInit(OSMesgQueue* mq, u8* ctlBitfield, OSContStatus* status) {
OSMesg mesg;
OSMesg msg;
s32 ret = 0;
OSTime currentTime;
OSTimer timer;
@ -26,20 +26,20 @@ s32 osContInit(OSMesgQueue* mq, u8* ctlBitfield, OSContStatus* status) {
gOSContInitialized = 1;
currentTime = osGetTime();
if (HALF_SECOND > currentTime) {
osCreateMesgQueue(&timerqueue, &mesg, 1);
osSetTimer(&timer, HALF_SECOND - currentTime, 0, &timerqueue, &mesg);
osRecvMesg(&timerqueue, &mesg, OS_MESG_BLOCK);
osCreateMesgQueue(&timerqueue, &msg, 1);
osSetTimer(&timer, HALF_SECOND - currentTime, 0, &timerqueue, &msg);
osRecvMesg(&timerqueue, &msg, OS_MESG_BLOCK);
}
__osMaxControllers = MAXCONTROLLERS;
__osPackRequestData(CONT_CMD_REQUEST_STATUS);
ret = __osSiRawStartDma(OS_WRITE, &__osPifInternalBuff);
osRecvMesg(mq, &mesg, OS_MESG_BLOCK);
osRecvMesg(mq, &msg, OS_MESG_BLOCK);
ret = __osSiRawStartDma(OS_READ, &__osPifInternalBuff);
osRecvMesg(mq, &mesg, OS_MESG_BLOCK);
osRecvMesg(mq, &msg, OS_MESG_BLOCK);
__osContGetInitData(ctlBitfield, status);
__osContLastPoll = CONT_CMD_REQUEST_STATUS;
__osSiCreateAccessQueue();
osCreateMesgQueue(&__osEepromTimerMsgQ, &__osEepromTimerMsg, 1);
osCreateMesgQueue(&__osEepromTimerMsgQueue, &__osEepromTimerMsg, 1);
return ret;
}

View File

@ -15,7 +15,7 @@ void __osDevMgrMain(void* arg) {
ioMesg = NULL;
while (true) {
osRecvMesg(arg0->cmdQueue, (OSMesg)&ioMesg, OS_MESG_BLOCK);
osRecvMesg(arg0->cmdQueue, (OSMesg*)&ioMesg, OS_MESG_BLOCK);
if ((ioMesg->piHandle != NULL) && (ioMesg->piHandle->type == DEVICE_TYPE_64DD) &&
((ioMesg->piHandle->transferInfo.cmdType == 0) || (ioMesg->piHandle->transferInfo.cmdType == 1))) {
transfer = &ioMesg->piHandle->transferInfo;
@ -46,7 +46,7 @@ void __osDevMgrMain(void* arg) {
HW_REG(PI_STATUS_REG, u32) = PI_STATUS_CLEAR_INTR;
__osSetGlobalIntMask(0x00100C01);
}
osSendMesg(ioMesg->hdr.retQueue, ioMesg, OS_MESG_NOBLOCK);
osSendMesg(ioMesg->hdr.retQueue, (OSMesg)ioMesg, OS_MESG_NOBLOCK);
if ((phi_s2 != 1) || (ioMesg->piHandle->transferInfo.block[0].errStatus != 0)) {
break;
@ -55,7 +55,7 @@ void __osDevMgrMain(void* arg) {
phi_s2 = 0;
}
osSendMesg(arg0->acccessQueue, 0, OS_MESG_NOBLOCK);
osSendMesg(arg0->acccessQueue, NULL, OS_MESG_NOBLOCK);
if (ioMesg->piHandle->transferInfo.blockNum == 1) {
osYieldThread();
}
@ -80,7 +80,7 @@ void __osDevMgrMain(void* arg) {
ioMesg->size);
break;
case OS_MESG_TYPE_LOOPBACK:
osSendMesg(ioMesg->hdr.retQueue, ioMesg, OS_MESG_NOBLOCK);
osSendMesg(ioMesg->hdr.retQueue, (OSMesg)ioMesg, OS_MESG_NOBLOCK);
phi_s0 = -1;
break;
default:
@ -90,7 +90,7 @@ void __osDevMgrMain(void* arg) {
if (phi_s0 == 0) {
osRecvMesg(arg0->eventQueue, &sp70, OS_MESG_BLOCK);
osSendMesg(ioMesg->hdr.retQueue, ioMesg, OS_MESG_NOBLOCK);
osSendMesg(ioMesg->hdr.retQueue, (OSMesg)ioMesg, OS_MESG_NOBLOCK);
osSendMesg(arg0->acccessQueue, NULL, OS_MESG_NOBLOCK);
}
}

View File

@ -1,24 +1,23 @@
#include "global.h"
u32 __osPiAccessQueueEnabled = 0;
OSMesg piAccessBuf;
u32 __osPiAccessQueueEnabled = false;
OSMesg piAccessBuf[1];
OSMesgQueue __osPiAccessQueue;
void __osPiCreateAccessQueue(void) {
__osPiAccessQueueEnabled = 1;
osCreateMesgQueue(&__osPiAccessQueue, &piAccessBuf, 1);
__osPiAccessQueueEnabled = true;
osCreateMesgQueue(&__osPiAccessQueue, piAccessBuf, ARRAY_COUNT(piAccessBuf));
osSendMesg(&__osPiAccessQueue, NULL, OS_MESG_NOBLOCK);
}
void __osPiGetAccess(void) {
OSMesg mesg;
OSMesg msg;
if (!__osPiAccessQueueEnabled) {
__osPiCreateAccessQueue();
}
osRecvMesg(&__osPiAccessQueue, &mesg, OS_MESG_BLOCK);
osRecvMesg(&__osPiAccessQueue, &msg, OS_MESG_BLOCK);
}
void __osPiRelAccess(void) {

View File

@ -17,13 +17,13 @@ OSPiHandle* __osCurrentHandle[] = {
&__Dom2SpeedParam,
};
void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgCnt) {
void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQueue, OSMesg* cmdBuf, s32 cmdMsgCnt) {
u32 prevInt;
OSPri newPri;
OSPri currentPri;
if (!__osPiDevMgr.initialized) {
osCreateMesgQueue(cmdQ, cmdBuf, cmdMsgCnt);
osCreateMesgQueue(cmdQueue, cmdBuf, cmdMsgCnt);
osCreateMesgQueue(&piEventQueue, piEventBuf, 1);
if (!__osPiAccessQueueEnabled) {
__osPiCreateAccessQueue();
@ -39,7 +39,7 @@ void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgC
prevInt = __osDisableInt();
__osPiDevMgr.initialized = true;
__osPiDevMgr.cmdQueue = cmdQ;
__osPiDevMgr.cmdQueue = cmdQueue;
__osPiDevMgr.mgrThread = &piThread;
__osPiDevMgr.eventQueue = &piEventQueue;
__osPiDevMgr.acccessQueue = &__osPiAccessQueue;

View File

@ -1,24 +1,24 @@
#include "global.h"
OSMesg osSiMesgBuff[SIAccessQueueSize];
OSMesgQueue gOSSiMessageQueue;
u32 gOSSiAccessQueueCreated = 0;
OSMesg siAccessBuf[1];
OSMesgQueue __osSiAccessQueue;
u32 __osSiAccessQueueEnabled = false;
void __osSiCreateAccessQueue(void) {
gOSSiAccessQueueCreated = 1;
osCreateMesgQueue(&gOSSiMessageQueue, &osSiMesgBuff[0], SIAccessQueueSize - 1);
osSendMesg(&gOSSiMessageQueue, NULL, OS_MESG_NOBLOCK);
__osSiAccessQueueEnabled = true;
osCreateMesgQueue(&__osSiAccessQueue, siAccessBuf, ARRAY_COUNT(siAccessBuf));
osSendMesg(&__osSiAccessQueue, NULL, OS_MESG_NOBLOCK);
}
void __osSiGetAccess(void) {
OSMesg mesg;
OSMesg msg;
if (!gOSSiAccessQueueCreated) {
if (!__osSiAccessQueueEnabled) {
__osSiCreateAccessQueue();
}
osRecvMesg(&gOSSiMessageQueue, &mesg, OS_MESG_BLOCK);
osRecvMesg(&__osSiAccessQueue, &msg, OS_MESG_BLOCK);
}
void __osSiRelAccess(void) {
osSendMesg(&gOSSiMessageQueue, NULL, OS_MESG_NOBLOCK);
osSendMesg(&__osSiAccessQueue, NULL, OS_MESG_NOBLOCK);
}

View File

@ -4,7 +4,7 @@
OSThread viThread;
STACK(viThreadStack, 0x1000);
OSMesgQueue viEventQueue;
OSMesg viEventBuf[6];
OSMesg viEventBuf[5];
OSIoMesg viRetraceMsg;
OSIoMesg viCounterMsg;
OSMgrArgs __osViDevMgr = { 0 };
@ -20,7 +20,7 @@ void osCreateViManager(OSPri pri) {
if (!__osViDevMgr.initialized) {
__osTimerServicesInit();
__additional_scanline = 0;
osCreateMesgQueue(&viEventQueue, viEventBuf, 5);
osCreateMesgQueue(&viEventQueue, viEventBuf, ARRAY_COUNT(viEventBuf));
viRetraceMsg.hdr.type = OS_MESG_TYPE_VRETRACE;
viRetraceMsg.hdr.pri = OS_MESG_PRI_NORMAL;
viRetraceMsg.hdr.retQueue = NULL;
@ -59,7 +59,7 @@ void viMgrMain(void* vargs) {
static u16 viRetrace;
OSMgrArgs* args;
u32 addTime;
OSIoMesg* mesg = NULL;
OSIoMesg* msg = NULL;
u32 temp = 0; // always 0
viRetrace = __osViGetCurrentContext()->retraceCount;
@ -70,8 +70,8 @@ void viMgrMain(void* vargs) {
args = (OSMgrArgs*)vargs;
while (true) {
osRecvMesg(args->eventQueue, (OSMesg)&mesg, OS_MESG_BLOCK);
switch (mesg->hdr.type) {
osRecvMesg(args->eventQueue, (OSMesg*)&msg, OS_MESG_BLOCK);
switch (msg->hdr.type) {
case OS_MESG_TYPE_VRETRACE:
__osViSwapContext();
viRetrace--;

View File

@ -1,8 +1,8 @@
#include "global.h"
void osCreateMesgQueue(OSMesgQueue* mq, OSMesg* msg, s32 count) {
mq->mtqueue = (OSThread*)__osThreadTail;
mq->fullqueue = (OSThread*)__osThreadTail;
mq->mtqueue = (OSThread*)&__osThreadTail;
mq->fullqueue = (OSThread*)&__osThreadTail;
mq->validCount = 0;
mq->first = 0;
mq->msgCount = count;

View File

@ -1,8 +1,8 @@
#include "global.h"
OSThread* __osThreadTail[2] = { NULL, (OSThread*)OS_PRIORITY_THREADTAIL };
OSThread* __osRunQueue = (OSThread*)__osThreadTail;
OSThread* __osActiveQueue = (OSThread*)__osThreadTail;
__OSThreadTail __osThreadTail = { NULL, OS_PRIORITY_THREADTAIL };
OSThread* __osRunQueue = (OSThread*)&__osThreadTail;
OSThread* __osActiveQueue = (OSThread*)&__osThreadTail;
OSThread* __osRunningThread = NULL;
OSThread* __osFaultedThread = NULL;
@ -20,8 +20,8 @@ void osCreateThread(OSThread* thread, OSId id, void (*entry)(void*), void* arg,
thread->context.ra = __osCleanupThread;
mask = OS_IM_ALL;
thread->context.sr = (mask & OS_IM_CPU) | 2;
thread->context.rcp = (mask & RCP_IMASK) >> 16;
thread->context.sr = (mask & OS_IM_CPU) | SR_EXL;
thread->context.rcp = (mask & RCP_IMASK) >> RCP_IMASKSHIFT;
thread->context.fpcsr = FPCSR_FS | FPCSR_EV;
thread->fp = 0;
thread->state = OS_STATE_STOPPED;

View File

@ -3,7 +3,7 @@
s32 osJamMesg(OSMesgQueue* mq, OSMesg msg, s32 flag) {
register u32 prevInt = __osDisableInt();
while (mq->validCount >= mq->msgCount) {
while (MQ_IS_FULL(mq)) {
if (flag == OS_MESG_BLOCK) {
__osRunningThread->state = OS_STATE_WAITING;
__osEnqueueAndYield(&mq->fullqueue);

View File

@ -3,12 +3,12 @@
s32 osRecvMesg(OSMesgQueue* mq, OSMesg* msg, s32 flag) {
register u32 prevInt = __osDisableInt();
while (mq->validCount == 0) {
while (MQ_IS_EMPTY(mq)) {
if (flag == OS_MESG_NOBLOCK) {
__osRestoreInt(prevInt);
return -1;
}
__osRunningThread->state = 8;
__osRunningThread->state = OS_STATE_WAITING;
__osEnqueueAndYield((OSThread**)mq);
}

View File

@ -1,12 +1,12 @@
#include "global.h"
s32 osSendMesg(OSMesgQueue* mq, OSMesg mesg, s32 flag) {
s32 osSendMesg(OSMesgQueue* mq, OSMesg msg, s32 flag) {
register u32 prevInt = __osDisableInt();
register u32 index;
while (mq->validCount >= mq->msgCount) {
while (MQ_IS_FULL(mq)) {
if (flag == OS_MESG_BLOCK) {
__osRunningThread->state = 8;
__osRunningThread->state = OS_STATE_WAITING;
__osEnqueueAndYield(&mq->fullqueue);
} else {
__osRestoreInt(prevInt);
@ -15,7 +15,7 @@ s32 osSendMesg(OSMesgQueue* mq, OSMesg mesg, s32 flag) {
}
index = (mq->first + mq->validCount) % mq->msgCount;
mq->msg[index] = mesg;
mq->msg[index] = msg;
mq->validCount++;
if (mq->mtqueue->next != NULL) {

View File

@ -9,12 +9,12 @@ void osSetThreadPri(OSThread* thread, OSPri pri) {
if (thread->priority != pri) {
thread->priority = pri;
if (thread != __osRunningThread && thread->state != 1) {
if (thread != __osRunningThread && thread->state != OS_STATE_STOPPED) {
__osDequeueThread(thread->queue, thread);
__osEnqueueThread(thread->queue, thread);
}
if (__osRunningThread->priority < __osRunQueue->priority) {
__osRunningThread->state = 2;
__osRunningThread->state = OS_STATE_RUNNABLE;
__osEnqueueAndYield(&__osRunQueue);
}
}

View File

@ -4,16 +4,16 @@ void osStartThread(OSThread* thread) {
register u32 prevInt = __osDisableInt();
switch (thread->state) {
case 8:
thread->state = 2;
case OS_STATE_WAITING:
thread->state = OS_STATE_RUNNABLE;
__osEnqueueThread(&__osRunQueue, thread);
break;
case 1:
case OS_STATE_STOPPED:
if (thread->queue == NULL || thread->queue == &__osRunQueue) {
thread->state = 2;
thread->state = OS_STATE_RUNNABLE;
__osEnqueueThread(&__osRunQueue, thread);
} else {
thread->state = 8;
thread->state = OS_STATE_WAITING;
__osEnqueueThread(thread->queue, thread);
__osEnqueueThread(&__osRunQueue, __osPopThread(thread->queue));
}
@ -24,7 +24,7 @@ void osStartThread(OSThread* thread) {
__osDispatchThread();
} else {
if (__osRunningThread->priority < __osRunQueue->priority) {
__osRunningThread->state = 2;
__osRunningThread->state = OS_STATE_RUNNABLE;
__osEnqueueAndYield(&__osRunQueue);
}
}

View File

@ -5,19 +5,19 @@ void osStopThread(OSThread* thread) {
register u32 state;
if (thread == NULL) {
state = 4;
state = OS_STATE_RUNNING;
} else {
state = thread->state;
}
switch (state) {
case 4:
__osRunningThread->state = 1;
case OS_STATE_RUNNING:
__osRunningThread->state = OS_STATE_STOPPED;
__osEnqueueAndYield(NULL);
break;
case 2:
case 8:
thread->state = 1;
case OS_STATE_RUNNABLE:
case OS_STATE_WAITING:
thread->state = OS_STATE_STOPPED;
__osDequeueThread(thread->queue, thread);
break;
}