summaryrefslogtreecommitdiff
path: root/src/core/mem_map_funcs.cpp
diff options
context:
space:
mode:
authorGravatar bunnei2014-04-29 23:16:12 -0400
committerGravatar bunnei2014-04-30 18:31:35 -0400
commit235dddb3f134208e30683c951158616427568af7 (patch)
tree04ad6514440466d92d3bb6805c5a0e291b5a434f /src/core/mem_map_funcs.cpp
parentreorganized memory regions enum, added regions for ExeFS code (diff)
downloadyuzu-235dddb3f134208e30683c951158616427568af7.tar.gz
yuzu-235dddb3f134208e30683c951158616427568af7.tar.xz
yuzu-235dddb3f134208e30683c951158616427568af7.zip
added virtual memory map for ExeFS (where ARM11 code is supposed to be loaded)
Diffstat (limited to 'src/core/mem_map_funcs.cpp')
-rw-r--r--src/core/mem_map_funcs.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/core/mem_map_funcs.cpp b/src/core/mem_map_funcs.cpp
index b524d19d9..2284b535c 100644
--- a/src/core/mem_map_funcs.cpp
+++ b/src/core/mem_map_funcs.cpp
@@ -58,6 +58,10 @@ inline void _Read(T &var, const u32 addr) {
58 } else if ((vaddr >= HARDWARE_IO_VADDR) && (vaddr < HARDWARE_IO_VADDR_END)) { 58 } else if ((vaddr >= HARDWARE_IO_VADDR) && (vaddr < HARDWARE_IO_VADDR_END)) {
59 HW::Read<T>(var, vaddr); 59 HW::Read<T>(var, vaddr);
60 60
61 // ExeFS:/.code is loaded here
62 } else if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) {
63 var = *((const T*)&g_exefs_code[vaddr & EXEFS_CODE_MASK]);
64
61 // FCRAM - GSP heap 65 // FCRAM - GSP heap
62 } else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) { 66 } else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) {
63 var = *((const T*)&g_heap_gsp[vaddr & HEAP_GSP_MASK]); 67 var = *((const T*)&g_heap_gsp[vaddr & HEAP_GSP_MASK]);
@@ -94,6 +98,10 @@ inline void _Write(u32 addr, const T data) {
94 } else if ((vaddr >= HARDWARE_IO_VADDR) && (vaddr < HARDWARE_IO_VADDR_END)) { 98 } else if ((vaddr >= HARDWARE_IO_VADDR) && (vaddr < HARDWARE_IO_VADDR_END)) {
95 HW::Write<T>(vaddr, data); 99 HW::Write<T>(vaddr, data);
96 100
101 // ExeFS:/.code is loaded here
102 } else if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) {
103 *(T*)&g_exefs_code[vaddr & EXEFS_CODE_MASK] = data;
104
97 // FCRAM - GSP heap 105 // FCRAM - GSP heap
98 } else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) { 106 } else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) {
99 *(T*)&g_heap_gsp[vaddr & HEAP_GSP_MASK] = data; 107 *(T*)&g_heap_gsp[vaddr & HEAP_GSP_MASK] = data;
@@ -127,8 +135,12 @@ inline void _Write(u32 addr, const T data) {
127u8 *GetPointer(const u32 addr) { 135u8 *GetPointer(const u32 addr) {
128 const u32 vaddr = _VirtualAddress(addr); 136 const u32 vaddr = _VirtualAddress(addr);
129 137
138 // ExeFS:/.code is loaded here
139 if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) {
140 return g_exefs_code + (vaddr & EXEFS_CODE_MASK);
141
130 // FCRAM - GSP heap 142 // FCRAM - GSP heap
131 if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) { 143 } else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) {
132 return g_heap_gsp + (vaddr & HEAP_GSP_MASK); 144 return g_heap_gsp + (vaddr & HEAP_GSP_MASK);
133 145
134 // FCRAM - application heap 146 // FCRAM - application heap