/* 0x04 */u16*swapBuffer;// framebuffer to swap to
/* 0x08 */OSViMode*viMode;
/* 0x0C */u32viFeatures;
/* 0x10 */u8unk_10;// set to 0, never read
/* 0x11 */s8updateRate;// how many VIs should elapse before next swap
/* 0x12 */s8updateTimer;// counts down (in VIs) from updateRate to 0, swaps the framebuffer at 0
/* 0x14 */f32xScale;
/* 0x18 */f32yScale;
}CfbInfo;// size = 0x1C
typedefstructOSScTask{
/* 0x00 */structOSScTask*next;
/* 0x04 */u32state;
/* 0x08 */u32flags;
/* 0x0C */CfbInfo*framebuffer;// The original libultra OSScTask had void* here, it would point directly to a framebuffer
/* 0x10 */OSTasklist;
/* 0x50 */OSMesgQueue*msgQueue;// Notification queue, will receive a message when the task completes
/* 0x54 */OSMesgmsg;
/* 0x58 */OSTimestartTime;// These last two fields are a guess based on the original libultra OSScTask and padding in other structures, they are unused.
/* 0x60 */OSTimetotalTime;
}OSScTask;// size = 0x68
typedefstruct{
/* 0x0000 */OSMesgQueueinterruptQueue;
/* 0x0018 */OSMesginterruptMsgBuf[8];
/* 0x0038 */OSMesgQueuecmdQueue;// queue for receiving OSScTask pointers
/* 0x0050 */OSMesgcmdMsgBuf[8];
/* 0x0070 */OSThreadthread;
/* 0x0220 */OSScTask*audioListHead;
/* 0x0224 */OSScTask*gfxListHead;
/* 0x0228 */OSScTask*audioListTail;
/* 0x022C */OSScTask*gfxListTail;
/* 0x0230 */OSScTask*curRSPTask;// task currently using the RSP
/* 0x0234 */OSScTask*curRDPTask;// task currently using the RDP
/* 0x0238 */s32retraceCount;
/* 0x023C */s32doAudio;
/* 0x0240 */CfbInfo*curBuf;// current framebuffer (taken from buffer 1)