mirror of
https://github.com/citra-emu/citra.git
synced 2024-12-18 17:50:05 +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
@ -16,6 +16,7 @@ u8* g_base = NULL; ///< The base pointer to the aut
|
|||||||
|
|
||||||
MemArena g_arena; ///< The MemArena class
|
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 = NULL; ///< Application heap (main memory)
|
||||||
u8* g_heap_gsp = NULL; ///< GSP heap (main memory)
|
u8* g_heap_gsp = NULL; ///< GSP heap (main memory)
|
||||||
u8* g_vram = NULL; ///< Video memory (VRAM) pointer
|
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_physical_bootrom = NULL; ///< Bootrom physical memory
|
||||||
u8* g_uncached_bootrom = NULL;
|
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_fcram = NULL; ///< Main physical memory (FCRAM)
|
||||||
u8* g_physical_heap_gsp = NULL; ///< GSP heap physical memory
|
u8* g_physical_heap_gsp = NULL; ///< GSP heap physical memory
|
||||||
u8* g_physical_vram = NULL; ///< Video physical memory (VRAM)
|
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.
|
// We don't declare the IO region in here since its handled by other means.
|
||||||
static MemoryView g_views[] = {
|
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_vram, &g_physical_vram, VRAM_VADDR, VRAM_SIZE, 0},
|
||||||
{&g_heap, &g_physical_fcram, HEAP_VADDR, HEAP_SIZE, MV_IS_PRIMARY_RAM},
|
{&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},
|
{&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_heap; ///< Application heap (main memory)
|
||||||
extern u8* g_vram; ///< Video memory (VRAM)
|
extern u8* g_vram; ///< Video memory (VRAM)
|
||||||
extern u8* g_shared_mem; ///< Shared memory
|
extern u8* g_shared_mem; ///< Shared memory
|
||||||
|
extern u8* g_exefs_code; ///< ExeFS:/.code is loaded here
|
||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
void Shutdown();
|
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)) {
|
} else if ((vaddr >= HARDWARE_IO_VADDR) && (vaddr < HARDWARE_IO_VADDR_END)) {
|
||||||
HW::Read<T>(var, vaddr);
|
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
|
// FCRAM - GSP heap
|
||||||
} else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) {
|
} else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) {
|
||||||
var = *((const T*)&g_heap_gsp[vaddr & HEAP_GSP_MASK]);
|
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)) {
|
} else if ((vaddr >= HARDWARE_IO_VADDR) && (vaddr < HARDWARE_IO_VADDR_END)) {
|
||||||
HW::Write<T>(vaddr, data);
|
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
|
// FCRAM - GSP heap
|
||||||
} else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) {
|
} else if ((vaddr >= HEAP_GSP_VADDR) && (vaddr < HEAP_GSP_VADDR_END)) {
|
||||||
*(T*)&g_heap_gsp[vaddr & HEAP_GSP_MASK] = data;
|
*(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) {
|
u8 *GetPointer(const u32 addr) {
|
||||||
const u32 vaddr = _VirtualAddress(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
|
// 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);
|
return g_heap_gsp + (vaddr & HEAP_GSP_MASK);
|
||||||
|
|
||||||
// FCRAM - application heap
|
// FCRAM - application heap
|
||||||
|
Loading…
Reference in New Issue
Block a user