Skip to content

Commit

Permalink
MMU: allow page-table loads/stores if MMU is off
Browse files Browse the repository at this point in the history
Fixes regressions in some games that apparently required this to work, but
don't really require full MMU emulation (e.g. with exceptions and all).
  • Loading branch information
FioraAeterna committed Oct 21, 2014
1 parent 080883a commit f4fa8d0
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 f4fa8d0

Please sign in to comment.