diff options
| author | 2014-04-30 18:01:12 -0700 | |
|---|---|---|
| committer | 2014-04-30 18:01:12 -0700 | |
| commit | bdc3c999048420dfc937b3cf5362ffee008d6420 (patch) | |
| tree | e3e935477a356b91439770dedd822ee6e56a0e03 /src/core | |
| parent | Sets OGL version for Qt; will only work with Qt5 (diff) | |
| parent | added virtual memory map for ExeFS (where ARM11 code is supposed to be loaded) (diff) | |
| download | yuzu-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.cpp | 3 | ||||
| -rw-r--r-- | src/core/mem_map.h | 46 | ||||
| -rw-r--r-- | src/core/mem_map_funcs.cpp | 16 |
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 | ||
| 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_heap = NULL; ///< Application heap (main memory) | 20 | u8* g_heap = NULL; ///< Application heap (main memory) |
| 20 | u8* g_heap_gsp = NULL; ///< GSP heap (main memory) | 21 | u8* g_heap_gsp = NULL; ///< GSP heap (main memory) |
| 21 | u8* g_vram = NULL; ///< Video memory (VRAM) pointer | 22 | u8* g_vram = NULL; ///< Video memory (VRAM) pointer |
| @@ -24,6 +25,7 @@ u8* g_shared_mem = NULL; ///< Shared memory | |||
| 24 | u8* g_physical_bootrom = NULL; ///< Bootrom physical memory | 25 | u8* g_physical_bootrom = NULL; ///< Bootrom physical memory |
| 25 | u8* g_uncached_bootrom = NULL; | 26 | u8* g_uncached_bootrom = NULL; |
| 26 | 27 | ||
| 28 | u8* g_physical_exefs_code = NULL; ///< Phsical ExeFS:/.code is loaded here | ||
| 27 | u8* g_physical_fcram = NULL; ///< Main physical memory (FCRAM) | 29 | u8* g_physical_fcram = NULL; ///< Main physical memory (FCRAM) |
| 28 | u8* g_physical_heap_gsp = NULL; ///< GSP heap physical memory | 30 | u8* g_physical_heap_gsp = NULL; ///< GSP heap physical memory |
| 29 | u8* g_physical_vram = NULL; ///< Video physical memory (VRAM) | 31 | u8* 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. |
| 33 | static MemoryView g_views[] = { | 35 | static 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) | |||
| 100 | extern u8* g_heap; ///< Application heap (main memory) | 105 | extern u8* g_heap; ///< Application heap (main memory) |
| 101 | extern u8* g_vram; ///< Video memory (VRAM) | 106 | extern u8* g_vram; ///< Video memory (VRAM) |
| 102 | extern u8* g_shared_mem; ///< Shared memory | 107 | extern u8* g_shared_mem; ///< Shared memory |
| 108 | extern u8* g_exefs_code; ///< ExeFS:/.code is loaded here | ||
| 103 | 109 | ||
| 104 | void Init(); | 110 | void Init(); |
| 105 | void Shutdown(); | 111 | void 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) { | |||
| 127 | u8 *GetPointer(const u32 addr) { | 135 | u8 *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 |