Merge pull request #1355 from FioraAeterna/fixmmuoff
MMU: allow page-table loads/stores if MMU is off
This commit is contained in:
commit
9adf608f38
|
@ -122,7 +122,7 @@ inline void ReadFromHardware(T &_var, const u32 em_address, const u32 effective_
|
||||||
// fake VMEM
|
// fake VMEM
|
||||||
_var = bswap((*(const T*)&m_pFakeVMEM[em_address & FAKEVMEM_MASK]));
|
_var = bswap((*(const T*)&m_pFakeVMEM[em_address & FAKEVMEM_MASK]));
|
||||||
}
|
}
|
||||||
else if (SConfig::GetInstance().m_LocalCoreStartupParameter.bMMU)
|
else
|
||||||
{
|
{
|
||||||
// MMU
|
// MMU
|
||||||
// Handle loads that cross page boundaries (ewwww)
|
// Handle loads that cross page boundaries (ewwww)
|
||||||
|
@ -145,7 +145,10 @@ inline void ReadFromHardware(T &_var, const u32 em_address, const u32 effective_
|
||||||
{
|
{
|
||||||
if (flag == FLAG_READ)
|
if (flag == FLAG_READ)
|
||||||
{
|
{
|
||||||
GenerateDSIException(addr, false);
|
if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bMMU)
|
||||||
|
PanicAlertT("Invalid Read at 0x%08x, PC = 0x%08x ", em_address, PC);
|
||||||
|
else
|
||||||
|
GenerateDSIException(addr, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -171,7 +174,10 @@ inline void ReadFromHardware(T &_var, const u32 em_address, const u32 effective_
|
||||||
{
|
{
|
||||||
if (flag == FLAG_READ)
|
if (flag == FLAG_READ)
|
||||||
{
|
{
|
||||||
GenerateDSIException(em_address, false);
|
if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bMMU)
|
||||||
|
PanicAlertT("Invalid Read at 0x%08x, PC = 0x%08x ", em_address, PC);
|
||||||
|
else
|
||||||
|
GenerateDSIException(em_address, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -187,10 +193,6 @@ inline void ReadFromHardware(T &_var, const u32 em_address, const u32 effective_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
PanicAlertT("Invalid Read at 0x%08x, PC = 0x%08x ", em_address, PC);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -260,7 +262,7 @@ inline void WriteToHardware(u32 em_address, const T data, u32 effective_address,
|
||||||
// fake VMEM
|
// fake VMEM
|
||||||
*(T*)&m_pFakeVMEM[em_address & FAKEVMEM_MASK] = bswap(data);
|
*(T*)&m_pFakeVMEM[em_address & FAKEVMEM_MASK] = bswap(data);
|
||||||
}
|
}
|
||||||
else if (SConfig::GetInstance().m_LocalCoreStartupParameter.bMMU)
|
else
|
||||||
{
|
{
|
||||||
// MMU
|
// MMU
|
||||||
// Handle stores that cross page boundaries (ewwww)
|
// Handle stores that cross page boundaries (ewwww)
|
||||||
|
@ -276,7 +278,10 @@ inline void WriteToHardware(u32 em_address, const T data, u32 effective_address,
|
||||||
{
|
{
|
||||||
if (flag == FLAG_WRITE)
|
if (flag == FLAG_WRITE)
|
||||||
{
|
{
|
||||||
GenerateDSIException(addr, true);
|
if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bMMU)
|
||||||
|
PanicAlertT("Invalid Write to 0x%08x, PC = 0x%08x ", em_address, PC);
|
||||||
|
else
|
||||||
|
GenerateDSIException(addr, true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -302,7 +307,10 @@ inline void WriteToHardware(u32 em_address, const T data, u32 effective_address,
|
||||||
{
|
{
|
||||||
if (flag == FLAG_WRITE)
|
if (flag == FLAG_WRITE)
|
||||||
{
|
{
|
||||||
GenerateDSIException(em_address, true);
|
if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bMMU)
|
||||||
|
PanicAlertT("Invalid Write to 0x%08x, PC = 0x%08x ", em_address, PC);
|
||||||
|
else
|
||||||
|
GenerateDSIException(em_address, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -318,10 +326,6 @@ inline void WriteToHardware(u32 em_address, const T data, u32 effective_address,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
PanicAlertT("Invalid Write to 0x%08x, PC = 0x%08x ", em_address, PC);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// =====================
|
// =====================
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue