summaryrefslogtreecommitdiff
path: root/src/core/memory.cpp
diff options
context:
space:
mode:
authorGravatar Lioncash2019-11-26 15:19:15 -0500
committerGravatar Lioncash2019-11-26 21:55:38 -0500
commit3f08e8d8d4ef16cf2468620fbfbdac46e43dcaef (patch)
tree0e13cc5e2595d7019f8e9e80fe0279dc6a2b1d4c /src/core/memory.cpp
parentcore: Prepare various classes for memory read/write migration (diff)
downloadyuzu-3f08e8d8d4ef16cf2468620fbfbdac46e43dcaef.tar.gz
yuzu-3f08e8d8d4ef16cf2468620fbfbdac46e43dcaef.tar.xz
yuzu-3f08e8d8d4ef16cf2468620fbfbdac46e43dcaef.zip
core/memory: Migrate over GetPointer()
With all of the interfaces ready for migration, it's trivial to migrate over GetPointer().
Diffstat (limited to 'src/core/memory.cpp')
-rw-r--r--src/core/memory.cpp38
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 {
195 return IsValidVirtualAddress(*system.CurrentProcess(), vaddr); 195 return IsValidVirtualAddress(*system.CurrentProcess(), vaddr);
196 } 196 }
197 197
198 u8* GetPointer(const VAddr vaddr) {
199 u8* const page_pointer = current_page_table->pointers[vaddr >> PAGE_BITS];
200 if (page_pointer != nullptr) {
201 return page_pointer + (vaddr & PAGE_MASK);
202 }
203
204 if (current_page_table->attributes[vaddr >> PAGE_BITS] ==
205 Common::PageType::RasterizerCachedMemory) {
206 return GetPointerFromVMA(vaddr);
207 }
208
209 LOG_ERROR(HW_Memory, "Unknown GetPointer @ 0x{:016X}", vaddr);
210 return nullptr;
211 }
212
198 /** 213 /**
199 * Maps a region of pages as a specific type. 214 * Maps a region of pages as a specific type.
200 * 215 *
@@ -276,6 +291,14 @@ bool Memory::IsValidVirtualAddress(const VAddr vaddr) const {
276 return impl->IsValidVirtualAddress(vaddr); 291 return impl->IsValidVirtualAddress(vaddr);
277} 292}
278 293
294u8* Memory::GetPointer(VAddr vaddr) {
295 return impl->GetPointer(vaddr);
296}
297
298const u8* Memory::GetPointer(VAddr vaddr) const {
299 return impl->GetPointer(vaddr);
300}
301
279void SetCurrentPageTable(Kernel::Process& process) { 302void SetCurrentPageTable(Kernel::Process& process) {
280 current_page_table = &process.VMManager().page_table; 303 current_page_table = &process.VMManager().page_table;
281 304
@@ -292,21 +315,6 @@ bool IsKernelVirtualAddress(const VAddr vaddr) {
292 return KERNEL_REGION_VADDR <= vaddr && vaddr < KERNEL_REGION_END; 315 return KERNEL_REGION_VADDR <= vaddr && vaddr < KERNEL_REGION_END;
293} 316}
294 317
295u8* GetPointer(const VAddr vaddr) {
296 u8* page_pointer = current_page_table->pointers[vaddr >> PAGE_BITS];
297 if (page_pointer) {
298 return page_pointer + (vaddr & PAGE_MASK);
299 }
300
301 if (current_page_table->attributes[vaddr >> PAGE_BITS] ==
302 Common::PageType::RasterizerCachedMemory) {
303 return GetPointerFromVMA(vaddr);
304 }
305
306 LOG_ERROR(HW_Memory, "Unknown GetPointer @ 0x{:016X}", vaddr);
307 return nullptr;
308}
309
310std::string ReadCString(VAddr vaddr, std::size_t max_length) { 318std::string ReadCString(VAddr vaddr, std::size_t max_length) {
311 std::string string; 319 std::string string;
312 string.reserve(max_length); 320 string.reserve(max_length);