Changes

Jump to navigation Jump to search
6,149 bytes added ,  17:29, 15 October 2018
no edit summary
Line 271: Line 271:  
= Gamecard commands =
 
= Gamecard commands =
 
These commands are issued by the Gamecard ASIC to the actual Gamecard using the [[#OperationBuffer]] passed to [[#SendCardCommand]].
 
These commands are issued by the Gamecard ASIC to the actual Gamecard using the [[#OperationBuffer]] passed to [[#SendCardCommand]].
 +
 +
Additional data buffers are then read/written using standard MMC read/write commands.
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 278: Line 280:  
|-
 
|-
 
| 0x10
 
| 0x10
| ReadId1Writer
+
| [[#ReadId1Normal, ReadId1Secure, ReadId1Writer|#ReadId1Writer]]
 
|-
 
|-
 
| 0x11
 
| 0x11
| ReadId2Writer
+
| [[#ReadId2Normal, ReadId2Secure, ReadId2Writer|#ReadId2Writer]]
 
|-
 
|-
 
| 0x12
 
| 0x12
| ReadId3Writer
+
| [[#ReadId3Normal, ReadId3Secure, ReadId3Writer|#ReadId3Writer]]
 
|-
 
|-
 
| 0x15
 
| 0x15
| ReadCrc
+
| [[#ReadCrc]]
 
|-
 
|-
 
| 0x16
 
| 0x16
| WritePage
+
| [[#WritePage, WritePageSecure|#WritePage]]
 
|-
 
|-
 
| 0x18
 
| 0x18
| Erase
+
| [[#Erase]]
 
|-
 
|-
 
| 0x19
 
| 0x19
| ReadDevParam
+
| [[#ReadDevParam]]
 
|-
 
|-
 
| 0x20
 
| 0x20
| WriteDevParam
+
| [[#WriteDevParam]]
 
|-
 
|-
 
| 0x21
 
| 0x21
| ReadPageSecure
+
| [[#ReadPage, ReadPageSecure|#ReadPageSecure]]
 
|-
 
|-
 
| 0x28
 
| 0x28
| ReadId2Normal
+
| [[#ReadId2Normal, ReadId2Secure, ReadId2Writer|#ReadId2Normal]]
 
|-
 
|-
 
| 0x2E
 
| 0x2E
Line 311: Line 313:  
|-
 
|-
 
| 0x30
 
| 0x30
| ReadId3Secure
+
| [[#ReadId3Normal, ReadId3Secure, ReadId3Writer|#ReadId3Secure]]
 
|-
 
|-
 
| 0x39
 
| 0x39
Line 317: Line 319:  
|-
 
|-
 
| 0x56
 
| 0x56
| ReadId1Normal
+
| [[#ReadId1Normal, ReadId1Secure, ReadId1Writer|#ReadId1Normal]]
 
|-
 
|-
 
| 0x83
 
| 0x83
| WritePageSecure
+
| [[#WritePage, WritePageSecure|#WritePageSecure]]
 
|-
 
|-
 
| 0x5B
 
| 0x5B
| ReadPage
+
| [[#ReadPage, ReadPageSecure|#ReadPage]]
 
|-
 
|-
 
| 0x67
 
| 0x67
| ReadId1Secure
+
| [[#ReadId1Normal, ReadId1Secure, ReadId1Writer|#ReadId1Secure]]
 
|-
 
|-
 
| 0xA5
 
| 0xA5
| ReadId3Normal
+
| [[#ReadId3Normal, ReadId3Secure, ReadId3Writer|#ReadId3Normal]]
 
|-
 
|-
 
| 0xB8
 
| 0xB8
Line 335: Line 337:  
|-
 
|-
 
| 0xC4
 
| 0xC4
| ReadId2Secure
+
| [[#ReadId2Normal, ReadId2Secure, ReadId2Writer|#ReadId2Secure]]
 
|-
 
|-
 
| 0xE0
 
| 0xE0
Line 342: Line 344:  
| 0xE2
 
| 0xE2
 
|  
 
|  
 +
|}
 +
 +
== ReadId1Normal, ReadId1Secure, ReadId1Writer ==
 +
Returns the Gamecard ID1 under one of the valid [[#Gamecard modes|Gamecard modes]].
 +
 +
The [[#OperationBuffer]] is as follows.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x1
 +
| Gamecard ASIC operation command (0x10)
 +
|-
 +
| 0x1
 +
| 0x1
 +
| Set to 1
 +
|-
 +
| 0x2
 +
| 0x1
 +
| Set to 0
 +
|-
 +
| 0x3
 +
| 0x1
 +
| Padding
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Set to 0
 +
|-
 +
| 0x8
 +
| 0x1
 +
| Gamecard command (0x10, 0x56 or 0x67)
 +
|-
 +
| 0x9
 +
| 0x4
 +
| Set to 0
 +
|-
 +
| 0xD
 +
| 0x2
 +
| Set to 0
 +
|-
 +
| 0xF
 +
| 0x1
 +
| Set to 0
 +
|-
 +
| 0x10
 +
| 0x10
 +
| Empty
 +
|-
 +
| 0x20
 +
| 0x20
 +
| Command verification value
 +
|}
 +
 +
== ReadId2Normal, ReadId2Secure, ReadId2Writer ==
 +
Returns the Gamecard ID2 under one of the valid [[#Gamecard modes|Gamecard modes]].
 +
 +
The [[#OperationBuffer]] is as follows.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x1
 +
| Gamecard ASIC operation command (0x10)
 +
|-
 +
| 0x1
 +
| 0x1
 +
| Set to 1
 +
|-
 +
| 0x2
 +
| 0x1
 +
| Set to 0
 +
|-
 +
| 0x3
 +
| 0x1
 +
| Padding
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Set to 0
 +
|-
 +
| 0x8
 +
| 0x1
 +
| Gamecard command (0x11, 0x28 or 0xC4)
 +
|-
 +
| 0x9
 +
| 0x4
 +
| Set to 0
 +
|-
 +
| 0xD
 +
| 0x2
 +
| Set to 0
 +
|-
 +
| 0xF
 +
| 0x1
 +
| Set to 0
 +
|-
 +
| 0x10
 +
| 0x10
 +
| Empty
 +
|-
 +
| 0x20
 +
| 0x20
 +
| Command verification value
 +
|}
 +
 +
== ReadId3Normal, ReadId3Secure, ReadId3Writer ==
 +
Returns the Gamecard ID3 under one of the valid [[#Gamecard modes|Gamecard modes]].
 +
 +
The [[#OperationBuffer]] is as follows.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x1
 +
| Gamecard ASIC operation command (0x10)
 +
|-
 +
| 0x1
 +
| 0x1
 +
| Set to 1
 +
|-
 +
| 0x2
 +
| 0x1
 +
| Set to 0
 +
|-
 +
| 0x3
 +
| 0x1
 +
| Padding
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Set to 0
 +
|-
 +
| 0x8
 +
| 0x1
 +
| Gamecard command (0x12, 0x30 or 0xA5)
 +
|-
 +
| 0x9
 +
| 0x4
 +
| Set to 0
 +
|-
 +
| 0xD
 +
| 0x2
 +
| Set to 0
 +
|-
 +
| 0xF
 +
| 0x1
 +
| Set to 0
 +
|-
 +
| 0x10
 +
| 0x10
 +
| Empty
 +
|-
 +
| 0x20
 +
| 0x20
 +
| Command verification value
 +
|}
 +
 +
== ReadCrc ==
 +
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.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x1
 +
| Gamecard ASIC operation command (0x10)
 +
|-
 +
| 0x1
 +
| 0x1
 +
| Set to 1
 +
|-
 +
| 0x2
 +
| 0x1
 +
| Set to 0
 +
|-
 +
| 0x3
 +
| 0x1
 +
| Padding
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Set to 0
 +
|-
 +
| 0x8
 +
| 0x1
 +
| Gamecard command (0x15)
 +
|-
 +
| 0x9
 +
| 0x4
 +
| Gamecard page offset
 +
|-
 +
| 0xD
 +
| 0x3
 +
| Gamecard page count
 +
|-
 +
| 0x10
 +
| 0x10
 +
| Empty
 +
|-
 +
| 0x20
 +
| 0x20
 +
| Command verification value
 +
|}
 +
 +
== WritePage, WritePageSecure ==
 +
Writes Gamecard pages. This command is only available in [[#Gamecard modes|Write]] and [[#Gamecard modes|Secure]] modes.
 +
 +
The [[#OperationBuffer]] is as follows.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x1
 +
| Gamecard ASIC operation command (0x10)
 +
|-
 +
| 0x1
 +
| 0x1
 +
| Set to 3
 +
|-
 +
| 0x2
 +
| 0x1
 +
| Set to 1
 +
|-
 +
| 0x3
 +
| 0x1
 +
| Padding
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Gamecard page count (duplicate)
 +
|-
 +
| 0x8
 +
| 0x1
 +
| Gamecard command (0x16 or 0x83)
 +
|-
 +
| 0x9
 +
| 0x4
 +
| Gamecard page offset
 +
|-
 +
| 0xD
 +
| 0x3
 +
| Gamecard page count
 +
|-
 +
| 0x10
 +
| 0x10
 +
| Empty
 +
|-
 +
| 0x20
 +
| 0x20
 +
| Command verification value
 +
|}
 +
 +
== ReadPage, ReadPageSecure ==
 +
Reads Gamecard pages. This command is only available in [[#Gamecard modes|Normal]] and [[#Gamecard modes|Secure]] modes.
 +
 +
The [[#OperationBuffer]] is as follows.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x1
 +
| Gamecard ASIC operation command (0x10)
 +
|-
 +
| 0x1
 +
| 0x1
 +
| Set to 3
 +
|-
 +
| 0x2
 +
| 0x1
 +
| Set to 0
 +
|-
 +
| 0x3
 +
| 0x1
 +
| Padding
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Gamecard page count (duplicate)
 +
|-
 +
| 0x8
 +
| 0x1
 +
| Gamecard command (0x21 or 0x5B)
 +
|-
 +
| 0x9
 +
| 0x4
 +
| Gamecard page offset
 +
|-
 +
| 0xD
 +
| 0x3
 +
| Gamecard page count
 +
|-
 +
| 0x10
 +
| 0x10
 +
| Empty
 +
|-
 +
| 0x20
 +
| 0x20
 +
| Command verification value
 +
|}
 +
 +
== Erase ==
 +
Fully erases a Gamecard's contents. This command is only available in [[#Gamecard modes|Write]] mode.
 +
 +
The [[#OperationBuffer]] is as follows.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x1
 +
| Gamecard ASIC operation command (0x10)
 +
|-
 +
| 0x1
 +
| 0x1
 +
| Set to 1
 +
|-
 +
| 0x2
 +
| 0x1
 +
| Set to 0
 +
|-
 +
| 0x3
 +
| 0x1
 +
| Padding
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Set to 0
 +
|-
 +
| 0x8
 +
| 0x1
 +
| Gamecard command (0x18)
 +
|-
 +
| 0x9
 +
| 0x4
 +
| Set to 0
 +
|-
 +
| 0xD
 +
| 0x2
 +
| Set to 0
 +
|-
 +
| 0xF
 +
| 0x1
 +
| Set to 0
 +
|-
 +
| 0x10
 +
| 0x10
 +
| Empty
 +
|-
 +
| 0x20
 +
| 0x20
 +
| Command verification value
 +
|}
 +
 +
== ReadDevParam ==
 +
Reads a development Gamecard's parameters. This command is only available in [[#Gamecard modes|Write]] mode.
 +
 +
The [[#OperationBuffer]] is as follows.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x1
 +
| Gamecard ASIC operation command (0x10)
 +
|-
 +
| 0x1
 +
| 0x1
 +
| Set to 3
 +
|-
 +
| 0x2
 +
| 0x1
 +
| Set to 0
 +
|-
 +
| 0x3
 +
| 0x1
 +
| Padding
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Set to 1
 +
|-
 +
| 0x8
 +
| 0x1
 +
| Gamecard command (0x19)
 +
|-
 +
| 0x9
 +
| 0x4
 +
| Set to 0
 +
|-
 +
| 0xD
 +
| 0x2
 +
| Set to 0
 +
|-
 +
| 0xF
 +
| 0x1
 +
| Set to 0
 +
|-
 +
| 0x10
 +
| 0x10
 +
| Empty
 +
|-
 +
| 0x20
 +
| 0x20
 +
| Command verification value
 +
|}
 +
 +
== WriteDevParam ==
 +
Writes a development Gamecard's parameters. This command is only available in [[#Gamecard modes|Write]] mode.
 +
 +
The [[#OperationBuffer]] is as follows.
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x1
 +
| Gamecard ASIC operation command (0x10)
 +
|-
 +
| 0x1
 +
| 0x1
 +
| Set to 3
 +
|-
 +
| 0x2
 +
| 0x1
 +
| Set to 1
 +
|-
 +
| 0x3
 +
| 0x1
 +
| Padding
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Set to 1
 +
|-
 +
| 0x8
 +
| 0x1
 +
| Gamecard command (0x20)
 +
|-
 +
| 0x9
 +
| 0x4
 +
| Set to 0
 +
|-
 +
| 0xD
 +
| 0x2
 +
| Set to 0
 +
|-
 +
| 0xF
 +
| 0x1
 +
| Set to 0
 +
|-
 +
| 0x10
 +
| 0x10
 +
| Empty
 +
|-
 +
| 0x20
 +
| 0x20
 +
| Command verification value
 
|}
 
|}
  

Navigation menu