diff options
| author | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-09-05 00:35:53 +0000 |
|---|---|---|
| committer | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-09-05 00:35:53 +0000 |
| commit | 78e935a3e7ec856d50849b3e2a6df7949f56a634 (patch) | |
| tree | da95662359a570325828c0f59419b034546f1026 /libpcsxcore/psxdma.c | |
| parent | d492504ee69f77cf3111a7715ac228000b69a2de (diff) | |
| download | pcsxr-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.c | 24 |
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);
+}
|
