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
This commit is contained in:
parent
143dcb6825
commit
50077afa22
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue