diff options
| author | Dentomologist <dentomologist@gmail.com> | 2026-03-13 12:11:01 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-13 12:11:01 -0700 |
| commit | 7a45ede688d28debef23030d5e8449a800770539 (patch) | |
| tree | 956a5cc7a9573d2eee2e09282a87227c4d78e379 /Source/Core | |
| parent | dd9f1e35731d6fcfd400f4f009a2f544b7d8b495 (diff) | |
| parent | e00f39bb6d5b22b4de57654c1eac62cfed273259 (diff) | |
Merge pull request #14123 from JosJuice/fix-logical-page-mappings
Memmap: Fix populating m_logical_page_mappings
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/HW/Memmap.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/Source/Core/Core/HW/Memmap.cpp b/Source/Core/Core/HW/Memmap.cpp index 122f524555..60287424d5 100644 --- a/Source/Core/Core/HW/Memmap.cpp +++ b/Source/Core/Core/HW/Memmap.cpp @@ -292,12 +292,13 @@ void MemoryManager::UpdateDBATMappings(const PowerPC::BatTable& dbat_table) if (intersection_start < intersection_end) { // Found an overlapping region; map it. + u32 mapped_logical_address = logical_address + intersection_start - translated_address; + u32 mapped_size = intersection_end - intersection_start; if (m_is_fastmem_arena_initialized) { u32 position = physical_region.shm_position + intersection_start - mapping_address; - u8* base = m_logical_base + logical_address + intersection_start - translated_address; - u32 mapped_size = intersection_end - intersection_start; + u8* base = m_logical_base + mapped_logical_address; void* mapped_pointer = m_arena.MapInMemoryRegion(position, mapped_size, base, true); if (!mapped_pointer) @@ -311,8 +312,10 @@ void MemoryManager::UpdateDBATMappings(const PowerPC::BatTable& dbat_table) LogicalMemoryView{mapped_pointer, mapped_size}); } - m_logical_page_mappings[i] = - *physical_region.out_pointer + intersection_start - mapping_address; + u32 bat_index = mapped_logical_address / PowerPC::BAT_PAGE_SIZE; + u8* target_address = *physical_region.out_pointer + intersection_start - mapping_address; + for (u32 j = 0; j < mapped_size / PowerPC::BAT_PAGE_SIZE; ++j) + m_logical_page_mappings[bat_index + j] = target_address + j * PowerPC::BAT_PAGE_SIZE; } } } |
