Lotus3: Difference between revisions
m Hexkyz moved page Gamecard ASIC to Lotus3 over redirect |
No edit summary |
||
(4 intermediate revisions by the same user not shown) | |||
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 | |||
| [[XCI#CertArea|CertArea]] | |||
|- | |||
| 0x400 | |||
| 0x200 | | 0x200 | ||
| | | Reserved | ||
|- | |- | ||
| | | 0x600 | ||
| 0x200 | | 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" | ||
Line 1,183: | Line 1,252: | ||
| 0x110 | | 0x110 | ||
| 0x4 | | 0x4 | ||
| Version (0, 0x1, [4.0.0+] 0x3, [9.0.0+] 0x7, [11.0.0+] 0xF) | | Version (0, 0x1, [4.0.0+] 0x3, [9.0.0+] 0x7, [11.0.0+] 0xF, [12.0.0+] 0x1F) | ||
|- | |- | ||
| 0x114 | | 0x114 | ||
Line 1,227: | Line 1,296: | ||
[11.0.0+] This firmware blob was updated. | [11.0.0+] This firmware blob was updated. | ||
[12.0.0+] This firmware blob was updated. | |||
[14.0.0+] This firmware blob was updated. | |||
=== WriterFw === | === WriterFw === | ||
Line 1,237: | Line 1,310: | ||
Found inside [[Filesystem_services|FS]]. | Found inside [[Filesystem_services|FS]]. | ||
[9.0.0+] This firmware blob was updated. | |||
[11.0.0+] This firmware blob was updated. | |||
[14.0.0+] This firmware blob was updated. | |||
=== RmaFw === | === RmaFw === |