Fix the addresses of MMIO registers.
MMIO registers are located at 0x0C000000 and 0x0D000000, not 0xCC000000. The 0xCC000000 addresses are just an artifact of address translation.
This commit is contained in:
1 parent
5b6a947e8f
commit
f316265973
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) && (em_address & 0x0FFFFFFF) < Memory::REALRAM_SIZE)
|
||||
{
|
||||
@@ -163,7 +163,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 (em_address < Memory::REALRAM_SIZE)
|
||||
{
|
||||
@@ -250,7 +250,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;
|
||||
}
|
||||
}
|
||||
@@ -300,7 +300,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;
|
||||
}
|
||||
}
|
||||
@@ -721,6 +721,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