mirror of
https://github.com/zeldaret/mm.git
synced 2026-08-22 06:19:54 -04:00
Irqmgr + scheduler Docs (#1527)
* irqmgr docs * Sched_FlushTaskQueue * scheduler docs
This commit is contained in:
+2
-2
@@ -9,7 +9,7 @@
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ IrqMgr* irqMgr;
|
||||
/* 0x004 */ SchedContext* sched;
|
||||
/* 0x004 */ Scheduler* sched;
|
||||
/* 0x008 */ OSScTask audioTask;
|
||||
/* 0x060 */ AudioTask* rspTask;
|
||||
/* 0x064 */ OSMesgQueue interruptQueue;
|
||||
@@ -24,6 +24,6 @@ typedef struct {
|
||||
|
||||
void AudioMgr_StopAllSfxExceptSystem(void);
|
||||
void AudioMgr_Unlock(AudioMgr* audioMgr);
|
||||
void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedContext* sched, IrqMgr* irqMgr);
|
||||
void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, Scheduler* sched, IrqMgr* irqMgr);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -3,20 +3,6 @@
|
||||
|
||||
#include "z64.h"
|
||||
|
||||
void IrqMgr_AddClient(IrqMgr* irqmgr, IrqMgrClient* client, OSMesgQueue* msgQueue);
|
||||
void IrqMgr_RemoveClient(IrqMgr* irqmgr, IrqMgrClient* remove);
|
||||
void IrqMgr_SendMesgForClient(IrqMgr* irqmgr, OSMesg msg);
|
||||
void IrqMgr_JamMesgForClient(IrqMgr* irqmgr, OSMesg msg);
|
||||
void IrqMgr_HandlePreNMI(IrqMgr* irqmgr);
|
||||
void IrqMgr_CheckStack(void);
|
||||
void IrqMgr_HandlePRENMI450(IrqMgr* irqmgr);
|
||||
void IrqMgr_HandlePRENMI480(IrqMgr* irqmgr);
|
||||
void IrqMgr_HandlePRENMI500(IrqMgr* irqmgr);
|
||||
void IrqMgr_HandleRetrace(IrqMgr* irqmgr);
|
||||
void IrqMgr_ThreadEntry(IrqMgr* irqmgr);
|
||||
void IrqMgr_Init(IrqMgr* irqmgr, void* stack, OSPri pri, u8 retraceCount);
|
||||
|
||||
|
||||
// void EnItem00_SetObject(EnItem00* this, PlayState* play, f32* shadowOffset, f32* shadowScale);
|
||||
// void EnItem00_Init(Actor* thisx, PlayState* play);
|
||||
// void EnItem00_Destroy(Actor* thisx, PlayState* play);
|
||||
@@ -490,7 +476,6 @@ s32 func_8010BF58(Actor* actor, PlayState* play, void* param_3, UNK_PTR param_4,
|
||||
void Nmi_Init(void);
|
||||
void Nmi_SetPrenmiStart(void);
|
||||
// s32 Nmi_GetPrenmiHasStarted(void);
|
||||
void MsgEvent_SendNullTask(void);
|
||||
f32 OLib_Vec3fDist(Vec3f* a, Vec3f* b);
|
||||
f32 OLib_Vec3fDistOutDiff(Vec3f* a, Vec3f* b, Vec3f* dest);
|
||||
f32 OLib_Vec3fDistXZ(Vec3f* a, Vec3f* b);
|
||||
@@ -614,29 +599,6 @@ Gfx* Graph_GfxPlusOne(Gfx* gfx);
|
||||
Gfx* Graph_BranchDlist(Gfx* gfx, Gfx* dst);
|
||||
void* Graph_DlistAlloc(Gfx** gfx, size_t size);
|
||||
|
||||
void Sched_SwapFramebuffer(CfbInfo* cfbInfo);
|
||||
void Sched_RetraceUpdateFramebuffer(SchedContext* sched, CfbInfo* cfbInfo);
|
||||
void Sched_HandleReset(SchedContext* sched);
|
||||
void Sched_HandleStop(SchedContext* sched);
|
||||
void Sched_HandleAudioCancel(SchedContext* sched);
|
||||
void Sched_HandleGfxCancel(SchedContext* sched);
|
||||
void Sched_QueueTask(SchedContext* sched, OSScTask* task);
|
||||
void Sched_Yield(SchedContext* sched);
|
||||
s32 Sched_Schedule(SchedContext* sched, OSScTask** spTask, OSScTask** dpTask, s32 state);
|
||||
void Sched_TaskUpdateFramebuffer(SchedContext* sched, OSScTask* task);
|
||||
void Sched_NotifyDone(SchedContext* sched, OSScTask* task);
|
||||
void Sched_RunTask(SchedContext* sched, OSScTask* spTask, OSScTask* dpTask);
|
||||
void Sched_HandleEntry(SchedContext* sched);
|
||||
void Sched_HandleRetrace(SchedContext* sched);
|
||||
void Sched_HandleRSPDone(SchedContext* sched);
|
||||
void Sched_HandleRDPDone(SchedContext* sched);
|
||||
void Sched_SendEntryMsg(SchedContext* sched);
|
||||
void Sched_SendAudioCancelMsg(SchedContext* sched);
|
||||
void Sched_SendGfxCancelMsg(SchedContext* sched);
|
||||
void Sched_FaultClient(void* param1, void* param2);
|
||||
void Sched_ThreadEntry(void* arg);
|
||||
void Sched_Init(SchedContext* sched, void* stack, OSPri pri, u8 viModeType, UNK_TYPE arg4, IrqMgr* irqMgr);
|
||||
|
||||
void Mtx_SetTranslateScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, f32 translateX, f32 translateY, f32 translateZ);
|
||||
void Mtx_SetRotationMtx(Mtx* mtx, s32 angle, f32 axisX, f32 axisY, f32 axisZ);
|
||||
void Mtx_SetTranslationRotationScaleMtx(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, s32 angle, f32 axisX, f32 axisY, f32 axisZ,f32 translateX, f32 translateY, f32 translateZ);
|
||||
|
||||
+18
-8
@@ -4,23 +4,29 @@
|
||||
#include "ultra64.h"
|
||||
#include "PR/sched.h"
|
||||
|
||||
typedef enum {
|
||||
/* 0 */ IRQ_RESET_STATUS_IDLE,
|
||||
/* 1 */ IRQ_RESET_STATUS_PRENMI,
|
||||
/* 2 */ IRQ_RESET_STATUS_NMI
|
||||
} IrqResetStatus;
|
||||
|
||||
typedef struct IrqMgrClient {
|
||||
/* 0x0 */ struct IrqMgrClient* next;
|
||||
/* 0x4 */ OSMesgQueue* queue;
|
||||
} IrqMgrClient; // size = 0x8
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ OSScMsg verticalRetraceMesg;
|
||||
/* 0x000 */ OSScMsg retraceMsg;
|
||||
/* 0x020 */ OSScMsg prenmiMsg;
|
||||
/* 0x040 */ OSScMsg nmiMsg;
|
||||
/* 0x060 */ OSMesgQueue irqQueue;
|
||||
/* 0x078 */ OSMesg irqBuffer[8];
|
||||
/* 0x060 */ OSMesgQueue queue;
|
||||
/* 0x078 */ OSMesg msgBuf[8];
|
||||
/* 0x098 */ OSThread thread;
|
||||
/* 0x248 */ IrqMgrClient* callbacks;
|
||||
/* 0x24C */ u8 prenmiStage;
|
||||
/* 0x250 */ OSTime lastPrenmiTime;
|
||||
/* 0x258 */ OSTimer prenmiTimer;
|
||||
/* 0x278 */ OSTime lastFrameTime;
|
||||
/* 0x248 */ IrqMgrClient* clients;
|
||||
/* 0x24C */ u8 resetStatus;
|
||||
/* 0x250 */ OSTime resetTime;
|
||||
/* 0x258 */ OSTimer timer;
|
||||
/* 0x278 */ OSTime retraceTime;
|
||||
} IrqMgr; // size = 0x280
|
||||
|
||||
extern vs32 gIrqMgrResetStatus;
|
||||
@@ -28,4 +34,8 @@ extern volatile OSTime sIrqMgrResetTime;
|
||||
extern volatile OSTime gIrqMgrRetraceTime;
|
||||
extern s32 sIrqMgrRetraceCount;
|
||||
|
||||
void IrqMgr_AddClient(IrqMgr* irqMgr, IrqMgrClient* client, OSMesgQueue* msgQueue);
|
||||
void IrqMgr_RemoveClient(IrqMgr* irqMgr, IrqMgrClient* client);
|
||||
void IrqMgr_Init(IrqMgr* irqMgr, void* stack, OSPri pri, u8 retraceCount);
|
||||
|
||||
#endif
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ extern s32 gScreenHeight;
|
||||
extern size_t gSystemHeapSize;
|
||||
|
||||
extern uintptr_t gSegments[NUM_SEGMENTS];
|
||||
extern SchedContext gSchedContext;
|
||||
extern Scheduler gScheduler;
|
||||
extern OSThread gGraphThread;
|
||||
extern PadMgr gPadMgr;
|
||||
|
||||
|
||||
+37
-28
@@ -7,41 +7,50 @@
|
||||
#include "PR/sptask.h"
|
||||
#include "irqmgr.h"
|
||||
|
||||
#include "unk.h"
|
||||
|
||||
#define TASK_FRAMEBUFFER(task) ((CfbInfo*)(task)->framebuffer)
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u16* fb1;
|
||||
/* 0x04 */ u16* swapBuffer;
|
||||
/* 0x00 */ u16* framebuffer; // current framebuffer
|
||||
/* 0x04 */ u16* swapBuffer; // framebuffer to swap to
|
||||
/* 0x08 */ OSViMode* viMode;
|
||||
/* 0x0C */ u32 features;
|
||||
/* 0x10 */ u8 unk_10;
|
||||
/* 0x11 */ s8 updateRate;
|
||||
/* 0x12 */ s8 updateRate2;
|
||||
/* 0x13 */ u8 unk_13;
|
||||
/* 0x14 */ f32 xScale;
|
||||
/* 0x18 */ f32 yScale;
|
||||
/* 0x0C */ u32 viFeatures;
|
||||
/* 0x10 */ u8 unk_10; // set to 0, never read
|
||||
/* 0x11 */ s8 updateRate; // how many VIs should elapse before next swap
|
||||
/* 0x12 */ s8 updateTimer; // counts down (in VIs) from updateRate to 0, swaps the framebuffer at 0
|
||||
/* 0x14 */ f32 xScale;
|
||||
/* 0x18 */ f32 yScale;
|
||||
} CfbInfo; // size = 0x1C
|
||||
|
||||
typedef struct {
|
||||
/* 0x000 */ OSMesgQueue interruptQ;
|
||||
/* 0x018 */ OSMesg intBuf[64];
|
||||
/* 0x118 */ OSMesgQueue cmdQ;
|
||||
/* 0x130 */ OSMesg cmdMsgBuf[8];
|
||||
/* 0x150 */ OSThread thread;
|
||||
/* 0x300 */ OSScTask* audioListHead;
|
||||
/* 0x304 */ OSScTask* gfxListHead;
|
||||
/* 0x308 */ OSScTask* audioListTail;
|
||||
/* 0x30C */ OSScTask* gfxListTail;
|
||||
/* 0x310 */ OSScTask* curRSPTask;
|
||||
/* 0x314 */ OSScTask* curRDPTask;
|
||||
/* 0x318 */ s32 retraceCount;
|
||||
/* 0x318 */ s32 doAudio;
|
||||
/* 0x320 */ CfbInfo* curBuf;
|
||||
/* 0x324 */ CfbInfo* pendingSwapBuf1;
|
||||
/* 0x328 */ CfbInfo* pendingSwapBuf2;
|
||||
/* 0x32C */ char unk_32C[0x3];
|
||||
/* 0x32F */ u8 shouldUpdateVi;
|
||||
/* 0x000 */ OSMesgQueue interruptQueue;
|
||||
/* 0x018 */ OSMesg interruptMsgBuf[64];
|
||||
/* 0x118 */ OSMesgQueue cmdQueue;
|
||||
/* 0x130 */ OSMesg cmdMsgBuf[8];
|
||||
/* 0x150 */ OSThread thread;
|
||||
/* 0x300 */ OSScTask* audioListHead;
|
||||
/* 0x304 */ OSScTask* gfxListHead;
|
||||
/* 0x308 */ OSScTask* audioListTail;
|
||||
/* 0x30C */ OSScTask* gfxListTail;
|
||||
/* 0x310 */ OSScTask* curRSPTask;
|
||||
/* 0x314 */ OSScTask* curRDPTask;
|
||||
/* 0x318 */ s32 retraceCount;
|
||||
/* 0x318 */ s32 doAudio;
|
||||
/* 0x320 */ CfbInfo* curBuf; // current framebuffer (taken from buffer 1)
|
||||
/* 0x324 */ CfbInfo* pendingSwapBuf1; // buffer 1 (next buffer)
|
||||
/* 0x328 */ CfbInfo* pendingSwapBuf2; // buffer 2 (always NULL)
|
||||
/* 0x32C */ UNK_TYPE1 unk_32C[0x3];
|
||||
/* 0x32F */ u8 isFirstSwap;
|
||||
/* 0x330 */ IrqMgrClient irqClient;
|
||||
} SchedContext; // size = 0x338
|
||||
} Scheduler; // size = 0x338
|
||||
|
||||
void Sched_FlushTaskQueue(void);
|
||||
|
||||
void Sched_SendNotifyMsg(Scheduler* sched);
|
||||
void Sched_SendAudioCancelMsg(Scheduler* sched);
|
||||
void Sched_SendGfxCancelMsg(Scheduler* sched);
|
||||
|
||||
void Sched_Init(Scheduler* sched, void* stack, OSPri pri, u8 viModeType, UNK_TYPE arg4, IrqMgr* irqMgr);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user