From 0eaf032b7190f28d901fee84c34fe5a1f8d6a2e0 Mon Sep 17 00:00:00 2001 From: Gliniak Date: Sat, 30 Oct 2021 11:38:16 +0200 Subject: [PATCH] Remove applying offset when min & max address range is provided --- src/xenia/kernel/xboxkrnl/xboxkrnl_memory.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/xenia/kernel/xboxkrnl/xboxkrnl_memory.cc b/src/xenia/kernel/xboxkrnl/xboxkrnl_memory.cc index 7d72b3215..55f56dded 100644 --- a/src/xenia/kernel/xboxkrnl/xboxkrnl_memory.cc +++ b/src/xenia/kernel/xboxkrnl/xboxkrnl_memory.cc @@ -372,6 +372,12 @@ dword_result_t MmAllocatePhysicalMemoryEx_entry( // min_addr_range/max_addr_range are bounds in physical memory, not virtual. uint32_t heap_base = heap->heap_base(); uint32_t heap_physical_address_offset = heap->GetPhysicalAddress(heap_base); + // TODO(Gliniak): Games like 545108B4 compares min_addr_range with value returned. + // 0x1000 offset causes it to go below that minimal range and goes haywire + if (min_addr_range && max_addr_range) { + heap_physical_address_offset = 0; + } + uint32_t heap_min_addr = xe::sat_sub(min_addr_range.value(), heap_physical_address_offset); uint32_t heap_max_addr =