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 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"