mirror of
https://github.com/PabloMK7/citra.git
synced 2024-11-20 14:34:17 +00:00
added virtual memory map for ExeFS (where ARM11 code is supposed to be loaded)
This commit is contained in:
parent
c37390f8e2
commit
235dddb3f1
3 changed files with 17 additions and 1 deletions
|
@ -16,6 +16,7 @@ u8* g_base = NULL; ///< The base pointer to the aut
|
|||
|
||||
MemArena g_arena; ///< The MemArena class
|
||||
|
||||
u8* g_exefs_code = NULL; ///< ExeFS:/.code is loaded here
|
||||
u8* g_heap = NULL; ///< Application heap (main memory)
|
||||
u8* g_heap_gsp = NULL; ///< GSP heap (main memory)
|
||||
u8* g_vram = NULL; ///< Video memory (VRAM) pointer
|
||||
|
@ -24,6 +25,7 @@ u8* g_shared_mem = NULL; ///< Shared memory
|
|||
u8* g_physical_bootrom = NULL; ///< Bootrom physical memory
|
||||
u8* g_uncached_bootrom = NULL;
|
||||
|
||||
u8* g_physical_exefs_code = NULL; ///< Phsical ExeFS:/.code is loaded here
|
||||
u8* g_physical_fcram = NULL; ///< Main physical memory (FCRAM)
|
||||
u8* g_physical_heap_gsp = NULL; ///< GSP heap physical memory
|
||||
u8* g_physical_vram = NULL; ///< Video physical memory (VRAM)
|
||||
|
@ -31,6 +33,7 @@ u8* g_physical_shared_mem = NULL; ///< Physical shared memory
|
|||
|
||||
// We don't declare the IO region in here since its handled by other means.
|
||||
static MemoryView g_views[] = {
|
||||
{&g_exefs_code, &g_physical_exefs_code, EXEFS_CODE_VADDR, EXEFS_CODE_SIZE, 0},
|
||||
{&g_vram, &g_physical_vram, VRAM_VADDR, VRAM_SIZE, 0},
|
||||
{&g_heap, &g_physical_fcram, HEAP_VADDR, HEAP_SIZE, MV_IS_PRIMARY_RAM},
|
||||
{&g_shared_mem, &g_physical_shared_mem, SHARED_MEMORY_VADDR, SHARED_MEMORY_SIZE, 0},
|
||||
|
|
|
@ -105,6 +105,7 @@ extern u8* g_heap_gsp; ///< GSP heap (main memory)
|
|||
extern u8* g_heap; ///< Application heap (main memory)
|
||||
extern u8* g_vram; ///< Video memory (VRAM)
|
||||
extern u8* g_shared_mem; ///< Shared memory
|
||||
extern u8* g_exefs_code; ///< ExeFS:/.code is loaded here
|
||||
|
||||
void Init();
|
||||
void Shutdown();
|
||||
|
|
|
@ -58,6 +58,10 @@ inline void _Read(T &var, const u32 addr) {
|
|||
} else if ((vaddr >= HARDWARE_IO_VADDR) && (vaddr < HARDWARE_IO_VADDR_END)) {
|
||||
HW::Read<T>(var, vaddr);
|
||||
|
||||
// ExeFS:/.code is loaded here
|
||||
} else if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) {
|
||||
var = *((const T*)&g_exefs_code[vaddr & EXEFS_CODE_MASK]);
|
||||
|
||||
// FCRAM - GSP heap
|
||||
} else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) {
|
||||
var = *((const T*)&g_heap_gsp[vaddr & HEAP_GSP_MASK]);
|
||||
|
@ -94,6 +98,10 @@ inline void _Write(u32 addr, const T data) {
|
|||
} else if ((vaddr >= HARDWARE_IO_VADDR) && (vaddr < HARDWARE_IO_VADDR_END)) {
|
||||
HW::Write<T>(vaddr, data);
|
||||
|
||||
// ExeFS:/.code is loaded here
|
||||
} else if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) {
|
||||
*(T*)&g_exefs_code[vaddr & EXEFS_CODE_MASK] = data;
|
||||
|
||||
// FCRAM - GSP heap
|
||||
} else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) {
|
||||
*(T*)&g_heap_gsp[vaddr & HEAP_GSP_MASK] = data;
|
||||
|
@ -127,8 +135,12 @@ inline void _Write(u32 addr, const T data) {
|
|||
u8 *GetPointer(const u32 addr) {
|
||||
const u32 vaddr = _VirtualAddress(addr);
|
||||
|
||||
// ExeFS:/.code is loaded here
|
||||
if ((vaddr >= EXEFS_CODE_VADDR) && (vaddr < EXEFS_CODE_VADDR_END)) {
|
||||
return g_exefs_code + (vaddr & EXEFS_CODE_MASK);
|
||||
|
||||
// FCRAM - GSP heap
|
||||
if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) {
|
||||
} else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) {
|
||||
return g_heap_gsp + (vaddr & HEAP_GSP_MASK);
|
||||
|
||||
// FCRAM - application heap
|
||||
|
|
Loading…
Reference in a new issue