Speed back to dolpihn: - Revert Read16 CPRead fifo hack for fix RE0. This hack only solve RE0 but brings slowdown in games like RE Umbrella, etc. - Move isFifoBusy again in the fifo loop and use s_fifoIdleEvent for AbortFrame. Note: if you can play RE0 only deactivate PanicAlert. These opdecoding error seems harmless. Some day this wiil be fixed in right way.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7107 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Marcos Vitali 2011-02-08 01:11:11 +00:00
parent fc370c5136
commit f0adc3adb4
2 changed files with 8 additions and 13 deletions

View File

@ -288,15 +288,15 @@ void Read16(u16& _rReturnValue, const u32 _Address)
return; return;
case FIFO_READ_POINTER_LO: case FIFO_READ_POINTER_LO:
//_rReturnValue = ReadLow (fifo.CPReadPointer); _rReturnValue = ReadLow (fifo.CPReadPointer);
// hack: CPU will always believe fifo is empty and on idle // hack: CPU will always believe fifo is empty and on idle
_rReturnValue = ReadLow (fifo.CPWritePointer); //_rReturnValue = ReadLow (fifo.CPWritePointer);
DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_READ_POINTER_LO : %04x", _rReturnValue); DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_READ_POINTER_LO : %04x", _rReturnValue);
return; return;
case FIFO_READ_POINTER_HI: case FIFO_READ_POINTER_HI:
//_rReturnValue = ReadHigh(fifo.CPReadPointer); _rReturnValue = ReadHigh(fifo.CPReadPointer);
// hack: CPU will always believe fifo is empty and on idle // hack: CPU will always believe fifo is empty and on idle
_rReturnValue = ReadHigh(fifo.CPWritePointer); //_rReturnValue = ReadHigh(fifo.CPWritePointer);
DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_READ_POINTER_HI : %04x", _rReturnValue); DEBUG_LOG(COMMANDPROCESSOR, "read FIFO_READ_POINTER_HI : %04x", _rReturnValue);
return; return;
@ -503,11 +503,6 @@ void Write16(const u16 _Value, const u32 _Address)
if (!tmpCtrl.ClearFifoUnderflow && tmpCtrl.ClearFifoOverflow) if (!tmpCtrl.ClearFifoUnderflow && tmpCtrl.ClearFifoOverflow)
bProcessFifoToLoWatemark = true; bProcessFifoToLoWatemark = true;
if (tmpCtrl.ClearFifoUnderflow && tmpCtrl.ClearFifoOverflow)
ProcessFifoAllDistance();
if (!tmpCtrl.ClearFifoUnderflow && !tmpCtrl.ClearFifoOverflow)
ProcessFifoAllDistance();
} }
else else
{ {
@ -814,8 +809,7 @@ void SetFifoIdleFromVideoPlugin()
void AbortFrame() void AbortFrame()
{ {
fifo.bFF_GPReadEnable = false; fifo.bFF_GPReadEnable = false;
while (CommandProcessor::isFifoBusy) s_fifoIdleEvent.Wait();
Common::YieldCPU();
GPFifo::ResetGatherPipe(); GPFifo::ResetGatherPipe();
ResetVideoBuffer(); ResetVideoBuffer();
fifo.CPReadPointer = fifo.CPWritePointer; fifo.CPReadPointer = fifo.CPWritePointer;

View File

@ -180,9 +180,10 @@ void Fifo_EnterLoop()
// If we don't, s_swapRequested or s_efbAccessRequested won't be set to false // If we don't, s_swapRequested or s_efbAccessRequested won't be set to false
// leading the CPU thread to wait in Video_BeginField or Video_AccessEFB thus slowing things down. // leading the CPU thread to wait in Video_BeginField or Video_AccessEFB thus slowing things down.
VideoFifo_CheckAsyncRequest(); VideoFifo_CheckAsyncRequest();
CommandProcessor::isFifoBusy = false;
} }
CommandProcessor::isFifoBusy = false;
CommandProcessor::SetFifoIdleFromVideoPlugin(); CommandProcessor::SetFifoIdleFromVideoPlugin();
if (EmuRunning) if (EmuRunning)