Line 25: |
Line 25: |
| | | |
| == WriteOperation == | | == WriteOperation == |
− | Submits a Gamecard ASIC [[#ASIC commands|operation]] using a 0x40 byte sized buffer as follows. | + | Submits a Gamecard ASIC [[#ASIC commands|operation]] using a 0x40 byte sized [[#OperationBuffer|OperationBuffer]]. |
| | | |
| === OperationBuffer === | | === OperationBuffer === |
Line 158: |
Line 158: |
| | | |
| == WriteRegister == | | == WriteRegister == |
− | Signals the Gamecard ASIC to write an internal register. The register value is passed in the first word of a 0x200 byte sized buffer while the register index is passed in the actual [[#OperationBuffer]] as follows. | + | Signals the Gamecard ASIC to write an internal register. The register value is passed in the first word of a 0x200 byte sized buffer while the register index is passed in the actual [[#OperationBuffer]] as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 188: |
Line 188: |
| | | |
| == ReadRegister == | | == ReadRegister == |
− | Signals the Gamecard ASIC to send a 0x30 byte sized buffer containing the values of all ASIC registers as follows. | + | Signals the Gamecard ASIC to send a 0x30 byte sized buffer containing the values of all ASIC registers as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 249: |
Line 249: |
| | | |
| == GetCardHeader == | | == GetCardHeader == |
− | Signals the Gamecard ASIC to send a 0x108 byte sized buffer containing the current Gamecard's header data as follows. | + | Signals the Gamecard ASIC to send a 0x200 byte sized buffer containing the current Gamecard's header data as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 259: |
Line 259: |
| | 0x0 | | | 0x0 |
| | 0x4 | | | 0x4 |
− | | [[Gamecard_Format#Gamecard_Info|CUP Version]] | + | | CupVersion |
| |- | | |- |
| | 0x4 | | | 0x4 |
| | 0x4 | | | 0x4 |
− | | [[#ReadId1Normal.2C_ReadId1Secure.2C_ReadId1Writer|Gamecard ID1]] | + | | [[Filesystem_services#CardId1|CardId1]] |
| |- | | |- |
| | 0x8 | | | 0x8 |
| | 0x100 | | | 0x100 |
− | | [[Gamecard_Format#Gamecard_Header|Gamecard Header]] (without the signature) | + | | [[XCI#CardHeader|CardHeader]] (without the signature) |
| + | |- |
| + | | 0x108 |
| + | | 0xD8 |
| + | | Reserved |
| + | |- |
| + | | 0x1E0 |
| + | | 0x20 |
| + | | [11.0.0+] SHA-256 hash of the data from 0 to 0x1E0 ([1.0.0-10.2.0] Reserved) |
| |} | | |} |
| | | |
| == ChangeGcModeToSecure == | | == ChangeGcModeToSecure == |
− | Signals the Gamecard ASIC to send a 0x800 byte sized buffer containing the current Gamecard's key area sectors as follows. | + | Signals the Gamecard ASIC to send a 0x800 byte sized buffer containing the current Gamecard's key area sectors as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Sector | + | ! Offset |
| ! Size | | ! Size |
| ! Description | | ! Description |
| |- | | |- |
− | | 0 | + | | 0x0 |
| + | | 0x4 |
| + | | SecurityLevel |
| + | |- |
| + | | 0x4 |
| + | | 0x4 |
| + | | Lotus3Status |
| + | |- |
| + | | 0x8 |
| + | | 0x4 |
| + | | [[Filesystem_services#CardId1|CardId1]] |
| + | |- |
| + | | 0xC |
| + | | 0x4 |
| + | | [[Filesystem_services#CardId2|CardId2]] |
| + | |- |
| + | | 0x10 |
| + | | 0x40 |
| + | | CardUid |
| + | |- |
| + | | 0x50 |
| + | | 0x1B0 |
| + | | Reserved |
| + | |- |
| | 0x200 | | | 0x200 |
− | | Gamecard specific data | + | | 0x200 |
| + | | [[XCI#CertArea|CertArea]] |
| |- | | |- |
− | | 1 | + | | 0x400 |
| | 0x200 | | | 0x200 |
− | | [[Gamecard_Format#Gamecard_Certificate|Gamecard Certificate]] | + | | Reserved |
| + | |- |
| + | | 0x600 |
| + | | 0x200 |
| + | | [[XCI#InitialData|InitialData]] |
| + | |} |
| + | |
| + | [11.0.0+] This now signals the Gamecard ASIC to send a 0x600 byte sized buffer containing the current Gamecard's key area sectors as follows: |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x4 |
| + | | SecurityLevel |
| |- | | |- |
− | | 2 | + | | 0x4 |
| + | | 0x4 |
| + | | Lotus3Status |
| + | |- |
| + | | 0x8 |
| + | | 0x4 |
| + | | [[Filesystem_services#CardId1|CardId1]] |
| + | |- |
| + | | 0xC |
| + | | 0x4 |
| + | | [[Filesystem_services#CardId2|CardId2]] |
| + | |- |
| + | | 0x10 |
| + | | 0x40 |
| + | | CardUid |
| + | |- |
| + | | 0x50 |
| + | | 0x1B0 |
| + | | Reserved |
| + | |- |
| + | | 0x200 |
| | 0x200 | | | 0x200 |
− | | Empty sector (all 0xFF) | + | | [[XCI#CertArea|CertArea]] |
| |- | | |- |
− | | 3 | + | | 0x400 |
| | 0x200 | | | 0x200 |
− | | [[Gamecard_Format#Initial_Data|Gamecard Initial Data]] | + | | [[XCI#InitialData|InitialData]] |
| |} | | |} |
| | | |
| == SendCardCommand == | | == SendCardCommand == |
− | Signals the Gamecard ASIC to relay a specific [[#Gamecard commands|command]] to the Gamecard. The command is sent to the Gamecard using the [[#OperationBuffer]] as follows. | + | Signals the Gamecard ASIC to relay a specific [[#Gamecard commands|command]] to the Gamecard. The command is sent to the Gamecard using the [[#OperationBuffer]] as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 342: |
Line 411: |
| | | |
| == ExchangeRandomValuesInSecureMode == | | == ExchangeRandomValuesInSecureMode == |
− | Signals the Gamecard ASIC to exchange random authentication values with the current Gamecard. The Gamecard response values are returned in a 0x20 sized buffer while the host values are passed in the actual [[#OperationBuffer]] as follows. | + | Signals the Gamecard ASIC to exchange random authentication values with the current Gamecard. The Gamecard response values are returned in a 0x20 sized buffer while the host values are passed in the actual [[#OperationBuffer]] as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 367: |
Line 436: |
| | | |
| == ChallengeCardExistence == | | == ChallengeCardExistence == |
− | Signals the Gamecard ASIC to exchange random values with the current Gamecard. The Gamecard response values are returned in a 0x58 sized buffer while the host values are passed in the actual [[#OperationBuffer]] as follows. | + | Signals the Gamecard ASIC to exchange random values with the current Gamecard. The Gamecard response values are returned in a 0x58 sized buffer while the host values are passed in the actual [[#OperationBuffer]] as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 468: |
Line 537: |
| Returns the Gamecard ID1 under one of the valid [[#Gamecard modes|Gamecard modes]]. | | Returns the Gamecard ID1 under one of the valid [[#Gamecard modes|Gamecard modes]]. |
| | | |
− | The [[#OperationBuffer]] is as follows. | + | The [[#OperationBuffer]] is as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 524: |
Line 593: |
| Returns the Gamecard ID2 under one of the valid [[#Gamecard modes|Gamecard modes]]. | | Returns the Gamecard ID2 under one of the valid [[#Gamecard modes|Gamecard modes]]. |
| | | |
− | The [[#OperationBuffer]] is as follows. | + | The [[#OperationBuffer]] is as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 580: |
Line 649: |
| Returns the Gamecard ID3 under one of the valid [[#Gamecard modes|Gamecard modes]]. | | Returns the Gamecard ID3 under one of the valid [[#Gamecard modes|Gamecard modes]]. |
| | | |
− | The [[#OperationBuffer]] is as follows. | + | The [[#OperationBuffer]] is as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 636: |
Line 705: |
| Reads pages from the Gamecard, calculates their CRC and returns it. This command is only available in [[#Gamecard modes|Write]] mode. | | Reads pages from the Gamecard, calculates their CRC and returns it. This command is only available in [[#Gamecard modes|Write]] mode. |
| | | |
− | The [[#OperationBuffer]] is as follows. | + | The [[#OperationBuffer]] is as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 688: |
Line 757: |
| Writes Gamecard pages. This command is only available in [[#Gamecard modes|Write]] and [[#Gamecard modes|Secure]] modes. | | Writes Gamecard pages. This command is only available in [[#Gamecard modes|Write]] and [[#Gamecard modes|Secure]] modes. |
| | | |
− | The [[#OperationBuffer]] is as follows. | + | The [[#OperationBuffer]] is as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 740: |
Line 809: |
| Reads Gamecard pages. This command is only available in [[#Gamecard modes|Normal]] and [[#Gamecard modes|Secure]] modes. | | Reads Gamecard pages. This command is only available in [[#Gamecard modes|Normal]] and [[#Gamecard modes|Secure]] modes. |
| | | |
− | The [[#OperationBuffer]] is as follows. | + | The [[#OperationBuffer]] is as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 792: |
Line 861: |
| Fully erases a Gamecard's contents. This command is only available in [[#Gamecard modes|Write]] mode. | | Fully erases a Gamecard's contents. This command is only available in [[#Gamecard modes|Write]] mode. |
| | | |
− | The [[#OperationBuffer]] is as follows. | + | The [[#OperationBuffer]] is as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 848: |
Line 917: |
| Reads a development Gamecard's parameters. This command is only available in [[#Gamecard modes|Write]] mode. | | Reads a development Gamecard's parameters. This command is only available in [[#Gamecard modes|Write]] mode. |
| | | |
− | The [[#OperationBuffer]] is as follows. | + | The [[#OperationBuffer]] is as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 904: |
Line 973: |
| Writes a development Gamecard's parameters. This command is only available in [[#Gamecard modes|Write]] mode. | | Writes a development Gamecard's parameters. This command is only available in [[#Gamecard modes|Write]] mode. |
| | | |
− | The [[#OperationBuffer]] is as follows. | + | The [[#OperationBuffer]] is as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 960: |
Line 1,029: |
| Sets the Gamecard's internal key data. This command is only available in [[#Gamecard modes|Secure]] mode. | | Sets the Gamecard's internal key data. This command is only available in [[#Gamecard modes|Secure]] mode. |
| | | |
− | The [[#OperationBuffer]] is as follows. | + | The [[#OperationBuffer]] is as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,016: |
Line 1,085: |
| Resets the Gamecard's internal status. This command is only available in [[#Gamecard modes|Secure]] mode. | | Resets the Gamecard's internal status. This command is only available in [[#Gamecard modes|Secure]] mode. |
| | | |
− | The [[#OperationBuffer]] is as follows. | + | The [[#OperationBuffer]] is as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,072: |
Line 1,141: |
| Used by [[Filesystem_services#OpenGameCardStorage|OpenGameCardStorage]]. This command is only available in [[#Gamecard modes|Normal]] mode. | | Used by [[Filesystem_services#OpenGameCardStorage|OpenGameCardStorage]]. This command is only available in [[#Gamecard modes|Normal]] mode. |
| | | |
− | The [[#OperationBuffer]] is as follows. | + | The [[#OperationBuffer]] is as follows: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,153: |
Line 1,222: |
| | | |
| = User firmware = | | = User firmware = |
− | [[Filesystem_services|FS]] provides the appropriate Gamecard ASIC's user firmware (Lotus ASIC Firmware or LAFW) which is encrypted, signed and follows the format below. | + | [[Filesystem_services|FS]] provides the appropriate Gamecard ASIC's user firmware (Lotus ASIC Firmware or LAFW) which is encrypted, signed and follows the format below: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |