diff options
| author | Dolphin Bot <dolphin-emu-bot@users.noreply.github.com> | 2015-01-24 05:55:35 +0100 |
|---|---|---|
| committer | Dolphin Bot <dolphin-emu-bot@users.noreply.github.com> | 2015-01-24 05:55:35 +0100 |
| commit | 4e9497cdb85ecbd088ca06fb501496aa0c8240a7 (patch) | |
| tree | 6ab6c3d99028d08c12abcaf774872a0eea2e2830 /Source | |
| parent | 088b6b2ec361ae3b2eb36aca61489ef8581472cf (diff) | |
| parent | fe28d1476a671145697dd056b2d7b03257e45d8c (diff) | |
Merge pull request #1057 from phire/IsMMIOAddress2
Further improvements to IsMMIOAddress (Includes tests!)
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/Core/Core/HW/MMIO.h | 15 | ||||
| -rw-r--r-- | Source/UnitTests/Core/MMIOTest.cpp | 13 |
2 files changed, 26 insertions, 2 deletions
diff --git a/Source/Core/Core/HW/MMIO.h b/Source/Core/Core/HW/MMIO.h index 10bba4a6c8..0a4a1a5d04 100644 --- a/Source/Core/Core/HW/MMIO.h +++ b/Source/Core/Core/HW/MMIO.h @@ -9,6 +9,7 @@ #include <type_traits> #include "Common/Common.h" +#include "Core/ConfigManager.h" #include "Core/HW/MMIOHandlers.h" namespace MMIO @@ -40,8 +41,18 @@ const u32 NUM_MMIOS = NUM_BLOCKS * BLOCK_SIZE; // interface. inline bool IsMMIOAddress(u32 address) { - return ((address & 0xFE7F0000) == 0xCC000000) && - ((address & 0x0000FFFF) != 0x00008000); + if (address == 0xCC008000) + return false; // WG Pipe + if ((address & 0xFFFF0000) == 0xCC000000) + return true; // GameCube MMIOs + + if(SConfig::GetInstance().m_LocalCoreStartupParameter.bWii) + { + return ((address & 0xFFFF0000) == 0xCD000000) || // Wii MMIOs + ((address & 0xFFFF0000) == 0xCD800000); // Mirror of Wii MMIOs + } + + return false; } // Compute the internal unique ID for a given MMIO address. This ID is computed diff --git a/Source/UnitTests/Core/MMIOTest.cpp b/Source/UnitTests/Core/MMIOTest.cpp index f9173ce0c4..bb7f1c4714 100644 --- a/Source/UnitTests/Core/MMIOTest.cpp +++ b/Source/UnitTests/Core/MMIOTest.cpp @@ -25,11 +25,24 @@ TEST(UniqueID, UniqueEnough) TEST(IsMMIOAddress, SpecialAddresses) { + SConfig::Init(); + SConfig::GetInstance().m_LocalCoreStartupParameter.bWii = true; + // WG Pipe address, should not be handled by MMIO. EXPECT_FALSE(MMIO::IsMMIOAddress(0xCC008000)); // Memory zone used by games using the "MMU Speedhack". EXPECT_FALSE(MMIO::IsMMIOAddress(0xE0000000)); + + // Uncached mirror of MEM1, shouldn't be handled by MMIO + EXPECT_FALSE(MMIO::IsMMIOAddress(0xC0000000)); + + // And lets check some valid addresses too + EXPECT_TRUE(MMIO::IsMMIOAddress(0xCC0000E0)); // Gamecube MMIOs + EXPECT_TRUE(MMIO::IsMMIOAddress(0xCD00008C)); // Wii MMIOs + EXPECT_TRUE(MMIO::IsMMIOAddress(0xCD800F10)); // Mirror of Wii MMIOs + + SConfig::Shutdown(); } class MappingTest : public testing::Test |
