Changes

Jump to navigation Jump to search
122 bytes added ,  04:06, 16 November 2014
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
 +
|
 
|  
 
|  
 
|  
 
|  

Navigation menu