Memory layout: Difference between revisions
mNo edit summary  | 
				|||
| Line 125: | Line 125: | ||
{| class="wikitable" border="1"  | {| class="wikitable" border="1"  | ||
|-  | |-  | ||
!  Virtual Address  | !  Virtual Address Base  | ||
!  Physical Address Base  | |||
!  Region Max Size  | !  Region Max Size  | ||
!  Description  | !  Description  | ||
|-  | |-  | ||
| 0x00100000 / 0x14000000  | | 0x00100000 / 0x14000000  | ||
|   | |||
| 0x03F00000  | | 0x03F00000  | ||
| The [[ExeFS]]:/.code is loaded here, executables must be loaded to the 0x00100000 region when the exheader "special memory" flag is clear. The 0x03F00000-byte size restriction only applies when this flag is clear. Executables are usually loaded to 0x14000000 when the exheader "special memory" flag is set, however this address can be arbitrary.  | | The [[ExeFS]]:/.code is loaded here, executables must be loaded to the 0x00100000 region when the exheader "special memory" flag is clear. The 0x03F00000-byte size restriction only applies when this flag is clear. Executables are usually loaded to 0x14000000 when the exheader "special memory" flag is set, however this address can be arbitrary.  | ||
|-  | |-  | ||
| 0x08000000  | | 0x08000000  | ||
|   | |||
| 0x08000000  | | 0x08000000  | ||
| Heap mapped by [[SVC|ControlMemory]]  | | Heap mapped by [[SVC|ControlMemory]]  | ||
|-  | |-  | ||
| 0x10000000-StackSize  | | 0x10000000-StackSize  | ||
|   | |||
| StackSize from process exheader  | | StackSize from process exheader  | ||
| Stack for the main-thread, initialized by the ARM11 kernel. The StackSize from the exheader is usually 0x4000, therefore the stack-bottom is usually 0x0FFFC000. The stack for the other threads is normally located in the process .data section however this can be arbitrary.  | | Stack for the main-thread, initialized by the ARM11 kernel. The StackSize from the exheader is usually 0x4000, therefore the stack-bottom is usually 0x0FFFC000. The stack for the other threads is normally located in the process .data section however this can be arbitrary.  | ||
|-  | |-  | ||
| 0x10000000  | | 0x10000000  | ||
|   | |||
| 0x04000000  | | 0x04000000  | ||
| Applications usually map this region for HID  | | Applications usually map this region for HID  | ||
|-  | |-  | ||
| 0x14000000  | | 0x14000000  | ||
|   | |||
| 0x08000000  | | 0x08000000  | ||
| Can be mapped by [[SVC|ControlMemory]]  | | Can be mapped by [[SVC|ControlMemory]]  | ||
|-  | |-  | ||
| 0x1EC00000  | | 0x1EC00000  | ||
| 0x10100000  | |||
|    | |    | ||
| [[IO]] registers, the mapped IO pages which each process can access is specified in the [[NCCH#CXI|CXI]] exheader.(Applications normally don't have access to registers in this range)  | | [[IO]] registers, the mapped IO pages which each process can access is specified in the [[NCCH#CXI|CXI]] exheader.(Applications normally don't have access to registers in this range)  | ||
|-  | |-  | ||
| 0x1FF80000  | | 0x1FF80000  | ||
|   | |||
| 0x1000  | | 0x1000  | ||
| [[Configuration Memory]], all processes have access to this however write-permission to this page is specified by the exheader "Shared page writing" kernel flag.  | | [[Configuration Memory]], all processes have access to this however write-permission to this page is specified by the exheader "Shared page writing" kernel flag.  | ||
|-  | |-  | ||
| 0x1FF81000  | | 0x1FF81000  | ||
|   | |||
| 0x1000  | | 0x1000  | ||
| Shared page, access to this is the same as 0x1FF80000.  | | Shared page, access to this is the same as 0x1FF80000.  | ||