summaryrefslogtreecommitdiff
path: root/libpcsxcore/psxdma.c
diff options
context:
space:
mode:
authorSND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-09-05 00:35:53 +0000
committerSND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-09-05 00:35:53 +0000
commit78e935a3e7ec856d50849b3e2a6df7949f56a634 (patch)
treeda95662359a570325828c0f59419b034546f1026 /libpcsxcore/psxdma.c
parentd492504ee69f77cf3111a7715ac228000b69a2de (diff)
downloadpcsxr-78e935a3e7ec856d50849b3e2a6df7949f56a634.tar.gz
Rebel Assault 2 needs longer DMA times (black screens in-game)
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@56821 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'libpcsxcore/psxdma.c')
-rw-r--r--libpcsxcore/psxdma.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/libpcsxcore/psxdma.c b/libpcsxcore/psxdma.c
index f59f268e..7b0cdd37 100644
--- a/libpcsxcore/psxdma.c
+++ b/libpcsxcore/psxdma.c
@@ -65,7 +65,9 @@ void psxDma4(u32 madr, u32 bcr, u32 chcr) { // SPU
size = (bcr >> 16) * (bcr & 0xffff) * 2;
SPU_readDMAMem(ptr, size);
psxCpu->Clear(madr, size);
- break;
+
+ SPUDMA_INT((bcr >> 16) * (bcr & 0xffff) / 2);
+ return;
#ifdef PSXDMA_LOG
default:
@@ -97,7 +99,9 @@ void psxDma2(u32 madr, u32 bcr, u32 chcr) { // GPU
size = (bcr >> 16) * (bcr & 0xffff);
GPU_readDataMem(ptr, size);
psxCpu->Clear(madr, size);
- break;
+
+ GPUDMA_INT(size / 4);
+ return;
case 0x01000201: // mem2vram
#ifdef PSXDMA_LOG
@@ -112,6 +116,7 @@ void psxDma2(u32 madr, u32 bcr, u32 chcr) { // GPU
}
size = (bcr >> 16) * (bcr & 0xffff);
GPU_writeDataMem(ptr, size);
+
GPUDMA_INT(size / 4);
return;
@@ -120,7 +125,10 @@ void psxDma2(u32 madr, u32 bcr, u32 chcr) { // GPU
PSXDMA_LOG("*** DMA 2 - GPU dma chain *** %x addr = %x size = %x\n", chcr, madr, bcr);
#endif
GPU_dmaChain((u32 *)psxM, madr & 0x1fffff);
- break;
+
+ // FIXME!!! Walk through DMA chain and add the cycles
+ GPUDMA_INT( 0x4000 / 4 );
+ return;
#ifdef PSXDMA_LOG
default:
@@ -160,6 +168,9 @@ void psxDma6(u32 madr, u32 bcr, u32 chcr) {
madr -= 4;
}
mem++; *mem = 0xffffff;
+
+ RAMDMA_INT( size / BIAS);
+ return;
}
#ifdef PSXDMA_LOG
else {
@@ -171,4 +182,9 @@ void psxDma6(u32 madr, u32 bcr, u32 chcr) {
HW_DMA6_CHCR &= SWAP32(~0x01000000);
DMA_INTERRUPT(6);
}
-
+
+void gpuotcInterrupt()
+{
+ HW_DMA6_CHCR &= SWAP32(~0x01000000);
+ DMA_INTERRUPT(6);
+}