diff options
author | Lioncash <mathew1800@gmail.com> | 2019-11-26 21:19:15 +0100 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2019-11-27 03:55:38 +0100 |
commit | 3f08e8d8d4ef16cf2468620fbfbdac46e43dcaef (patch) | |
tree | 0e13cc5e2595d7019f8e9e80fe0279dc6a2b1d4c /src/core/memory.cpp | |
parent | core: Prepare various classes for memory read/write migration (diff) | |
download | yuzu-3f08e8d8d4ef16cf2468620fbfbdac46e43dcaef.tar yuzu-3f08e8d8d4ef16cf2468620fbfbdac46e43dcaef.tar.gz yuzu-3f08e8d8d4ef16cf2468620fbfbdac46e43dcaef.tar.bz2 yuzu-3f08e8d8d4ef16cf2468620fbfbdac46e43dcaef.tar.lz yuzu-3f08e8d8d4ef16cf2468620fbfbdac46e43dcaef.tar.xz yuzu-3f08e8d8d4ef16cf2468620fbfbdac46e43dcaef.tar.zst yuzu-3f08e8d8d4ef16cf2468620fbfbdac46e43dcaef.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/memory.cpp | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 017033613..93cd67e39 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -195,6 +195,21 @@ struct Memory::Impl { return IsValidVirtualAddress(*system.CurrentProcess(), vaddr); } + u8* GetPointer(const VAddr vaddr) { + u8* const page_pointer = current_page_table->pointers[vaddr >> PAGE_BITS]; + if (page_pointer != nullptr) { + return page_pointer + (vaddr & PAGE_MASK); + } + + if (current_page_table->attributes[vaddr >> PAGE_BITS] == + Common::PageType::RasterizerCachedMemory) { + return GetPointerFromVMA(vaddr); + } + + LOG_ERROR(HW_Memory, "Unknown GetPointer @ 0x{:016X}", vaddr); + return nullptr; + } + /** * Maps a region of pages as a specific type. * @@ -276,6 +291,14 @@ bool Memory::IsValidVirtualAddress(const VAddr vaddr) const { return impl->IsValidVirtualAddress(vaddr); } +u8* Memory::GetPointer(VAddr vaddr) { + return impl->GetPointer(vaddr); +} + +const u8* Memory::GetPointer(VAddr vaddr) const { + return impl->GetPointer(vaddr); +} + void SetCurrentPageTable(Kernel::Process& process) { current_page_table = &process.VMManager().page_table; @@ -292,21 +315,6 @@ bool IsKernelVirtualAddress(const VAddr vaddr) { return KERNEL_REGION_VADDR <= vaddr && vaddr < KERNEL_REGION_END; } -u8* GetPointer(const VAddr vaddr) { - u8* page_pointer = current_page_table->pointers[vaddr >> PAGE_BITS]; - if (page_pointer) { - return page_pointer + (vaddr & PAGE_MASK); - } - - if (current_page_table->attributes[vaddr >> PAGE_BITS] == - Common::PageType::RasterizerCachedMemory) { - return GetPointerFromVMA(vaddr); - } - - LOG_ERROR(HW_Memory, "Unknown GetPointer @ 0x{:016X}", vaddr); - return nullptr; -} - std::string ReadCString(VAddr vaddr, std::size_t max_length) { std::string string; string.reserve(max_length); |