diff options
| author | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-11-12 14:00:21 +0000 |
|---|---|---|
| committer | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-11-12 14:00:21 +0000 |
| commit | 50077afa22a99cd4f4985b8017ef3d0f8c9a2ad6 (patch) | |
| tree | 1e8da530beea1c9b6815c8487583b101154765ef /libpcsxcore/gpu.c | |
| parent | 143dcb6825ab01f500886d3126db13bf9f5ed5d9 (diff) | |
| download | pcsxr-50077afa22a99cd4f4985b8017ef3d0f8c9a2ad6.tar.gz | |
Tekken 3 - gpu.c
- Add infinite dma loop check to chain slice
- Fixes post-replay flicker
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@59480 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'libpcsxcore/gpu.c')
| -rw-r--r-- | libpcsxcore/gpu.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/libpcsxcore/gpu.c b/libpcsxcore/gpu.c index 767d332e..8d33639f 100644 --- a/libpcsxcore/gpu.c +++ b/libpcsxcore/gpu.c @@ -42,6 +42,7 @@ extern unsigned int hSyncCount; u32 chain_ptr_addr;
u32 chain_ptr_mem;
+u8 chain_infinite_loop;
/*
DMA2 Chain slicing
@@ -86,6 +87,7 @@ static u32 gpuDmaChainSize(u32 addr) { // initial linked list ptr (word)
size = 1;
+ chain_infinite_loop = 0;
do {
addr &= 0x1ffffc;
@@ -95,7 +97,11 @@ static u32 gpuDmaChainSize(u32 addr) { //if (DMACommandCounter++ > 2000000) break;
- if (CheckForEndlessLoop(addr)) break;
+ if (CheckForEndlessLoop(addr))
+ {
+ chain_infinite_loop = 1;
+ break;
+ }
// # 32-bit blocks to transfer
@@ -109,7 +115,7 @@ static u32 gpuDmaChainSize(u32 addr) { chain_ptr_addr = addr;
- if( addr != 0xffffff )
+ if( !chain_infinite_loop && addr != 0xffffff )
{
// save data at stop ptr
chain_ptr_mem = psxMu32( addr );
@@ -229,8 +235,8 @@ void gpuInterrupt() { #endif
- // check valid data left - no Tekken 3 check yet
- if( chain_ptr_addr != 0xffffff )
+ // check valid data left
+ if( !chain_infinite_loop && chain_ptr_addr != 0xffffff )
{
// put back old value first
psxMu32ref( chain_ptr_addr ) = chain_ptr_mem;
|
