Lotus3: Difference between revisions
No edit summary |
|||
(19 intermediate revisions by the same user not shown) | |||
Line 15: | Line 15: | ||
|- | |- | ||
| 61 | | 61 | ||
| [[# | | [[#FinishOperation]] | ||
|- | |- | ||
| 62 | | 62 | ||
| [[# | | [[#Sleep]] | ||
|- | |- | ||
| 63 | | 63 | ||
| [[# | | [[#UpdateKey]] | ||
|} | |} | ||
Line 47: | Line 47: | ||
|} | |} | ||
== | == FinishOperation == | ||
Returns the status of a completed operation. | Returns the status of a completed operation. | ||
== | == Sleep == | ||
Puts the Gamecard ASIC in sleep mode. | Puts the Gamecard ASIC in sleep mode. | ||
== | == UpdateKey == | ||
Tells the Gamecard ASIC to generate new random key data. | Tells the Gamecard ASIC to generate new random key data. | ||
Line 122: | Line 122: | ||
| 0x13 | | 0x13 | ||
| [[#GetRmaInformation]] | | [[#GetRmaInformation]] | ||
|- | |||
| 0x14 | |||
| [9.0.0+] [[#ChallengeCardExistence]] | |||
|} | |} | ||
Line 185: | Line 188: | ||
== ReadAsicRegister == | == ReadAsicRegister == | ||
Signals the Gamecard ASIC to send a 0x30 byte sized buffer containing the values of all ASIC registers. | Signals the Gamecard ASIC to send a 0x30 byte sized buffer containing the values of all ASIC registers as follows. | ||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 0x4 | |||
| Status | |||
|- | |||
| 0x4 | |||
| 0x4 | |||
| Access Control | |||
|- | |||
| 0x8 | |||
| 0x4 | |||
| | |||
|- | |||
| 0xC | |||
| 0x4 | |||
| | |||
|- | |||
| 0x10 | |||
| 0x4 | |||
| | |||
|- | |||
| 0x14 | |||
| 0x4 | |||
| | |||
|- | |||
| 0x18 | |||
| 0x4 | |||
| | |||
|- | |||
| 0x1C | |||
| 0x4 | |||
| | |||
|- | |||
| 0x20 | |||
| 0x4 | |||
| | |||
|- | |||
| 0x24 | |||
| 0x4 | |||
| | |||
|- | |||
| 0x28 | |||
| 0x4 | |||
| | |||
|- | |||
| 0x2C | |||
| 0x4 | |||
| | |||
|} | |||
== ChangeDebugMode == | == ChangeDebugMode == | ||
Line 201: | Line 259: | ||
| 0x0 | | 0x0 | ||
| 0x4 | | 0x4 | ||
| CUP Version | | [[Gamecard_Format#Gamecard_Info|CUP Version]] | ||
|- | |- | ||
| 0x4 | | 0x4 | ||
| 0x4 | | 0x4 | ||
| Gamecard ID1 | | [[#ReadId1Normal.2C_ReadId1Secure.2C_ReadId1Writer|Gamecard ID1]] | ||
|- | |- | ||
| 0x8 | | 0x8 | ||
| 0x100 | | 0x100 | ||
| [[Gamecard_Format#Gamecard_Header|Gamecard | | [[Gamecard_Format#Gamecard_Header|Gamecard Header]] (without the signature) | ||
|} | |} | ||
== GetCardKeyArea == | == GetCardKeyArea == | ||
Signals the Gamecard ASIC to send a 0x800 byte sized buffer containing the current Gamecard's key area sectors. | 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" | |||
|- | |||
! Sector | |||
! Size | |||
! Description | |||
|- | |||
| 0 | |||
| 0x200 | |||
| Gamecard specific data | |||
|- | |||
| 1 | |||
| 0x200 | |||
| [[Gamecard_Format#Gamecard_Certificate|Gamecard Certificate]] | |||
|- | |||
| 2 | |||
| 0x200 | |||
| Empty sector (all 0xFF) | |||
|- | |||
| 3 | |||
| 0x200 | |||
| [[Gamecard_Format#Initial_Data|Gamecard Initial Data]] | |||
|} | |||
== SendCardCommand == | == SendCardCommand == | ||
Line 229: | Line 310: | ||
|- | |- | ||
| 0x1 | | 0x1 | ||
| | | 0x1 | ||
| | | Page size | ||
|- | |||
| 0x2 | |||
| 0x1 | |||
| Direction (0 = read, 1 = write) | |||
|- | |||
| 0x3 | |||
| 0x1 | |||
| Padding | |||
|- | |||
| 0x4 | |||
| 0x4 | |||
| Page count | |||
|- | |- | ||
| 0x8 | | 0x8 | ||
Line 272: | Line 365: | ||
== GetRmaInformation == | == GetRmaInformation == | ||
Signals the Gamecard ASIC to send a 0x200 byte sized buffer containing information on the Gamecard ASIC. This is called by [[Filesystem_services#IDeviceOperator|GetGameCardAsicInfo]]. | Signals the Gamecard ASIC to send a 0x200 byte sized buffer containing information on the Gamecard ASIC. This is called by [[Filesystem_services#IDeviceOperator|GetGameCardAsicInfo]]. | ||
== 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. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 0x1 | |||
| Gamecard ASIC operation command (0x14) | |||
|- | |||
| 0x1 | |||
| 0x1F | |||
| Random value from host | |||
|- | |||
| 0x20 | |||
| 0x20 | |||
| Command verification value | |||
|} | |||
= Gamecard commands = | = Gamecard commands = | ||
Line 314: | Line 429: | ||
|- | |- | ||
| 0x2E | | 0x2E | ||
| [[#UnlockForceErase]] | | [2.0.0+] [[#UnlockForceErase]] | ||
|- | |- | ||
| 0x30 | | 0x30 | ||
Line 320: | Line 435: | ||
|- | |- | ||
| 0x39 | | 0x39 | ||
| [[# | | [[#SetKey]] | ||
|- | |- | ||
| 0x56 | | 0x56 | ||
Line 338: | Line 453: | ||
|- | |- | ||
| 0xB8 | | 0xB8 | ||
| [[# | | [[#Refresh]] | ||
|- | |- | ||
| 0xC4 | | 0xC4 | ||
Line 344: | Line 459: | ||
|- | |- | ||
| 0xE0 | | 0xE0 | ||
| | | ReadInitialData | ||
|- | |- | ||
| 0xE2 | | 0xE2 | ||
| | | ChangeInitialData | ||
|} | |} | ||
Line 845: | Line 957: | ||
|} | |} | ||
== | == SetKey == | ||
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. | ||
Line 901: | Line 1,013: | ||
|} | |} | ||
== | == Refresh == | ||
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. | ||
Line 1,063: | Line 1,175: | ||
| 0x108 | | 0x108 | ||
| 0x4 | | 0x4 | ||
| | | Empty | ||
|- | |- | ||
| 0x10C | | 0x10C | ||
| 0x4 | | 0x4 | ||
| | | Empty | ||
|- | |- | ||
| 0x110 | | 0x110 | ||
| 0x4 | | 0x4 | ||
| Version (0, | | Version (0, 0x1, [4.0.0+] 0x3, [9.0.0+] 0x7, [11.0.0+] 0xF) | ||
|- | |- | ||
| 0x114 | | 0x114 | ||
Line 1,083: | Line 1,195: | ||
| 0x11C | | 0x11C | ||
| 0x4 | | 0x4 | ||
| | | Empty | ||
|- | |- | ||
| 0x120 | | 0x120 |