Lotus3: Difference between revisions
No edit summary |
|||
Line 25: | Line 25: | ||
== WriteOperation == | == WriteOperation == | ||
Submits a Gamecard ASIC [[#ASIC commands|operation]] using a 0x40 byte sized | 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 | 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 | ||
| | | CupVersion | ||
|- | |- | ||
| 0x4 | | 0x4 | ||
| 0x4 | | 0x4 | ||
| [[# | | [[Filesystem_services#CardId1|CardId1]] | ||
|- | |- | ||
| 0x8 | | 0x8 | ||
| 0x100 | | 0x100 | ||
| [[ | | [[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" | ||
|- | |- | ||
! | ! Offset | ||
! Size | ! Size | ||
! Description | ! Description | ||
|- | |- | ||
| | | 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 | ||
| | | 0x200 | ||
| [[XCI#CertArea|CertArea]] | |||
|- | |- | ||
| | | 0x400 | ||
| 0x200 | | 0x200 | ||
| [[ | | 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 | |||
|- | |- | ||
| | | 0x4 | ||
| 0x4 | |||
| Lotus3Status | |||
|- | |||
| 0x8 | |||
| 0x4 | |||
| [[Filesystem_services#CardId1|CardId1]] | |||
|- | |||
| 0xC | |||
| 0x4 | |||
| [[Filesystem_services#CardId2|CardId2]] | |||
|- | |||
| 0x10 | |||
| 0x40 | |||
| CardUid | |||
|- | |||
| 0x50 | |||
| 0x1B0 | |||
| Reserved | |||
|- | |||
| 0x200 | |||
| 0x200 | | 0x200 | ||
| | | [[XCI#CertArea|CertArea]] | ||
|- | |- | ||
| | | 0x400 | ||
| 0x200 | | 0x200 | ||
| [[ | | [[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" |