X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Fpsxdma.c;h=d7c4caecece9d5ecd3ffade8bb58146d0b3da729;hb=f02c57eacd43b7a27111181dabc97b2c5ead78c4;hp=c888ecdfb6c83a50ef516d6125f2b161178efed4;hpb=adb7d7ac1b92eac9ebc408e35d2be60c6339f89b;p=pcsx_rearmed.git diff --git a/libpcsxcore/psxdma.c b/libpcsxcore/psxdma.c index c888ecdf..d7c4caec 100644 --- a/libpcsxcore/psxdma.c +++ b/libpcsxcore/psxdma.c @@ -54,7 +54,7 @@ void psxDma4(u32 madr, u32 bcr, u32 chcr) { // SPU words = (bcr >> 16) * (bcr & 0xffff); SPU_writeDMAMem(ptr, words * 2, psxRegs.cycle); HW_DMA4_MADR = SWAPu32(madr + words * 4); - SPUDMA_INT(words / 2); + SPUDMA_INT(words * 4); return; case 0x01000200: //spu to cpu transfer @@ -73,14 +73,12 @@ void psxDma4(u32 madr, u32 bcr, u32 chcr) { // SPU psxCpu->Clear(madr, words); HW_DMA4_MADR = SWAPu32(madr + words * 4); - SPUDMA_INT(words / 2); + SPUDMA_INT(words * 4); return; -#ifdef PSXDMA_LOG default: - PSXDMA_LOG("*** DMA4 SPU - unknown *** %x addr = %x size = %x\n", chcr, madr, bcr); + log_unhandled("*** DMA4 SPU - unknown *** %x addr = %x size = %x\n", chcr, madr, bcr); break; -#endif } HW_DMA4_CHCR &= SWAP32(~0x01000000); @@ -122,7 +120,8 @@ static u32 gpuDmaChainSize(u32 addr) { // next 32-bit pointer addr = psxMu32( addr & ~0x3 ) & 0xffffff; size += 1; - } while (addr != 0xffffff); + } while (!(addr & 0x800000)); // contrary to some documentation, the end-of-linked-list marker is not actually 0xFF'FFFF + // any pointer with bit 23 set will do. return size; } @@ -199,11 +198,9 @@ void psxDma2(u32 madr, u32 bcr, u32 chcr) { // GPU GPUDMA_INT(size); return; -#ifdef PSXDMA_LOG default: - PSXDMA_LOG("*** DMA 2 - GPU unknown *** %lx addr = %lx size = %lx\n", chcr, madr, bcr); + log_unhandled("*** DMA 2 - GPU unknown *** %x addr = %x size = %x\n", chcr, madr, bcr); break; -#endif } HW_DMA2_CHCR &= SWAP32(~0x01000000); @@ -252,12 +249,10 @@ void psxDma6(u32 madr, u32 bcr, u32 chcr) { GPUOTCDMA_INT(16); return; } -#ifdef PSXDMA_LOG else { // Unknown option - PSXDMA_LOG("*** DMA6 OT - unknown *** %x addr = %x size = %x\n", chcr, madr, bcr); + log_unhandled("*** DMA6 OT - unknown *** %x addr = %x size = %x\n", chcr, madr, bcr); } -#endif HW_DMA6_CHCR &= SWAP32(~0x01000000); DMA_INTERRUPT(6);