summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorGravatar archshift2014-04-30 18:01:12 -0700
committerGravatar archshift2014-04-30 18:01:12 -0700
commitbdc3c999048420dfc937b3cf5362ffee008d6420 (patch)
treee3e935477a356b91439770dedd822ee6e56a0e03 /src/core
parentSets OGL version for Qt; will only work with Qt5 (diff)
parentadded virtual memory map for ExeFS (where ARM11 code is supposed to be loaded) (diff)
downloadyuzu-bdc3c999048420dfc937b3cf5362ffee008d6420.tar.gz
yuzu-bdc3c999048420dfc937b3cf5362ffee008d6420.tar.xz
yuzu-bdc3c999048420dfc937b3cf5362ffee008d6420.zip
Merge commit upstream/master into issue-7-fix
Diffstat (limited to 'src/core')
-rw-r--r--src/core/mem_map.cpp3
-rw-r--r--src/core/mem_map.h46
-rw-r--r--src/core/mem_map_funcs.cpp16
3 files changed, 43 insertions, 22 deletions
diff --git a/src/core/mem_map.cpp b/src/core/mem_map.cpp
index 96245e320..af99cbe32 100644
--- a/src/core/mem_map.cpp
+++ b/src/core/mem_map.cpp
@@ -16,6 +16,7 @@ u8* g_base = NULL; ///< The base pointer to the aut
16 16
17MemArena g_arena; ///< The MemArena class 17MemArena g_arena; ///< The MemArena class
18 18
19u8* g_exefs_code = NULL; ///< ExeFS:/.code is loaded here
19u8* g_heap = NULL; ///< Application heap (main memory) 20u8* g_heap = NULL; ///< Application heap (main memory)
20u8* g_heap_gsp = NULL; ///< GSP heap (main memory) 21u8* g_heap_gsp = NULL; ///< GSP heap (main memory)
21u8* g_vram = NULL; ///< Video memory (VRAM) pointer 22u8* g_vram = NULL; ///< Video memory (VRAM) pointer
@@ -24,6 +25,7 @@ u8* g_shared_mem = NULL; ///< Shared memory
24u8* g_physical_bootrom = NULL; ///< Bootrom physical memory 25u8* g_physical_bootrom = NULL; ///< Bootrom physical memory
25u8* g_uncached_bootrom = NULL; 26u8* g_uncached_bootrom = NULL;
26 27
28u8* g_physical_exefs_code = NULL; ///< Phsical ExeFS:/.code is loaded here
27u8* g_physical_fcram = NULL; ///< Main physical memory (FCRAM) 29u8* g_physical_fcram = NULL; ///< Main physical memory (FCRAM)
28u8* g_physical_heap_gsp = NULL; ///< GSP heap physical memory 30u8* g_physical_heap_gsp = NULL; ///< GSP heap physical memory
29u8* g_physical_vram = NULL; ///< Video physical memory (VRAM) 31u8* g_physical_vram = NULL; ///< Video physical memory (VRAM)
@@ -31,6 +33,7 @@ u8* g_physical_shared_mem = NULL; ///< Physical shared memory
31 33
32// We don't declare the IO region in here since its handled by other means. 34// We don't declare the IO region in here since its handled by other means.
33static MemoryView g_views[] = { 35static MemoryView g_views[] = {
36 {&g_exefs_code, &g_physical_exefs_code, EXEFS_CODE_VADDR, EXEFS_CODE_SIZE, 0},
34 {&g_vram, &g_physical_vram, VRAM_VADDR, VRAM_SIZE, 0}, 37 {&g_vram, &g_physical_vram, VRAM_VADDR, VRAM_SIZE, 0},
35 {&g_heap, &g_physical_fcram, HEAP_VADDR, HEAP_SIZE, MV_IS_PRIMARY_RAM}, 38 {&g_heap, &g_physical_fcram, HEAP_VADDR, HEAP_SIZE, MV_IS_PRIMARY_RAM},
36 {&g_shared_mem, &g_physical_shared_mem, SHARED_MEMORY_VADDR, SHARED_MEMORY_SIZE, 0}, 39 {&g_shared_mem, &g_physical_shared_mem, SHARED_MEMORY_VADDR, SHARED_MEMORY_SIZE, 0},
diff --git a/src/core/mem_map.h b/src/core/mem_map.h
index 509fc8fd9..00c3b47fc 100644
--- a/src/core/mem_map.h
+++ b/src/core/mem_map.h
@@ -17,39 +17,41 @@ enum {
17 VRAM_SIZE = 0x00600000, ///< VRAM size 17 VRAM_SIZE = 0x00600000, ///< VRAM size
18 DSP_SIZE = 0x00080000, ///< DSP memory size 18 DSP_SIZE = 0x00080000, ///< DSP memory size
19 AXI_WRAM_SIZE = 0x00080000, ///< AXI WRAM size 19 AXI_WRAM_SIZE = 0x00080000, ///< AXI WRAM size
20
20 FCRAM_SIZE = 0x08000000, ///< FCRAM size 21 FCRAM_SIZE = 0x08000000, ///< FCRAM size
21 SCRATCHPAD_SIZE = 0x00004000, ///< Typical stack size - TODO: Read from exheader 22 FCRAM_PADDR = 0x20000000, ///< FCRAM physical address
22 HEAP_GSP_SIZE = 0x02000000, ///< GSP heap size... TODO: Define correctly? 23 FCRAM_PADDR_END = (FCRAM_PADDR + FCRAM_SIZE), ///< FCRAM end of physical space
23 HEAP_SIZE = FCRAM_SIZE, ///< Application heap size 24 FCRAM_VADDR = 0x08000000, ///< FCRAM virtual address
24 SHARED_MEMORY_SIZE = 0x04000000, ///< Shared memory size 25 FCRAM_VADDR_END = (FCRAM_VADDR + FCRAM_SIZE), ///< FCRAM end of virtual space
25 HARDWARE_IO_SIZE = 0x01000000, 26 FCRAM_VADDR_FW0B = 0xF0000000, ///< FCRAM adress for firmare FW0B
27 FCRAM_VADDR_FW0B_END = (FCRAM_VADDR_FW0B + FCRAM_SIZE), ///< FCRAM adress end for FW0B
28 FCRAM_MASK = (FCRAM_SIZE - 1), ///< FCRAM mask
26 29
30 SHARED_MEMORY_SIZE = 0x04000000, ///< Shared memory size
27 SHARED_MEMORY_VADDR = 0x10000000, ///< Shared memory 31 SHARED_MEMORY_VADDR = 0x10000000, ///< Shared memory
28 SHARED_MEMORY_VADDR_END = (SHARED_MEMORY_VADDR + SHARED_MEMORY_SIZE), 32 SHARED_MEMORY_VADDR_END = (SHARED_MEMORY_VADDR + SHARED_MEMORY_SIZE),
33 SHARED_MEMORY_MASK = (SHARED_MEMORY_SIZE - 1),
29 34
30 HEAP_PADDR = HEAP_GSP_SIZE, 35 EXEFS_CODE_SIZE = 0x03F00000,
31 HEAP_PADDR_END = (HEAP_PADDR + HEAP_SIZE), 36 EXEFS_CODE_VADDR = 0x00100000, ///< ExeFS:/.code is loaded here
37 EXEFS_CODE_VADDR_END = (EXEFS_CODE_VADDR + EXEFS_CODE_SIZE),
38 EXEFS_CODE_MASK = (EXEFS_CODE_VADDR - 1),
39
40 HEAP_SIZE = FCRAM_SIZE, ///< Application heap size
41 //HEAP_PADDR = HEAP_GSP_SIZE,
42 //HEAP_PADDR_END = (HEAP_PADDR + HEAP_SIZE),
32 HEAP_VADDR = 0x08000000, 43 HEAP_VADDR = 0x08000000,
33 HEAP_VADDR_END = (HEAP_VADDR + HEAP_SIZE), 44 HEAP_VADDR_END = (HEAP_VADDR + HEAP_SIZE),
45 HEAP_MASK = (HEAP_SIZE - 1),
46
47 HEAP_GSP_SIZE = 0x02000000, ///< GSP heap size... TODO: Define correctly?
34 HEAP_GSP_VADDR = 0x14000000, 48 HEAP_GSP_VADDR = 0x14000000,
35 HEAP_GSP_VADDR_END = (HEAP_GSP_VADDR + HEAP_GSP_SIZE), 49 HEAP_GSP_VADDR_END = (HEAP_GSP_VADDR + HEAP_GSP_SIZE),
36 HEAP_GSP_PADDR = 0x00000000, 50 HEAP_GSP_PADDR = 0x00000000,
37 HEAP_GSP_PADDR_END = (HEAP_GSP_PADDR + HEAP_GSP_SIZE), 51 HEAP_GSP_PADDR_END = (HEAP_GSP_PADDR + HEAP_GSP_SIZE),
38
39 VRAM_MASK = 0x007FFFFF,
40 FCRAM_MASK = (FCRAM_SIZE - 1), ///< FCRAM mask
41 SCRATCHPAD_MASK = (SCRATCHPAD_SIZE - 1), ///< Scratchpad memory mask
42 HEAP_GSP_MASK = (HEAP_GSP_SIZE - 1), 52 HEAP_GSP_MASK = (HEAP_GSP_SIZE - 1),
43 HEAP_MASK = (HEAP_SIZE - 1),
44 SHARED_MEMORY_MASK = (SHARED_MEMORY_SIZE - 1),
45
46 FCRAM_PADDR = 0x20000000, ///< FCRAM physical address
47 FCRAM_PADDR_END = (FCRAM_PADDR + FCRAM_SIZE), ///< FCRAM end of physical space
48 FCRAM_VADDR = 0x08000000, ///< FCRAM virtual address
49 FCRAM_VADDR_END = (FCRAM_VADDR + FCRAM_SIZE), ///< FCRAM end of virtual space
50 FRAM_VADDR_FW0B = 0xF0000000, ///< FCRAM adress for firmare FW0B
51 FRAM_VADDR_FW0B_END = (FRAM_VADDR_FW0B + FCRAM_SIZE), ///< FCRAM adress end for FW0B
52 53
54 HARDWARE_IO_SIZE = 0x01000000,
53 HARDWARE_IO_PADDR = 0x10000000, ///< IO physical address start 55 HARDWARE_IO_PADDR = 0x10000000, ///< IO physical address start
54 HARDWARE_IO_VADDR = 0x1EC00000, ///< IO virtual address start 56 HARDWARE_IO_VADDR = 0x1EC00000, ///< IO virtual address start
55 HARDWARE_IO_PADDR_END = (HARDWARE_IO_PADDR + HARDWARE_IO_SIZE), 57 HARDWARE_IO_PADDR_END = (HARDWARE_IO_PADDR + HARDWARE_IO_SIZE),
@@ -59,9 +61,12 @@ enum {
59 VRAM_VADDR = 0x1F000000, 61 VRAM_VADDR = 0x1F000000,
60 VRAM_PADDR_END = (VRAM_PADDR + VRAM_SIZE), 62 VRAM_PADDR_END = (VRAM_PADDR + VRAM_SIZE),
61 VRAM_VADDR_END = (VRAM_VADDR + VRAM_SIZE), 63 VRAM_VADDR_END = (VRAM_VADDR + VRAM_SIZE),
64 VRAM_MASK = 0x007FFFFF,
62 65
66 SCRATCHPAD_SIZE = 0x00004000, ///< Typical stack size - TODO: Read from exheader
63 SCRATCHPAD_VADDR_END = 0x10000000, 67 SCRATCHPAD_VADDR_END = 0x10000000,
64 SCRATCHPAD_VADDR = (SCRATCHPAD_VADDR_END - SCRATCHPAD_SIZE), ///< Stack space 68 SCRATCHPAD_VADDR = (SCRATCHPAD_VADDR_END - SCRATCHPAD_SIZE), ///< Stack space
69 SCRATCHPAD_MASK = (SCRATCHPAD_SIZE - 1), ///< Scratchpad memory mask
65}; 70};
66 71
67//////////////////////////////////////////////////////////////////////////////////////////////////// 72////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -100,6 +105,7 @@ extern u8* g_heap_gsp; ///< GSP heap (main memory)
100extern u8* g_heap; ///< Application heap (main memory) 105extern u8* g_heap; ///< Application heap (main memory)
101extern u8* g_vram; ///< Video memory (VRAM) 106extern u8* g_vram; ///< Video memory (VRAM)
102extern u8* g_shared_mem; ///< Shared memory 107extern u8* g_shared_mem; ///< Shared memory
108extern u8* g_exefs_code; ///< ExeFS:/.code is loaded here
103 109
104void Init(); 110void Init();
105void Shutdown(); 111void Shutdown();
diff --git a/src/core/mem_map_funcs.cpp b/src/core/mem_map_funcs.cpp
index c057a8114..2284b535c 100644
--- a/src/core/mem_map_funcs.cpp
+++ b/src/core/mem_map_funcs.cpp
@@ -25,7 +25,7 @@ u32 _VirtualAddress(const u32 addr) {
25 return VirtualAddressFromPhysical_FCRAM(addr); 25 return VirtualAddressFromPhysical_FCRAM(addr);
26 26
27 // Virtual address mapping FW0B 27 // Virtual address mapping FW0B
28 } else if ((addr >= FRAM_VADDR_FW0B) && (addr < FRAM_VADDR_FW0B_END)) { 28 } else if ((addr >= FCRAM_VADDR_FW0B) && (addr < FCRAM_VADDR_FW0B_END)) {
29 return VirtualAddressFromPhysical_FCRAM(addr); 29 return VirtualAddressFromPhysical_FCRAM(addr);
30 30
31 // Hardware IO 31 // Hardware IO
@@ -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