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 ReadHandlingMethod* InvalidRead() { return ComplexRead([](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 WriteHandlingMethod* InvalidWrite() { return ComplexWrite([](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);