mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-24 14:49:42 -06:00
When the new FIFO is being attached We make sure there wont be SetFinish event pending if so reset this. This protection fix Eternal Darkness booting, because the second SetFinish event when it is booting seems invalid or has a bug and hang the game.
This is EXPERIMENTAL, in theory don't break any game but if so Revert this commit immediately please. Note: Beside Eternal Darkness needs DirectX 11 or DirectX 9 with Zelda Hack to works fine. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5986 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@ -77,7 +77,7 @@
|
||||
#include "Fifo.h"
|
||||
#include "ChunkFile.h"
|
||||
#include "CommandProcessor.h"
|
||||
|
||||
#include "PixelEngine.h"
|
||||
|
||||
namespace CommandProcessor
|
||||
{
|
||||
@ -411,6 +411,14 @@ void Write16(const u16 _Value, const u32 _Address)
|
||||
m_CPStatusReg.OverflowHiWatermark = false;
|
||||
|
||||
UpdateInterrupts();
|
||||
|
||||
// If the new fifo is being attached We make sure there wont be SetFinish event pending.
|
||||
// This protection fix eternal darkness booting, because the second SetFinish event when it is booting
|
||||
// seems invalid or has a bug and hang the game.
|
||||
if (!fifo.bFF_GPReadEnable && tmpCtrl.GPReadEnable && !tmpCtrl.BPEnable)
|
||||
{
|
||||
PixelEngine::ResetSetFinish();
|
||||
}
|
||||
|
||||
fifo.bFF_BPInt = tmpCtrl.BPInt;
|
||||
fifo.bFF_BPEnable = tmpCtrl.BPEnable;
|
||||
|
@ -377,4 +377,20 @@ void SetFinish()
|
||||
INFO_LOG(PIXELENGINE, "VIDEO Set Finish");
|
||||
}
|
||||
|
||||
//This function is used in CommandProcessor when write CTRL_REGISTER and the new fifo is attached.
|
||||
void ResetSetFinish()
|
||||
{
|
||||
//if SetFinish happened but PE_CTRL_REGISTER not, I reset the interrupt else
|
||||
//remove event from the queque
|
||||
if (g_bSignalFinishInterrupt)
|
||||
{
|
||||
g_VideoInitialize.pSetInterrupt(INT_CAUSE_PE_FINISH, false);
|
||||
g_bSignalFinishInterrupt = false;
|
||||
|
||||
}else
|
||||
{
|
||||
g_VideoInitialize.pRemoveEvent(et_SetFinishOnMainThread);
|
||||
}
|
||||
}
|
||||
|
||||
} // end of namespace PixelEngine
|
||||
|
@ -67,6 +67,7 @@ void Write32(const u32 _iValue, const u32 _iAddress);
|
||||
// gfx plugin support
|
||||
void SetToken(const u16 _token, const int _bSetTokenAcknowledge);
|
||||
void SetFinish(void);
|
||||
void ResetSetFinish(void);
|
||||
bool AllowIdleSkipping();
|
||||
|
||||
// Bounding box functionality. Paper Mario (both) are a couple of the few games that use it.
|
||||
|
Reference in New Issue
Block a user