#ifndef SCHEDULER_H #define SCHEDULER_H #include "PR/ultratypes.h" #include "PR/sched.h" #include "ultra64/vi.h" #include "ultra64/sptask.h" #include "irqmgr.h" #define TASK_FRAMEBUFFER(task) ((CfbInfo*)(task)->framebuffer) typedef struct { /* 0x00 */ u16* fb1; /* 0x04 */ u16* swapBuffer; /* 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; } 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; /* 0x330 */ IrqMgrClient irqClient; } SchedContext; // size = 0x338 #endif