sm64pc/lib/src/__osDevMgrMain.c

38 lines
1.2 KiB
C

#include "libultra_internal.h"
void __osDevMgrMain(void *args) {
OSIoMesg *sp34;
OSMesg sp30;
OSMesg sp2c;
s32 sp28;
OSMgrArgs *sp24;
sp34 = NULL;
sp28 = 0;
sp24 = (OSMgrArgs *) args;
while (1) {
osRecvMesg(sp24->unk08, (OSMesg) &sp34, OS_MESG_BLOCK);
switch (sp34->hdr.type) {
case 11:
osRecvMesg(sp24->unk10, &sp2c, OS_MESG_BLOCK);
sp28 = sp24->dma_func(OS_READ, sp34->devAddr, sp34->dramAddr, sp34->size);
break;
case 12:
osRecvMesg(sp24->unk10, &sp2c, OS_MESG_BLOCK);
sp28 = sp24->dma_func(OS_WRITE, sp34->devAddr, sp34->dramAddr, sp34->size);
break;
case 10:
osSendMesg(sp34->hdr.retQueue, sp34, OS_MESG_NOBLOCK);
sp28 = -1;
break;
default:
sp28 = -1;
break;
}
if (sp28 == 0) {
osRecvMesg(sp24->unk0c, &sp30, OS_MESG_BLOCK);
osSendMesg(sp34->hdr.retQueue, sp34, OS_MESG_NOBLOCK);
osSendMesg(sp24->unk10, NULL, OS_MESG_NOBLOCK);
}
}
}