From 94283c963993336826b141bb367ad54ff2f00507 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Wed, 31 Dec 2025 19:26:54 +0100 Subject: [PATCH] Core: Don't call InitMMIO from MemoryManager::Init In the unit test I'm adding in the next commit, I want to call MemoryManager::Init, but initializing all the hardware that MemoryManager::InitMMIO calls into would be cumbersome. Calling MemoryManager::InitMMIO from MemoryManager::Init was a bit strange anyway. Because MemoryManager::Init is called about halfway through HW::Init, some of the hardware that MemoryManager::InitMMIO calls into isn't initialized yet. --- Source/Core/Core/HW/HW.cpp | 2 ++ Source/Core/Core/HW/Memmap.cpp | 36 ++++++++++++++++------------------ Source/Core/Core/HW/Memmap.h | 3 +-- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/Source/Core/Core/HW/HW.cpp b/Source/Core/Core/HW/HW.cpp index 72b8233a886..58b4beac036 100644 --- a/Source/Core/Core/HW/HW.cpp +++ b/Source/Core/Core/HW/HW.cpp @@ -57,6 +57,8 @@ void Init(Core::System& system, const Sram* override_sram) system.GetWiiIPC().Init(); IOS::HLE::Init(system); // Depends on Memory } + + system.GetMemory().InitMMIO(system); } void Shutdown(Core::System& system) diff --git a/Source/Core/Core/HW/Memmap.cpp b/Source/Core/Core/HW/Memmap.cpp index 352b68fdb7e..c7ec1debb05 100644 --- a/Source/Core/Core/HW/Memmap.cpp +++ b/Source/Core/Core/HW/Memmap.cpp @@ -61,27 +61,27 @@ MemoryManager::HostPageType MemoryManager::GetHostPageTypeForPageSize(u32 page_s return page_size > PowerPC::HW_PAGE_SIZE ? HostPageType::LargePages : HostPageType::SmallPages; } -void MemoryManager::InitMMIO(bool is_wii) +void MemoryManager::InitMMIO(Core::System& system) { m_mmio_mapping = std::make_unique(); - m_system.GetCommandProcessor().RegisterMMIO(m_mmio_mapping.get(), 0x0C000000); - m_system.GetPixelEngine().RegisterMMIO(m_mmio_mapping.get(), 0x0C001000); - m_system.GetVideoInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0C002000); - m_system.GetProcessorInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0C003000); - m_system.GetMemoryInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0C004000); - m_system.GetDSP().RegisterMMIO(m_mmio_mapping.get(), 0x0C005000); - m_system.GetDVDInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0C006000, false); - m_system.GetSerialInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0C006400); - m_system.GetExpansionInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0C006800); - m_system.GetAudioInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0C006C00); - if (is_wii) + system.GetCommandProcessor().RegisterMMIO(m_mmio_mapping.get(), 0x0C000000); + system.GetPixelEngine().RegisterMMIO(m_mmio_mapping.get(), 0x0C001000); + system.GetVideoInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0C002000); + system.GetProcessorInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0C003000); + system.GetMemoryInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0C004000); + system.GetDSP().RegisterMMIO(m_mmio_mapping.get(), 0x0C005000); + system.GetDVDInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0C006000, false); + system.GetSerialInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0C006400); + system.GetExpansionInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0C006800); + system.GetAudioInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0C006C00); + if (system.IsWii()) { - m_system.GetWiiIPC().RegisterMMIO(m_mmio_mapping.get(), 0x0D000000); - m_system.GetDVDInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0D006000, true); - m_system.GetSerialInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0D006400); - m_system.GetExpansionInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0D006800); - m_system.GetAudioInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0D006C00); + system.GetWiiIPC().RegisterMMIO(m_mmio_mapping.get(), 0x0D000000); + system.GetDVDInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0D006000, true); + system.GetSerialInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0D006400); + system.GetExpansionInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0D006800); + system.GetAudioInterface().RegisterMMIO(m_mmio_mapping.get(), 0x0D006C00); } } @@ -165,8 +165,6 @@ void MemoryManager::Init() m_physical_page_mappings_base = reinterpret_cast(m_physical_page_mappings.data()); m_logical_page_mappings_base = reinterpret_cast(m_logical_page_mappings.data()); - InitMMIO(wii); - Clear(); INFO_LOG_FMT(MEMMAP, "Memory system initialized. RAM at {}", fmt::ptr(m_ram)); diff --git a/Source/Core/Core/HW/Memmap.h b/Source/Core/Core/HW/Memmap.h index afe74bf7478..8779be8210c 100644 --- a/Source/Core/Core/HW/Memmap.h +++ b/Source/Core/Core/HW/Memmap.h @@ -95,6 +95,7 @@ public: // Init and Shutdown bool IsInitialized() const { return m_is_initialized; } + void InitMMIO(Core::System& system); void Init(); void Shutdown(); bool InitFastmemArena(); @@ -284,8 +285,6 @@ private: static HostPageType GetHostPageTypeForPageSize(u32 page_size); - void InitMMIO(bool is_wii); - void TryAddLargePageTableMapping(u32 logical_address, u32 translated_address, bool writeable); bool TryAddLargePageTableMapping(u32 logical_address, u32 translated_address, std::map>& map);