Skip to content

Commit

Permalink
Merge pull request #1355 from FioraAeterna/fixmmuoff
Browse files Browse the repository at this point in the history
MMU: allow page-table loads/stores if MMU is off
  • Loading branch information
comex committed Oct 21, 2014
2 parents badd659 + f4fa8d0 commit 9adf608
Showing 1 changed file with 18 additions and 14 deletions.
32 changes: 18 additions & 14 deletions Source/Core/Core/HW/MemmapFunctions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ inline void ReadFromHardware(T &_var, const u32 em_address, const u32 effective_
// fake VMEM
_var = bswap((*(const T*)&m_pFakeVMEM[em_address & FAKEVMEM_MASK]));
}
else if (SConfig::GetInstance().m_LocalCoreStartupParameter.bMMU)
else
{
// MMU
// Handle loads that cross page boundaries (ewwww)
Expand All @@ -145,7 +145,10 @@ inline void ReadFromHardware(T &_var, const u32 em_address, const u32 effective_
{
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;
}
}
Expand All @@ -171,7 +174,10 @@ inline void ReadFromHardware(T &_var, const u32 em_address, const u32 effective_
{
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
Expand All @@ -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);
}
}


Expand Down Expand Up @@ -260,7 +262,7 @@ inline void WriteToHardware(u32 em_address, const T data, u32 effective_address,
// fake VMEM
*(T*)&m_pFakeVMEM[em_address & FAKEVMEM_MASK] = bswap(data);
}
else if (SConfig::GetInstance().m_LocalCoreStartupParameter.bMMU)
else
{
// MMU
// Handle stores that cross page boundaries (ewwww)
Expand All @@ -276,7 +278,10 @@ inline void WriteToHardware(u32 em_address, const T data, u32 effective_address,
{
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;
}
}
Expand All @@ -302,7 +307,10 @@ inline void WriteToHardware(u32 em_address, const T data, u32 effective_address,
{
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
Expand All @@ -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);
}
}
// =====================

Expand Down

0 comments on commit 9adf608

Please sign in to comment.