diff options
| author | SND\ckain_cp <SND\ckain_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2013-03-06 17:49:50 +0000 |
|---|---|---|
| committer | SND\ckain_cp <SND\ckain_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2013-03-06 17:49:50 +0000 |
| commit | d0c76b09e921ab68b61ac1c1de6feb071fe19637 (patch) | |
| tree | a2185c3a2607cf004be62cbbdb6a63e1e79dd67f /libpcsxcore/gpu.c | |
| parent | 7b6f0ceec2e6fc7b92a7bf7b2814c9813114b964 (diff) | |
| download | pcsxr-d0c76b09e921ab68b61ac1c1de6feb071fe19637.tar.gz | |
mem2vram: delay based on BS size. Fixes X-Files videos. Seems not break other videos or games.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@83403 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'libpcsxcore/gpu.c')
| -rwxr-xr-x | libpcsxcore/gpu.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/libpcsxcore/gpu.c b/libpcsxcore/gpu.c index 992eb536..1c24ada3 100755 --- a/libpcsxcore/gpu.c +++ b/libpcsxcore/gpu.c @@ -99,7 +99,7 @@ int gpuReadStatus() { void psxDma2(u32 madr, u32 bcr, u32 chcr) { // GPU u32 *ptr; - u32 size; + u32 size, bs; switch (chcr) { case 0x01000200: // vram2mem @@ -108,8 +108,8 @@ void psxDma2(u32 madr, u32 bcr, u32 chcr) { // GPU #endif ptr = (u32 *)PSXM(madr); if (ptr == NULL) { -#ifdef CPU_LOG - CPU_LOG("*** DMA2 GPU - vram2mem *** NULL Pointer!!!\n"); +#ifdef PSXDMA_LOG + PSXDMA_LOG("*** DMA2 GPU - vram2mem *** NULL Pointer!!!\n"); #endif break; } @@ -128,27 +128,27 @@ void psxDma2(u32 madr, u32 bcr, u32 chcr) { // GPU return; case 0x01000201: // mem2vram + bs=(bcr & 0xffff); + size = (bcr >> 16) * bs; // BA blocks * BS words (word = 32-bits) #ifdef PSXDMA_LOG - PSXDMA_LOG("*** DMA 2 - GPU mem2vram *** %lx addr = %lx size = %lx\n", chcr, madr, bcr); + PSXDMA_LOG("*** DMA 2 - GPU mem2vram *** %lx addr = %lxh, BCR %lxh => size %d = BA(%d) * BS(%xh)\n", + chcr, madr, bcr, size, size / bs, size / (bcr >> 16)); #endif ptr = (u32 *)PSXM(madr); if (ptr == NULL) { -#ifdef CPU_LOG - CPU_LOG("*** DMA2 GPU - mem2vram *** NULL Pointer!!!\n"); +#ifdef PSXDMA_LOG + PSXDMA_LOG("*** DMA2 GPU - mem2vram *** NULL Pointer!!!\n"); #endif break; } - // BA blocks * BS words (word = 32-bits) - size = (bcr >> 16) * (bcr & 0xffff); GPU_writeDataMem(ptr, size); -#if 1 +#if 0 // already 32-bit word size ((size * 4) / 4) GPUDMA_INT(size); #else - // Experimental burst dma transfer - // - X-Files = 0.333333x max for videos - GPUDMA_INT( size / 3 ); + // X-Files video interlace. Experimental delay depending of BS. + GPUDMA_INT( (7 * size) / bs ); #endif return; |
