diff options
| author | 2014-05-15 18:56:28 -0400 | |
|---|---|---|
| committer | 2014-05-15 18:56:28 -0400 | |
| commit | 4910b6f3369f33a2dc6728e4156a62368c2c9cb1 (patch) | |
| tree | fbe6b506640e26bff70fd001fce63990aedda3ee /src | |
| parent | added ability to load AXF files (same as ELF) (diff) | |
| download | yuzu-4910b6f3369f33a2dc6728e4156a62368c2c9cb1.tar.gz yuzu-4910b6f3369f33a2dc6728e4156a62368c2c9cb1.tar.xz yuzu-4910b6f3369f33a2dc6728e4156a62368c2c9cb1.zip | |
added memory mapped region for system mem - sdk demos load a segment here on ELF load
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/mem_map.cpp | 3 | ||||
| -rw-r--r-- | src/core/mem_map.h | 7 | ||||
| -rw-r--r-- | src/core/mem_map_funcs.cpp | 14 |
3 files changed, 23 insertions, 1 deletions
diff --git a/src/core/mem_map.cpp b/src/core/mem_map.cpp index 59560b87d..c45746be9 100644 --- a/src/core/mem_map.cpp +++ b/src/core/mem_map.cpp | |||
| @@ -17,6 +17,7 @@ u8* g_base = NULL; ///< The base pointer to the aut | |||
| 17 | MemArena g_arena; ///< The MemArena class | 17 | MemArena g_arena; ///< The MemArena class |
| 18 | 18 | ||
| 19 | u8* g_exefs_code = NULL; ///< ExeFS:/.code is loaded here | 19 | u8* g_exefs_code = NULL; ///< ExeFS:/.code is loaded here |
| 20 | u8* g_system_mem = NULL; ///< System memory | ||
| 20 | u8* g_heap = NULL; ///< Application heap (main memory) | 21 | u8* g_heap = NULL; ///< Application heap (main memory) |
| 21 | u8* g_heap_gsp = NULL; ///< GSP heap (main memory) | 22 | u8* g_heap_gsp = NULL; ///< GSP heap (main memory) |
| 22 | u8* g_vram = NULL; ///< Video memory (VRAM) pointer | 23 | u8* g_vram = NULL; ///< Video memory (VRAM) pointer |
| @@ -27,6 +28,7 @@ u8* g_physical_bootrom = NULL; ///< Bootrom physical memory | |||
| 27 | u8* g_uncached_bootrom = NULL; | 28 | u8* g_uncached_bootrom = NULL; |
| 28 | 29 | ||
| 29 | u8* g_physical_exefs_code = NULL; ///< Phsical ExeFS:/.code is loaded here | 30 | u8* g_physical_exefs_code = NULL; ///< Phsical ExeFS:/.code is loaded here |
| 31 | u8* g_physical_system_mem = NULL; ///< System physical memory | ||
| 30 | u8* g_physical_fcram = NULL; ///< Main physical memory (FCRAM) | 32 | u8* g_physical_fcram = NULL; ///< Main physical memory (FCRAM) |
| 31 | u8* g_physical_heap_gsp = NULL; ///< GSP heap physical memory | 33 | u8* g_physical_heap_gsp = NULL; ///< GSP heap physical memory |
| 32 | u8* g_physical_vram = NULL; ///< Video physical memory (VRAM) | 34 | u8* g_physical_vram = NULL; ///< Video physical memory (VRAM) |
| @@ -39,6 +41,7 @@ static MemoryView g_views[] = { | |||
| 39 | {&g_vram, &g_physical_vram, VRAM_VADDR, VRAM_SIZE, 0}, | 41 | {&g_vram, &g_physical_vram, VRAM_VADDR, VRAM_SIZE, 0}, |
| 40 | {&g_heap, &g_physical_fcram, HEAP_VADDR, HEAP_SIZE, MV_IS_PRIMARY_RAM}, | 42 | {&g_heap, &g_physical_fcram, HEAP_VADDR, HEAP_SIZE, MV_IS_PRIMARY_RAM}, |
| 41 | {&g_shared_mem, &g_physical_shared_mem, SHARED_MEMORY_VADDR, SHARED_MEMORY_SIZE, 0}, | 43 | {&g_shared_mem, &g_physical_shared_mem, SHARED_MEMORY_VADDR, SHARED_MEMORY_SIZE, 0}, |
| 44 | {&g_system_mem, &g_physical_system_mem, SYSTEM_MEMORY_VADDR, SYSTEM_MEMORY_SIZE, 0}, | ||
| 42 | {&g_kernel_mem, &g_physical_kernel_mem, KERNEL_MEMORY_VADDR, KERNEL_MEMORY_SIZE, 0}, | 45 | {&g_kernel_mem, &g_physical_kernel_mem, KERNEL_MEMORY_VADDR, KERNEL_MEMORY_SIZE, 0}, |
| 43 | {&g_heap_gsp, &g_physical_heap_gsp, HEAP_GSP_VADDR, HEAP_GSP_SIZE, 0}, | 46 | {&g_heap_gsp, &g_physical_heap_gsp, HEAP_GSP_VADDR, HEAP_GSP_SIZE, 0}, |
| 44 | }; | 47 | }; |
diff --git a/src/core/mem_map.h b/src/core/mem_map.h index af2212a5f..12d497ef3 100644 --- a/src/core/mem_map.h +++ b/src/core/mem_map.h | |||
| @@ -47,6 +47,12 @@ enum { | |||
| 47 | EXEFS_CODE_VADDR_END = (EXEFS_CODE_VADDR + EXEFS_CODE_SIZE), | 47 | EXEFS_CODE_VADDR_END = (EXEFS_CODE_VADDR + EXEFS_CODE_SIZE), |
| 48 | EXEFS_CODE_MASK = 0x03FFFFFF, | 48 | EXEFS_CODE_MASK = 0x03FFFFFF, |
| 49 | 49 | ||
| 50 | // Region of FCRAM used by system | ||
| 51 | SYSTEM_MEMORY_SIZE = 0x02C00000, ///< 44MB | ||
| 52 | SYSTEM_MEMORY_VADDR = 0x04000000, | ||
| 53 | SYSTEM_MEMORY_VADDR_END = (SYSTEM_MEMORY_VADDR + SYSTEM_MEMORY_SIZE), | ||
| 54 | SYSTEM_MEMORY_MASK = 0x03FFFFFF, | ||
| 55 | |||
| 50 | HEAP_SIZE = FCRAM_SIZE, ///< Application heap size | 56 | HEAP_SIZE = FCRAM_SIZE, ///< Application heap size |
| 51 | //HEAP_PADDR = HEAP_GSP_SIZE, | 57 | //HEAP_PADDR = HEAP_GSP_SIZE, |
| 52 | //HEAP_PADDR_END = (HEAP_PADDR + HEAP_SIZE), | 58 | //HEAP_PADDR_END = (HEAP_PADDR + HEAP_SIZE), |
| @@ -116,6 +122,7 @@ extern u8* g_heap; ///< Application heap (main memory) | |||
| 116 | extern u8* g_vram; ///< Video memory (VRAM) | 122 | extern u8* g_vram; ///< Video memory (VRAM) |
| 117 | extern u8* g_shared_mem; ///< Shared memory | 123 | extern u8* g_shared_mem; ///< Shared memory |
| 118 | extern u8* g_kernel_mem; ///< Kernel memory | 124 | extern u8* g_kernel_mem; ///< Kernel memory |
| 125 | extern u8* g_system_mem; ///< System memory | ||
| 119 | extern u8* g_exefs_code; ///< ExeFS:/.code is loaded here | 126 | extern u8* g_exefs_code; ///< ExeFS:/.code is loaded here |
| 120 | 127 | ||
| 121 | void Init(); | 128 | void Init(); |
diff --git a/src/core/mem_map_funcs.cpp b/src/core/mem_map_funcs.cpp index 8ab647714..86e9eaa20 100644 --- a/src/core/mem_map_funcs.cpp +++ b/src/core/mem_map_funcs.cpp | |||
| @@ -73,6 +73,10 @@ inline void _Read(T &var, const u32 addr) { | |||
| 73 | } else if ((vaddr >= SHARED_MEMORY_VADDR) && (vaddr < SHARED_MEMORY_VADDR_END)) { | 73 | } else if ((vaddr >= SHARED_MEMORY_VADDR) && (vaddr < SHARED_MEMORY_VADDR_END)) { |
| 74 | var = *((const T*)&g_shared_mem[vaddr & SHARED_MEMORY_MASK]); | 74 | var = *((const T*)&g_shared_mem[vaddr & SHARED_MEMORY_MASK]); |
| 75 | 75 | ||
| 76 | // System memory | ||
| 77 | } else if ((vaddr >= SYSTEM_MEMORY_VADDR) && (vaddr < SYSTEM_MEMORY_VADDR_END)) { | ||
| 78 | var = *((const T*)&g_system_mem[vaddr & SYSTEM_MEMORY_MASK]); | ||
| 79 | |||
| 76 | // Config memory | 80 | // Config memory |
| 77 | } else if ((vaddr >= CONFIG_MEMORY_VADDR) && (vaddr < CONFIG_MEMORY_VADDR_END)) { | 81 | } else if ((vaddr >= CONFIG_MEMORY_VADDR) && (vaddr < CONFIG_MEMORY_VADDR_END)) { |
| 78 | ConfigMem::Read<T>(var, vaddr); | 82 | ConfigMem::Read<T>(var, vaddr); |
| @@ -115,6 +119,10 @@ inline void _Write(u32 addr, const T data) { | |||
| 115 | } else if ((vaddr >= SHARED_MEMORY_VADDR) && (vaddr < SHARED_MEMORY_VADDR_END)) { | 119 | } else if ((vaddr >= SHARED_MEMORY_VADDR) && (vaddr < SHARED_MEMORY_VADDR_END)) { |
| 116 | *(T*)&g_shared_mem[vaddr & SHARED_MEMORY_MASK] = data; | 120 | *(T*)&g_shared_mem[vaddr & SHARED_MEMORY_MASK] = data; |
| 117 | 121 | ||
| 122 | // System memory | ||
| 123 | } else if ((vaddr >= SYSTEM_MEMORY_VADDR) && (vaddr < SYSTEM_MEMORY_VADDR_END)) { | ||
| 124 | *(T*)&g_system_mem[vaddr & SYSTEM_MEMORY_MASK] = data; | ||
| 125 | |||
| 118 | // VRAM | 126 | // VRAM |
| 119 | } else if ((vaddr >= VRAM_VADDR) && (vaddr < VRAM_VADDR_END)) { | 127 | } else if ((vaddr >= VRAM_VADDR) && (vaddr < VRAM_VADDR_END)) { |
| 120 | *(T*)&g_vram[vaddr & VRAM_MASK] = data; | 128 | *(T*)&g_vram[vaddr & VRAM_MASK] = data; |
| @@ -153,9 +161,13 @@ u8 *GetPointer(const u32 addr) { | |||
| 153 | return g_heap + (vaddr & HEAP_MASK); | 161 | return g_heap + (vaddr & HEAP_MASK); |
| 154 | 162 | ||
| 155 | // Shared memory | 163 | // Shared memory |
| 156 | } else if ((vaddr > SHARED_MEMORY_VADDR) && (vaddr < SHARED_MEMORY_VADDR_END)) { | 164 | } else if ((vaddr >= SHARED_MEMORY_VADDR) && (vaddr < SHARED_MEMORY_VADDR_END)) { |
| 157 | return g_shared_mem + (vaddr & SHARED_MEMORY_MASK); | 165 | return g_shared_mem + (vaddr & SHARED_MEMORY_MASK); |
| 158 | 166 | ||
| 167 | // System memory | ||
| 168 | } else if ((vaddr >= SYSTEM_MEMORY_VADDR) && (vaddr < SYSTEM_MEMORY_VADDR_END)) { | ||
| 169 | return g_system_mem + (vaddr & SYSTEM_MEMORY_MASK); | ||
| 170 | |||
| 159 | // VRAM | 171 | // VRAM |
| 160 | } else if ((vaddr > VRAM_VADDR) && (vaddr < VRAM_VADDR_END)) { | 172 | } else if ((vaddr > VRAM_VADDR) && (vaddr < VRAM_VADDR_END)) { |
| 161 | return g_vram + (vaddr & VRAM_MASK); | 173 | return g_vram + (vaddr & VRAM_MASK); |