Memory layout

From 3dbrew
Revision as of 06:53, 12 November 2012 by Yellows8 (talk | contribs)
Jump to navigation Jump to search

Physical memory regions

Address Size Description
0x0 0x10000 Bootrom (super secret code/data @ 0x8000)
0x10000 0x10000 Bootrom mirror
0x10000000 ? IO memory
0x1FF00000 0x80000 DSP memory
0x1FF80000 0x80000 AXI WRAM
0x20000000 0x8000000 FCRAM

ARM11 User-land memory regions

Virtual Address Size Description
0x00100000 / 0x14000000 The ExeFS:/.code is usually loaded here, most executables are loaded to 0x00100000.
0x08000000 Heap mapped by ControlMemory
0x1EC00000 IO registers, the mapped IO pages which each process can access is specified in the CXI exheader.(Applications normally don't have access to registers in this range)

All executable pages are read-only, and data pages have the execute-never permission set. Normally .text from the loaded ExeFS:/.code is the only mapped executable memory. Executable CROs can be loaded into memory, once loaded the CRO .text section memory page permissions are changed via ControlProcessMemory from RW- to R-X.