NPDM: Difference between revisions
No edit summary |
|||
| (13 intermediate revisions by 5 users not shown) | |||
| Line 9: | Line 9: | ||
| 0x0 | | 0x0 | ||
| 0x80 | | 0x80 | ||
| [[# | | [[#Meta|Meta]] | ||
|- | |- | ||
| 0x80 | | 0x80 | ||
| | | Variable | ||
| [[# | | [[#Acid|Acid]] | ||
|- | |- | ||
| | | Variable | ||
| | | Variable | ||
| [[# | | [[#Aci|Aci]] | ||
|} | |} | ||
= | = Meta = | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
| Line 29: | Line 29: | ||
| 0x0 | | 0x0 | ||
| 0x4 | | 0x4 | ||
| | | Magic ("META") | ||
|- | |- | ||
| 0x4 | | 0x4 | ||
| 0x4 | | 0x4 | ||
| [9.0.0+] | | [9.0.0+] SignatureKeyGeneration | ||
|- | |- | ||
| 0x8 | | 0x8 | ||
| Line 85: | Line 85: | ||
| 0x70 | | 0x70 | ||
| 0x4 | | 0x4 | ||
| [[# | | [[#Aci|AciOffset]] | ||
|- | |- | ||
| 0x74 | | 0x74 | ||
| 0x4 | | 0x4 | ||
| [[# | | [[#Aci|AciSize]] | ||
|- | |- | ||
| 0x78 | | 0x78 | ||
| 0x4 | | 0x4 | ||
| [[# | | [[#Acid|AcidOffset]] | ||
|- | |- | ||
| 0x7C | | 0x7C | ||
| 0x4 | | 0x4 | ||
| [[# | | [[#Acid|AcidSize]] | ||
|} | |} | ||
| Line 110: | Line 110: | ||
|- | |- | ||
| 1-3 | | 1-3 | ||
| ProcessAddressSpace | | [[#ProcessAddressSpace|ProcessAddressSpace]] | ||
|- | |- | ||
| 4 | | 4 | ||
| Line 117: | Line 117: | ||
| 5 | | 5 | ||
| [11.0.0+] DisableDeviceAddressSpaceMerge | | [11.0.0+] DisableDeviceAddressSpaceMerge | ||
|- | |||
| 6 | |||
| [18.0.0+] EnableAliasRegionExtraSize | |||
|- | |||
| 7 | |||
| [19.0.0-19.0.1] PreventCodeReads | |||
|} | |||
=== ProcessAddressSpace === | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 | |||
| AddressSpace32Bit | |||
|- | |||
| 1 | |||
| AddressSpace64BitOld | |||
|- | |||
| 2 | |||
| AddressSpace32BitNoReserved | |||
|- | |||
| 3 | |||
| AddressSpace64Bit | |||
|} | |} | ||
| Line 123: | Line 148: | ||
== SystemResourceSize == | == SystemResourceSize == | ||
This | When this is non-zero, the kernel reserves this amount of memory and dynamically uses it as needed for page table pages, KMemoryBlocks, and KBlockInfos. When this is zero, the process uses global shared heaps for these. | ||
This enables a process to sacrifice some of the memory available to it in order to have higher limits on these resources, thus enabling the use of SvcMapPhysicalMemory. | |||
Maximum size as is 0x1FE00000. | |||
== Version == | == Version == | ||
| Line 133: | Line 162: | ||
== MainThreadStackSize == | == MainThreadStackSize == | ||
Must be aligned to 0x1000. | Must be aligned to 0x1000. If zero, kernel will start the process's initial thread with sp=0. | ||
= Acid = | |||
= | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
| Line 154: | Line 181: | ||
| 0x200 | | 0x200 | ||
| 0x4 | | 0x4 | ||
| | | Magic ("ACID") | ||
|- | |- | ||
| 0x204 | | 0x204 | ||
| Line 161: | Line 188: | ||
|- | |- | ||
| 0x208 | | 0x208 | ||
| | | 0x1 | ||
| [9.0.0+] Version | |||
|- | |||
| 0x209 | |||
| 0x1 | |||
| [14.0.0+] | |||
|- | |||
| 0x20A | |||
| 0x2 | |||
| Reserved | | Reserved | ||
|- | |- | ||
| Line 178: | Line 213: | ||
| 0x220 | | 0x220 | ||
| 0x4 | | 0x4 | ||
| [[#FsAccessControl| | | [[#FsAccessControl|FacOffset]] | ||
|- | |- | ||
| 0x224 | | 0x224 | ||
| 0x4 | | 0x4 | ||
| [[#FsAccessControl| | | [[#FsAccessControl|FacSize]] | ||
|- | |- | ||
| 0x228 | | 0x228 | ||
| 0x4 | | 0x4 | ||
| [[#SrvAccessControl| | | [[#SrvAccessControl|SacOffset]] | ||
|- | |- | ||
| 0x22C | | 0x22C | ||
| 0x4 | | 0x4 | ||
| [[#SrvAccessControl| | | [[#SrvAccessControl|SacSize]] | ||
|- | |- | ||
| 0x230 | | 0x230 | ||
| 0x4 | | 0x4 | ||
| [[#KernelCapability| | | [[#KernelCapability|KcOffset]] | ||
|- | |- | ||
| 0x234 | | 0x234 | ||
| 0x4 | | 0x4 | ||
| [[#KernelCapability| | | [[#KernelCapability|KcSize]] | ||
|- | |- | ||
| 0x238 | | 0x238 | ||
| Line 217: | Line 252: | ||
| UnqualifiedApproval | | UnqualifiedApproval | ||
|- | |- | ||
| 2- | | 2-5 | ||
| [5.0.0+ ] MemoryRegion | | [5.0.0+] [[#MemoryRegion|MemoryRegion]] | ||
|- | |||
| 6 | |||
| Unused? | |||
|- | |||
| 7 | |||
| [21.0.0+] LoadBrowserCoreDll | |||
|} | |} | ||
MemoryRegion is set to Application for "starter" and NonSecureSystem for "nvservices". | MemoryRegion is set to Application for "starter" and NonSecureSystem for "nvservices". | ||
= | When LoadBrowserCoreDll flag is set, an additional NPDM + NSOs (wkc0-wkc9) will be loaded from program id 010000000000085D (not present on retail). | ||
=== MemoryRegion === | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 | |||
| Application | |||
|- | |||
| 1 | |||
| Applet | |||
|- | |||
| 2 | |||
| SecureSystem | |||
|- | |||
| 3 | |||
| NonSecureSystem | |||
|} | |||
= Aci = | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
| Line 232: | Line 294: | ||
| 0x0 | | 0x0 | ||
| 0x4 | | 0x4 | ||
| | | Magic ("ACI0") | ||
|- | |- | ||
| 0x4 | | 0x4 | ||
| Line 248: | Line 310: | ||
| 0x20 | | 0x20 | ||
| 0x4 | | 0x4 | ||
| [[#FsAccessControl| | | [[#FsAccessControl|FacOffset]] | ||
|- | |- | ||
| 0x24 | | 0x24 | ||
| 0x4 | | 0x4 | ||
| [[#FsAccessControl| | | [[#FsAccessControl|FacSize]] | ||
|- | |- | ||
| 0x28 | | 0x28 | ||
| 0x4 | | 0x4 | ||
| [[#SrvAccessControl| | | [[#SrvAccessControl|SacOffset]] | ||
|- | |- | ||
| 0x2C | | 0x2C | ||
| 0x4 | | 0x4 | ||
| [[#SrvAccessControl| | | [[#SrvAccessControl|SacSize]] | ||
|- | |- | ||
| 0x30 | | 0x30 | ||
| 0x4 | | 0x4 | ||
| [[#KernelCapability| | | [[#KernelCapability|KcOffset]] | ||
|- | |- | ||
| 0x34 | | 0x34 | ||
| 0x4 | | 0x4 | ||
| [[#KernelCapability| | | [[#KernelCapability|KcSize]] | ||
|- | |- | ||
| 0x38 | | 0x38 | ||
| Line 276: | Line 338: | ||
= FsAccessControl = | = FsAccessControl = | ||
For [[# | For [[#Acid|Acid]] this is a simple descriptor as follows: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
| Line 328: | Line 390: | ||
|} | |} | ||
For [[# | For [[#Aci|Aci]] this embeds data as follows: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
| Line 388: | Line 450: | ||
|- | |- | ||
! Bits | ! Bits | ||
! Description | ! Description | ||
|- | |- | ||
| 0 | | 0 | ||
| ApplicationInfo | | ApplicationInfo (MountContent* is accessible when set) | ||
|- | |- | ||
| 1 | | 1 | ||
| BootModeControl | | BootModeControl | ||
|- | |- | ||
| 2 | | 2 | ||
| Calibration | | Calibration | ||
|- | |- | ||
| 3 | | 3 | ||
| SystemSaveData | | SystemSaveData | ||
|- | |- | ||
| 4 | | 4 | ||
| GameCard | | GameCard | ||
|- | |- | ||
| 5 | | 5 | ||
| SaveDataBackUp | | SaveDataBackUp | ||
|- | |- | ||
| 6 | | 6 | ||
| SaveDataManagement | | SaveDataManagement | ||
|- | |- | ||
| 7 | | 7 | ||
| BisAllRaw | | BisAllRaw | ||
|- | |- | ||
| 8 | | 8 | ||
| GameCardRaw | | GameCardRaw | ||
|- | |- | ||
| 9 | | 9 | ||
| GameCardPrivate | | GameCardPrivate | ||
|- | |- | ||
| 10 | | 10 | ||
| SetTime | | SetTime | ||
|- | |- | ||
| 11 | | 11 | ||
| ContentManager | | ContentManager | ||
|- | |- | ||
| 12 | | 12 | ||
| ImageManager | | ImageManager | ||
|- | |- | ||
| 13 | | 13 | ||
| CreateSaveData | | CreateSaveData | ||
|- | |- | ||
| 14 | | 14 | ||
| SystemSaveDataManagement | | SystemSaveDataManagement | ||
|- | |- | ||
| 15 | | 15 | ||
| BisFileSystem | | BisFileSystem | ||
|- | |- | ||
| 16 | | 16 | ||
| SystemUpdate | | SystemUpdate | ||
|- | |- | ||
| 17 | | 17 | ||
| SaveDataMeta | | SaveDataMeta | ||
|- | |- | ||
| 18 | | 18 | ||
| DeviceSaveData | | DeviceSaveData | ||
|- | |- | ||
| 19 | | 19 | ||
| SettingsControl | | SettingsControl | ||
|- | |- | ||
| 20 | | 20 | ||
| SystemData | | SystemData | ||
|- | |- | ||
| 21 | | 21 | ||
| SdCard | | SdCard | ||
|- | |- | ||
| 22 | | 22 | ||
| Host | | Host | ||
|- | |- | ||
| 23 | | 23 | ||
| FillBis | | FillBis | ||
|- | |- | ||
| 24 | | 24 | ||
| CorruptSaveData | | CorruptSaveData | ||
|- | |- | ||
| 25 | | 25 | ||
| SaveDataForDebug | | SaveDataForDebug | ||
|- | |- | ||
| 26 | | 26 | ||
| FormatSdCard | | FormatSdCard | ||
|- | |- | ||
| 27 | | 27 | ||
| GetRightsId | | GetRightsId | ||
|- | |- | ||
| 28 | | 28 | ||
| RegisterExternalKey | | RegisterExternalKey | ||
|- | |- | ||
| 29 | | 29 | ||
| RegisterUpdatePartition | | RegisterUpdatePartition | ||
|- | |- | ||
| 30 | | 30 | ||
| SaveDataTransfer | | SaveDataTransfer | ||
|- | |- | ||
| 31 | | 31 | ||
| DeviceDetection | | DeviceDetection | ||
|- | |- | ||
| 32 | | 32 | ||
| AccessFailureResolution | | AccessFailureResolution | ||
|- | |- | ||
| 33 | | 33 | ||
| SaveDataTransferVersion2 | | SaveDataTransferVersion2 | ||
|- | |- | ||
| 34 | | 34 | ||
| RegisterProgramIndexMapInfo | | RegisterProgramIndexMapInfo | ||
|- | |- | ||
| 35 | | 35 | ||
| CreateOwnSaveData | | CreateOwnSaveData | ||
|- | |- | ||
| 36 | | 36 | ||
| MoveCacheStorage | | MoveCacheStorage | ||
|- | |- | ||
| 37-61 | | 37 | ||
| DeviceTreeBlob | |||
|- | |||
| 38 | |||
| NotifyErrorContextServiceReady | |||
|- | |||
| 39 | |||
| CalibrationSystemData | |||
|- | |||
| 40 | |||
| CalibrationLog | |||
|- | |||
| 41 | |||
| StorageSecure | |||
|- | |||
| 42 | |||
| StorageControl | |||
|- | |||
| 43 | |||
| GameCardReport | |||
|- | |||
| 44 | |||
| MarkBeforeEraseBis | |||
|- | |||
| 45 | |||
| HtmlViewer | |||
|- | |||
| 46 | |||
| ApplicationSaveDataBackUp | |||
|- | |||
| 47-61 | |||
| Reserved | | Reserved | ||
|- | |- | ||
| 62 | | 62 | ||
| Debug | | Debug (ignored on non-DebugMode, see [[SPL_services#GetConfig|here]]) | ||
|- | |- | ||
| 63 | | 63 | ||
| FullPermission | | FullPermission (ignored on non-DebugMode, all [[Filesystem_services#Permissions|permission types]] which check a bitmask have this bit set) | ||
|} | |} | ||
| Line 744: | Line 795: | ||
| RegionIsReadOnly2 | | RegionIsReadOnly2 | ||
|} | |} | ||
== EnableInterrupts == | == EnableInterrupts == | ||
| Line 837: | Line 886: | ||
|- | |- | ||
| 18 | | 18 | ||
| ForceDebug | | [19.0.0+] ForceDebugProd ([1.0.0-18.1.0] ForceDebug) | ||
|- | |||
| 19 | |||
| [19.0.0+] ForceDebug | |||
|} | |} | ||