Editing MechaCon
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
MechaCon is short for Mechanics Controller. Its main function is to control the drive mechanism. However, this chip also | MechaCon is short for Mechanics Controller. Its main function of it is to control the drive mechanism. However, this chip is also the security ic of the PlayStation 2 that implements game disk security, Magic Gate and KELF file decryption. | ||
There are two known main variants of it. | There are two known main variants of it. | ||
The earlier one is based on the 16-bit SPC970 CPU core | The earlier one is based on the 16-bit SPC970 CPU core and was used till GH-022. Chip name starts with "CXP10". Older versions come in a 100-pin QFP package, newer versions in a 136-ball BGA package. | ||
The newer one is ARM-based | The newer one is ARM-based, codenamed "Dragon", and used from GH-023 (SCPH-5000X) onwards. Chip name starts with "CXR7". All versions come in a 164-ball BGA package. Besides this, "Dragon" also includes the functions that were fulfilled by the separate SysCon chip on earlier boards up to GH-022, as well as the RTC+EEPROM chip, which was separate on earlier boards (or dedicated EEPROM and RTC chips on even earlier boards). | ||
Both have access to a 1 KB / 512 words EEPROM. The EEPROM content is different between the SPC970-based MechaCon and Dragon. | Both have access to a 1 KB / 512 words EEPROM. The EEPROM content is different between the SPC970-based MechaCon and Dragon. | ||
For the SPC970 MechaCon, the EEPROM is an external chip; either a dedicated EEPROM chip on | For the SPC970 MechaCon, the EEPROM is an external chip; either a dedicated EEPROM chip on older boards or a combined Rohm RTC+EEPROM chip on later boards.</br> | ||
Dragon has the die of the combined Rohm RTC+EEPROM chip inside its own chip package, however, the EEPROM pins are exposed on the package, and the connection between Dragon and the RTC+EEPROM is done externally on the motherboard. | |||
Every MechaCon has a 3.3 V TTL UART interface exposed on test pads that was used by service centers for example to readjust the drive and write calibration data etc. Today it can be used with tools like PMAP (currently supports consoles up to I-chassis) to readjust the drive mechanism after fitting a replacement laser assembly etc. | |||
Additionaly, at least the SPC970-based MechaCon (both, QFP and BGA revisions) provide an I²C interface with SDA and SCL being exposed on test pads next to the MechaCon. | |||
= SPC970 = | |||
== Hardware revisions == | |||
* CXP101064 (only used on early A-chassis/GH-001 boards) | |||
* CXP102064 (used from later A-chassis to D/D'-chassis boards) | |||
* CXP103049 (BGA case, used in F and G-chassis) | |||
The CXP103049 requires a working battery to function properly. | |||
==Firmware revisions== | == Firmware revisions == | ||
Firmware comes in an OTP or mask ROM inside MechaCon. | Firmware comes in an OTP or mask ROM inside MechaCon. | ||
TODO | |||
== EEPROM layout == | |||
TODO | |||
= Dragon = | |||
== Hardware revisions == | |||
* CXR706F080 (has a flash ROM for firmware; used for engineering, not used in retail consoles) | |||
* CXR706080 (used in H, I and J chassis SCPH-5XXXX consoles as well as in PSX) | |||
* CXR716080 (used in K, L and M slim chassis SCPH-70XXX, SCPH-75XXX and SCPH-77XXX consoles) | |||
* CXR726080 (used in N, P and R slim chassis SCPH-79XXX and SCPH-9XXXX consoles) | |||
== Firmware revisions == | |||
Firmware comes in an OTP or mask ROM inside MechaCon, except in CXR706F080, which has a reprogrammable flash ROM. It is however possible to apply patches to it via EEPROM. | |||
Dumps: https://mega.nz/folder/MNpAQDzJ#bZpyfb7aGrhGDMR_ZGA8ig | |||
Early versions of the Dragon MechaCon firmware (specifically in SCPH-5XXXX and SCPH-70XXX consoles) have a tendency to crash by sheer bad luck or on badly readable discs (e.g. badly burned/low-quality DVD-R discs or scratched originals), overvolting the focus/tracking coils of the laser and killing them and also the driver IC in the process. Several hardware-based mitigations/"fixes" have been developed by the community to address this issue with varying degrees of success. The most notable of these fixes are the "Romeo-mod"/"LA-fix" for SCPH-5XXXX consoles and "summ0ne's fix" for SCPH-70XXX consoles. | |||
==EEPROM layout== | == EEPROM layout == | ||
{| | {| border="1" cellspacing="0" cellpadding="5" border="#999" class="wikitable" style="border:1px solid #999; border-collapse: collapse;" | ||
|- bgcolor="#cccccc" | |- bgcolor="#cccccc" | ||
!Start (word)!!End (word)!!Size (byte)!!Offset in file!!Description | ! Start (word) !! End (word) !! Size (byte) !! Offset in file !! Description | ||
|- | |- | ||
| | | 0 || 48 || 0x60 || 0x0 || | ||
|- | |- | ||
| | | 48 || 90 || 0x54 || 0x60 || | ||
|- | |- | ||
| 90 || 96 || 0xC || 0xB4 || gap | |||
| | |||
| | |||
|- | |- | ||
| | | 96 || 128 || 0x40 || 0xC0 || | ||
|- | |- | ||
| | | 128 || 150 || 0x2C || 0x100 || | ||
|- | |- | ||
| | | 150 || 160 || 0x14 || 0x12C || gap | ||
| | |||
| | |||
|- | |- | ||
| | | 160 || 190 || 0x3C || 0x140 || | ||
|- | |- | ||
| | | 190 || 192 || 0x4 || 0x17C || gap | ||
|- | |- | ||
| | | 192 || 198 || 0xC || 0x180 || Region params (only slim) | ||
|- | |- | ||
| | | 198 || 204 || 0xC || 0x18C || gap | ||
|- | |- | ||
| | | 204 || 208 || 0x8 || 0x198 || MAC address (only slim) | ||
|- | |- | ||
| | | 208 || 211 || 0x6 || 0x1A0 || gap | ||
|- | |- | ||
| | | 211 || 216 || 0xA || 0x1A6 || wake up time | ||
|- | |- | ||
| | | 216 || 225 || 0x12 || 0x1B0 || model number | ||
|- | |- | ||
| | | 225 || 227 || 0x4 || 0x1C2 || gap | ||
|- | |- | ||
| | | 227 || 232 || 0xA || 0x1C6 || Region code key seed | ||
|- | |- | ||
| | | 232 || 237 || 0xA || 0x1D0 || Region code ciphertext | ||
|- | |- | ||
| | | 237 || 240 || 0x6 || 0x1DA || gap | ||
|- | |- | ||
| | | 240 || 245 || 0xA || 0x1E0 || iLink id | ||
|- | |- | ||
| | | 245 || 248 || 0x6 || 0x1EA || (used by scmd 3, subcmd 48 and 49) | ||
|- | |- | ||
| | | 248 || 253 || 0xA || 0x1F0 || Console id | ||
|- | |- | ||
| | | 253 || 256 || 0x6 || 0x1FA || (used by scmd 3, subcmd 48 and 49) | ||
|- | |- | ||
| | | 256 || 312 || 0x70 || 0x200 || config 2 | ||
|- | |- | ||
| | | 312 || 344 || 0x40 || 0x270 || config 0 (EEGS) | ||
|- | |- | ||
| | | 344 || 400 || 0x70 || 0x2B0 || config 1 (OSD) | ||
|- | |- | ||
| | | 400 || 512 || 0xE0 || 0x320 || Rom patches ciphertext | ||
|- | |- | ||
|} | |} | ||
== Region params == | |||
{| class="wikitable FCK__ShowTableBorders" | {| class="wikitable FCK__ShowTableBorders" | ||
|- | |- | ||
! colspan="2" |Offset!!Size!!Description | ! colspan="2" | Offset !! Size !! Description | ||
|- {{cellcolors|lightgrey}} | |-{{cellcolors|lightgrey}} | ||
| colspan="2" |0x180||0xF||Various region parameters. Type char. Zero padded. On | | colspan="2" | 0x180 || 0xF || Various region parameters. Type char. Zero padded. On dragon FATs (mechacon v5) filled with FF. Does not have checksum. Normally write-protected by mechacon. | ||
|- | |- | ||
| rowspan="5" |<abbr title="Region params: 0x180-0x18B"><small>Region params</small></abbr>||0x180 ||1||On 70k exists but has no effect. On Deckard will patch rom0:ROMVER (4th byte 0220HD20060905) and rom0. Possible values: | | rowspan="5" | <abbr title="Region params: 0x180-0x18B"><small>Region params</small></abbr> || 0x180 || 1 || On 70k exists but has no effect. On Deckard will patch rom0:ROMVER (4th byte 0220HD20060905) and rom0. Possible values: "J" - for Japan, "A" - for America and Mexico, "E" - for Europe, Oceania and Russia, "H" - for region Asia, Taiwan, Korea, "C" - for region Mainland China. Each region checks license data in the PS2 titles. "A" region has this check disabled. "H" region untested. | ||
|- | |- | ||
|0x181 || 4|| On all slims will patch rom0:OSDVER (5-8th byte) ("0190Csch"). This mostly controls OSD language sets, and other changes are not tested. Possible values: | | 0x181 || 4 || On all slims will patch rom0:OSDVER (5-8th byte) ("0190Csch"). This mostly controls OSD language sets, and other changes are not tested. Possible values: "Jjpn" - for Japan, "Aeng" - for America, "Eeng" - for Europe and Oceania, "Heng" - for Asia, "Reng" - for Russia, "Csch" - for mainland China, "Kkor" - for Korea, "Htch" - for Taiwan, "Aspa" - for Mexico. "Ccsh" will crash cause rom2 (containing Simplified Chinese font) is missing on slims. | ||
|- | |- | ||
| 0x185||1||On 70k exists but has no effect. On Deckard will patch rom0:VERSTR (0x22 byte: "System ROM Version 5.0 06/23/03 J") and rom0. Possible values: | | 0x185 || 1 || On 70k exists but has no effect. On Deckard will patch rom0:VERSTR (0x22 byte: "System ROM Version 5.0 06/23/03 J") and rom0. Possible values: "J" - for Japan, Asia, Taiwan, Korea, China, "A" - for America, Mexico, "E" - for Europe, Oceania and Russia. Each region checks license data in the PS1 titles. "A" region has this check disabled. | ||
|- | |- | ||
|0x186||1||On all slims will patch rom1:DVDID (5th byte) ("3.11A"). This change DVD player region. Possible values: "JUEAORCM". | | 0x186 || 1 || On all slims will patch rom1:DVDID (5th byte) ("3.11A"). This change DVD player region. Possible values: "JUEAORCM". | ||
|- | |- | ||
|0x187-0x18B||5||Zero filled. | | 0x187-0x18B || 5 || Zero filled. | ||
|- | |- | ||
|} | |} | ||
== MAC address == | |||
{| class="wikitable FCK__ShowTableBorders" | {| class="wikitable FCK__ShowTableBorders" | ||
|- | |- | ||
! colspan="2" |Offset!!Size!!Description | ! colspan="2" | Offset !! Size !! Description | ||
|- {{cellcolors|lightgrey}} | |-{{cellcolors|lightgrey}} | ||
| colspan="2" |0x198||0x8||48-bit MAC address. On | | colspan="2" | 0x198 || 0x8 || 48-bit MAC address. On dragon FATs (mechacon v5) filled with FF. On 70k exists but has no effect. | ||
|- | |- | ||
| rowspan="4" |<abbr title="MAC address: 0x198-0x19F"><small>MAC address</small></abbr>||0x198||3||Organizationally unique identifier (OUI). On 70k always 00:04:1F and has no effect. On Deckard units can be 00:13:15, 00:15:C1, 00:19:C5, 00:1D:0D, 00:1F:A7, 00:24:8D, 28:0D:FC, A8:E3:EE. Full list unknown. By OUI registration date, console manufacture date can be partially evaluated. | | rowspan="4" | <abbr title="MAC address: 0x198-0x19F"><small>MAC address</small></abbr> || 0x198 || 3 || Organizationally unique identifier (OUI). On 70k always 00:04:1F and has no effect. On Deckard units can be 00:13:15, 00:15:C1, 00:19:C5, 00:1D:0D, 00:1F:A7, 00:24:8D, 28:0D:FC, A8:E3:EE. Full list unknown. By OUI registration date, console manufacture date can be partially evaluated. | ||
|- | |- | ||
|0x19B||3||Random part of MAC address. On 70k always 00:00:00 and has no effect. Assignment unknown: probably is somehow calculated from data on the sticker. | | 0x19B || 3 || Random part of MAC address. On 70k always 00:00:00 and has no effect. Assignment unknown: probably is somehow calculated from data on the sticker. | ||
|- | |- | ||
|0x19E||1||checksum of even bytes uint8_t sum = 0x199 + 0x19B + 0x19D | | 0x19E || 1 || checksum of even bytes uint8_t sum = 0x199 + 0x19B + 0x19D | ||
|- | |- | ||
|0x19E||1||checksum of odd bytes uint8_t sum = 0x198 + 0x19A + 0x19C | | 0x19E || 1 || checksum of odd bytes uint8_t sum = 0x198 + 0x19A + 0x19C | ||
|- | |- | ||
|} | |} | ||
== Model number == | |||
{| class="wikitable FCK__ShowTableBorders" | {| class="wikitable FCK__ShowTableBorders" | ||
|- | |- | ||
! colspan="2" |Offset!!Size!!Description | ! colspan="2" | Offset !! Size !! Description | ||
|- {{cellcolors|lightgrey}} | |-{{cellcolors|lightgrey}} | ||
| colspan="2" | 0x1B0||0x12 ||Model number string. Type char. Zero padded. | | colspan="2" | 0x1B0 || 0x12 || Model number string. Type char. Zero padded. | ||
|- | |- | ||
| rowspan="3" |<abbr title="Model number: 0x1B0-0x1C1"><small>Model number</small></abbr>||0x1B0||1-16||Model name string. Max 15 or 16 characters. Zero padded. If started with "DTL-H" then OSD will block DVD player from work. | | rowspan="3" | <abbr title="Model number: 0x1B0-0x1C1"><small>Model number</small></abbr> || 0x1B0 || 1-16 || Model name string. Max 15 or 16 characters. Zero padded. If started with "DTL-H" then OSD will block DVD player from work. | ||
|- | |- | ||
|0x1C0|| 1||Null. | | 0x1C0 || 1 || Null. | ||
|- | |- | ||
|0x1C1 ||1|| uint8_t sum = 0xFF - sum(0x1B0:0x1BF) | | 0x1C1 || 1 || uint8_t sum = 0xFF - sum(0x1B0:0x1BF) | ||
|- | |- | ||
|} | |} | ||
== Region code == | |||
=== Decryption === | |||
<pre> | <pre> | ||
Line 363: | Line 196: | ||
return *(uint32_t *) plaintext; | return *(uint32_t *) plaintext; | ||
retrun 0; | |||
} | } | ||
</pre> | </pre> | ||
=== Bits === | |||
{| | {| border="1" cellspacing="0" cellpadding="5" border="#999" class="wikitable" style="border:1px solid #999; border-collapse: collapse;" | ||
|- bgcolor="#cccccc" | |- bgcolor="#cccccc" | ||
! Bit!!Description | ! Bit !! Description | ||
|- | |- | ||
|0||Japan | | 0 || Japan | ||
|- | |- | ||
|1||USA | | 1 || USA | ||
|- | |- | ||
|2||Europe | | 2 || Europe | ||
|- | |- | ||
|3||Oceania | | 3 || Oceania | ||
|- | |- | ||
|4||Asia | | 4 || Asia | ||
|- | |- | ||
|5||Russia | | 5 || Russia | ||
|- | |- | ||
|6||China | | 6 || China | ||
|- | |- | ||
| 7||Mexico | | 7 || Mexico | ||
|- | |- | ||
| 16||Development (changes MagicGate keys) | | 16 || Development (changes MagicGate keys) | ||
|- | |- | ||
|17|| Retail MagicGate keys on Development, bypass BootCertify | | 17 || Retail MagicGate keys on Development, bypass BootCertify | ||
|- | |- | ||
| 18||Arcade (changes MagicGate keys | | 18 || Arcade (changes MagicGate keys) | ||
|- | |- | ||
|19||Prototype? (changes MagicGate keys) | | 19 || Prototype? (changes MagicGate keys) | ||
|- | |- | ||
|20|| ? (dvd related) | | 20 || ? (dvd related) | ||
|- | |- | ||
|} | |} | ||
== i.Link ID == | |||
{| class="wikitable FCK__ShowTableBorders" | {| class="wikitable FCK__ShowTableBorders" | ||
|- | |- | ||
! colspan="2" | Offset!!Size !!Description | ! colspan="2" | Offset !! Size !! Description | ||
|- {{cellcolors|lightgrey}} | |-{{cellcolors|lightgrey}} | ||
| colspan="2" |0x1E0 ||0xA ||i.Link ID | | colspan="2" | 0x1E0 || 0xA || i.Link ID | ||
|- | |- | ||
| rowspan="6" |<abbr title="Console id: 0x1E0-0x1E9"><small>Console id</small></abbr>||0x1E0||1||EMCS ID. Id of plant, where the console was manufactured. Can be restored from the console sticker. | | rowspan="6" | <abbr title="Console id: 0x1E0-0x1E9"><small>Console id</small></abbr> || 0x1E0 || 1 || EMCS ID. Id of plant, where the console was manufactured. Can be restored from the console sticker. 0x20 - FOXC, 0x21 - FOXC, 0x30 - SZMT, 0x40 - S WUXI. Difference between 0x21 and 0x20 is unknown. Looks like this is the complete list, only these 4 values exist. | ||
|- | |- | ||
| | | 0x1E2 || 3 || Model ID. Can be calculated from Console Model ID (0x1F0-0x1F1) = ConsoleModelID + 0x200001 | ||
|- | |- | ||
|0x1E4|| 3||i.Link ID. Can be calculated from Console Serial Number (0x1F4-0x1F6) = 0xFFFFFF - SerialNumber | | 0x1E4 || 3 || i.Link ID. Can be calculated from Console Serial Number (0x1F4-0x1F6) = 0xFFFFFF - SerialNumber | ||
|- | |- | ||
|0x1E7||1||Unknown. 0xB0 on PSX DESR units, 0x80 on all other units | | 0x1E7 || 1 || Unknown. 0xB0 on PSX DESR units, 0x80 on all other units. | ||
|- | |- | ||
|0x1E8||1||Null. | | 0x1E8 || 1 || Null. | ||
|- | |- | ||
|0x1E9||1||uint8_t sum = 0xFF - sum(0x1E0:0x1E7) | | 0x1E9 || 1 || uint8_t sum = 0xFF - sum(0x1E0:0x1E7) | ||
|- | |- | ||
|} | |} | ||
== Console id == | |||
{| class="wikitable FCK__ShowTableBorders" | {| class="wikitable FCK__ShowTableBorders" | ||
|- | |- | ||
! colspan="2" | Offset!!Size!!Description | ! colspan="2" | Offset !! Size !! Description | ||
|- {{cellcolors|lightgrey}} | |-{{cellcolors|lightgrey}} | ||
| colspan="2" | 0x1F0||0xA||Console ID | | colspan="2" | 0x1F0 || 0xA || Console ID | ||
|- | |- | ||
| rowspan="6" |<abbr title="Console id: 0x1F0-0x1F9"><small></small></abbr>||0x1F0||2||Console Model ID. Unique per model number, color and edition. Can be restored from the console sticker. | | rowspan="6" | <abbr title="Console id: 0x1F0-0x1F9"><small></small></abbr> || 0x1F0 || 2 || Console Model ID. Unique per model number, color and edition. Can be restored from the console sticker. 0xd301 - 0xd37f reserved for DTL/TEST units, 0xd380 - 0xd400 reserved for PSX DESR units, 0xd401 - 0xd48f reserved for retail units. Full list isn't yet collected, currently it contains more than 100 collected IDs. | ||
|- | |- | ||
|0x1F2||2||0x0111 - always. In pre-Dragon units known as SDMI Company ID. | | 0x1F2 || 2 || 0x0111 - always. In pre-Dragon units known as SDMI Company ID. | ||
|- | |- | ||
|0x1F4||3||Console Serial Number (in dec). Can be restored from the console sticker. | | 0x1F4 || 3 || Console Serial Number (in dec). Can be restored from the console sticker. | ||
|- | |- | ||
|0x1F7||1||EMCS ID. Id of plant, where the console was manufactured. Can be restored from the console sticker. | | 0x1F7 || 1 || EMCS ID. Id of plant, where the console was manufactured. Can be restored from the console sticker. 0x20 - FOXC, 0x21 - FOXC, 0x30 - SZMT, 0x40 - S WUXI. Difference between 0x21 and 0x20 is unknown. Looks like this is the complete list, only these 4 values exist. | ||
|- | |- | ||
| 0x1F8 || 1||Null. | | 0x1F8 || 1 || Null. | ||
|- | |- | ||
|0x1F9||1||uint8_t sum = 0xFF - sum(0x1F0:0x1F7) | | 0x1F9 || 1 || uint8_t sum = 0xFF - sum(0x1F0:0x1F7) | ||
|- | |- | ||
|} | |} | ||
== Config 0 (EEGS) == | |||
{| class="wikitable FCK__ShowTableBorders" | {| class="wikitable FCK__ShowTableBorders" | ||
|- | |- | ||
! colspan="2" |Offset!!Size!!Description | ! colspan="2" | Offset !! Size !! Description | ||
|- {{cellcolors|lightgrey}} | |-{{cellcolors|lightgrey}} | ||
| colspan="2" |0x270||0x40 ||Config 0 (EEGS) | | colspan="2" | 0x270 || 0x40 || Config 0 (EEGS) | ||
|- | |- | ||
| rowspan="16" |<abbr title="Config 0 (EEGS): 0x270-0x2BF"><small>EEGS</small></abbr>|| 0x270||1||Unknown, 0x00 or 0x01 | | rowspan="16" | <abbr title="Config 0 (EEGS): 0x270-0x2BF"><small>EEGS</small></abbr> || 0x270 || 1 || Unknown, 0x00 or 0x01 | ||
|- | |- | ||
|0x271|| 1||Unknown, 0x03 or 0x00 | | 0x271 || 1 || Unknown, 0x03 or 0x00 | ||
|- | |- | ||
|0x272||13|| Unknown, always zero | | 0x272 || 13 || Unknown, always zero | ||
|- | |- | ||
|0x27F||1||uint8_t sum = sum(0x270-0x27E) | | 0x27F || 1 || uint8_t sum = sum(0x270-0x27E) | ||
|- | |- | ||
|0x280||1||bit 7, enable/disable networking features, always = 1, if cleared will show all network devices as disabled | | 0x280 || 1 || bit 7, enable/disable networking features, always = 1, if cleared will show all network devices as disabled | ||
|- | |- | ||
| 0x281||3||Unknown, always zero | | 0x281 || 3 || Unknown, always zero | ||
|- | |- | ||
| | | 0x294 || 1 || Unknown, always zero. In elec tool, March 2003, 0xC0 bitmask is compared to check if console is PAL, | ||
but no real console were found with that bitmask | but no real console were found with that bitmask | ||
|- | |- | ||
| | | 0x295 || 1 || bit 5, 1=pal, 0=ntsc, 0x10 bitmask is compared to check if console is PAL | ||
|- | |- | ||
| | | 0x296 || 9 || Unknown, always zero | ||
|- | |- | ||
|0x28F||1||uint8_t sum = sum(0x280-0x28E) | | 0x28F || 1 || uint8_t sum = sum(0x280-0x28E) | ||
|- | |- | ||
| 0x290||15||Unknown | | 0x290 || 15 || Unknown | ||
|- | |- | ||
| 0x29F||1||uint8_t sum = sum(0x290-0x29E) | | 0x29F || 1 || uint8_t sum = sum(0x290-0x29E) | ||
|- | |- | ||
|0x2A0 ||15||Unknown | | 0x2A0 || 15 || Unknown | ||
|- | |- | ||
| 0x2AF||1||uint8_t sum = sum(0x2A0-0x2AE) | | 0x2AF || 1 || uint8_t sum = sum(0x2A0-0x2AE) | ||
|- | |- | ||
|0x2B0||15||Unknown | | 0x2B0 || 15 || Unknown | ||
|- | |- | ||
|0x2BF||1||uint8_t sum = sum(0x2B0-0x2BE) | | 0x2BF || 1 || uint8_t sum = sum(0x2B0-0x2BE) | ||
|- | |- | ||
|} | |} | ||
== Config 1 (OSD) == | |||
{| class="wikitable FCK__ShowTableBorders" | {| class="wikitable FCK__ShowTableBorders" | ||
|- | |- | ||
! colspan="2" |Offset!!Size!!Description | ! colspan="2" | Offset !! Size !! Description | ||
|- {{cellcolors|lightgrey}} | |-{{cellcolors|lightgrey}} | ||
| colspan="2" |0x2B0||0x70||Config 1 (OSD) | | colspan="2" | 0x2B0 || 0x70 || Config 1 (OSD) | ||
|- | |- | ||
| rowspan="37" |<abbr title="Config 1: 0x2B0-0x31F"><small>Config 1 (OSD)</small></abbr>||0x2B0 ||1||PS1 (ps1drv settings) Unknown, mostly zero | | rowspan="37" | <abbr title="Config 1: 0x2B0-0x31F"><small>Config 1 (OSD)</small></abbr> || 0x2B0 || 1 || PS1 (ps1drv settings) Unknown, mostly zero | ||
|- | |- | ||
|0x2B1||14|| Unused, the rest of PS1 block, always zero | | 0x2B1 || 14 || Unused, the rest of PS1 block, always zero | ||
|- | |- | ||
|0x2BF||1||uint8_t sum = sum(0x2B0-0x2BE) | | 0x2BF || 1 || uint8_t sum = sum(0x2B0-0x2BE) | ||
|- | |- | ||
| colspan="1" | 0x2C0||15 ||PS2 | | colspan="1" | 0x2C0 || 15 || PS2 | ||
|- | |- | ||
| rowspan="6" |0x2C0||bit 0|| | | rowspan="6" | 0x2C0 || bit 0 || spdifMode: 0=enabled, 1=disabled, handled by OSD | ||
|- | |- | ||
|bit 1-2|| | | bit 1-2 || screenType: 0=4:3, 1=fullscreen, 2=16:9, 3=unused, handled by OSD | ||
|- | |- | ||
|bit 3|| | | bit 3 || videoOutput: 0=rgb(scart), 1=component, handled by OSD | ||
|- | |- | ||
|bit 4|| | | bit 4 || japLanguage: always set to 1. Leftover from older OSD configuration block, left for compatibility. | ||
|- | |- | ||
| bit 5|| | | bit 5 || extendedLanguage: 0-8 standard languages, 1-extended languages: Simplified Chinese, Russian, Korean, Traditional Chinese | ||
|- | |- | ||
|bit 6-7||unused: 0-always zero | | bit 6-7 || unused: 0-always zero | ||
|- | |- | ||
| rowspan="2" |0x2C1||bit 0-4|| | | rowspan="2" | 0x2C1 || bit 0-4 || language, handled by OSD, Japanese=0,English=1,French=2,Spanish=3,German=4,Italian=5,Dutch=6,Portugese=7, | ||
Russian=8,Korean=9,Traditional Chinese=10,Simplified Chinese=11, 12-31 unused | |||
|- | |- | ||
| bit 5-7|| | | bit 5-7 || version: 2=Dragon,1=Pre-Dragon (not used), 0 Unknown, 3-7 unused | ||
|- | |- | ||
| rowspan="5" |0x2C2||bit 0-2|| | | rowspan="5" | 0x2C2 || bit 0-2 || timezoneOffsetHi: Timezone minutes offset from GMT, higher 3 bits, total 11 bit, handled by OSD | ||
|- | |- | ||
|bit 3|| | | bit 3 || daylightSaving: 0=standard(winter), 1=daylight savings(summer), handled by OSD | ||
|- | |- | ||
|bit 4|| | | bit 4 || timeFormat: 0=24 hour, 1=12 hour, handled by OSD | ||
|- | |- | ||
|bit 5-6|| | | bit 5-6 || dateFormat: 0=YYYYMMDD, 1=MMDDYYYY, 2=DDMMYYYY, 3-Unused, handled by OSD | ||
|- | |- | ||
|bit 7|| | | bit 7 || osdInit: 0=OOBE, 1=normal | ||
|- | |- | ||
| 0x2C3 ||1|| | | 0x2C3 || 1 || timezoneOffsetLo: Timezone minutes offset from GMT, lower 5 bits, total 11 bit, handled by OSD | ||
|- | |- | ||
| rowspan="6" |0x2C4||bit 0|| | | rowspan="6" | 0x2C4 || bit 0 || timezoneHi: Timezone ID, higher 1 bit, total 9 bit, handled by OSD | ||
|- | |- | ||
|bit 1-3||Unknown, Value is carried over | | bit 1-3 || Unknown, Value is carried over | ||
|- | |- | ||
|bit 4||dvdpProgressive: 0=disabled, 1=enabled Whether the DVD player should have progressive scanning enabled, handled by DVD Player | | bit 4 || dvdpProgressive: 0=disabled, 1=enabled Whether the DVD player should have progressive scanning enabled, handled by DVD Player | ||
|- | |- | ||
|bit 5||rcSupported: always 1=enabled, Whether the Remote Control is supported by the PlayStation 2. Unknown how 0=disabled will affect. | | bit 5 || rcSupported: always 1=enabled, Whether the Remote Control is supported by the PlayStation 2. Unknown how 0=disabled will affect. | ||
|- | |- | ||
|bit 6||rcGameFunction: 0=disabled, 1=enabled, Remote Control Game Function On/Of, handled by OSD | | bit 6 || rcGameFunction: 0=disabled, 1=enabled, Remote Control Game Function On/Of, handled by OSD | ||
|- | |- | ||
|bit 7||rcEnabled: 0=disabled, 1=enabled, Remote Control On/Off option, handled by OSD | | bit 7 || rcEnabled: 0=disabled, 1=enabled, Remote Control On/Off option, handled by OSD | ||
|- | |- | ||
|0x2C5||1|| | | 0x2C5 || 1 || timezoneLo: Timezone ID, lower 8 bits, total 9 bit, handled by OSD | ||
|- | |- | ||
|0x2C6 || 9||Unused, always zero | | 0x2C6 || 9 || Unused, always zero | ||
|- | |- | ||
|0x2CF||1||uint8_t sum = sum(0x2C0-0x2CE) | | 0x2CF || 1 || uint8_t sum = sum(0x2C0-0x2CE) | ||
|- | |- | ||
|0x2D0||15||Unknown | | 0x2D0 || 15 || Unknown | ||
|- | |- | ||
|0x2DF||1||int8_t sum = sum(0x2D0-0x2DE) | | 0x2DF || 1 || int8_t sum = sum(0x2D0-0x2DE) | ||
|- | |- | ||
|0x2E0||15||Unknown | | 0x2E0 || 15 || Unknown | ||
|- | |- | ||
|0x2EF||1|| uint8_t sum = sum(0x2E0-0x2EE) | | 0x2EF || 1 || uint8_t sum = sum(0x2E0-0x2EE) | ||
|- | |- | ||
|0x2F0||15||Unknown | | 0x2F0 || 15 || Unknown | ||
|- | |- | ||
|0x2FF ||1||uint8_t sum = sum(0x2F0-0x2FE) | | 0x2FF || 1 || uint8_t sum = sum(0x2F0-0x2FE) | ||
|- | |- | ||
|0x300||15||Unknown | | 0x300 || 15 || Unknown | ||
|- | |- | ||
|0x30F||1|| uint8_t sum = sum(0x300-0x30E) | | 0x30F || 1 || uint8_t sum = sum(0x300-0x30E) | ||
|- | |- | ||
|0x310 ||15||Unknown | | 0x310 || 15 || Unknown | ||
|- | |- | ||
|0x31F|| 1|| uint8_t sum = sum(0x310-0x31E) | | 0x31F || 1 || uint8_t sum = sum(0x310-0x31E) | ||
|- | |- | ||
|} | |} | ||
== Rom patch == | |||
=== Decryption === | |||
<pre> | <pre> | ||
Line 615: | Line 449: | ||
</pre> | </pre> | ||
=== Content === | |||
The patch can contain up to 4 patches. | The patch can contain up to 4 patches. | ||
Line 627: | Line 461: | ||
payload = Arbitrary, could be code or data as well. | payload = Arbitrary, could be code or data as well. | ||
{| | {| border="1" cellspacing="0" cellpadding="5" border="#999" class="wikitable" style="border:1px solid #999; border-collapse: collapse;" | ||
|- bgcolor="#cccccc" | |- bgcolor="#cccccc" | ||
! Offset!!Size!! Name | ! Offset !! Size !! Name | ||
|- | |- | ||
|0x00||0x04|| address0 | | 0x00 || 0x04 || address0 | ||
|- | |- | ||
|0x04 || 0x04||address1 | | 0x04 || 0x04 || address1 | ||
|- | |- | ||
|0x08||0x04||address2 | | 0x08 || 0x04 || address2 | ||
|- | |- | ||
|0x0C||0x04||address3 | | 0x0C || 0x04 || address3 | ||
|- | |- | ||
|0x10||0x04 ||value0 | | 0x10 || 0x04 || value0 | ||
|- | |- | ||
|0x14||0x04||value1 | | 0x14 || 0x04 || value1 | ||
|- | |- | ||
|0x18|| 0x04||value2 | | 0x18 || 0x04 || value2 | ||
|- | |- | ||
| 0x1C||0x04||value3 | | 0x1C || 0x04 || value3 | ||
|- | |- | ||
|0x20||0x04||svc_address0 | | 0x20 || 0x04 || svc_address0 | ||
|- | |- | ||
| 0x24|| 0x04||svc_address1 | | 0x24 || 0x04 || svc_address1 | ||
|- | |- | ||
|0x28||0x04||svc_address2 | | 0x28 || 0x04 || svc_address2 | ||
|- | |- | ||
|0x2C||0x04 ||svc_address3 | | 0x2C || 0x04 || svc_address3 | ||
|- | |- | ||
| 0x30 ||0xA8||payload | | 0x30 || 0xA8 || payload | ||
|- | |- | ||
|0xD8|| 0x04||crc | | 0xD8 || 0x04 || crc | ||
|- | |- | ||
|} | |} |