Line 382: |
Line 382: |
| ! Physical Address Base | | ! Physical Address Base |
| ! Region Max Size | | ! Region Max Size |
| + | ! Address-range available for svcMapMemoryBlock |
| ! Description | | ! Description |
| |- | | |- |
Line 387: |
Line 388: |
| | | | | |
| | 0x03F00000 | | | 0x03F00000 |
| + | | No |
| | 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. |
| |- | | |- |
Line 392: |
Line 394: |
| | ? | | | ? |
| | ? | | | ? |
| + | | No |
| | Used for mapping buffers during IPC, see [[IPC Command Structure]]. | | | Used for mapping buffers during IPC, see [[IPC Command Structure]]. |
| |- | | |- |
Line 397: |
Line 400: |
| | Main stack physaddr - <heap size for the allocated vaddr 0x08000000 memory> | | | Main stack physaddr - <heap size for the allocated vaddr 0x08000000 memory> |
| | 0x08000000 | | | 0x08000000 |
| + | | Yes |
| | Heap mapped by [[SVC|ControlMemory]] | | | Heap mapped by [[SVC|ControlMemory]] |
| |- | | |- |
Line 402: |
Line 406: |
| | .bss physical address - total stack pages | | | .bss physical address - total stack pages |
| | 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. |
| |- | | |- |
Line 407: |
Line 412: |
| | | | | |
| | 0x04000000 | | | 0x04000000 |
| + | | Yes |
| | [[SVC|Shared]] memory | | | [[SVC|Shared]] memory |
| |- | | |- |
Line 412: |
Line 418: |
| | FCRAM+0 | | | FCRAM+0 |
| | 0x08000000 | | | 0x08000000 |
| + | | No |
| | Can be mapped by [[SVC|ControlMemory]], this is used for processes' [[SVC|LINEAR]]/GSP heap. | | | Can be mapped by [[SVC|ControlMemory]], this is used for processes' [[SVC|LINEAR]]/GSP heap. |
| |- | | |- |
Line 417: |
Line 424: |
| | 0x1F000000 | | | 0x1F000000 |
| | 0x00400000 | | | 0x00400000 |
| + | | No |
| | [[New_3DS]] additional memory, access to this is specified by the exheader. Added with [[8.0.0-18]], see above section regarding this memory. | | | [[New_3DS]] additional memory, access to this is specified by the exheader. Added with [[8.0.0-18]], see above section regarding this memory. |
| |- | | |- |
Line 422: |
Line 430: |
| | 0x10100000 | | | 0x10100000 |
| | 0x01000000 | | | 0x01000000 |
| + | | No |
| | [[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) |
| |- | | |- |
Line 427: |
Line 436: |
| | 0x18000000 | | | 0x18000000 |
| | 0x00600000 | | | 0x00600000 |
| + | | No |
| | VRAM, access to this is specified by the exheader. | | | VRAM, access to this is specified by the exheader. |
| |- | | |- |
Line 432: |
Line 442: |
| | 0x1FF00000 | | | 0x1FF00000 |
| | 0x00080000 | | | 0x00080000 |
| + | | No |
| | DSP memory, access to this is specified by the exheader. | | | DSP memory, access to this is specified by the exheader. |
| |- | | |- |
Line 437: |
Line 448: |
| | FCRAM memory page allocated by the ARM11 kernel. | | | FCRAM memory page allocated by the ARM11 kernel. |
| | 0x1000 | | | 0x1000 |
| + | | No |
| | [[Configuration Memory]], all processes have read-only access to this. | | | [[Configuration Memory]], all processes have read-only access to this. |
| |- | | |- |
Line 442: |
Line 454: |
| | FCRAM memory page allocated by the ARM11 kernel. | | | FCRAM memory page allocated by the ARM11 kernel. |
| | 0x1000 | | | 0x1000 |
| + | | No |
| | [[Configuration Memory|Shared]] page, all processes have read-access to this. Write access to this is specified by the exheader "Shared page writing" kernel flag. | | | [[Configuration Memory|Shared]] page, all processes have read-access to this. Write access to this is specified by the exheader "Shared page writing" kernel flag. |
| |- | | |- |
Line 447: |
Line 460: |
| | ? | | | ? |
| | ? | | | ? |
| + | | No |
| | [[Thread Local Storage]] | | | [[Thread Local Storage]] |
| |- | | |- |
Line 452: |
Line 466: |
| | FCRAM+0 | | | FCRAM+0 |
| | 0x08000000(Old3DS) / 0x10000000([[New_3DS]]) | | | 0x08000000(Old3DS) / 0x10000000([[New_3DS]]) |
| + | | No |
| | This LINEAR memory mapping was added with [[8.0.0-18]], see [[SVC#enum_MemoryOperation|here]]. This replaces the original 0x14000000 mapping, for system(memory-region=BASE)/newer titles. The Old3DS kernel uses size 0x08000000 for LINEAR-memory address range checks, while the New3DS kernel uses size 0x10000000 for those range checks. Old3DS/New3DS system-module code doing vaddr->phys-addr conversion uses size 0x10000000. | | | This LINEAR memory mapping was added with [[8.0.0-18]], see [[SVC#enum_MemoryOperation|here]]. This replaces the original 0x14000000 mapping, for system(memory-region=BASE)/newer titles. The Old3DS kernel uses size 0x08000000 for LINEAR-memory address range checks, while the New3DS kernel uses size 0x10000000 for those range checks. Old3DS/New3DS system-module code doing vaddr->phys-addr conversion uses size 0x10000000. |
| |- | | |- |
| | 0x20000000 / 0x40000000 | | | 0x20000000 / 0x40000000 |
| + | | |
| | | | | |
| | | | | |