diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/mem_map.cpp | 5 | ||||
| -rw-r--r-- | src/core/mem_map.h | 4 | ||||
| -rw-r--r-- | src/core/mem_map_funcs.cpp | 14 |
3 files changed, 16 insertions, 7 deletions
diff --git a/src/core/mem_map.cpp b/src/core/mem_map.cpp index 44b4b07b7..180829239 100644 --- a/src/core/mem_map.cpp +++ b/src/core/mem_map.cpp | |||
| @@ -16,9 +16,8 @@ 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_bootrom = NULL; ///< Bootrom physical memory | 19 | u8* g_heap_gsp = NULL; ///< GSP heap (main memory) |
| 20 | u8* g_heap_gsp = NULL; | 20 | u8* g_heap = NULL; ///< Application heap (main memory) |
| 21 | u8* g_heap = NULL; | ||
| 22 | u8* g_vram = NULL; ///< Video memory (VRAM) pointer | 21 | u8* g_vram = NULL; ///< Video memory (VRAM) pointer |
| 23 | 22 | ||
| 24 | u8* g_physical_bootrom = NULL; ///< Bootrom physical memory | 23 | u8* g_physical_bootrom = NULL; ///< Bootrom physical memory |
diff --git a/src/core/mem_map.h b/src/core/mem_map.h index a1fa90f3e..9ca05cc4e 100644 --- a/src/core/mem_map.h +++ b/src/core/mem_map.h | |||
| @@ -34,6 +34,7 @@ enum { | |||
| 34 | VRAM_MASK = 0x007FFFFF, | 34 | VRAM_MASK = 0x007FFFFF, |
| 35 | FCRAM_MASK = (FCRAM_SIZE - 1), ///< FCRAM mask | 35 | FCRAM_MASK = (FCRAM_SIZE - 1), ///< FCRAM mask |
| 36 | SCRATCHPAD_MASK = (SCRATCHPAD_SIZE - 1), ///< Scratchpad memory mask | 36 | SCRATCHPAD_MASK = (SCRATCHPAD_SIZE - 1), ///< Scratchpad memory mask |
| 37 | HEAP_GSP_MASK = (HEAP_GSP_SIZE - 1), | ||
| 37 | HEAP_MASK = (HEAP_SIZE - 1), | 38 | HEAP_MASK = (HEAP_SIZE - 1), |
| 38 | 39 | ||
| 39 | FCRAM_PADDR = 0x20000000, ///< FCRAM physical address | 40 | FCRAM_PADDR = 0x20000000, ///< FCRAM physical address |
| @@ -62,7 +63,8 @@ extern u8 *g_base; | |||
| 62 | // These are guaranteed to point to "low memory" addresses (sub-32-bit). | 63 | // These are guaranteed to point to "low memory" addresses (sub-32-bit). |
| 63 | // 64-bit: Pointers to low-mem (sub-0x10000000) mirror | 64 | // 64-bit: Pointers to low-mem (sub-0x10000000) mirror |
| 64 | // 32-bit: Same as the corresponding physical/virtual pointers. | 65 | // 32-bit: Same as the corresponding physical/virtual pointers. |
| 65 | extern u8* g_heap; ///< Main memory | 66 | extern u8* g_heap_gsp; ///< GSP heap (main memory) |
| 67 | extern u8* g_heap; ///< Application heap (main memory) | ||
| 66 | extern u8* g_vram; ///< Video memory (VRAM) | 68 | extern u8* g_vram; ///< Video memory (VRAM) |
| 67 | 69 | ||
| 68 | void Init(); | 70 | void Init(); |
diff --git a/src/core/mem_map_funcs.cpp b/src/core/mem_map_funcs.cpp index 40d9dab3a..5ab1b6e92 100644 --- a/src/core/mem_map_funcs.cpp +++ b/src/core/mem_map_funcs.cpp | |||
| @@ -40,6 +40,10 @@ inline void _Read(T &var, const u32 addr) { | |||
| 40 | } else if ((vaddr & 0xFF000000) == 0x10000000 || (vaddr & 0xFF000000) == 0x1E000000) { | 40 | } else if ((vaddr & 0xFF000000) == 0x10000000 || (vaddr & 0xFF000000) == 0x1E000000) { |
| 41 | HW::Read<T>(var, vaddr); | 41 | HW::Read<T>(var, vaddr); |
| 42 | 42 | ||
| 43 | // FCRAM - GSP heap | ||
| 44 | } else if ((vaddr > HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) { | ||
| 45 | var = *((const T*)&g_heap_gsp[vaddr & HEAP_GSP_MASK]); | ||
| 46 | |||
| 43 | // FCRAM - application heap | 47 | // FCRAM - application heap |
| 44 | } else if ((vaddr > HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) { | 48 | } else if ((vaddr > HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) { |
| 45 | var = *((const T*)&g_heap[vaddr & HEAP_MASK]); | 49 | var = *((const T*)&g_heap[vaddr & HEAP_MASK]); |
| @@ -68,8 +72,8 @@ inline void _Write(u32 addr, const T data) { | |||
| 68 | HW::Write<T>(vaddr, data); | 72 | HW::Write<T>(vaddr, data); |
| 69 | 73 | ||
| 70 | // FCRAM - GSP heap | 74 | // FCRAM - GSP heap |
| 71 | //} else if ((vaddr > HEAP_GSP_VADDR) && (vaddr < HEAP_VADDR_GSP_END)) { | 75 | } else if ((vaddr > HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) { |
| 72 | // *(T*)&g_heap_gsp[vaddr & FCRAM_MASK] = data; | 76 | *(T*)&g_heap_gsp[vaddr & HEAP_GSP_MASK] = data; |
| 73 | 77 | ||
| 74 | // FCRAM - application heap | 78 | // FCRAM - application heap |
| 75 | } else if ((vaddr > HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) { | 79 | } else if ((vaddr > HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) { |
| @@ -98,8 +102,12 @@ inline void _Write(u32 addr, const T data) { | |||
| 98 | u8 *GetPointer(const u32 addr) { | 102 | u8 *GetPointer(const u32 addr) { |
| 99 | const u32 vaddr = _AddressPhysicalToVirtual(addr); | 103 | const u32 vaddr = _AddressPhysicalToVirtual(addr); |
| 100 | 104 | ||
| 105 | // FCRAM - GSP heap | ||
| 106 | if ((vaddr > HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) { | ||
| 107 | return g_heap_gsp + (vaddr & HEAP_GSP_MASK); | ||
| 108 | |||
| 101 | // FCRAM - application heap | 109 | // FCRAM - application heap |
| 102 | if ((vaddr > HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) { | 110 | } else if ((vaddr > HEAP_VADDR) && (vaddr < HEAP_VADDR_END)) { |
| 103 | return g_heap + (vaddr & HEAP_MASK); | 111 | return g_heap + (vaddr & HEAP_MASK); |
| 104 | 112 | ||
| 105 | } else { | 113 | } else { |