(view as text)
diff --git a/Source/Core/Core/HW/MMIO.cpp b/Source/Core/Core/HW/MMIO.cpp
index 2f8788b..03c168b 100644
--- a/Source/Core/Core/HW/MMIO.cpp
+++ b/Source/Core/Core/HW/MMIO.cpp
@@ -194,8 +194,8 @@ template <typename T>
ReadHandlingMethod<T>* InvalidRead()
{
return ComplexRead<T>([](u32 addr) {
- ERROR_LOG(MEMMAP, "Trying to read from an invalid MMIO (addr=%08x)",
- addr);
+ ERROR_LOG(MEMMAP, "Trying to read%d from an invalid MMIO (addr=%08x)",
+ 8 * sizeof (T), addr);
return -1;
});
}
@@ -203,8 +203,8 @@ template <typename T>
WriteHandlingMethod<T>* InvalidWrite()
{
return ComplexWrite<T>([](u32 addr, T val) {
- ERROR_LOG(MEMMAP, "Trying to write to an invalid MMIO (addr=%08x, val=%08x)",
- addr, (u32)val);
+ ERROR_LOG(MEMMAP, "Trying to write%d to an invalid MMIO (addr=%08x, val=%08x)",
+ 8 * sizeof (T), addr, (u32)val);
});
}
diff --git a/Source/Core/Core/HW/Memmap.cpp b/Source/Core/Core/HW/Memmap.cpp
index ca57d24..81943f2 100644
--- a/Source/Core/Core/HW/Memmap.cpp
+++ b/Source/Core/Core/HW/Memmap.cpp
@@ -86,23 +86,29 @@ u8 *m_pVirtualFakeVMEM;
// MMIO mapping object.
MMIO::Mapping* mmio_mapping;
-void InitMMIO(MMIO::Mapping* mmio)
+static void InitMMIOMirror(MMIO::Mapping* mmio, u32 mirror_base)
{
- g_video_backend->RegisterCPMMIO(mmio, 0xCC000000);
- g_video_backend->RegisterPEMMIO(mmio, 0xCC001000);
- VideoInterface::RegisterMMIO(mmio, 0xCC002000);
- ProcessorInterface::RegisterMMIO(mmio, 0xCC003000);
- MemoryInterface::RegisterMMIO(mmio, 0xCC004000);
- DSP::RegisterMMIO(mmio, 0xCC005000);
- DVDInterface::RegisterMMIO(mmio, 0xCC006000);
- SerialInterface::RegisterMMIO(mmio, 0xCC006400);
- ExpansionInterface::RegisterMMIO(mmio, 0xCC006800);
- AudioInterface::RegisterMMIO(mmio, 0xCC006C00);
+ g_video_backend->RegisterCPMMIO(mmio, mirror_base | 0x0000);
+ g_video_backend->RegisterPEMMIO(mmio, mirror_base | 0x1000);
+ VideoInterface::RegisterMMIO(mmio, mirror_base | 0x2000);
+ ProcessorInterface::RegisterMMIO(mmio, mirror_base | 0x3000);
+ MemoryInterface::RegisterMMIO(mmio, mirror_base | 0x4000);
+ DSP::RegisterMMIO(mmio, mirror_base | 0x5000);
+ DVDInterface::RegisterMMIO(mmio, mirror_base | 0x6000);
+ SerialInterface::RegisterMMIO(mmio, mirror_base | 0x6400);
+ ExpansionInterface::RegisterMMIO(mmio, mirror_base | 0x6800);
+ AudioInterface::RegisterMMIO(mmio, mirror_base | 0x6C00);
+}
+
+void InitMMIOGC(MMIO::Mapping* mmio)
+{
+ InitMMIOMirror(mmio, 0xCC000000);
+ InitMMIOMirror(mmio, 0xCD000000);
}
void InitMMIOWii(MMIO::Mapping* mmio)
{
- InitMMIO(mmio);
+ InitMMIOMirror(mmio, 0xCC000000);
WII_IPCInterface::RegisterMMIO(mmio, 0xCD000000);
DVDInterface::RegisterMMIO(mmio, 0xCD006000);
@@ -155,7 +161,7 @@ void Init()
if (wii)
InitMMIOWii(mmio_mapping);
else
- InitMMIO(mmio_mapping);
+ InitMMIOGC(mmio_mapping);
INFO_LOG(MEMMAP, "Memory system initialized. RAM at %p (mirrors at 0 @ %p, 0x80000000 @ %p , 0xC0000000 @ %p)",
m_pRAM, m_pPhysicalRAM, m_pVirtualCachedRAM, m_pVirtualUncachedRAM);