GIF MFIFO: Wrapping of MADR and TADR when transferring from the ring itself. Fixes Front Mission 4

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@4268 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
refraction 2011-01-26 22:46:26 +00:00
parent 53ae262649
commit 7c7b565693
1 changed files with 5 additions and 0 deletions

View File

@ -544,6 +544,11 @@ static __fi bool mfifoGIFchain()
// if(gifch.madr == (dmacRegs.rbor.ADDR + dmacRegs.rbsr.RMSK + 16)) DevCon.Warning("Edge GIF"); // if(gifch.madr == (dmacRegs.rbor.ADDR + dmacRegs.rbsr.RMSK + 16)) DevCon.Warning("Edge GIF");
if (!mfifoGIFrbTransfer()) ret = false; if (!mfifoGIFrbTransfer()) ret = false;
if(QWCinGIFMFIFO(gifch.madr) == 0) gifstate |= GIF_STATE_EMPTY; if(QWCinGIFMFIFO(gifch.madr) == 0) gifstate |= GIF_STATE_EMPTY;
//Make sure we wrap the addresses, dont want it being stuck outside the ring when reading from the ring!
gifch.madr = dmacRegs.rbor.ADDR + (gifch.madr & dmacRegs.rbsr.RMSK);
gifch.tadr = dmacRegs.rbor.ADDR + (gifch.tadr & dmacRegs.rbsr.RMSK); //Check this too, tadr can suffer the same issue.
return ret; return ret;
} }