diff options
| author | 2014-04-24 23:56:06 -0400 | |
|---|---|---|
| committer | 2014-04-24 23:56:06 -0400 | |
| commit | 890c7261d2d6d6a760512ebe93c565ee87220983 (patch) | |
| tree | 7d822f01da90c37c188faa76578c0d1733136d06 /src/core/mem_map_funcs.cpp | |
| parent | added functions to map Heap and Shared memory space (diff) | |
| download | yuzu-890c7261d2d6d6a760512ebe93c565ee87220983.tar.gz yuzu-890c7261d2d6d6a760512ebe93c565ee87220983.tar.xz yuzu-890c7261d2d6d6a760512ebe93c565ee87220983.zip | |
- added preliminary support for svc_MapMemoryBlock
- added shared memory region
- moarrrr cleanups to memory_map
Diffstat (limited to 'src/core/mem_map_funcs.cpp')
| -rw-r--r-- | src/core/mem_map_funcs.cpp | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/core/mem_map_funcs.cpp b/src/core/mem_map_funcs.cpp index eff0cf4b8..b2c39c57c 100644 --- a/src/core/mem_map_funcs.cpp +++ b/src/core/mem_map_funcs.cpp | |||
| @@ -43,17 +43,22 @@ inline void _Read(T &var, const u32 addr) { | |||
| 43 | 43 | ||
| 44 | // Hardware I/O register reads | 44 | // Hardware I/O register reads |
| 45 | // 0x10XXXXXX- is physical address space, 0x1EXXXXXX is virtual address space | 45 | // 0x10XXXXXX- is physical address space, 0x1EXXXXXX is virtual address space |
| 46 | } else if ((vaddr & 0xFF000000) == 0x10000000 || (vaddr & 0xFF000000) == 0x1E000000) { | 46 | } else if ((vaddr >= HARDWARE_IO_VADDR) && (vaddr < HARDWARE_IO_VADDR_END)) { |
| 47 | HW::Read<T>(var, vaddr); | 47 | HW::Read<T>(var, vaddr); |
| 48 | 48 | ||
| 49 | // FCRAM - GSP heap | 49 | // FCRAM - GSP heap |
| 50 | } else if ((vaddr > HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) { | 50 | } else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) { |
| 51 | var = *((const T*)&g_heap_gsp[vaddr & HEAP_GSP_MASK]); | 51 | var = *((const T*)&g_heap_gsp[vaddr & HEAP_GSP_MASK]); |
| 52 | 52 | ||
| 53 | // FCRAM - application heap | 53 | // FCRAM - application heap |
| 54 | } else if ((vaddr > HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) { | 54 | } else if ((vaddr >= HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) { |
| 55 | var = *((const T*)&g_heap[vaddr & HEAP_MASK]); | 55 | var = *((const T*)&g_heap[vaddr & HEAP_MASK]); |
| 56 | 56 | ||
| 57 | // Shared memory | ||
| 58 | } else if ((vaddr >= SHARED_MEMORY_VADDR) && (vaddr < SHARED_MEMORY_VADDR_END)) { | ||
| 59 | NOTICE_LOG(OSHLE, "wtf read"); | ||
| 60 | var = *((const T*)&g_shared_mem[vaddr & SHARED_MEMORY_MASK]); | ||
| 61 | |||
| 57 | /*else if ((vaddr & 0x3F800000) == 0x04000000) { | 62 | /*else if ((vaddr & 0x3F800000) == 0x04000000) { |
| 58 | var = *((const T*)&m_pVRAM[vaddr & VRAM_MASK]);*/ | 63 | var = *((const T*)&m_pVRAM[vaddr & VRAM_MASK]);*/ |
| 59 | 64 | ||
| @@ -74,17 +79,22 @@ inline void _Write(u32 addr, const T data) { | |||
| 74 | 79 | ||
| 75 | // Hardware I/O register writes | 80 | // Hardware I/O register writes |
| 76 | // 0x10XXXXXX- is physical address space, 0x1EXXXXXX is virtual address space | 81 | // 0x10XXXXXX- is physical address space, 0x1EXXXXXX is virtual address space |
| 77 | } else if ((vaddr & 0xFF000000) == 0x10000000 || (vaddr & 0xFF000000) == 0x1E000000) { | 82 | } else if ((vaddr >= HARDWARE_IO_VADDR) && (vaddr < HARDWARE_IO_VADDR_END)) { |
| 78 | HW::Write<T>(vaddr, data); | 83 | HW::Write<T>(vaddr, data); |
| 79 | 84 | ||
| 80 | // FCRAM - GSP heap | 85 | // FCRAM - GSP heap |
| 81 | } else if ((vaddr > HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) { | 86 | } else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) { |
| 82 | *(T*)&g_heap_gsp[vaddr & HEAP_GSP_MASK] = data; | 87 | *(T*)&g_heap_gsp[vaddr & HEAP_GSP_MASK] = data; |
| 83 | 88 | ||
| 84 | // FCRAM - application heap | 89 | // FCRAM - application heap |
| 85 | } else if ((vaddr > HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) { | 90 | } else if ((vaddr >= HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) { |
| 86 | *(T*)&g_heap[vaddr & HEAP_MASK] = data; | 91 | *(T*)&g_heap[vaddr & HEAP_MASK] = data; |
| 87 | 92 | ||
| 93 | // Shared memory | ||
| 94 | } else if ((vaddr >= SHARED_MEMORY_VADDR) && (vaddr < SHARED_MEMORY_VADDR_END)) { | ||
| 95 | NOTICE_LOG(OSHLE, "wtf read"); | ||
| 96 | *(T*)&g_shared_mem[vaddr & SHARED_MEMORY_MASK] = data; | ||
| 97 | |||
| 88 | } else if ((vaddr & 0xFF000000) == 0x14000000) { | 98 | } else if ((vaddr & 0xFF000000) == 0x14000000) { |
| 89 | _assert_msg_(MEMMAP, false, "umimplemented write to GSP heap"); | 99 | _assert_msg_(MEMMAP, false, "umimplemented write to GSP heap"); |
| 90 | } else if ((vaddr & 0xFFF00000) == 0x1EC00000) { | 100 | } else if ((vaddr & 0xFFF00000) == 0x1EC00000) { |
| @@ -116,6 +126,11 @@ u8 *GetPointer(const u32 addr) { | |||
| 116 | } else if ((vaddr >= HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) { | 126 | } else if ((vaddr >= HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) { |
| 117 | return g_heap + (vaddr & HEAP_MASK); | 127 | return g_heap + (vaddr & HEAP_MASK); |
| 118 | 128 | ||
| 129 | // Shared memory | ||
| 130 | } else if ((vaddr > SHARED_MEMORY_VADDR) && (vaddr < SHARED_MEMORY_VADDR_END)) { | ||
| 131 | NOTICE_LOG(OSHLE, "wtf read"); | ||
| 132 | return g_shared_mem + (vaddr & SHARED_MEMORY_MASK); | ||
| 133 | |||
| 119 | } else { | 134 | } else { |
| 120 | ERROR_LOG(MEMMAP, "Unknown GetPointer @ 0x%08x", vaddr); | 135 | ERROR_LOG(MEMMAP, "Unknown GetPointer @ 0x%08x", vaddr); |
| 121 | return 0; | 136 | return 0; |