Added simple EXI Channel caching. Great for SRAM intensive games such as LoZ:WW (Indoor performance increased from 4500MHz to 6000MHz)
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@727 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
739c18ff28
commit
d80178bd89
|
@ -125,8 +125,16 @@ void CEXIChannel::Update()
|
|||
}
|
||||
}
|
||||
|
||||
bool bDirty = true;
|
||||
u32 lastReg = -1, lastChan, lastVal;
|
||||
|
||||
void CEXIChannel::Read32(u32& _uReturnValue, const u32 _iRegister)
|
||||
{
|
||||
if(lastReg == _iRegister && m_ChannelId == lastChan && !bDirty) {
|
||||
_uReturnValue = lastVal;
|
||||
return;
|
||||
}
|
||||
|
||||
LOG(EXPANSIONINTERFACE, "ExtensionInterface(R): channel: %i reg: %i", m_ChannelId, _iRegister);
|
||||
|
||||
switch (_iRegister)
|
||||
|
@ -143,31 +151,39 @@ void CEXIChannel::Read32(u32& _uReturnValue, const u32 _iRegister)
|
|||
}
|
||||
}
|
||||
_uReturnValue = m_Status.hex;
|
||||
return;
|
||||
break;
|
||||
}
|
||||
|
||||
case EXI_DMAADDR:
|
||||
_uReturnValue = m_DMAMemoryAddress;
|
||||
return;
|
||||
break;
|
||||
|
||||
case EXI_DMALENGTH:
|
||||
_uReturnValue = m_DMALength;
|
||||
return;
|
||||
break;
|
||||
|
||||
case EXI_DMACONTROL:
|
||||
_uReturnValue = m_Control.hex;
|
||||
return;
|
||||
break;
|
||||
|
||||
case EXI_IMMDATA:
|
||||
_uReturnValue = m_ImmData;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
_dbg_assert_(EXPANSIONINTERFACE, 0);
|
||||
_uReturnValue = 0xDEADBEEF;
|
||||
}
|
||||
|
||||
lastReg = _iRegister;
|
||||
lastChan = m_ChannelId;
|
||||
lastVal = _uReturnValue;
|
||||
bDirty = false;
|
||||
}
|
||||
|
||||
void CEXIChannel::Write32(const u32 _iValue, const u32 _iRegister)
|
||||
{
|
||||
bDirty = true;
|
||||
LOG(EXPANSIONINTERFACE, "ExtensionInterface(W): 0x%08x channel: %i reg: %i", _iValue, m_ChannelId, _iRegister);
|
||||
|
||||
switch (_iRegister)
|
||||
|
|
Loading…
Reference in New Issue