Implemented a fix for Art of Fighting, MFIFO was clearing our counted size when it shouldn't have been.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@580 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
refraction 2009-02-23 19:59:22 +00:00
parent 986f2a1a71
commit a5eab9da86
1 changed files with 10 additions and 1 deletions

View File

@ -486,6 +486,8 @@ static __forceinline int mfifoVIF1chain() {
#define spr0 ((DMACh*)&PS2MEM_HW[0xD000]) #define spr0 ((DMACh*)&PS2MEM_HW[0xD000])
u32 mfifodmairq = 0;
void mfifoVIF1transfer(int qwc) { void mfifoVIF1transfer(int qwc) {
u32 *ptag; u32 *ptag;
int id; int id;
@ -493,6 +495,8 @@ void mfifoVIF1transfer(int qwc) {
g_vifCycles = 0; g_vifCycles = 0;
mfifodmairq = 0; //Clear any previous TIE interrupt
if(qwc > 0){ if(qwc > 0){
vifqwc += qwc; vifqwc += qwc;
@ -563,6 +567,7 @@ void mfifoVIF1transfer(int qwc) {
if ((vif1ch->chcr & 0x80) && (ptag[0] >> 31)) { if ((vif1ch->chcr & 0x80) && (ptag[0] >> 31)) {
VIF_LOG("dmaIrq Set\n"); VIF_LOG("dmaIrq Set\n");
vif1.done = 2; vif1.done = 2;
mfifodmairq = 1; //Let the handler know we have prematurely ended MFIFO
} }
} }
ret = mfifoVIF1chain(); ret = mfifoVIF1chain();
@ -607,7 +612,11 @@ void vifMFIFOInterrupt()
return; return;
} }
vifqwc = 0; //On a TIE break we do not clear the MFIFO (Art of Fighting)
//If we dont clear it on MFIFO end, Tekken Tag breaks, understandably (Refraction)
if(mfifodmairq == 0)
vifqwc = 0;
vif1.done = 1; vif1.done = 1;
vif1ch->chcr &= ~0x100; vif1ch->chcr &= ~0x100;
hwDmacIrq(DMAC_VIF1); hwDmacIrq(DMAC_VIF1);