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. |