// This should be much slower, like 12+ cycles/byte, it's like
// that because the CPU runs too fast and fifo is not emulated.
// See also set_dma_end().
- set_event(PSXINT_SPUDMA, words * 4);
+ set_event(PSXINT_SPUDMA, words * 4 * 4);
return;
case 0x01000200: //spu to cpu transfer
psxCpu->Clear(madr, words_copy);
HW_DMA4_MADR = SWAPu32(madr + words_copy * 4);
- set_event(PSXINT_SPUDMA, words * 4);
+ set_event(PSXINT_SPUDMA, words * 4 * 4);
return;
default:
void gpuInterrupt() {
if (HW_DMA2_CHCR == SWAP32(0x01000401) && !(HW_DMA2_MADR & SWAP32(0x800000)))
{
- u32 size, madr_next = 0xffffff;
- size = GPU_dmaChain((u32 *)psxM, HW_DMA2_MADR & 0x1fffff, &madr_next);
+ u32 size, madr_next = 0xffffff, madr = SWAPu32(HW_DMA2_MADR);
+ size = GPU_dmaChain((u32 *)psxM, madr & 0x1fffff, &madr_next);
HW_DMA2_MADR = SWAPu32(madr_next);
psxRegs.gpuIdleAfter = psxRegs.cycle + size + 64;
set_event(PSXINT_GPUDMA, size);