Merge pull request #2033 from magumagu/mmio-fix-addresses
Fix the addresses of MMIO registers.
This commit is contained in:
commit
18ada7a0f5
8 files changed
+202
-163
No files matched your search
@@ -134,7 +134,7 @@ __forceinline static T ReadFromHardware(const u32 em_address)
|
||||
if (em_address < 0xcc000000)
|
||||
return EFB_Read(em_address);
|
||||
else
|
||||
return (T)Memory::mmio_mapping->Read<typename std::make_unsigned<T>::type>(em_address);
|
||||
return (T)Memory::mmio_mapping->Read<typename std::make_unsigned<T>::type>(em_address & 0x0FFFFFFF);
|
||||
}
|
||||
if (segment == 0x0 || segment == 0x8 || segment == 0xC)
|
||||
{
|
||||
@@ -168,7 +168,7 @@ __forceinline static T ReadFromHardware(const u32 em_address)
|
||||
if (em_address < 0x0c000000)
|
||||
return EFB_Read(em_address);
|
||||
else
|
||||
return (T)Memory::mmio_mapping->Read<typename std::make_unsigned<T>::type>(em_address | 0xC0000000);
|
||||
return (T)Memory::mmio_mapping->Read<typename std::make_unsigned<T>::type>(em_address);
|
||||
}
|
||||
if (segment == 0x0)
|
||||
{
|
||||
@@ -258,7 +258,7 @@ __forceinline static void WriteToHardware(u32 em_address, const T data)
|
||||
}
|
||||
else
|
||||
{
|
||||
Memory::mmio_mapping->Write(em_address, data);
|
||||
Memory::mmio_mapping->Write(em_address & 0x0FFFFFFF, data);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -313,7 +313,7 @@ __forceinline static void WriteToHardware(u32 em_address, const T data)
|
||||
}
|
||||
else
|
||||
{
|
||||
Memory::mmio_mapping->Write(em_address | 0xC0000000, data);
|
||||
Memory::mmio_mapping->Write(em_address, data);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -748,6 +748,21 @@ void ClearCacheLine(const u32 address)
|
||||
Write_U64(0, address + i);
|
||||
}
|
||||
|
||||
u32 IsOptimizableMMIOAccess(u32 address, u32 accessSize)
|
||||
{
|
||||
if (!UReg_MSR(MSR).DR)
|
||||
return 0;
|
||||
|
||||
if ((address & 0xF0000000) != 0xC0000000)
|
||||
return 0;
|
||||
|
||||
unsigned translated = address & 0x0FFFFFFF;
|
||||
bool aligned = (translated & ((accessSize >> 3) - 1)) == 0;
|
||||
if (!aligned || !MMIO::IsMMIOAddress(translated))
|
||||
return 0;
|
||||
return translated;
|
||||
}
|
||||
|
||||
// *********************************************************************************
|
||||
// Warning: Test Area
|
||||
//
|
||||
|
||||
Reference in new issue
Block a user