void hw_pi_dma(void) { if(WPI[3]) { logh("hw: PI Dma Transfer (dram:%08X cart:%08X rd:%X wr:%X st:%X)\n", WPI[0],WPI[1],WPI[2],WPI[3],WPI[4]); osPiStartDma(0,0,0,WPI[1],WPI[0],WPI[3]+1,0); WPI[3]=0; } }
/* * This is the main routine of the app. */ static void mainproc(void *arg) { /* * Setup the message queues */ osCreateMesgQueue(&dmaMessageQ, &dmaMessageBuf, 1); osCreateMesgQueue(&rspMessageQ, &rspMessageBuf, 1); osSetEventMesg(OS_EVENT_SP, &rspMessageQ, NULL); osCreateMesgQueue(&rdpMessageQ, &rdpMessageBuf, 1); osSetEventMesg(OS_EVENT_DP, &rdpMessageQ, NULL); osCreateMesgQueue(&retraceMessageQ, &retraceMessageBuf, 1); osViSetEvent(&retraceMessageQ, NULL, 1); /* * Stick the static segment right after the code/data segment */ staticSegment = _zbufferSegmentEnd; osPiStartDma(&dmaIOMessageBuf, OS_MESG_PRI_NORMAL, OS_READ, (u32) _staticSegmentRomStart, staticSegment, (u32) _staticSegmentRomEnd - (u32) _staticSegmentRomStart, &dmaMessageQ); /* * Wait for DMA to finish */ (void) osRecvMesg(&dmaMessageQ, NULL, OS_MESG_BLOCK); freeSegment = staticSegment + (u32) _staticSegmentRomEnd - (u32) _staticSegmentRomStart; initControllers(MAXCONTROLLERS); game(); }