// Transfer IOP to EE, putting data in the fifo as an intermediate step. __fi void SIF2Dma() { int BusyCheck = 0; Sif2Init(); do { //I realise this is very hacky in a way but its an easy way of checking if both are doing something BusyCheck = 0; if (sif2.iop.busy) { if (sif2.fifo.sif_free() > 0 || (sif2.iop.end && sif2.iop.counter == 0)) { BusyCheck++; HandleIOPTransfer(); } } if (sif2.ee.busy) { if (sif2.fifo.size >= 4 || (sif2.ee.end && sif2dma.qwc == 0)) { BusyCheck++; HandleEETransfer(); } } } while (/*!done && */BusyCheck > 0); // Substituting (sif2.ee.busy || sif2.iop.busy) breaks things. Sif2End(); }
// Transfer EE to IOP, putting data in the fifo as an intermediate step. __fi void SIF1Dma() { int BusyCheck = 0; Sif1Init(); do { //I realise this is very hacky in a way but its an easy way of checking if both are doing something BusyCheck = 0; if (sif1.ee.busy) { if(sif1.fifo.sif_free() > 0 || (sif1.ee.end == true && sif1dma.qwc == 0)) { BusyCheck++; HandleEETransfer(); } } if (sif1.iop.busy) { if(sif1.fifo.size >= 4 || (sif1.iop.end == true && sif1.iop.counter == 0)) { BusyCheck++; HandleIOPTransfer(); } } } while (/*!done &&*/ BusyCheck > 0); Sif1End(); }