mirror of
https://github.com/zeldaret/oot.git
synced 2025-04-08 07:36:47 +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:
parent
9984c267d9
commit
7068ad3703
45 changed files with 311 additions and 296 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
#include "message.h"
|
||||
|
||||
#define SIAccessQueueSize 2
|
||||
#define BLOCKSIZE 32
|
||||
#define MAXCONTROLLERS 4
|
||||
#define PFS_ONE_PAGE 8
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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--;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue