Line 32: |
Line 32: |
| |- | | |- |
| | 0x4 | | | 0x4 |
| + | | 0x4 |
| + | | [9.0.0+] AcidSignatureKeyGeneration (0 or 1) |
| + | |- |
| | 0x8 | | | 0x8 |
| + | | 0x4 |
| | Reserved | | | Reserved |
| |- | | |- |
Line 109: |
Line 113: |
| |- | | |- |
| | 4 | | | 4 |
− | | OptimizeMemoryAllocation | + | | [7.0.0+] OptimizeMemoryAllocation |
| + | |- |
| + | | 5 |
| + | | [11.0.0+] DisableDeviceAddressSpaceMerge |
| |} | | |} |
| | | |
Line 122: |
Line 129: |
| | | |
| [8.1.0+] Now set to 1 for certain titles. | | [8.1.0+] Now set to 1 for certain titles. |
| + | |
| + | [9.0.0+] Now set to a proper version field for all titles. |
| | | |
| == MainThreadStackSize == | | == MainThreadStackSize == |
Line 279: |
Line 288: |
| |- | | |- |
| | 0x1 | | | 0x1 |
| + | | 0x1 |
| + | | [5.0.0+] ContentOwnerIdCount |
| + | |- |
| + | | 0x2 |
| + | | 0x1 |
| + | | [5.0.0+] SaveDataOwnerIdCount |
| + | |- |
| | 0x3 | | | 0x3 |
| + | | 0x1 |
| | Padding | | | Padding |
| |- | | |- |
Line 287: |
Line 304: |
| |- | | |- |
| | 0xC | | | 0xC |
− | | 0x20 | + | | 0x8 |
− | | Reserved | + | | ContentOwnerIdMin |
| + | |- |
| + | | 0x14 |
| + | | 0x8 |
| + | | ContentOwnerIdMax |
| + | |- |
| + | | 0x1C |
| + | | 0x8 |
| + | | SaveDataOwnerIdMin |
| + | |- |
| + | | 0x24 |
| + | | 0x8 |
| + | | SaveDataOwnerIdMax |
| + | |- |
| + | | 0x2C |
| + | | 0x8 * ContentOwnerIdCount |
| + | | [5.0.0+] ContentOwnerIds |
| + | |- |
| + | | Variable |
| + | | 0x8 * SaveDataOwnerIdCount |
| + | | [5.0.0+] SaveDataOwnerIds |
| |} | | |} |
| | | |
Line 328: |
Line 365: |
| | 0x1C | | | 0x1C |
| | 0x4 | | | 0x4 |
− | | (Optional) Amount of content owner id's | + | | (Optional) ContentOwnerIdCount |
| |- | | |- |
| | 0x1C | | | 0x1C |
− | | 0x8 * Content Owner ID's | + | | 0x8 * ContentOwnerIdCount |
− | | Content owner ID's as uint64's. | + | | ContentOwnerIds |
| |- | | |- |
| | Variable | | | Variable |
| | 0x4 | | | 0x4 |
− | | Amount of save owner id's | + | | SaveDataOwnerIdCount |
| |- | | |- |
| | Variable | | | Variable |
− | | 0x1 * Save data owner accessibilities (?) | + | | 0x1 * SaveDataOwnerIdCount |
− | | Sets flags for what save data owners can do with other applications save data (?) | + | | Accessibilities (1=Read, 2=Write, 3=ReadWrite) |
| |- | | |- |
| | Variable (padded to nearest 4 bytes) | | | Variable (padded to nearest 4 bytes) |
− | | 0x8 * Amount of save owner ID's | + | | 0x8 * SaveDataOwnerIdCount |
− | | Save data owner ID's | + | | SaveDataOwnerIds |
| |} | | |} |
| | | |
Line 498: |
Line 535: |
| | | | | |
| |- | | |- |
− | | 36-61 | + | | 36 |
| + | | MoveCacheStorage |
| + | | |
| + | |- |
| + | | 37-61 |
| | Reserved | | | Reserved |
| | | | | |
Line 586: |
Line 627: |
| | All ones | | | All ones |
| | | | | |
− | | Ignored | + | | Invalid |
| |} | | |} |
| | | |
Line 624: |
Line 665: |
| | | |
| == MemoryMap == | | == MemoryMap == |
| + | MemoryMap entries are stored in pairs. The first pair will contain BeginAddress and PermissionType, while the second pair will contain Size and MappingType. |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 630: |
Line 672: |
| |- | | |- |
| | 7-30 | | | 7-30 |
− | | BeginAddress or Size | + | | BeginAddress |
| |- | | |- |
| | 31 | | | 31 |
− | | IsRw or IsIo | + | | PermissionType (0=RW, 1=RO) |
| |} | | |} |
| | | |
− | MemoryMap entries are stored alternating between BeginAddress + IsRw and Size + IsIo.
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Bits |
| + | ! Description |
| + | |- |
| + | | 7-26 |
| + | | Size |
| + | |- |
| + | | 27-30 |
| + | | Reserved |
| + | |- |
| + | | 31 |
| + | | MappingType (0=Io, 1=Static) |
| + | |} |
| | | |
| === Restrictions === | | === Restrictions === |
Line 732: |
Line 787: |
| |} | | |} |
| | | |
− | This is compared with 0x80000, when less than an error is returned. This is equivalent to comparing the bits starting at bit15 with 0x10. This enforces a minimum required version, not a maximum. | + | This encodes the intended kernel version for the program. |
| + | |
| + | The kernel requires that the intended version is >= the minimum supported version (3.0 for all released kernels), and <= the current version. |
| + | |
| + | Kernel version is derived from/equivalent to SDK version: |
| + | * Kernel Major = SDK Major + 4 |
| + | * Kernel Minor = SDK Minor |
| | | |
| === Versions === | | === Versions === |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Firmware || Kernel Version || Minimum Allowed | + | ! Firmware || Kernel Version || Corresponding SDK Version |
| + | |- |
| + | | 1.0.0 || 5.0 || 1.0.0.0 |
| + | |- |
| + | | 2.0.0 || 6.1 || 2.1.0.0 |
| + | |- |
| + | | 3.0.0 || 7.4 || 3.4.0.0 |
| |- | | |- |
− | | 1.0.0 || 5.0.0 || 3.0.0 | + | | 3.0.2 || 7.4 || 3.4.0.0 |
| |- | | |- |
− | | 2.0.0 || 6.1.0 || 3.0.0 | + | | 5.0.0 || 9.3 || 5.3.0.0 |
| |- | | |- |
− | | 3.0.0 || 7.4.0 || 3.0.0 | + | | 10.0.0 || 14.4 || 10.4.0.0 |
| |- | | |- |
− | | 3.0.2 || 7.4.0 || 3.0.0 | + | | 11.0.0 || 15.4 || 11.4.0.0 |
| |- | | |- |
− | | 5.0.0 || 9.3.0 || 3.0.0 | + | | 11.0.1 || 15.4 || 11.4.0.0 |
| |} | | |} |
| | | |