Merge pull request #1355 from FioraAeterna/fixmmuoff

MMU: allow page-table loads/stores if MMU is off
This commit is contained in:
comex 2014-10-21 14:55:18 -04:00
commit 9adf608f38
1 changed files with 18 additions and 14 deletions

View File

@ -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);
}
} }
// ===================== // =====================