Editing Talk:PS1 Emulation

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

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:
== Memory Map ==  
== PS1 Emulator Types and Revisions ==
For now here, i will move when finished.
<div>
Based on ps1_netemu 4.86.
<div style="float:top; text-align:center;">'''PS1 Emulator Types and Revisions'''</div>
* emu memory 0x770780 - 0x97077F = PS1 RAM (80000000 - 801FFFFF)
<div style="float:left;">
* emu memory 0x970780 - 0x970B7F = PS1 Scratchpad (1F800000 - 1F8003FF)
{| class="wikitable" style="line-height:100%; font-size:70%; margin-right:5px"
* emu memory 0x970B80 - 0xD70B80 = PS1 ROM (1FC00000 - 1FFFFFFF) (only 512kb used)
|+ ps1_emu.elf (decrypted)
! Firmware !! Size !! MD5 !! Timestamp !! <abbr title="Revision">Rev</abbr> !! style="padding:1px" | <abbr title="Maximun number of supported commands">Comm</abbr>
|-
! [[1.00_AV|1.00 AV]]
| 10 296 408 || style="font-family:monospace" | 981A7428C2A59219FA05861EDEEDBD4A || 06/10/04/12:16 || ? || ?
|-
! [[1.02_CEX|1.02]]
| 10.296.408 || style="font-family:monospace" | C5FE03742A951194C336EE33783F5CD6 || 06/10/21/00:01 || ? || ?
|-
! [[1.10_CEX|1.10]]
| 10.296.408 || style="font-family:monospace" | C9C9D7D2E36F3E3579A5DF713E9ABE1E || 06/11/09/06:09 || ? || ?
|-
! [[1.11_CEX|1.11]]
| 10.296.408 || style="font-family:monospace" | 26271CCA29B77483DC3D7FDDE7B9CC3C || 06/11/21/17:55 || ? || ?
|-
! [[1.30_CEX|1.30]]
| 10.296.496 || style="font-family:monospace" | E7932EC24E72B3005EE152B141A63690 || 06/12/05/05:34 || ? || ?
|-
! [[1.31_CEX|1.31]]
| 10.296.496 || style="font-family:monospace" | 2244DE70C85093D7E37BC3D3F4278BE1 || 06/12/12/18:48 || ? || ?
|-
! [[1.32_CEX|1.32]]
| 10.296.496 || style="font-family:monospace" | 601BCADBBBC0A2D0433C932A2D67C4EF || 06/12/18/05:55 || ? || ?
|-
! [[1.50_CEX|1.50]]
| 10.303.536 || style="font-family:monospace" | F8050B006CDFCC64DF742D7BBDC03130 || 07/01/18/22:53 || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! [[1.90_CEX|1.90]]
| 6.974.864 || style="font-family:monospace" | 478CFED0F7EE13C94F01C2A246C83D45 || 07/07/21/06:45 || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
| colspan="6" style="background:#ff8080; text-align:center; line-height:75%" | Stripped/extracted rom/bios
|-
! [[2.10_CEX|2.10]]
| ? || ? || ? || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! [[3.40_CEX|3.40]]
| 2.824.576 || style="font-family:monospace" | A6ABFB04739575E2264A4D3FEB2A9CBF || 10/06/23/15:45 || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! [[3.66_CEX|3.66]]
| 2.824.832 || style="font-family:monospace" | 95399A202003E216794511BD2D2E9DF6 || 11/06/16/03:52 || ? || ?
|-{{cellcolors|#bbbbff}}
! [[3.70_CEX|3.70]]
| rowspan="3" | 2.824.920 || style="font-family:monospace" | 045D81147B9BDFB8C8A416FD5F5A0C56 || 11/08/05/03:42 || rowspan="3" | same || rowspan="3" | ?
|-{{cellcolors|#bbbbff}}
! ~
| colspan="2" style="text-align:center; background-color:#bbbbff;" | ''Any''
|-{{cellcolors|#bbbbff}}
! [[3.72_CEX|3.72]]
| style="font-family:monospace" | C745A30231103B83F04539021E4878FC || 11/09/14/01:17
|-{{cellcolors|#ddddff}}
! [[3.73_CEX|3.73]]
| rowspan="2" | 2.824.920 || style="font-family:monospace" | EB3AFF30B3206CFA6A8962AB393F773E || 11/10/04/12:55 || rowspan="2" | same || rowspan="2" | ?
|-{{cellcolors|#ddddff}}
! [[3.74_CEX|3.74]]
| style="font-family:monospace" | E2A77C3DC9FD5AD4264341196462D096 || 11/10/25/00:38
|-{{cellcolors|#bbbbff}}
! [[4.00_CEX|4.00]]
| rowspan="3" | 2.829.784 || style="font-family:monospace" | 94A8E6A8063C08FAD8CA9B340CCCAE67 || 11/11/22/03:17 || rowspan="3" | same || rowspan="3" | ?
|-{{cellcolors|#bbbbff}}
! ~
| colspan="2" style="text-align:center; background-color:#bbbbff;" | ''Any''
|-{{cellcolors|#bbbbff}}
! [[4.11_CEX|4.11]]
| style="font-family:monospace" | 02B7F6D5F517959161B2154135D4B3BC || 12/02/11/07:13
|-
! [[4.15_CEX|4.15]]
| ? || ? || ? || ? || ?
|-{{cellcolors|#ddddff}}
! [[4.20_CEX|4.20]]
| rowspan="2" | 2.829.912 || style="font-family:monospace" | 3778948C92F5FA12CB0AABE65BEE5465 || 12/06/15/02:09 || rowspan="2" | same || rowspan="2" | ?
|-{{cellcolors|#ddddff}}
! [[4.21_CEX|4.21]]
| style="font-family:monospace" | B7B662397E3FFDD7C11F9617C1B41856 || 12/06/30/01:13
|-
! [[4.23_SEX|4.23 S]]
| 2.829.912 || style="font-family:monospace" | 6E74CC51E0C6462DF1F9278ED9DB9593 || 12/07/31/00:22 || ? || ?
|-
! [[4.25_CEX|4.25]]
| 2.829.912 || style="font-family:monospace" | 03EA65C3EA3F8DB04F236C49C6B6C0E1 || 12/09/07/07:03 || <abbr title="same code than 4.20 CEX and 4.21 CEX.... but different than the 4.23 SEX in between, grrrr">same</abbr> || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! [[4.78_CEX|4.78]]
| 2.765.488 || style="font-family:monospace" | 354F1DEEDCA3C4CFA1B49B6B28B1648D || 15/12/17/01:18 || ? || ?
|-
! [[4.80_CEX|4.80]]
| ? || ? || ? || ? || ?
|-
! [[4.81_CEX|4.81]]
| 2.765.616 || style="font-family:monospace" | 2123E3D6A8E81647CB41F51AFEE6CCD6 || 16/10/24/19:23 || ? || ?
|-
! colspan="6" style="background:#80ff80; line-height:75%" | Abandoned (last revision)
|-{{cellcolors|#ddddff}}
! [[4.82_CEX|4.82]]
| rowspan="3" | 2.765.616 || style="font-family:monospace" | 64BFA4DBD595A20E317B2189B54BF673 || 17/08/24/15:42 || rowspan="3" | Last || rowspan="3" | 0x15
|-
! ~
| colspan="2" style="text-align:center; background-color:#ddddff;" | ''Any''
|-
! [[4.88_CEX|4.88]]
| style="background-color:#ddddff; font-family:monospace" | 0C553CE93A2A6322E16636DD76D75E32 || style="background-color:#ddddff;" | 21/04/12/11:34
|}
<span style="font-size:small">
{{widedot}}'''Decrypted (elf)''': changes <abbr title="When comparing two decrypted files of the same revision from different firmwares the only differences are the build label (1 area with size 0x20) and the target firmware (1 area with size 0x2)">every firmware version</abbr><br>
{{widedot}}'''<abbr title="0x20 bytes">Build label</abbr>''': yes, with timestamp, search for '''-sgpu-sspu-sli4'''<br>
{{widedot}}'''<abbr title="2 bytes">Target Firmware</abbr>''': yes repeated '''one''' time<br>
{{widedot}}'''Revision''': unknown
</span>
</div>
<div style="float:left;">
{| class="wikitable" style="line-height:100%; font-size:70%; margin-left:5px; margin-right:5px"
|+ ps1_netemu.elf (decrypted)
! Firmware !! Size !! MD5 !! Timestamp !! <abbr title="Revision">Rev</abbr> !! style="padding:1px" | <abbr title="Maximun number of supported commands">Comm</abbr>
|-
! [[1.70_CEX|1.70]]
| ? || ? || ? || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! [[1.90_CEX|1.90]]
| 6.853.368 || style="font-family:monospace" | 8A5A3676B461C97A9A467D5651D6EAAD || 07/07/21/06:47 || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
| colspan="6" style="background:#ff8080; text-align:center; line-height:75%" | Stripped/extracted rom/bios
|-
! [[2.10_CEX|2.10]]
| ? || ? || ? || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! [[3.40_CEX|3.40]]
| 2.971.288 || style="font-family:monospace" | FD32C7B7CBA2639FC8DB9EB615A16461 || 10/06/23/15:46 || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! [[3.66_CEX|3.66]]
| 2.971.976 || style="font-family:monospace" | 9586FC8B121E59526C31405DCFFB79CA || 11/06/16/03:54 || ? || ?
|-{{cellcolors|#bbbbff}}
! [[3.70_CEX|3.70]]
| rowspan="3" | 2.972.168 || style="font-family:monospace" | AA1DB63461EE0BE021ED45F85A6EECE0 || 11/08/05/03:43 || rowspan="3" | same || rowspan="3" | ?
|-{{cellcolors|#bbbbff}}
! ~
| colspan="2" style="text-align:center; background-color:#bbbbff;" | ''Any''
|-{{cellcolors|#bbbbff}}
! [[3.72_CEX|3.72]]
| style="font-family:monospace" | 32F45129EC2844D419582912E54CEB22 || 11/09/14/01:18
|-{{cellcolors|#ddddff}}
! [[3.73_CEX|3.73]]
| rowspan="2" | 2.972.168 || style="font-family:monospace" | 17063FFAB205B72ABF7F59582B8A7988 || 11/10/04/12:56 || rowspan="2" | same || rowspan="2" | ?
|-{{cellcolors|#ddddff}}
! [[3.74_CEX|3.74]]
| style="font-family:monospace" | 89C03D80ACE7C4FA914DD699621EB4F8 || 11/10/25/00:40
|-{{cellcolors|#bbbbff}}
! [[4.00_CEX|4.00]]
| rowspan="2" | 2.977.128 || style="font-family:monospace" | DBB8FB62BE3F2064D31332FCB7575DF1 || 11/11/22/03:19 || rowspan="2" | same || rowspan="2" | ?
|-{{cellcolors|#bbbbff}}
! [[4.01_CEX|4.01]]
| style="font-family:monospace" | 9E60379FA979B0440C27C6AEE38754AF || 11/12/23/01:10
|-{{cellcolors|#ddddff}}
! [[4.10_CEX|4.10]]
| rowspan="2" | 2.977.208 || style="font-family:monospace" | B3CD41AB8235906AB41D3DA18D04F00E || 12/02/05/23:19 || rowspan="2" | same || rowspan="2" | ?
|-{{cellcolors|#ddddff}}
! [[4.11_CEX|4.11]]
| style="font-family:monospace" | 4DDF2C3289AD9BEDF0719DBE1BDA971C || 12/02/11/07:15
|-
! [[4.15_CEX|4.15]]
| ? || ? || ? || ? || ?
|-{{cellcolors|#bbbbff}}
! [[4.20_CEX|4.20]]
| rowspan="2" | 2.977.432 || style="font-family:monospace" | 363A2D5EE2246E9CEFCBF1078593C771 || 12/06/15/02:10 || rowspan="2" | same || rowspan="2" | ?
|-{{cellcolors|#bbbbff}}
! [[4.21_CEX|4.21]]
| style="font-family:monospace" | 5E08C86EC07E4F227D3591DD9530CC95 || 12/06/30/01:15
|-
! [[4.23_SEX|4.23 S]]
| 2.977.416 || style="font-family:monospace" | 149E5E6AD727B1B37E29D4E8D15D5BB0 || 12/07/31/00:23 || ? || ?
|-
! [[4.25_CEX|4.25]]
| 2.977.432 || style="font-family:monospace" | 295B61D9EEE704077FEC870C8EAC7D35 || 12/09/07/07:04 || <abbr title="same code than 4.20 CEX and 4.21 CEX.... but different than the 4.23 SEX in between, grrrr">same</abbr> || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! [[4.78_CEX|4.78]]
| 2.913.480 || style="font-family:monospace" | 398A7CA9F0E8449E15FCB33B87C96194 || 15/12/17/01:19 || ? || ?
|-
! [[4.80_CEX|4.80]]
| ? || ? || ? || ? || ?
|-
! [[4.81_CEX|4.81]]
| 2.913.656 || style="font-family:monospace" | 8765A00EE467B8635A13ECCBB1F85B89 || 16/10/24/19:24 || ? || ?
|-
! [[4.82_CEX|4.82]]
| 2.913.752 || style="font-family:monospace" | FCEB6595F9F8E5C77BA36C73C38397D9 || 17/08/24/15:43 || ? || ?
|-
! colspan="6" style="background:#80ff80; line-height:75%" | Abandoned (last revision)
|-{{cellcolors|#ddddff}}
! [[4.83_CEX|4.83]]
| rowspan="3" | 2.913.992 || style="font-family:monospace" | CA9509623B9885E18D12E14FA1488EEF || 18/09/02/18:03 || rowspan="3" | Last || rowspan="3" | 0x3C
|-
! ~
| colspan="2" style="text-align:center; background-color:#ddddff;" | ''Any''
|-
! [[4.88_CEX|4.88]]
| style="background-color:#ddddff; font-family:monospace" | D3283D3F3B5CDF68113560829530E7B3 || style="background-color:#ddddff;" | 21/04/12/11:34
|}
<span style="font-size:small">
{{widedot}}'''Decrypted (elf)''': changes <abbr title="When comparing two decrypted files of the same revision from different firmwares the only differences are the build label (1 area with size 0x20) and the target firmware (2 areas with size 0x2)">every firmware version</abbr><br>
{{widedot}}'''<abbr title="0x20 bytes">Build label</abbr>''': yes, with timestamp, search for '''-sgpu-sli4'''<br>
{{widedot}}'''<abbr title="2 bytes">Target Firmware</abbr>''': yes repeated '''two''' times<br>
{{widedot}}'''Revision''': unknown
</span>
</div><div style="float:left;">
{| class="wikitable" style="line-height:100%; font-size:70%; margin-left:5px; margin-right:5px"
|+ ps1_newemu.elf (decrypted)
! Firmware !! Size !! MD5 !! Timestamp !! <abbr title="Revision">Rev</abbr> !! style="padding:1px" | <abbr title="Maximun number of supported commands">Comm</abbr>
|-
! [[2.10_CEX|2.10]]
| ? || ? || ? || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! [[3.40_CEX|3.40]]
| 2.708.856 || style="font-family:monospace" | C866D54E85BAA06D111C8300F9EA85F1 || 10/06/23/15:51 || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! [[3.66_CEX|3.66]]
| 2.708.864 || style="font-family:monospace" | 9AB86CFAEB12675F3DB08FCAA3541534 || 11/06/16/03:54 || ? || ?
|-{{cellcolors|#bbbbff}}
! [[3.70_CEX|3.70]]
| rowspan="3" | 2.708.880 || style="font-family:monospace" | 7AB7C32901778E3F0C9B8DB45296821B || 11/08/05/03:44 || rowspan="3" | same || rowspan="3" | ?
|-{{cellcolors|#bbbbff}}
! ~
| colspan="2" style="text-align:center; background-color:#bbbbff;" | ''Any''
|-{{cellcolors|#bbbbff}}
! [[3.72_CEX|3.72]]
| style="font-family:monospace" | 2863E9B70B4FB6C5A0938FF508C46057 || 11/09/14/01:18
|-{{cellcolors|#ddddff}}
! [[3.73_CEX|3.73]]
| rowspan="2" | 2.708.880 || style="font-family:monospace" | 871E256771632569D664FF2A1ECE82C3 || 11/10/04/12:57 || rowspan="2" | same || rowspan="2" | ?
|-{{cellcolors|#ddddff}}
! [[3.74_CEX|3.74]]
| style="font-family:monospace" | 8A8AC80CBA58561CC754C6CF66B059AB || 11/10/25/00:40
|-{{cellcolors|#bbbbff}}
! [[4.00_CEX|4.00]]
| rowspan="2" | 2.713.832 || style="font-family:monospace" | F9E840430B2BC982CB1A71B7BDD7FC35 || 11/11/22/03:19 || rowspan="2" | same || rowspan="2" | ?
|-{{cellcolors|#bbbbff}}
! [[4.01_CEX|4.01]]
| style="font-family:monospace" | 953090CBCB96626899731B711B3D5B6A || 11/12/23/01:11
|-{{cellcolors|#ddddff}}
! [[4.10_CEX|4.10]]
| rowspan="2" | 2.713.720 || style="font-family:monospace" | 47E7FA52DB7BDEDF2187EB02D868834D || 12/02/05/23:20 || rowspan="2" | same || rowspan="2" | ?
|-{{cellcolors|#ddddff}}
! [[4.11_CEX|4.11]]
| style="font-family:monospace" | 8A90DB2A206BE79423A99D4CF2458241 || 12/02/11/07:16
|-
! [[4.15_CEX|4.15]]
| ? || ? || ? || ? || ?
|-{{cellcolors|#bbbbff}}
! [[4.20_CEX|4.20]]
| rowspan="2" | 2.713.904 || style="font-family:monospace" | 8AC80356D1EFDDCFF7A7AD82136137D2 || 12/06/15/02:11 || rowspan="2" | same || rowspan="2" | ?
|-{{cellcolors|#bbbbff}}
! [[4.21_CEX|4.21]]
| style="font-family:monospace" | E482927E47B00C1478313E343DD652C4 || 12/06/30/01:15
|-
! [[4.23_SEX|4.23 S]]
| 2.713.888 || style="font-family:monospace" | A2CF9C4C00B40779FB5C529849E0D6A4 || 12/07/31/00:24 || ? || ?
|-
! [[4.25_CEX|4.25]]
| 2.713.904 || style="font-family:monospace" | 24107753F0B02075DAB20492BA67167D || 12/09/07/07:05 || <abbr title="same code than 4.20 CEX and 4.21 CEX.... but different than the 4.23 SEX in between, grrrr">same</abbr> || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! ?
| ? || ? || ? || ? || ?
|-
! [[4.78_CEX|4.78]]
| 2.649.144 || style="font-family:monospace" | BF78A0DC74084B43777A7F8CE6C7B66A || 15/12/17/01:20 || ? || ?
|-
! [[4.80_CEX|4.80]]
| ? || ? || ? || ? || ?
|-
! [[4.81_CEX|4.81]]
| 2.649.272 || style="font-family:monospace" | 0C76DE974439B12546EA494639C8EE9A || 16/10/24/19:25 || ? || ?
|-
! colspan="6" style="background:#80ff80; line-height:75%" | Abandoned (last revision)
|-{{cellcolors|#ddddff}}
! [[4.82_CEX|4.82]]
| rowspan="3" | 2.649.288 || style="font-family:monospace" | C5957F268EE9E1429DE3AF0BC15F1395 || 17/08/24/15:44 || rowspan="3" | Last || rowspan="3" | 0x18
|-
! ~
| colspan="2" style="text-align:center; background-color:#ddddff;" | ''Any''
|-
! [[4.88_CEX|4.88]]
| style="background-color:#ddddff; font-family:monospace" | 4002EC6CB88F5D2D5E7DF0B0F80A6A0A || style="background-color:#ddddff;" | 21/04/12/11:35
|}
<span style="font-size:small">
{{widedot}}'''Decrypted (elf)''': changes <abbr title="When comparing two decrypted files of the same revision from different firmwares the only differences are the build label (1 area with size 0x20) and the target firmware (2 areas with size 0x2)">every firmware version</abbr><br>
{{widedot}}'''<abbr title="0x20 bytes">Build label</abbr>''': yes, with timestamp, search for '''-sgpu-sspu-sli4'''<br>
{{widedot}}'''<abbr title="2 bytes">Target Firmware</abbr>''': yes repeated '''two''' times<br>
{{widedot}}'''Revision''': unknown
</span>
</div><div style="float:left;">
{| class="wikitable" style="line-height:100%; font-size:70%; margin-left:5px"
|+ ps1_rom.bin
! Firmware !! Size !! MD5
|-
! [[2.10_CEX|2.10]]
| ? || ?
|-
! ?
| ? || ?
|-
! [[3.40_CEX|3.40]] ~ [[3.74_CEX|3.74]]
| 4.089.584 || style="font-family:monospace" | FBB5F59EC332451DEBCCF1E377017237
|-
! [[4.00_CEX|4.00]] ~ [[4.88_CEX|4.88]]
| 524.288 || style="font-family:monospace" | 81BBE60BA7A3D1CEA1D48C14CBCC647B
|}
<span style="font-size:small">
{{widedot}}'''Format''': Not compiled or encrypted for every firmware<br>
{{widedot}}'''Build label''': unknown<br>
{{widedot}}'''Revision''': unknown
</span>
</div>
</div>
<br style="clear: both;" />


== GPU related info ==
== Command IDs mapping ==
<pre>
All the PS1 emulators have some game settings hardcoded inside them organized in a table using a hierarchy, pretty much the same structure used by ps2_gxemu.self and ps2_softemu.self to store the CONFIGS<br>
Highly recommended to visit site below to understand this info:
There is a point of the hierarchy where is indicated the number of commands and the offset where are located. Every command is composed by ID[4] and data[4] (where the data coould be another offset to load more data from a deeper level of the hierarchy)<br>
http://problemkaputt.de/psx-spx.htm#gpustatusregister
That IDs differs in between the PS1 emulator versions because are not a direct ID, it seems every ID is mapped to a different ID (probably static and common for all emu versions) in a separated table
http://problemkaputt.de/psx-spx.htm#gpudisplaycontrolcommandsgp1
 
Offset in emu memory (ps1_netemu 4.86) | name | info
 
001B39D0 GP0_commands_table {ParamsCount, OPD}
0x10C5E4 GP1_reset_gpu
0x10C88C GP1_reset_command_buffer
0x10C940 GP1_acknowledge_gpu_IRQ1
0x10C968 GP1_display_enable
0x10C9A4 GP1_dma_direction___data_request
0x10CA20 GP1_display_mode
0x10CAEC GP1_get_gpu_info
0x10CB00 GP1_horizontal_display_range
0x10CB30 GP1_vertical_display_range
0x10CB60 GP1_start_of_display_area_in_VRAM
0x10CBD8 dma_dir_GPUREADtoCPU
0x10CD34 dma_dir_Off
 
Emulated GPU important data addresses.
0xD70BE4 E2_REG (used for immediate response by GPUINFO request)\
0xD70BE8 E3_REG (used for immediate response by GPUINFO request) \ Set by GP0 Ex cmds.
0xD70BEC E4_REG (used for immediate response by GPUINFO request) /
0xD70BF0 E5_REG (used for immediate response by GPUINFO request)/
0xD70C1C GP1_get_gpu_info_request (data supplied in GP1 0x10-0x1F cmd)
0xD70C20 GPUSTAT_r (PS1 GPU status register 1F801814 in read mode)
0xD70C24 dma_dir__data_req (from GP1 0x04 cmd)
0xD70C28 - 0xD70DA0 UNCONFIRMED seems to be GP0 fifo on PPU side, but need some reversing to confirm.
0xD70DA4 display_enable_request (based on GP1 0x03 cmd)
0xD70DA8 start_of_display_area_in_VRAM__X (from GP1 0x05 cmd)
0xD70DAC start_of_display_area_in_VRAM__Y (from GP1 0x05 cmd)
0xD70DB0 H_display_range_X1 (from GP1 0x06 cmd)
0xD70DB4 H_display_range_X2 (from GP1 0x06 cmd)
0xD70DB8 V_display_range_Y1 (from GP1 0x07 cmd)
0xD70DBC V_display_range_Y2 (from GP1 0x07 cmd)
0xD70DC0 H_resolution_1 (from GP1 0x08 cmd)
0xD70DC4 V_resolution (from GP1 0x08 cmd)
0xD70DC8 video_mode___is_pal (from GP1 0x08 cmd)
0xD70DCC display_area_color_depth (from GP1 0x08 cmd)
0xD70DD0 vertical_interlace (from GP1 0x08 cmd)
0xD70DD4 H_resolution_2 (from GP1 0x08 cmd)
0xD70DD8 reverse_flag (from GP1 0x08 cmd)
0xD70DEC display_enable (from GP1 0x03 cmd)
0xD70DF0 display_params_change_requested (1 when old display_mode != new from cmd 0x08)
0xD70DF4 display_mode (whole 8 bits of GP1 0x08)


 
====How hardcoded config is read based on ps1emu.====
Config GPU related commands.
Like mentioned above config is created from 2x u32 values. Lets call first value command, and second value param.<br>
Some values are not directly from cfg (are shifted before writing here, etc.).
Command is used to calculate address for param, and only param is stored on obtained address.<br>
0xD70E14 set_by_cmd_21
Emulator then check for params, and if found (usually when not zero) apply settings based on them.<br>
0xD70E18 set_by_cmd_22
0xD70E1C set_by_cmd_23
0xD70E20 set_by_cmd_24
0xD70E24 set_by_cmd_25
0xD70E28 set_by_cmd_26
0xD70E2C set_by_cmd_27
0xD70E30 set_by_cmd_28
0xD70E34 set_by_cmd_29
0xD70E38 set_by_cmd_2B
0xD70E3C set_by_cmd_2C
0xD70E40 set_by_cmd_2D
0xD70E44 set_by_cmd_2E
0xD70E48 set_by_cmd_2F
0xD70E4C set_by_cmd_20
0xD70E50 set_by_cmd_31
0xD70E54 set_by_cmd_30
</pre>
 
=== ps1_emu vs ps1_netemu GPU emulation differences ===
 
In some cracktros (Spyro 3, Sydney 2000, NFS Porsche 2000) the GP0 command E4h (E4080200) draws the image on the wrong coordinates, causing the frozen image of the zoomed PS1 licence screen. According to this [https://psx-spx.consoledev.net/graphicsprocessingunitgpu/#gp0e4h-set-drawing-area-bottom-right-x2y2 info], that command does make use of the newer 2MB VRAM GPU coordinates. Restricting the drawing area to the lower coordinates does fix the image. It looks like a lot of emulators are affected by this, either the Sony ones (ps1_emu on PS3, PS1 on PS2 hardware emulator, POPS on PSP) or the homebrew pSX 1.13. The ps1_netemu is displaying the image correctly. Does it mean the ps1_netemu emulate a different, newer GPU or just increase the emulation accuracy in general (assuming these cracktros work fine even on the oldest PSX released EDIT: I have found reports they are picky even on the original PS1 hardware too.)?
* Yes, this should fail also on old PS1 GPU. I can also confirm that PS1DRV (at least before deckard PS2 models) emulate old GPU model.
As for PS3. ps1_emu, and ps1_newemu emulate old GPU, ps1_netemu emulate new GPU at least partially. Also small tip, all emulators have pair of 2 embed
SPE ELFs. One is SPU emulator, second is GPU emulator. All of them have debug symbols.  
 
ps1_emu
<pre>
<pre>
.text:000014D0 E4_cmd:                             
0x10BC8                lwz      r0, 0(r9)      # load HASH
.text:000014D0     il        r56, 0x3FF
0x10BCC                cmpw      cr7, r0, r27    # compare title HASH with one from DB
.text:000014D4     hbrr       loc_1504, loc_403C
0x10BD0                bne      cr7, loc_10BB8  # loop till HASH found
.text:000014D8     rotmi      r54, r12, -10       # r12 = whole 32 bit command
0x10BD4                slwi     r0, r10, 4      # config number << 4 to get offset from first entry in table
                                                  # r54 = is command shifted by 10 to skip
0x10BD8                addi     r24, r1, 0xAB0+var_A40
                                                  # x-cord. So now first bits are y-cord.
0x10BDC                extsw    r0, r0
.text:000014DC     lqr       r51, xmmword_E520
0x10BE0                clrldi    r3, r24, 32
.text:000014E0     and        r55, r12, r56      # x-cord and with whole 10 bits.
0x10BE4                add       r29, r0, r8    # r29 now points to game entry in config table
.text:000014E4      cwd        r53, 0xF0+var_F0(sp)
0x10BE8                lwz      r4, 4(r29)     # load pointer to game ID
.text:000014E8      cwd        r49, 0xF0+var_F0+8(sp)
0x10BEC                bl        sub_137FF8
.text:000014EC     ai        r52, r55, 1
0x10BF0                nop
.text:000014F0     andi       r50, r54, 0x1FF     # y-cord and with 0x1FF, so only 9 bits.
0x10BF4                lwz      r28, 8(r29)
0x10BF8                cmpwi    cr7, r28, 0
0x10BFC                ble       cr7, loc_10C58  # check config count is not 0 or less
0x10C00                lwz      r26, 0xC(r29)  # r26 is now pointer to configs for game
0x10C04                li        r30, 0
0x10C08                li        r29, 0
0x10C0C                lwz      r25, off_17B5D8 # "core.c: CoreCheckTitle: param[%d] = 0x%"...
0x10C10
0x10C10 read_conf_loop:                          # CODE XREF: CoreCheckTitle+2DC↓j
0x10C10                add      r11, r30, r26  # r11 is now pointer to currently read config for game
0x10C14                addi     r29, r29, 1    # count...
0x10C18                clrldi    r11, r11, 32
0x10C1C                mr       r3, r25        # just for print
0x10C20                addi     r30, r30, 8    # add 8 so next time in loop we read new config (4),
0x10C20                                          # and new params (4) if game have more than one config
0x10C24                lwz      r4, 0(r11)     # load command
0x10C28                lwz      r0, 4(r11)     # load params
0x10C2C                slwi     r9, r4, 2      # r9 = r4 << 2 so shift our command to the left by 2, and store in r9
0x10C30                clrldi    r5, r0, 32      # just print again
0x10C34                addi     r9, r9, 0x10    # add 0x10 to shifted command value
0x10C34                                          # to create address where param of config will be stored
0x10C38                extsw    r4, r4
0x10C3C                extsw    r9, r9
0x10C40                add       r9, r9, r31     # r31 is value that change between emu versions.
0x10C40                                          # That way emulator can keep correct config IDs without changes to table.
0x10C40                                          # r31 0x2B0930 + what we currently have in r9 after previous calculations.
0x10C44                stw      r0, 4(r9)      # Store param on finally calculated address + 4. For example for config 04
0x10C44                                          # address will be 0x2B0954.
0x10C48                bl        print_
0x10C4C                nop
0x10C50                cmpw      cr7, r28, r29  # r28 overall config count
0x10C50                                          # r29 currently read count
0x10C54                bne      cr7, read_conf_loop
</pre>
</pre>
 
====Per game hash calculation====
ps1_netemu
Hash is calculated using the data contents only (2048 bytes or 0x800h) of the sector 16 (beginning at the 0x9318 of the RAW/2352 image). Every single byte is used in the process. Calculation code does start at 0xC1658 in the ps1_netemu from 4.88 firmware.
<pre>
<pre>
.text:00003338 E4_cmd:                         
loc_C1658:
.text:00003338      rotmi      r18, r12, -10      # r12 = whole 32 bit command
0xC1658  lwz      r11, -0x7E4C(r2)
                                                  # r18 = is command shifted by 10 to skip
0xC165C  lis      r6, -0x7FF9
                                                  # x-cord. So now first bits are y-cord.
0xC1660  li        r9, 0x800                          # number of bytes to process. The value is passed to the CTR register next.
.text:0000333C      hbrr      loc_3384, loc_3328
0xC1664  li        r0, 1
.text:00003340      il        r19, 0x3FF
0xC1668  ori      r6, r6, 0x8071 # 0xFFFFFFFF80078071 # value the bytes are multiplied by
.text:00003344      lqr       r39, xmmword_150D0
0xC166C  mtctr    r9                                  # set the CTR register for the loop count decrement
.text:00003348      il        r8, 0x200
0xC1670  mr        r7, r24                            # first offset of the sector data to process moved into the r7 register (0x2DC28C in the RAM).
.text:0000334C      lqr        r33, xmmword_150E0
0xC1674  li       r10, 1                              # set the r10 register to 1.
.text:00003350     and        r44, r12, r19      # x-cord and with whole 10 bits.  
0xC1678  li        r8, 0                              # set the r8 register to 0.
.text:00003354      cwd        r42, arg_0+0xC(sp)
0xC167C  addi     r15, r24, 0x800                    # last offset of the sector data to process. It does not seem to be used at all.
.text:00003358     and        r43, r18, r19       # y-cord and with 0x3FF, so whole 10 bits.
0xC1680  stw      r0, 0x2640(r11)
</pre>
loc_C1684:
---kozarovv.
0xC1684  clrldi    r11, r7, 32                        # move the content from r7 to the r11 (it is the current offset of the byte to process)
 
0xC1688  addi     r7, r7, 1
== PS1 I/O handlers ==
0xC168C  lbz       r9, 0(r11)                          # load the byte for calculation
List of functions that are responsible for interpreting HW registers reads/writes. Based on 4.86 ps1_netemu.
0xC1690  add      r9, r10, r9                        # add r10 to r9
<pre>
0xC1694  mulhwu    r0, r9, r6                          # multiply the byte by constant and store the high 32 bits of result in the r0
timers_hwreg_write_handler  0xC2CC0
0xC1698  srwi      r10, r0, 15                        # divide the result by 0x8000
timers_hwreg_read_handler   0xC2F80
0xC169C  slwi      r11, r10, 4                         # multiply r10 by 0x10
dma_hw_read_handler        0xD09C8
0xC16A0   slwi     r0, r10, 16                        # multiply r10 by 0x10000
dma_hw_write_handler        0xD0E18
0xC16A4  subf     r0, r11, r0
spu_hwreg_write_handler    0xD1E68
0xC16A8  add      r0, r0, r10
spu_hwreg_read_handler     0xD1FF8
0xC16AC  subf     r10, r0, r9
joy_hwreg_write_handler    0xD44A8
0xC16B0  add      r11, r8, r10
joy_hwreg_read_handler     0xD49F8
0xC16B4  mulhwu   r0, r11, r6
sio_hwreg_write_handler    0xD758C
0xC16B8  srwi      r8, r0, 15
sio_hwreg_read_handler     0xD7620
0xC16BC   slwi     r9, r8, 4
cdr_hwreg_read_handler      0xD80A0
0xC16C0  slwi      r0, r8, 16
cdr_hwreg_write_handler    0xE8598
0xC16C4  subf      r0, r9, r0
mdec_hwreg_write_handler   0xE9A18
0xC16C8  add      r0, r0, r8
mdec_hwreg_read_handler    0xEA2F0
0xC16CC  subf      r8, r0, r11
i_ctrl_hwreg_read_handler   0x10577C
0xC16D0  bdnz+    loc_C1684                          # loop
i_ctrl_hwreg_write_handler  0x1063AC
gpu_hwreg_read_handler     0x10BF40
gpu_hwreg_write_handler    0x10C48C
</pre>
 
== Experimental Patches ==
This patches are intended to be applyed to the PS1 emulators
 
==== Disable Dithering ====
Always set bit 9 in GP0 E1 command to 0. Patches apply to SPE PS1 GPU emulation program. Based on 4.86, but should be valid for all firmwares since 4.6x<br><br>
For ps1_emu.elf
<pre>
search for: 23 EC A4 04 23 E3 3B 85  33 7E 26 00 32 05 86 00 0F 3D C6 11
replace to: 23 EC A4 04 23 E3 3B 85  33 7E 26 00 32 05 86 00 40 80 00 11
</pre>
 
For ps1_netemu.elf
<pre>
search for: 7C 38 41 94 20 7F F4 94 0F 3D C6 3C 12 7F F3 8A
replace to: 7C 38 41 94 20 7F F4 94 40 80 00 3C 12 7F F3 8A
</pre>
 
For ps1_newemu.elf
<pre>
search for: 20 7F FD 4C 23 9D C5 85  32 05 B2 80 12 05 B2 0B 0F 3D C6 58
replace to: 20 7F FD 4C 23 9D C5 85  32 05 B2 80 12 05 B2 0B 40 80 00 58
</pre>
 
Patch for rpcs3 (newemu only) for testing purpose.
<pre>
Version: 1.2


SPU-f3d8be702bf4cb8545656e37c29fcc6201a57991:
0xC16D4  lwz      r22, -0x7E4C(r2)
   "Disable Dithering":
0xC16D8   mr        r3, r22
    Games:
0xC16DC  lbz      r4, 0xA7(r22)
       All:
0xC16E0  lbz       r0, 0xA6(r22)
        All: [ All ]
0xC16E4  slwi      r4, r4, 8
    Author: "kozarovv"
0xC16E8  lbz      r9, 0xA5(r22)
    Patch Version: 1.0
0xC16EC  lbz      r11, 0xA4(r22)
    Patch:
0xC16F0  or        r4, r4, r0
       - [ be32, 0xFB0, 0x40800058 ]
0xC16F4  slwi      r0, r8, 16                        # multiply the r8 by 0x10000 and place the result in the r0 register. It is the higher four bytes of hash.
0xC16F8  slwi      r4, r4, 8
0xC16FC  add       r0, r0, r10                        # add the r10 to r0 - the lower four bytes of hash
0xC1700  or        r4, r4, r9
0xC1704  stw      r0, 0x2640(r22)                    # store the hash
</pre>
</pre>


==== Allow non encrypted ISO.BIN.EDAT and skip signature check (RPCS3 only) ====
Super simple python script to calculate checksum, script lack of some checks performed by emu, and is hardcoded to 0x9318 offset, but should be enough.<br>
For easier config testing. Patch allow to use unencrypted ISO.BIN.EDAT so we don't need to mess with klic. Also ECDSA signature at the end of file is no longer required. So we can ftp configs as is, for faster testing. Warning! This patch break official ps1_classics.
Usage: edit *your first.bin* to name of your image, run script from CMD. Require python (3?).
<br><br>
<pre>import zlib
ps1_netemu.elf 4.86-4.90 offset in raw hex (for Hxd, etc.)
0xDDD6C replace 48 07 14 21 to 38 60 00 00
0xE13C4 replace 60 00 00 00 to 38 60 00 00
 
==== GTE Automatic Widescreen Hack ====
Automatic widescreen without per game patches. Work only for 3D elements (like 95% of available widescreen patches).<br>
Tested on both RPCS3 and real PS3 (CFW only, but can be added to hen).<br>
ps1_netemu.elf 4.86 - 4.91 offsets in raw hex (for Hxd, etc.)
0x2BDA4 original code:
    7C 69 1B 78 3C 60 80 54 2F 89 00 00 60 63 00 10
    40 9E 00 14 3C 60 80 54 60 63 00 02 7C 63 07 B4
    4E 80 00 20 A0 09 00 02 2F 80 00 00 41 9E FF F0
    C0 02 A3 D8 FF 81 00 00 41 9D FF DC C0 02 A3 DC
    38 60 00 00 FF 81 00 00 41 9C FF CC D0 29 00 6C
    4B FF FF CC
replace to:
    78 C0 F8 42 78 C6 F0 82 7C C6 02 14 7D 08 32 14
    48 0C 47 7E 78 E9 F8 42 78 E7 F0 82 7C E9 3A 14
    7C C6 3A 14 48 0C 65 66 79 00 F8 42 79 08 F0 82
    7D 08 02 14 7C C6 42 14 48 0C 69 0A 79 00 F8 42
    79 08 F0 82 7D 08 02 14 7C C6 42 14 48 0C 6C 6A
    60 00 00 00
0xB4778  original code: 7D 08 32 14 replace to: 48 03 BD A6
0xB6560  original code: 7C C6 3A 14 replace to: 48 03 BD BA
0xB6904  original code: 7C C6 42 14 replace to: 48 03 BD CE
0xB6C64  original code: 7C C6 42 14 replace to: 48 03 BD E2
 
== Ps1_netemu Commands Info ==


=== External Configs ===
with open('your first.bin', 'rb') as f:
    f.seek(0x9318)
    suma = zlib.adler32(f.read(2048))
    print (hex(suma))</pre>


Loading external commands is be possible in ps1_netemu. From this we can also figure out that sony call those configs "ad hoc params" which can be little bit misleading. Emulator expect them inside ISO.BIN.EDAT file. Offset depend if "optional header" exist or not. Values are little endian.
====Known ps1emu.self commands====
The offsets below are the offsets from the start of the PSISOIMG section. This data starts at absolute file offset 0x424 for single disk games that do not use a PSTITLEIMG section. For games that do have a PSTITLEIMG section, the absolute offset will be shifted by 0x400 bytes, i.e. to offset 0x824 and similar.
* 0xB param is magic word for libcrypt.
* Offset 0x424 Config revision in bcd format, that need to be higher than DB from emu (11624 for 4.86). Safe to use 0x200000.
* 0xE param is divider for 0x204CC00 (psx cpu speed), result is stored on fixed address and used by many functions.
* Offset 0x42C first config command
* 0x15 when param is set to 3, force game reload with ps1netemu. Is not known what other param values do.
* Offset 0x430 param for first command
* This repeats 8 times as only 8 commands is supported.
* Command 2 is unsupported.
* Command 0 is unsupported because $ony made mistake in parser.
* Command 0x17 is supported, but there is different official way to inject it, and it is libcrypt key so there is no point to do it this way.  
This probably repeats for multidiscs, but for now let's figure out single discs first.
<br>Function that search for configs look like this:
case 9:
  if ( *(&0x161FD80) ) 1570FA0(base) + AEDE0(offset in ISO.BIN.DAT or PSISOIMG? ) = 161FD80 in 4.86 ps1_netemu
  {
    cfg_rev = get_cfg_rev_from_PSIMG();
    db_rev = get_titledb_rev();
    decimal_16 = ret_32() >> 1;
    tty_print("ad hoc param: %x <%x>\n", cfg_rev, db_rev);
    if ( decimal_16 )
    {
      low_rev = cfg_rev < db_rev;          // Check is opposite to ps2_netemu, only config version higher than included db will pass.  
                                            // Which mean config need to be higher version than emu database.
      for ( i = 0; i < decimal_16; i += 2 ) // up to 8 configs supported (8 commands + 8 values)
      {
        cfg_command = read_cfg_from_PSIMG(i);
        _cfg_value = read_cfg_from_PSIMG(i + 1);
        if ( cfg_command - 1 <= 0x3B )      // max cfg nr 0x3C
        {
          v245 = cfg_command >> 28;        // Most likely check for wrong endianess. Configs are LE and are byte reversed before we end up here.
          if ( low_rev || v245 || cfg_command == 2 )// cfg 2 unsupported (replaced in later PSIMG rev with subchannel data), or old config rev, or v245.
          {
            tty_print("%x: %2d=0x%08x ***\n", v245 & 0xF, cfg_command, _cfg_value); // Ignore cfg
          }
          else
          {
            cfg_value = _cfg_value;
            tty_print("%x: %2d=0x%08x\n", 0LL, cfg_command, _cfg_value);
            WriteInternalConfigValue(cfg_command, cfg_value);
          }
        }
      }
    }
  }


=== Command IDs mapping ===
== Commands Info ==
The command IDs differs in between the PS1 emulator types and versions because are an indirect ID, it seems every command ID is mapped to a static ID in a separated table<br>
The command ID's varies in between firmware versions, most probably because new functions was added every few versions, reorganized, etc... and this changes created a "displacement" of the old commands that causes them to increase his ID<br>
The command ID's varies in between firmware versions, most probably because new functions was added every few versions, reorganized, etc... and this changes created a "displacement" of the old commands that causes them to increase his ID<br>
At the time of writing this we dont know how to map that variable ID's to an static ID (that could be valid for all firmware versions), so by now in this list is needed to indicate the firmware version where the command ID was found<br>
At the time of writing this we dont know how to map that variable ID's to an static ID (that could be valid for all firmware versions), so by now in this list is needed to indicate the firmware version where the command ID was found<br>
Coincidentially there are a few commands that preserves his ID in between emulator types and revisions, most probably is because are the first commands implemented and the variable ID given to them is a very low value, so always was kept at a low position in the commands list and was not disturbed by the modifications made to the other commands.
Coincidentially there are a few commands that preserves his ID in between firmware versions, most probably is because are the first commands implemented (up to netemu command 0x04)) and the variable ID given to them is a very low value, so always was kept at a low position in the commands list and was not disturbed by the modifications made to the other commands.
<br><br>
According to internal tables (4.86):
* ps1_emu support commands up to 0x15
* ps1_newemu support commands up to 0x18
* ps1_netemu support commands up to 0x3C
Beside functions that read command params directly, every emulator have function (madeup name) ReadInternalConfigValue(u32 command_id). This function take command_id as only variable, and return param in r3 for selected command. This is used widely to read command params, that include libcrypt commands.
<br><br>
Function mentioned above is placed on (in emu memory, 4.86):
* ps1_emu 0x10638
* ps1_newemu 0x12F54
* ps1_netemu 0xB65F0


=== Command 0x00 (netemu 3.40 up to 4.88) ===
*Valid values found
**0 = ? (used by SCPS-18011 Um Jammer Lammy, and SLPS-01818 Langrisser IV & V Final Edition [Disc1of2])
In Um Jammer Lammy is used together with command 0x13, so it was a bit doubtful if it was a mistake. But Langrisser IV & V Final Edition [Disc1of2] uses it too and is the only command used by this disc, so it "should" do something. Um Jammer Lammy in netemu 3.40 was fixed only with command 0x0/0x0 (id/data)
*Um Jammer Lammy (SCPS-18011) uses somewhat new external config revision (11580) in official classic's external config, but only uses command 0x13. Keep in mind the game was released Febuary 27, 2008, so package was possibly updated with new config at some point, and then in internal table, so maybe it once had a different config command in config table and 0x00 nullified it. Langrisser IV (SLPS-01818) has old config revision (5713) and uses command 0x03 set to 0x3E8, so just default. Maybe internal config for Langrisser IV is empty config just to also nullify external config? --[[User:Mrjaredbeta|Mrjaredbeta]] ([[User talk:Mrjaredbeta|talk]]) 03:32, 1 September 2023 (CEST)


=== Command 0x01 (netemu 3.40 up to 4.88) ===
=== Command 0x01 (netemu 3.40 up to 4.88) ===
Line 275: Line 522:


=== Command 0x02 (netemu 3.40 up to 4.88) ===
=== Command 0x02 (netemu 3.40 up to 4.88) ===
There are only 3 games using this command and are libcrypt protected games:, Crash Team Racing (SCES-02105), MediEvil (SCES-00311), and Vagrant Story (SLES-02754)<br>
The command data contains an offset that points to an area where are stored a list of sectors (4 bytes each), there are only 3 games using this command and are libcrypt protected: MediEvil (SCES-00311), Vagrant Story (SLES-02754), and Crash Team Racing (SCES-02105)<br>
The command data contains an offset that points to an area where are stored a list of sectors (4 bytes each). When the emulator starts reading the list it doesnt knows how long is it so it reads groups of 4 bytes consecutivelly until it finds the value 00000000 that works as a terminator, the presence of this terminator at the end of the sector list is mandatory. Worth to note that list is more extensive than redump libcrypt one, but they match to some extend. Probably redump store only sectors really needed to run game correctly, while Sony decided to keep them all. Command is used only with LC1 games (Redump is wrong about medievil, is LC1).<br>
The libcrypt protection is related with subchannel data stored by sectors, in redump.org this data is managed with the SBI files, displayed in a hexeditor view in each specific game page. If we convert the data from the official format to decimal and we compare it with the sector numbers in the redump.org SBI file it can be seen all the libcrypt protected sectors from the SBI file are included in the official format<br>
The libcrypt protection is related with subchannel data stored by sectors, in redump.org this data is managed with the SBI files, displayed in a hexeditor view in each specific game page. If we convert the data from the official format to decimal and we compare it with the sector numbers in the redump.org SBI file it can be seen all the libcrypt protected sectors from the SBI file are included in the official format<br>
The official format seems to include a lot more sectors which purpose is unknown<br>
The official format seems to include a lot more sectors which purpose is unknown<br>
There seems to be way to supply that data/command from external file. Some research by "Fedor Wearing A Fedora" [https://www.psx-place.com/threads/ps1-libcrypt-support-on-ps3-official-emus-research-thread.35836/page-13#post-318218 here] and [https://www.psx-place.com/threads/ps1-libcrypt-support-on-ps3-official-emus-research-thread.35836/page-13#post-318506 here]<br>
There seems to be way to supply that data/command from external file. Some research by "Fedor Wearing A Fedora" [https://www.psx-place.com/threads/ps1-libcrypt-support-on-ps3-official-emus-research-thread.35836/page-13#post-318218 here] and [https://www.psx-place.com/threads/ps1-libcrypt-support-on-ps3-official-emus-research-thread.35836/page-13#post-318506 here]<br>


<u>Crash Team Racing</u> [http://redump.org/disc/798/ SCES-02105] (at absolute offset 0x1627E4 in ps1_netemu.self 4.83-4.88)
<u>Crash Team Racing</u> [http://redump.org/disc/798/ SCES-02105] (at absolute offset 0x1627E4 in ps1_netemu.self 4.88)
<small><pre style="height:410px">
<small><pre style="height:410px">
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
Line 422: Line 668:
</pre></small>
</pre></small>


<u>MediEvil</u> [http://redump.org/disc/592/ SCES-00311] (at absolute offset 0x16298C in ps1_netemu.self 4.83-4.88)
<u>MediEvil</u> [http://redump.org/disc/592/ SCES-00311] (at absolute offset 0x16298C in ps1_netemu.self 4.88)
<small><pre style="height:275px">
<small><pre style="height:275px">
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
Line 511: Line 757:
</pre></small>
</pre></small>


<u>Vagrant Story</u> [http://redump.org/disc/9978/ SLES-02754] (at absolute offset 0x162A8C in ps1_netemu.self 4.83-4.88)
<u>Vagrant Story</u> [http://redump.org/disc/9978/ SLES-02754] (at absolute offset 0x162A8C in ps1_netemu.self 4.88)
<small><pre style="height:350px">
<small><pre style="height:350px">
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
Line 636: Line 882:
Value is integer that is later converted to double float using fcfid, and truncated to single precision by frsp.<br>
Value is integer that is later converted to double float using fcfid, and truncated to single precision by frsp.<br>
I'm not familiar with CELL floating point unit quirks, but value could be just single precision float from the start, why complicate that so much?<br>
I'm not familiar with CELL floating point unit quirks, but value could be just single precision float from the start, why complicate that so much?<br>
*Possible disc read speed delay or adjustment. Larger value results in slower loading times. --[[User:Mrjaredbeta|Mrjaredbeta]] ([[User talk:Mrjaredbeta|talk]]) 03:21, 1 September 2023 (CEST)
_xcdrom_thread related.
'''Custom Usage:'''
*Param 0x384 (900d) fixes Vampire Hunter D (SLUS-01138) hanging issues.
*Param 0x1F4 (500d) fixes Medievil 2 audio and hanging issues.


=== Command 0x04 (netemu 3.40 up to 4.88) ===
=== Command 0x04 (netemu 3.40 up to 4.88) ===
*Valid values found: 0x4, 0x7, 0x14 (20d), 0x46 (70d), 0x64 (100d), 0xC8 (200d), 0xFFFFFF38 (-200d)
*Valid values found: 0x4, 0x7, 0x14 (20d), 0x46 (70d), 0x64 (100d), 0xC8 (200d), 0xFFFFFF38 (????????)
*Default value: 0
*Default value: 0
*_xcdrom_thread related.
*_xcdrom_thread related.
Possible seek delay/adjustment.<br>
'''Custom Usage:'''
*Param 0x64 and above fixes Transformers: Beast Wars Transmetals (SLUS-01160). 0x14 also gets past initial main menu screen, but hangs when loading into a stage. Param 0xC8 is probably safest.


=== Command 0x05 (netemu 3.40 up to 4.88) ===
=== Command 0x05 (netemu 3.40 up to 4.88) ===
Line 657: Line 897:
*Default value: 0
*Default value: 0
*_xcdrom_thread related.
*_xcdrom_thread related.
'''Custom Usage:'''
*Param 0x01 fixes Shrek Treasure Hunt (SLUS-01463) minigame loading screen hangs.
*Param 0x01 fixes Fear Effect (SLUS-00920) hang when pressing START at menu screen.


=== Command 0x07 (netemu 4.83 up to 4.88) ===
=== Command 0x07 (netemu 4.83 up to 4.88) ===
*Default value: 0
*Default value: 0
*_xcdrom_thread related.
*_xcdrom_thread related.
'''Custom Usage:'''
*Param 0x01 fixes Fear Effect (SLUS-00920) other issues in main menu, such as graphical corruption in options screens, and returning to options screen after viewing credits.


=== Command 0x08 (netemu 3.40 up to 4.88) ===
=== Command 0x08 (netemu 3.40 up to 4.88) ===
Line 678: Line 913:


=== Command 0x0E (netemu 4.83 up to 4.88) ===
=== Command 0x0E (netemu 4.83 up to 4.88) ===
*Or command 0x0C (netemu 3.40)
*Default value: 0x1F4
*Default value: 0x1F4
*_xcdrom_thread related.
*_xcdrom_thread related.


=== Command 0x0F (netemu 4.83 up to 4.88) ===
=== Command 0x0F (netemu 4.83 up to 4.88) ===
*Or command 0x0D (netemu 3.40)
*Default value: 0xFA
*Default value: 0xFA
*_xcdrom_thread related.
*_xcdrom_thread related.
Line 694: Line 927:
*Default value: 0x7D
*Default value: 0x7D
*_xcdrom_thread related.
*_xcdrom_thread related.
=== Command 0x12 (netemu 4.83 up to 4.88) ===
*Or command 0x10 (netemu 3.40)
Command value are flags/settings to alter cdrom behavior.
*0x800 = Different code path for MotorOn/Pause/SetSession cdrom commands. // Need more work, flag affect more than that.


=== Command 0x13 (netemu 4.83 up to 4.88) ===
=== Command 0x13 (netemu 4.83 up to 4.88) ===
*Default value: 0
*Default value: 0
*MDEC related?
'''Custom Usage:'''
*Param 0x01 fixes Roland Garros French Open 2001 (SLES-03449) hang when loading into a match.
*Param 0x01 fixes Fear Effect (SLUS-00920) hang when pressing START at menu screen (sometimes).


=== Command 0x14 (netemu 4.83 up to 4.88) ===
=== Command 0x14 (netemu 4.83 up to 4.88) ===
Line 715: Line 939:
=== Command 0x16 (netemu 4.83 up to 4.88) ===
=== Command 0x16 (netemu 4.83 up to 4.88) ===
*Default value: 0
*Default value: 0
*DMA timing related.
'''Custom Usage:'''
*Param 0x32 is enough to fix International Superstar Soccer (SLES-02550) black screen after PlayStation logo.
*Param 0x08 is enough to fix Vampire Hunter D’s main menu flashing.


=== Command 0x17 (netemu 4.83 up to 4.88) ===
=== Command 0x17 (netemu 4.83 up to 4.88) ===
*Or command 0x0B (netemu 1.70)
*Or command 0x0A (netemu 2.10)
*Or command 0x15 (netemu 3.40 up to 3.55)
*Or command 0x15 (netemu 3.40 up to 3.55)
*Or command 0x0B (emu 1.70 up to 4.88)
*Or command 0x0B (emu 3.40 up to 4.88)
*Or command 0x07 (newemu 2.10)
*Or command 0x0A (newemu 3.40 up to 4.88)
*Or command 0x0A (newemu 3.40 up to 4.88)
This is the libcrypt magic word. This command is used only in 3 games (SCES_016.95, SLES_019.07, SLES_013.01). see: [[PS1 Custom Patches]]
This is the libcrypt magic word. This command is used only in 3 games (SCES_016.95, SLES_019.07, SLES_013.01). see: [[PS1 Custom Patches]]
In ps1_netemu there is possibility to setup that command from one of ps1 classic files (PSISOIMG0000 / PSTITLEIMG000000 related).
In ps1_netemu there is possbility to setup that command from one of ps1 classic files (PSISOIMG0000 / PSTITLEIMG000000 related).
 
When value is not zero is returned by emulator when game try to read cop0r3 (BPC) register. When value is 0 (default), emulator return real BPC content.
 
* It seems there is a problem with LC games using the third scheme mentioned [https://problemkaputt.de/psx-spx.htm#cdromprotectionlibcrypt here]. After reading the data contents of subchannel Q, the CRC-16 value is not read at all, but calculated on its own by the driver instead. It does break LC games using this particular scheme (web-found confirmed issues with Ape Escape and Final Fantasy VIII). All three games that are meant to work with this command does use these LC sectors. I think this command was meant to resolve this issue, just a guess.--[[User:Agrippa|Agrippa]] ([[User talk:Agrippa|talk]]) 20:06, 12 June 2022 (UTC)


=== Command 0x18 (netemu 4.83 up to 4.88) ===
=== Command 0x18 (netemu 4.83 up to 4.88) ===
Substrat cycles from mdec_block_copy_out_callback delta. When mdec is decoding blocks, copy out happen on every completed 6th block. This is hardcoded to take 0xB00 (2816) cycles in ps1_netemu. By using this config we can make this value less than default, which in turn "overclock" mdec decoding as every 6xblock will be decoded faster. Duckstation by default use value 0xA80 (2688 (448 x 6 blocks)). So to make config that will replicate this behavior we need set config value to 0x80 (0xB00 - 0x80 = 0xA80).
*Default value: 0
*Default value: 0
*Valid values range: 0x000 - 0xB00
*Higher values are ignored and 0 is set (just like when you use 0xB00 value), making MDEC instant.


=== Command 0x19 (netemu 4.83 up to 4.88) ===
=== Command 0x19 (netemu 4.83 up to 4.88) ===
Line 745: Line 955:


=== Command 0x1A (netemu 4.83 up to 4.88) ===
=== Command 0x1A (netemu 4.83 up to 4.88) ===
Set PS1 PS1 Scratchpad address 0x1F800000 - 0x1F8003FF to given 4 bytes value. Only one game use this, game seems to expect memory initialized to 0xFFFFFFFF, while never do this.
*Default value: 0
*Default value: 0
*Set in same place where bios image is loaded, and region check/patch is performed.


=== Command 0x1B (netemu 4.83 up to 4.88) ===
=== Command 0x1B (netemu 4.83 up to 4.88) ===
*Default value: 0x3E8
*Default value: 0x3E8
Multiplier for GTE commands cycles. Value from config is multiplied by 256, and then divided by 1000.
For example Battle Arena Toshinden use 0xC8 which result in 0x33(51) as value that is later used.
Default value 0x3E8 end as 0x100(256).
=== Command 0x1C (netemu 4.83 up to 4.88) ===
*Or command 0x18 (netemu 3.40)
*Or command 0x1A (netemu 3.55 ?)
*Or command 0x02 (netemu 1.70) - possibly different command
Param flags:
*1 = unk.
*2 = Set Vibration to Off (menu to set it to On is still accessible, but command seems to also skip initializing of vibration internal struct/settings).
=== Command 0x1D (netemu 4.83 up to 4.88) ===
*Default value: 0
*Correct values 0 / 1 / 2
Config seems to setup default gamepads layout for multitap.
*0 = <0, 2, 4, 6, 1, 3, 5, 7>
*1 = <0, 2, 3, 4, 1, 5, 6, 7>
*2 = <0, 1, 2, 3, 4, 5, 6, 7>
Sync order of controllers is always the same regardless of parameter set (1/1-A, 2/2-A, 1-B, 2-B, 1-C, 2-C, 1-D). Therefore, change is only reflected internally in emulated game. For example, Crash Bash needs parameter 2 for controllers to be set properly in game, but order in which controllers physically connect is not changed.


=== Command 0x1E (netemu 4.83 up to 4.88) ===
=== Command 0x1E (netemu 4.83 up to 4.88) ===
*Default value: 0x7D0
*Default value: 0x7D0
*xPadThread related.
*xPadThread related.
=== Command 0x20 (netemu 4.83 up to 4.88) ===
GPU multi command (bifield)
*Default value: 0
*0x08 = Always set Vertical Interlace bit in GPUSTAT to 0 on GP1 (08h) command.
*0x40 = Is not exactly known what happen under the hood, but this command allow to play 50Hz titles in 60Hz with correct speed.


=== Command 0x21 (netemu 4.83 up to 4.88) ===
=== Command 0x21 (netemu 4.83 up to 4.88) ===
Line 790: Line 972:
*Default value: 0x3E8
*Default value: 0x3E8
*PS1 GPU related.
*PS1 GPU related.
Seems to fix slowdown in Rapid Racer (SCPS-10060) with value 0x320.


=== Command 0x23 (netemu 4.83 up to 4.88) ===
=== Command 0x23 (netemu 4.83 up to 4.88) ===
Line 808: Line 989:
*PS1 GPU related.
*PS1 GPU related.


=== Command 0x2B (netemu 4.83 up to 4.88) ===
=== Command 0x2B(netemu 4.83 up to 4.88) ===
*Default value: 0
*Default value: 0
*PS1 GPU related.
*PS1 GPU related.
Line 819: Line 1,000:
*Default value: 0
*Default value: 0
*PS1 GPU related.
*PS1 GPU related.
=== Command 0x31 (netemu 4.83 up to 4.88) ===
GPU multi command (bitfield)
*0x02 = Enable Vertical Interlace bit in GP1 (08h) command in SPE writes (in renderer only). Emulator by default use hack where VI bit is ALWAYS disabled in spe.
Note from nocash docs about Vertical Interlace: ''"'''Interlace must be enabled to see all lines in 480-lines mode''' (interlace is causing ugly flickering, so a non-interlaced low resolution image is typically having better quality than a high resolution interlaced image, a pretty bad example are the intro screens shown by the BIOS).''"<br>
This suggest that games which eventually need 0x31, 0x02 will be ones that send GP1 commands with active bit 2(Vertical Resolution 1=480) and 5(Vertical Interlace) at the same time. Otherwise image will be cropped, or badly interlaced. FF8 use this on "Published by..." screen, you can notice weird interlacing when subtitles fade-in without command.


=== Command 0x32 (netemu 4.83 up to 4.88) ===
=== Command 0x32 (netemu 4.83 up to 4.88) ===
Line 850: Line 1,025:


=== Command 0x38 (netemu 4.83 up to 4.88) ===
=== Command 0x38 (netemu 4.83 up to 4.88) ===
*Or command 0x2C in ps1_netemu.self 3.40
*Or command 0x2E in ps1_netemu.self 3.55 ?
*Valid values found:
*Valid values found:
**0/1/2/3
**1 = relaunch the game with ps1_emu.self
**2 = relaunch the game with ps1_newemu.self
When value is not 0 relaunch game with different emu, there seems to be selection between ps1_emu, and ps1_newemu based on config value.


if (cfg == 0)
== Commands table from 4.86 ps1_netemu ==
    stay_netemu
{|class="mw-datatable sortable" style="font-family:monospace; font-weight:bold; font-size:1em"
|+<span style="font-family:sans-serif; font-size:0.9em">ps1_netemu.self [[4.83_CEX|4.83]]~[[{{latestPS3}}_CEX|{{latestPS3}}]] (349 discs. ASIA:256, EURO:18, USA:75) <!--{{ed right|TitleID settings hardcoded in ps1_netemu.self}}--></span>
if (boot_not_from_disc_drive)
|-style="font-family:sans-serif; font-weight:normal; font-size:0.9em"
    if (cfg & 2)
! rowspan="2" | Title ID !! class="unsortable" rowspan="2" | Checksum !! rowspan="2" style="width:30%; min-width:300px" | Title !! class="unsortable" colspan="3" | Commands !! class="unsortable" rowspan="2" style="width:50%; min-width:300px" | Notes
        boot_newemu
|-style="font-family:sans-serif; font-weight:normal; font-size:0.9em"
! <abbr title="Commands Count">Count</abbr> !! <abbr title="Command ID">ID</abbr> !! <abbr title="Command Data">Data</abbr>
if (boot_from_disc_drive)
|-
    if (cfg & 1)
| SCPS_101.06 || 0x53226B9C || || 1 || 0x12 || 0x00000020 ||
        boot_ps1emu
|-
    else
| SCPS_101.07 || 0x90F76B40 || || 1 || 0x12 || 0x00000020 ||
        stay_netemu
|-
| SLPS_018.80 || 0xD8446E20 || || 1 || 0x31 || 0x00000002 ||
  // Boot is considered to be from disc if argv with game path is empty. Which make 0x38 with param 0x01 inaccessible, because there is no way to start disc game with netemu in official way (excluding games that ps1_emu launch with 0x15 cmd to ps1_netemu).
|-
| SLPS_018.81 || 0xD4C76D1B || || 1 || 0x31 || 0x00000002 ||
|-
| SLPS_018.82 || 0x18126E07 || || 1 || 0x31 || 0x00000002 ||
|-
| SLPS_018.83 || 0x12376E34 || || 1 || 0x31 || 0x00000002 ||
|-
| SLPS_023.64 || 0x40B572AA || || 4 || 0x2C || 0xFFFFFFF0 ||
|-
|            ||            || ||  || 0x22 || 0x000001F4 ||
|-
|            ||            || ||  || 0x21 || 0x000001F4 ||
|-
|            ||            || ||  || 0x33 || 0x00000514 ||
|-
| SLPS_023.65 || 0x55E87206 || || 4 || 0x2C || 0xFFFFFFF0 ||
|-
|            ||            || ||  || 0x22 || 0x000001F4 ||
|-
|            ||            || ||  || 0x21 || 0x000001F4 ||
|-
|            ||            || ||  || 0x33 || 0x00000514 ||
|-
| SLPS_021.57 || 0xFF40721F || || 1 || 0x1C || 0x00000002 ||
|-
| SLPS_017.51 || 0xBCDF6FA3 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_911.80 || 0x08047091 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPM_866.02 || 0x5A746EC3 || || 1 || 0x19 || 0x00000032 ||
|-
| SLPS_005.82 || 0xBA436ECC || || 3 || 0x20 || 0x00000001 ||
|-
|            ||            || ||  || 0x13 || 0x00000001 ||
|-
|            ||            || ||  || 0x19 || 0x0000005A ||
|-
| SCPS_101.15 || 0x56086C54 || || 1 || 0x14 || 0x00000006 ||
|-
| SLPM_860.72 || 0x4373729F || || 1 || 0x14 || 0x0000000D ||
|-
| SCPS_180.12 || 0xDBB96C5C || || 3 || 0x12 || 0x00000120 ||
|-
|            ||            || ||  || 0x12 || 0x00004000 ||
|-
|            ||            || ||  || 0x3C || 0xFFFFFF3D ||
|-
| SLPS_012.22 || 0xF5F773C5 || || 2 || 0x03 || 0x000005DC ||
|-
|            ||            || ||  || 0x22 || 0x000004B0 ||
|-
| SLPS_012.22 || 0x7D8D73B7 || || 2 || 0x03 || 0x000005DC ||
|-
|            ||            || ||  || 0x22 || 0x000004B0 ||
|-
| SLPS_017.93 || 0x4FA46DA5 || || 1 || 0x18 || 0xFFFFFF80 ||
|-
| SLPM_864.59 || 0xC78A748B || || 1 || 0x12 || 0x00000080 ||
|-
| SLPS_026.21 || 0xC3157410 || || 1 || 0x31 || 0x00000002 ||
|-
| SCPS_100.03 || 0xED04760D || || 1 || 0x13 || 0x00000001 ||
|-
| SCPS_180.11 || 0x286070C5 || || 2 || 0x13 || 0x00000001 ||
|-
|            ||            || ||  || 0x00 || 0x00000000 ||
|-
| SLPS_018.53 || 0x9D4473E4 || || 1 || 0x33 || 0x00000514 ||
|-
| SCPS_101.03 || 0x6E516DAD || || 1 || 0x33 || 0x00000514 ||
|-
| SCPS_100.47 || 0x56D97048 || || 1 || 0x33 || 0x00000514 ||
|-
| SLPS_033.12 || 0xA0CE6CA9 || || 1 || 0x33 || 0x00000514 ||
|-
| SLPM_861.85 || 0xEBAF6F5D || || 1 || 0x33 || 0x00000514 ||
|-
| SLPM_861.86 || 0x3E696C8A || || 1 || 0x33 || 0x00000514 ||
|-
| SLPM_861.87 || 0x81D86E23 || || 1 || 0x33 || 0x00000514 ||
|-
| SCPS_100.91 || 0xC30F6E06 || || 2 || 0x12 || 0x00000004 ||
|-
|            ||            || ||  || 0x33 || 0x00000514 ||
|-
| SCPS_100.99 || 0x9502715F || || 2 || 0x33 || 0x00000514 ||
|-
|            ||            || ||  || 0x32 || 0x00000054 ||
|-
| SCPS_100.73 || 0x73E06E8F || || 2 || 0x33 || 0x00000514 ||
|-
|            ||            || ||  || 0x32 || 0x00000054 ||
|-
| SLPS_026.33 || 0x1A696E28 || || 1 || 0x33 || 0x00000514 ||
|-
| SLPS_029.88 || 0x3FAD6F38 || || 1 || 0x33 || 0x00000514 ||
|-
| SLPM_866.40 || 0xF9DB6F2D || || 2 || 0x33 || 0x00000514 ||
|-
|            ||            || ||  || 0x32 || 0x00000054 ||
|-
| SLPS_026.61 || 0xC49B6F05 || || 1 || 0x33 || 0x00000514 ||
|-
| SLPS_026.62 || 0x6D7D6F1B || || 1 || 0x33 || 0x00000514 ||
|-
| SLPS_023.00 || 0x9B397352 || || 2 || 0x33 || 0x00000514 ||
|-
|            ||            || ||  || 0x32 || 0x00000054 ||
|-
| SLPS_024.89 || 0x8F4676C6 || || 2 || 0x33 || 0x00000514 ||
|-
|            ||            || ||  || 0x32 || 0x00000054 ||
|-
| SLPS_030.87 || 0x30F078AC || || 2 || 0x33 || 0x00000514 ||
|-
|            ||            || ||  || 0x32 || 0x00000054 ||
|-
| SLPM_860.33 || 0x1B467259 || || 1 || 0x33 || 0x00000514 ||
|-
| SLPS_007.17 || 0x9F01700A || || 1 || 0x22 || 0x000007D0 ||
|-
| SLPM_873.31 || 0xFDA96F69 || || 3 || 0x03 || 0x00000258 ||
|-
|            ||            || ||  || 0x22 || 0x000004E2 ||
|-
|            ||            || ||  || 0x14 || 0x00000014 ||
|-
| SLPS_002.00 || 0xF2A57355 || || 1 || 0x20 || 0x00000001 ||
|-
| SLPS_016.26 || 0x70627260 || || 1 || 0x12 || 0x00000020 ||
|-
| SLPS_016.27 || 0x0A5C7210 || || 1 || 0x12 || 0x00000020 ||
|-
| SLPS_028.17 || 0x8C73710B || || 1 || 0x38 || 0x00000002 ||
|-
| SLPM_871.17 || 0x51E66F74 || || 1 || 0x38 || 0x00000002 ||
|-
| SCPS_100.89 || 0xE39F71B3 || || 1 || 0x0E || 0x00001388 ||
|-
| SCPS_100.90 || 0x68D771A3 || || 1 || 0x0E || 0x00001388 ||
|-
| SLPS_017.50 || 0x5D6C741F || || 3 || 0x36 || 0x00000001 ||
|-
|            ||            || ||  || 0x36 || 0x00000002 ||
|-
|            ||            || ||  || 0x36 || 0x00000004 ||
|-
| SLPM_870.68 || 0xA9F26FC8 || || 1 || 0x12 || 0x00000001 ||
|-
| SLPS_010.65 || 0x6C1F6C29 || || 1 || 0x12 || 0x00000002 ||
|-
| SLPS_019.90 || 0x9F817715 || || 1 || 0x13 || 0x00000001 ||
|-
| slps_002.49 || 0x17867187 || || 1 || 0x13 || 0x00000001 || Game ID use lowercase in emu, DON'T EDIT
|-
| SLPS_011.71 || 0x3C5E7167 || || 1 || 0x12 || 0x00000001 ||
|-
| SLPS_028.58 || 0xA8426B24 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_030.12 || 0x24857336 || || 2 || 0x03 || 0x00000032 ||
|-
|            ||            || ||  || 0x0B || 0x27104E95 ||
|-
| SLPM_872.84 || 0x6B607035 || || 2 || 0x13 || 0x00000001 ||
|-
|            ||            || ||  || 0x20 || 0x00000001 ||
|-
| SLPS_001.94 || 0xB01D7540 || || 1 || 0x12 || 0x00000002 ||
|-
| SLPS_014.21 || 0x5E466C72 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_013.83 || 0x2E3872B6 || || 1 || 0x03 || 0x000005DC ||
|-
| SLPS_022.99 || 0x7B146D4E || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_007.77 || 0xD5197559 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_031.35 || 0x19E96EFA || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_018.20 || 0xF0B06D6A || || 1 || 0x03 || 0x000000C8 ||
|-
| SLPS_012.42 || 0xC9497214 || || 1 || 0x14 || 0x00000014 ||
|-
| SLPM_860.95 || 0x39FE7168 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPM_863.45 || 0x20436C49 || || 1 || 0x22 || 0x000001F4 ||
|-
| SCPS_100.33 || 0x660971A5 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPM_866.13 || 0x2F647175 || || 5 || 0x14 || 0x0000000C ||
|-
|            ||            || ||  || 0x19 || 0x00000010 ||
|-
|            ||            || ||  || 0x36 || 0x00000001 ||
|-
|            ||            || ||  || 0x36 || 0x00000002 ||
|-
|            ||            || ||  || 0x36 || 0x00000004 ||
|-
| SLPS_002.15 || 0x34C16E53 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_002.16 || 0xB9796EA7 || || 1 || 0x13 || 0x00000001 ||
|-
| SCPS_100.71 || 0x16AB6E7B || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_000.10 || 0xB36372E0 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPM_872.30 || 0xC72770B2 || || 1 || 0x14 || 0x00000014 ||
|-
| SLPS_000.28 || 0x06087000 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_006.40 || 0x41C872D2 || || 1 || 0x12 || 0x00000002 ||
|-
| SCPS_100.21 || 0x9F9B6E69 || || 3 || 0x36 || 0x00000001 ||
|-
|            ||            || ||  || 0x36 || 0x00000002 ||
|-
|            ||            || ||  || 0x36 || 0x00000004 ||
|-
| SLPS_914.44 || 0xB9317410 || || 5 || 0x14 || 0x0000000C ||
|-
|            ||            || ||  || 0x19 || 0x00000008 ||
|-
|            ||            || ||  || 0x36 || 0x00000001 ||
|-
|            ||            || ||  || 0x36 || 0x00000002 ||
|-
|            ||            || ||  || 0x36 || 0x00000004 ||
|-
| SLPS_914.45 || 0xC1007411 || || 5 || 0x14 || 0x0000000C ||
|-
|            ||            || ||  || 0x19 || 0x00000008 ||
|-
|            ||            || ||  || 0x36 || 0x00000001 ||
|-
|            ||            || ||  || 0x36 || 0x00000002 ||
|-
|            ||            || ||  || 0x36 || 0x00000004 ||
|-
| SCPS_100.60 || 0x4BCA6FD6 || || 2 || 0x22 || 0x00000320 ||
|-
|            ||            || ||  || 0x31 || 0x00000002 ||
|-
| SLPS_006.24 || 0x6A767294 || || 1 || 0x38 || 0x00000002 ||
|-
| SLPS_018.18 || 0x2F686DE7 || || 1 || 0x00 || 0x00000000 ||
|-
| SLPS_018.19 || 0xBCF36F23 || || 3 || 0x13 || 0x00000001 ||
|-
|            ||            || ||  || 0x21 || 0x000007D0 ||
|-
|            ||            || ||  || 0x22 || 0x000007D0 ||
|-
| SLPM_860.28 || 0x770F6F03 || || 6 || 0x1F || 0x00000001 ||
|-
|            ||            || ||  || 0x21 || 0x000007D0 ||
|-
|            ||            || ||  || 0x22 || 0x000007D0 ||
|-
|            ||            || ||  || 0x2B || 0x00000010 ||
|-
|            ||            || ||  || 0x2D || 0x00000020 ||
|-
|            ||            || ||  || 0x37 || 0x00000002 ||
|-
| SLPS_001.80 || 0xA017720F || || 3 || 0x03 || 0x00000258 ||
|-
|            ||            || ||  || 0x22 || 0x000004E2 ||
|-
|            ||            || ||  || 0x14 || 0x00000014 ||
|-
| SLPS_007.23 || 0x2E5A6FC9 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_007.77 || 0x05837561 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_001.71 || 0x41CE713C || || 1 || 0x14 || 0x0000000E ||
|-
| SLPS_022.66 || 0xD73B735B || || 2 || 0x12 || 0x00000020 ||
|-
|            ||            || ||  || 0x12 || 0x00000400 ||
|-
| SLPS_022.67 || 0xB3347162 || || 2 || 0x12 || 0x00000020 ||
|-
|            ||            || ||  || 0x12 || 0x00000400 ||
|-
| SLPS_022.68 || 0x1F547343 || || 2 || 0x12 || 0x00000020 ||
|-
|            ||            || ||  || 0x12 || 0x00000400 ||
|-
| SLPS_022.69 || 0x5B797240 || || 2 || 0x12 || 0x00000020 ||
|-
|            ||            || ||  || 0x12 || 0x00000400 ||
|-
| SLPS_003.04 || 0x0B4570C7 || || 1 || 0x12 || 0x00000020 ||
|-
| SLPS_003.05 || 0x2F7C6D6C || || 1 || 0x12 || 0x00000020 ||
|-
| SLPS_011.90 || 0x5F51743A || || 4 || 0x0E || 0x00000000 ||
|-
|            ||            || ||  || 0x0F || 0x00000000 ||
|-
|            ||            || ||  || 0x10 || 0x00000000 ||
|-
|            ||            || ||  || 0x11 || 0x00000000 ||
|-
| SLPS_011.91 || 0x8F317483 || || 4 || 0x0E || 0x00000000 ||
|-
|            ||            || ||  || 0x0F || 0x00000000 ||
|-
|            ||            || ||  || 0x10 || 0x00000000 ||
|-
|            ||            || ||  || 0x11 || 0x00000000 ||
|-
| SLPS_011.92 || 0xF13275BC || || 4 || 0x0E || 0x00000000 ||
|-
|            ||            || ||  || 0x0F || 0x00000000 ||
|-
|            ||            || ||  || 0x10 || 0x00000000 ||
|-
|            ||            || ||  || 0x11 || 0x00000000 ||
|-
| SLPS_011.93 || 0x5F51743A || || 4 || 0x0E || 0x00000000 ||
|-
|            ||            || ||  || 0x0F || 0x00000000 ||
|-
|            ||            || ||  || 0x10 || 0x00000000 ||
|-
|            ||            || ||  || 0x11 || 0x00000000 ||
|-
| SLPS_011.94 || 0x8F317483 || || 4 || 0x0E || 0x00000000 ||
|-
|            ||            || ||  || 0x0F || 0x00000000 ||
|-
|            ||            || ||  || 0x10 || 0x00000000 ||
|-
|            ||            || ||  || 0x11 || 0x00000000 ||
|-
| SLPS_011.95 || 0xF13275BC || || 4 || 0x0E || 0x00000000 ||
|-
|            ||            || ||  || 0x0F || 0x00000000 ||
|-
|            ||            || ||  || 0x10 || 0x00000000 ||
|-
|            ||            || ||  || 0x11 || 0x00000000 ||
|-
| SLPM_861.23 || 0x6480711B || || 2 || 0x21 || 0x000007D0 ||
|-
|            ||            || ||  || 0x22 || 0x000007D0 ||
|-
| SLPS_015.43 || 0x6A956F92 || || 1 || 0x31 || 0x00000002 ||
|-
| SLPS_015.44 || 0x28157073 || || 1 || 0x31 || 0x00000002 ||
|-
| SLPS_015.45 || 0xB0F86F7A || || 1 || 0x31 || 0x00000002 ||
|-
| SLPS_021.08 || 0xFEE172C6 || || 1 || 0x03 || 0x000001F4 ||
|-
| SLPS_019.26 || 0xC74271DC || || 5 || 0x03 || 0x00000384 ||
|-
|            ||            || ||  || 0x04 || 0x00000064 ||
|-
|            ||            || ||  || 0x08 || 0x00000320 ||
|-
|            ||            || ||  || 0x14 || 0x00000000 ||
|-
|            ||            || ||  || 0x16 || 0x00000004 ||
|-
| SLPM_862.24 || 0x43406D6F || || 3 || 0x03 || 0x0000012C ||
|-
|            ||            || ||  || 0x08 || 0x0000012C ||
|-
|            ||            || ||  || 0x13 || 0x00000001 ||
|-
| SLPM_862.25 || 0x8F686D14 || || 3 || 0x03 || 0x0000012C ||
|-
|            ||            || ||  || 0x08 || 0x0000012C ||
|-
|            ||            || ||  || 0x13 || 0x00000001 ||
|-
| SLPS_002.48 || 0xEB08766F || || 1 || 0x12 || 0x00000002 ||
|-
| SLPS_003.42 || 0xED3675B2 || || 1 || 0x12 || 0x00000002 ||
|-
| slps_002.67 || 0xDAA073DB || || 1 || 0x20 || 0x00000002 || Game ID use lowercase in emu, DON'T EDIT
|-
| SLPS_000.06 || 0x37A1705B || || 2 || 0x13 || 0x00000001 ||
|-
|            ||            || ||  || 0x22 || 0x00000640 ||
|-
| SLPS_000.31 || 0xFBDE704D || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_014.20 || 0xFC4671F3 || || 5 || 0x03 || 0x000001F4 ||
|-
|            ||            || ||  || 0x08 || 0x000001F4 ||
|-
|            ||            || ||  || 0x14 || 0x00000000 ||
|-
|            ||            || ||  || 0x21 || 0x000001F4 ||
|-
|            ||            || ||  || 0x22 || 0x000001F4 ||
|-
| SLPM_867.75 || 0xF0926FF3 || || 3 || 0x14 || 0x00000000 ||
|-
|            ||            || ||  || 0x16 || 0x00000020 ||
|-
|            ||            || ||  || 0x19 || 0x00000000 ||
|-
| SLPM_867.76 || 0x5BF1723F || || 3 || 0x14 || 0x00000000 ||
|-
|            ||            || ||  || 0x16 || 0x00000016 ||
|-
|            ||            || ||  || 0x16 || 0x00000010 ||
|-
| SLPM_865.49 || 0x6C3F7219 || || 2 || 0x01 || 0x00000002 ||
|-
|            ||            || ||  || 0x12 || 0x00000020 ||
|-
| SLPM_865.50 || 0x0F5873A1 || || 2 || 0x01 || 0x00000002 ||
|-
|            ||            || ||  || 0x12 || 0x00000020 ||
|-
| SLPM_868.81 || 0x4927738C || || 1 || 0x12 || 0x00000020 ||
|-
| SLPM_868.82 || 0x22927190 || || 1 || 0x12 || 0x00000020 ||
|-
| SLPS_027.26 || 0xF3156ECC || || 1 || 0x04 || 0x000000C8 ||
|-
| SLPM_867.15 || 0x020A6E24 || || 1 || 0x04 || 0x000000C8 ||
|-
| SIPS_600.27 || 0x53B97685 || || 1 || 0x03 || 0x000001F4 ||
|-
| SLPS_004.77 || 0x7F0773CA || || 4 || 0x03 || 0x000004B0 ||
|-
|            ||            || ||  || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x12 || 0x00000008 ||
|-
|            ||            || ||  || 0x18 || 0xFFFFFC18 ||
|-
| SLPS_004.78 || 0x415873C2 || || 4 || 0x03 || 0x000004B0 ||
|-
|            ||            || ||  || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x12 || 0x00000008 ||
|-
|            ||            || ||  || 0x18 || 0xFFFFFC18 ||
|-
| SLPS_004.79 || 0x42607296 || || 4 || 0x03 || 0x000004B0 ||
|-
|            ||            || ||  || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x12 || 0x00000008 ||
|-
|            ||            || ||  || 0x18 || 0xFFFFFC18 ||
|-
| SLPS_004.80 || 0x423873A1 || || 4 || 0x03 || 0x000004B0 ||
|-
|            ||            || ||  || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x12 || 0x00000008 ||
|-
|            ||            || ||  || 0x18 || 0xFFFFFC18 ||
|-
| SLPS_029.23 || 0x87036E9E || || 3 || 0x03 || 0x000002BC ||
|-
|            ||            || ||  || 0x08 || 0x000002BC ||
|-
|            ||            || ||  || 0x14 || 0x00000000 ||
|-
| SLPS_000.83 || 0x427C7116 || || 7 || 0x14 || 0x00000008 ||
|-
|            ||            || ||  || 0x15 || 0x00000000 ||
|-
|            ||            || ||  || 0x19 || 0x00000008 ||
|-
|            ||            || ||  || 0x21 || 0x000000C8 ||
|-
|            ||            || ||  || 0x22 || 0x000000C8 ||
|-
|            ||            || ||  || 0x2C || 0xFFFFFFF0 ||
|-
|            ||            || ||  || 0x2D || 0xFFFFFFF0 ||
|-
| SLPM_870.70 || 0xF8A473BC || || 1 || 0x16 || 0x00000010 ||
|-
| SLPM_872.70 || 0xC76C716E || || 2 || 0x03 || 0x000001F4 ||
|-
|            ||            || ||  || 0x14 || 0x00000000 ||
|-
| SLPS_011.33 || 0xBBD96EBE || || 5 || 0x13 || 0x00000001 ||
|-
|            ||            || ||  || 0x14 || 0x00000000 ||
|-
|            ||            || ||  || 0x19 || 0x00000000 ||
|-
|            ||            || ||  || 0x21 || 0x00000C80 ||
|-
|            ||            || ||  || 0x22 || 0x000007D0 ||
|-
| SLPS_002.38 || 0x8FE37274 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_015.48 || 0x24377013 || || 5 || 0x14 || 0x0000000A ||
|-
|            ||            || ||  || 0x21 || 0x00000672 ||
|-
|            ||            || ||  || 0x36 || 0x00000001 ||
|-
|            ||            || ||  || 0x36 || 0x00000002 ||
|-
|            ||            || ||  || 0x36 || 0x00000004 ||
|-
| SLPM_867.12 || 0x49DE6ED5 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_019.02 || 0xA0926C45 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_013.11 || 0x11206DA7 || || 1 || 0x1C || 0x00000002 ||
|-
| SLPS_023.61 || 0xC1556EB3 || || 2 || 0x03 || 0x00000708 ||
|-
|            ||            || ||  || 0x21 || 0x00000000 ||
|-
| SLPS_017.80 || 0xF77873AA || || 3 || 0x03 || 0x00000578 ||
|-
|            ||            || ||  || 0x10 || 0x00000000 ||
|-
|            ||            || ||  || 0x11 || 0x00000000 ||
|-
| SLPS_017.81 || 0x06E073AC || || 3 || 0x03 || 0x00000578 ||
|-
|            ||            || ||  || 0x10 || 0x00000000 ||
|-
|            ||            || ||  || 0x11 || 0x00000000 ||
|-
| SLPS_019.21 || 0xF7E572C0 || || 1 || 0x12 || 0x00000020 ||
|-
| SLPS_019.22 || 0x7D1D72B0 || || 1 || 0x12 || 0x00000020 ||
|-
| SLPS_011.79 || 0x3E7B73C7 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_024.79 || 0x22E86BA3 || || 1 || 0x20 || 0x00000001 ||
|-
| SLPS_000.25 || 0x7E2873EB || || 2 || 0x16 || 0x00000004 ||
|-
|            ||            || ||  || 0x1B || 0x000000C8 ||
|-
| SLPS_017.16 || 0xFFE3710D || || 1 || 0x01 || 0x00000002 ||
|-
| SLPS_017.37 || 0x8EAE73B0 || || 1 || 0x18 || 0xFFFFF254 ||
|-
| SLPS_027.43 || 0x5B556E33 || || 1 || 0x1A || 0xFFFFFFFF ||
|-
| SLPS_010.45 || 0x4AAC6CEE || || 1 || 0x12 || 0x00000020 ||
|-
| SLPS_010.46 || 0x845F6C71 || || 1 || 0x12 || 0x00000020 ||
|-
| SLPS_010.47 || 0x09FF6C64 || || 1 || 0x12 || 0x00000020 ||
|-
| SLPS_011.57 || 0xDEE270E9 || || 1 || 0x04 || 0x000000C8 ||
|-
| SLPS_013.88 || 0x7E896DDD || || 1 || 0x04 || 0x000000C8 ||
|-
| SLPS_004.16 || 0xFE9A6E57 || || 1 || 0x01 || 0x00000001 ||
|-
| SLPS_021.22 || 0x5E5E6D7C || || 1 || 0x04 || 0x000000C8 ||
|-
| SLPS_001.96 || 0x2BF5715A || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_001.04 || 0x29906E05 || || 4 || 0x03 || 0x000000C8 ||
|-
|            ||            || ||  || 0x04 || 0xFFFFFF38 ||
|-
|            ||            || ||  || 0x08 || 0x000000C8 ||
|-
|            ||            || ||  || 0x13 || 0x00000001 ||
|-
| SLPS_001.44 || 0x4B637409 || || 1 || 0x12 || 0x00000020 ||
|-
| SLPS_001.45 || 0x592E74B2 || || 1 || 0x12 || 0x00000020 ||
|-
| SLPS_027.20 || 0xBD7E6B7A || || 2 || 0x13 || 0x00000001 ||
|-
|            ||            || ||  || 0x20 || 0x00000020 ||
|-
| SLPS_034.20 || 0x0E957167 || || 2 || 0x13 || 0x00000001 ||
|-
|            ||            || ||  || 0x20 || 0x00000020 ||
|-
| SLPS_010.35 || 0x57496D99 || || 1 || 0x20 || 0x00000020 ||
|-
| SLPS_023.50 || 0xC8496EB1 || || 2 || 0x04 || 0x00000064 ||
|-
|            ||            || ||  || 0x13 || 0x00000001 ||
|-
| SLPM_866.25 || 0xE9767148 || || 2 || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x06 || 0xFFFFFFF6 ||
|-
| SLPS_030.04 || 0x9C706D06 || || 1 || 0x06 || 0xFFFFFFEC ||
|-
| SLPS_012.67 || 0xC58A6E17 || || 3 || 0x03 || 0x000001F4 ||
|-
|            ||            || ||  || 0x21 || 0x00000640 ||
|-
|            ||            || ||  || 0x12 || 0x00000800 ||
|-
| SLPS_013.82 || 0xC6DD6E08 || || 3 || 0x13 || 0x00000001 ||
|-
|            ||            || ||  || 0x12 || 0x00000804 ||
|-
|            ||            || ||  || 0x3B || 0x00000001 ||
|-
| SLPS_031.51 || 0xB9FF72E2 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_016.37 || 0xFB3A7013 || || 1 || 0x21 || 0x000002BC ||
|-
| SLPS_027.28 || 0x76827129 || || 1 || 0x04 || 0x00000014 ||
|-
| SLPS_000.07 || 0xAA0A6EF2 || || 1 || 0x37 || 0x00000002 ||
|-
| SLPS_016.11 || 0x68ED73D3 || || 1 || 0x12 || 0x00000400 ||
|-
| SLPS_016.12 || 0x0B277320 || || 1 || 0x12 || 0x00000400 ||
|-
| SLPS_016.13 || 0x0D8D7363 || || 1 || 0x12 || 0x00000400 ||
|-
| SLPS_016.14 || 0xE2BB72D8 || || 1 || 0x12 || 0x00000400 ||
|-
| SLPS_017.38 || 0x6CC36CDF || || 3 || 0x27 || 0x00000004 ||
|-
|            ||            || ||  || 0x28 || 0xFFFFFFFF ||
|-
|            ||            || ||  || 0x29 || 0xFFFFFFFC ||
|-
| SLPS_026.36 || 0x56B274EF || || 1 || 0x03 || 0x000002BC ||
|-
| SLPS_031.48 || 0x26A076E0 || || 1 || 0x03 || 0x000001F4 ||
|-
| SLPS_012.40 || 0x943B71CC || || 11 || 0x14 || 0x00000000 ||
|-
|            ||            || ||  || 0x16 || 0x00000004 ||
|-
|            ||            || ||  || 0x1B || 0x000000C8 ||
|-
|            ||            || ||  || 0x21 || 0x000000C8 ||
|-
|            ||            || ||  || 0x22 || 0x000000C8 ||
|-
|            ||            || ||  || 0x2C || 0xFFFFFFF8 ||
|-
|            ||            || ||  || 0x2D || 0xFFFFFFF8 ||
|-
|            ||            || ||  || 0x36 || 0x00000001 ||
|-
|            ||            || ||  || 0x36 || 0x00000002 ||
|-
|            ||            || ||  || 0x36 || 0x00000004 ||
|-
|            ||            || ||  || 0x37 || 0x00000004 ||
|-
| SLPS_012.41 || 0x1A02721E || || 11 || 0x14 || 0x00000000 ||
|-
|            ||            || ||  || 0x16 || 0x00000004 ||
|-
|            ||            || ||  || 0x1B || 0x000000C8 ||
|-
|            ||            || ||  || 0x21 || 0x000000C8 ||
|-
|            ||            || ||  || 0x22 || 0x000000C8 ||
|-
|            ||            || ||  || 0x2C || 0xFFFFFFF8 ||
|-
|            ||            || ||  || 0x2D || 0xFFFFFFF8 ||
|-
|            ||            || ||  || 0x36 || 0x00000001 ||
|-
|            ||            || ||  || 0x36 || 0x00000002 ||
|-
|            ||            || ||  || 0x36 || 0x00000004 ||
|-
|            ||            || ||  || 0x37 || 0x00000004 ||
|-
| SLPM_861.92 || 0xB0C26E33 || || 2 || 0x03 || 0x000002BC ||
|-
|            ||            || ||  || 0x20 || 0x00000004 ||
|-
| SLPS_002.46 || 0xB1297055 || || 4 || 0x13 || 0x00000001 ||
|-
|            ||            || ||  || 0x14 || 0x00000008 ||
|-
|            ||            || ||  || 0x18 || 0x000003E8 ||
|-
|            ||            || ||  || 0x19 || 0x00000008 ||
|-
| SLPS_000.26 || 0x6E6D745E || || 1 || 0x05 || 0xFFFFFF38 ||
|-
| SLPS_000.05 || 0x453C74BA || || 2 || 0x22 || 0x000001F4 ||
|-
|            ||            || ||  || 0x37 || 0x00000004 ||
|-
| SLPS_019.41 || 0x797A6FEC || || 1 || 0x27 || 0x00000007 ||
|-
| SLPS_000.24 || 0x2720703B || || 1 || 0x20 || 0x00000001 ||
|-
| SLPS_017.03 || 0x213C72DB || || 2 || 0x15 || 0x00000000 ||
|-
|            ||            || ||  || 0x20 || 0x00000001 ||
|-
| SLPS_011.80 || 0x03B972F8 || || 2 || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x12 || 0x00000020 ||
|-
| SLPS_011.81 || 0xEEC774EA || || 2 || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x12 || 0x00000020 ||
|-
| SLPS_011.82 || 0x28ED757B || || 2 || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x12 || 0x00000020 ||
|-
| SLPS_011.83 || 0xC6F675CF || || 2 || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x12 || 0x00000020 ||
|-
| SLPS_011.84 || 0xA846760C || || 2 || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x12 || 0x00000020 ||
|-
| SCPS_100.11 || 0xC9216DED || || 1 || 0x22 || 0x00000708 ||
|-
| SLPS_007.31 || 0x28FC700F || || 4 || 0x1B || 0x000000C8 ||
|-
|            ||            || ||  || 0x36 || 0x00000001 ||
|-
|            ||            || ||  || 0x36 || 0x00000002 ||
|-
|            ||            || ||  || 0x36 || 0x00000004 ||
|-
| SLPS_034.46 || 0x26136FD7 || || 7 || 0x04 || 0x00000046 ||
|-
|            ||            || ||  || 0x14 || 0x00000008 ||
|-
|            ||            || ||  || 0x15 || 0x00000008 ||
|-
|            ||            || ||  || 0x36 || 0x00000001 ||
|-
|            ||            || ||  || 0x36 || 0x00000002 ||
|-
|            ||            || ||  || 0x36 || 0x00000004 ||
|-
|            ||            || ||  || 0x37 || 0x00000004 ||
|-
| SLPS_006.57 || 0x759B71B6 || || 3 || 0x14 || 0x00000008 ||
|-
|            ||            || ||  || 0x15 || 0x00000008 ||
|-
|            ||            || ||  || 0x22 || 0x00000320 ||
|-
| SLPS_008.39 || 0x33BC7674 || || 1 || 0x04 || 0x00000064 ||
|-
| SLPS_002.90 || 0x7B8A6EF8 || || 6 || 0x03 || 0x000001F4 ||
|-
|            ||            || ||  || 0x08 || 0x000001F4 ||
|-
|            ||            || ||  || 0x13 || 0x00000001 ||
|-
|            ||            || ||  || 0x14 || 0x00000010 ||
|-
|            ||            || ||  || 0x21 || 0x00000898 ||
|-
|            ||            || ||  || 0x22 || 0x000007D0 ||
|-
| SLPS_015.30 || 0x52657015 || || 1 || 0x12 || 0x00000002 ||
|-
| SLPS_017.70 || 0x944074A8 || || 1 || 0x38 || 0x00000002 ||
|-
| SLPS_000.01 || 0xA61B73A2 || || 1 || 0x38 || 0x00000002 ||
|-
| SLPS_006.00 || 0x69F771EA || || 12 || 0x12 || 0x00000002 ||
|-
|            ||            || ||  || 0x14 || 0x00000000 ||
|-
|            ||            || ||  || 0x15 || 0x00000002 ||
|-
|            ||            || ||  || 0x19 || 0x00000000 ||
|-
|            ||            || ||  || 0x1B || 0x00000000 ||
|-
|            ||            || ||  || 0x20 || 0x00000010 ||
|-
|            ||            || ||  || 0x20 || 0x00000020 ||
|-
|            ||            || ||  || 0x21 || 0x00000000 ||
|-
|            ||            || ||  || 0x22 || 0x00000000 ||
|-
|            ||            || ||  || 0x23 || 0x00000000 ||
|-
|            ||            || ||  || 0x2C || 0xFFFFFFE0 ||
|-
|            ||            || ||  || 0x2D || 0xFFFFFFE0 ||
|-
| SLPS_030.50 || 0xF5E87225 || || 1 || 0x03 || 0x000001F4 ||
|-
| SLPS_003.60 || 0xCA1273F7 || || 1 || 0x28 || 0xFFFFFFFA ||
|-
| SLPM_869.59 || 0x5DC771BA || || 1 || 0x04 || 0x00000007 ||
|-
| SLPS_007.65 || 0xEC497442 || || 5 || 0x14 || 0x00000010 ||
|-
|            ||            || ||  || 0x19 || 0x00000020 ||
|-
|            ||            || ||  || 0x36 || 0x00000001 ||
|-
|            ||            || ||  || 0x36 || 0x00000002 ||
|-
|            ||            || ||  || 0x36 || 0x00000004 ||
|-
| SIPS_600.20 || 0x50ED6E47 || || 1 || 0x1C || 0x00000002 ||
|-
| SLPM_861.68 || 0xBA886BF4 || || 7 || 0x04 || 0x00000004 ||
|-
|            ||            || ||  || 0x06 || 0x00000001 ||
|-
|            ||            || ||  || 0x07 || 0x00000001 ||
|-
|            ||            || ||  || 0x14 || 0x0000000C ||
|-
|            ||            || ||  || 0x19 || 0x0000000C ||
|-
|            ||            || ||  || 0x1C || 0x00000002 ||
|-
|            ||            || ||  || 0x27 || 0x00000007 ||
|-
| SLPM_861.68 || 0x3E596C24 || || 7 || 0x04 || 0x00000004 ||
|-
|            ||            || ||  || 0x06 || 0x00000001 ||
|-
|            ||            || ||  || 0x07 || 0x00000001 ||
|-
|            ||            || ||  || 0x14 || 0x0000000C ||
|-
|            ||            || ||  || 0x19 || 0x0000000C ||
|-
|            ||            || ||  || 0x1C || 0x00000002 ||
|-
|            ||            || ||  || 0x27 || 0x00000007 ||
|-
| SLPS_003.90 || 0x45627423 || || 1 || 0x12 || 0x00000020 ||
|-
| SLPS_007.05 || 0xF93772F6 || || 1 || 0x38 || 0x00000002 ||
|-
| SLPS_021.20 || 0xBC5F7186 || || 11 || 0x14 || 0x00000000 ||
|-
|            ||            || ||  || 0x16 || 0x00000004 ||
|-
|            ||            || ||  || 0x1B || 0x000000C8 ||
|-
|            ||            || ||  || 0x21 || 0x000000C8 ||
|-
|            ||            || ||  || 0x22 || 0x000000C8 ||
|-
|            ||            || ||  || 0x2C || 0xFFFFFFF8 ||
|-
|            ||            || ||  || 0x2D || 0xFFFFFFF8 ||
|-
|            ||            || ||  || 0x36 || 0x00000001 ||
|-
|            ||            || ||  || 0x36 || 0x00000002 ||
|-
|            ||            || ||  || 0x36 || 0x00000004 ||
|-
|            ||            || ||  || 0x37 || 0x00000004 ||
|-
| SLPS_028.32 || 0x258C6C70 || || 3 || 0x0A || 0x0000001E ||
|-
|            ||            || ||  || 0x12 || 0x00002000 ||
|-
|            ||            || ||  || 0x09 || 0x0000000A ||
|-
| SLPS_008.12 || 0x6CC6704F || || 1 || 0x16 || 0x00000003 ||
|-
| SLPM_864.94 || 0x6C706D5C || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_004.20 || 0x31F46F73 || || 1 || 0x38 || 0x00000002 ||
|-
| SLPS_019.06 || 0x32866ECF || || 4 || 0x12 || 0x00000020 ||
|-
|            ||            || ||  || 0x12 || 0x00000100 ||
|-
|            ||            || ||  || 0x12 || 0x00004000 ||
|-
|            ||            || ||  || 0x12 || 0x00008000 ||
|-
| SLPS_034.33 || 0xAA127312 || || 2 || 0x14 || 0x00000010 ||
|-
|            ||            || ||  || 0x19 || 0x00000018 ||
|-
| SLPS_006.11 || 0x7B9776D2 || || 1 || 0x27 || 0x00000008 ||
|-
| SLPS_002.69 || 0x6A70722C || || 2 || 0x14 || 0x00000018 ||
|-
|            ||            || ||  || 0x19 || 0x00000020 ||
|-
| SLPS_001.17 || 0x27577155 || || 3 || 0x14 || 0x0000000C ||
|-
|            ||            || ||  || 0x19 || 0x0000000C ||
|-
|            ||            || ||  || 0x34 || 0x00000003 ||
|-
| SLPS_001.18 || 0x01707004 || || 3 || 0x14 || 0x0000000C ||
|-
|            ||            || ||  || 0x19 || 0x0000000C ||
|-
|            ||            || ||  || 0x34 || 0x00000003 ||
|-
| SLPS_001.19 || 0x5D717205 || || 3 || 0x14 || 0x0000000C ||
|-
|            ||            || ||  || 0x19 || 0x0000000C ||
|-
|            ||            || ||  || 0x34 || 0x00000003 ||
|-
| SLPM_870.50 || 0xC2BE6D65 || || 1 || 0x05 || 0xFFFFFFE2 ||
|-
| SLPS_007.73 || 0x5C7C6E85 || || 1 || 0x21 || 0x00000000 ||
|-
| SLPS_007.89 || 0x2EE27057 || || 1 || 0x21 || 0x00000000 ||
|-
| SLPS_026.53 || 0x3947703C || || 4 || 0x12 || 0x00000020 ||
|-
|            ||            || ||  || 0x12 || 0x00000100 ||
|-
|            ||            || ||  || 0x12 || 0x00004000 ||
|-
|            ||            || ||  || 0x12 || 0x00008000 ||
|-
| SLPS015.03 || 0x5E046C54 || || 3 || 0x12 || 0x00000020 || Game ID is missing underscore in emu, DON'T EDIT
|-
|            ||            || ||  || 0x12 || 0x00000100 ||
|-
|            ||            || ||  || 0x12 || 0x00004000 ||
|-
| SLPS_017.49 || 0xB29D7153 || || 3 || 0x12 || 0x00000020 ||
|-
|            ||            || ||  || 0x12 || 0x00000100 ||
|-
|            ||            || ||  || 0x12 || 0x00004000 ||
|-
| slps_026.37 || 0x01756F09 || || 3 || 0x12 || 0x00000020 || Game ID use lowercase in emu, DON'T EDIT
|-
|            ||            || ||  || 0x12 || 0x00000100 ||
|-
|            ||            || ||  || 0x12 || 0x00004000 ||
|-
| SLPS_016.76 || 0x1E216F81 || || 1 || 0x03 || 0x000005DC ||
|-
| SLPS_017.01 || 0x5BAD767C || || 1 || 0x12 || 0x00000400 ||
|-
| SCPS_100.43 || 0xAD1A6DC9 || || 1 || 0x14 || 0x00000010 ||
|-
| SLPM_866.38 || 0xD0066D6C || || 1 || 0x16 || 0x00000001 ||
|-
| SLPM_866.39 || 0x7FCE6B6E || || 1 || 0x16 || 0x00000001 ||
|-
| SLPS_035.62 || 0xF5E67262 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_024.12 || 0xAB3B70E7 || || 1 || 0x15 || 0x00000038 ||
|-
| SLPS_031.77 || 0x905E744B || || 1 || 0x27 || 0x00000002 ||
|-
| SLPS_021.43 || 0x287A7428 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_023.32 || 0xBFAF6D60 || || 1 || 0x04 || 0x00000007 ||
|-
| SLPS_004.45 || 0x1C977170 || || 1 || 0x13 || 0x00000001 ||
|-
| SLPS_032.92 || 0x7D6871E0 || || 1 || 0x12 || 0x00000020 ||
|-
| SLPS_032.93 || 0xF58A7448 || || 1 || 0x12 || 0x00000020 ||
|-
| SLPS_013.15 || 0x9FA56D27 || || 1 || 0x27 || 0x00000001 ||
|-
| SLPS_026.48 || 0x14846F93 || || 2 || 0x14 || 0x0000000A ||
|-
|            ||            || ||  || 0x19 || 0x0000001C ||
|-
| SLPS_012.05 || 0x2F1C6C7A || || 1 || 0x29 || 0xFFFFFFFE ||
|-
| SLPS_011.47 || 0xAB38741A || || 2 || 0x28 || 0x00000002 ||
|-
|            ||            || ||  || 0x30 || 0x00000001 ||
|-
| SLPS_011.48 || 0xEAF271CA || || 2 || 0x28 || 0x00000002 ||
|-
|            ||            || ||  || 0x30 || 0x00000001 ||
|-
| SLPM_869.34 || 0xB6386F2A || || 1 || 0x29 || 0xFFFFFFFE ||
|-
| SLPM_869.35 || 0x70D96F85 || || 1 || 0x29 || 0xFFFFFFFE ||
|-
| SLPM_869.36 || 0x16B87020 || || 1 || 0x29 || 0xFFFFFFFE ||
|-
| SLPM_871.08 || 0xE24D6E06 || || 1 || 0x12 || 0x00000020 ||
|-
| SLPM_871.09 || 0x35356EB5 || || 1 || 0x12 || 0x00000020 ||
|-
| SCES_016.95 || 0x1CD06FBD || || 1 || 0x17 || 0x000089EA ||
|-
| SLES_019.07 || 0x217F73B9 || || 1 || 0x17 || 0x0000C0EE ||
|-
| SLES_013.01 || 0xD3E2755E || || 1 || 0x17 || 0x0000B722 ||
|-
| SLES_005.56 || 0xB2376D4B || || 1 || 0x13 || 0x00000001 ||
|-
| SCES_000.08 || 0x20037398 || || 1 || 0x38 || 0x00000002 ||
|-
| SLES_007.55 || 0xAAD37657 || || 1 || 0x16 || 0x00000004 ||
|-
| SLES_013.43 || 0xC47D73B4 || || 1 || 0x38 || 0x00000002 ||
|-
| SLES_113.43 || 0xE4C373B5 || || 1 || 0x38 || 0x00000002 ||
|-
| SCES_000.61 || 0x7D876DC2 || || 1 || 0x1C || 0x00000002 ||
|-
| sles_027.90 || 0x5C1F6B0B || || 1 || 0x13 || 0x00000001 || Game ID use lowercase in emu, DON'T EDIT
|-
| SCES_022.85 || 0xE8466F95 || || 3 || 0x0F || 0x00000032 ||
|-
|            ||            || ||  || 0x10 || 0x00000032 ||
|-
|            ||            || ||  || 0x11 || 0x00000019 ||
|-
| SCES_122.85 || 0x85FE6E5C || || 3 || 0x0F || 0x00000032 ||
|-
|            ||            || ||  || 0x10 || 0x00000032 ||
|-
|            ||            || ||  || 0x11 || 0x00000019 ||
|-
| SLES_017.60 || 0xE8576C52 || || 1 || 0x13 || 0x00000001 ||
|-
| SCES_039.37 || 0xBB1E6E47 || || 1 || 0x13 || 0x00000001 ||
|-
| SLES_031.78 || 0x43D56CC9 || || 1 || 0x13 || 0x00000001 ||
|-
| SLES_029.43 || 0xC8DB752E || || 1 || 0x04 || 0x000000C8 ||
|-
| SLES_002.09 || 0x7A327397 || || 1 || 0x16 || 0x00000006 ||
|-
| SCES_028.73 || 0x5AAD6CAD || || 4 || 0x12 || 0x00000120 ||
|-
|            ||            || ||  || 0x12 || 0x00004000 ||
|-
|            ||            || ||  || 0x20 || 0x00000040 ||
|-
|            ||            || ||  || 0x3C || 0xFFFFFF3D ||
|-
| SCUS_945.08 || 0x18D56D2A || || 1 || 0x1C || 0x00000002 ||
|-
| SCUS_949.00 || 0x124F71AD || || 1 || 0x1C || 0x00000002 ||
|-
| SCUS_943.09 || 0xA9C66FE4 || || 1 || 0x1C || 0x00000002 ||
|-
| SCUS_941.03 || 0xDF4C6DBB || || 1 || 0x1C || 0x00000002 ||
|-
| SLUS_002.13 || 0x0CFF7372 || || 1 || 0x1C || 0x00000002 ||
|-
| SCUS_943.02 || 0x07E67394 || || 1 || 0x38 || 0x00000002 ||
|-
| SCUS_944.76 || 0xF7656D79 || || 1 || 0x1C || 0x00000002 ||
|-
| SCUS_943.01 || 0x24F17103 || || 1 || 0x1C || 0x00000002 ||
|-
| SCUS_943.56 || 0x776872C1 || || 1 || 0x1C || 0x00000002 ||
|-
| SCUS_944.26 || 0x24F37297 || || 4 || 0x14 || 0x00000010 ||
|-
|            ||            || ||  || 0x36 || 0x00000001 ||
|-
|            ||            || ||  || 0x36 || 0x00000002 ||
|-
|            ||            || ||  || 0x36 || 0x00000004 ||
|-
| SCUS_944.84 || 0x6BD87066 || || 2 || 0x0E || 0x00001388 ||
|-
|            ||            || ||  || 0x1C || 0x00000002 ||
|-
| SCUS_944.98 || 0x6F0C7218 || || 2 || 0x0E || 0x00001388 ||
|-
|            ||            || ||  || 0x1C || 0x00000002 ||
|-
| SCUS_941.08 || 0x4F066FFA || || 1 || 0x1C || 0x00000002 ||
|-
| SCUS_941.63 || 0x1D04759B || || 1 || 0x1C || 0x00000002 ||
|-
| SCUS_941.64 || 0x062C7665 || || 1 || 0x1C || 0x00000002 ||
|-
| SCUS_941.65 || 0x981F74C6 || || 1 || 0x1C || 0x00000002 ||
|-
| SCUS_942.21 || 0x5D9973B1 || || 1 || 0x1C || 0x00000002 ||
|-
| SCUS_943.55 || 0x60476E89 || || 1 || 0x1C || 0x00000002 ||
|-
| SCUS_944.51 || 0x916A6F8A || || 3 || 0x0F || 0x00000032 ||
|-
|            ||            || ||  || 0x10 || 0x00000032 ||
|-
|            ||            || ||  || 0x11 || 0x00000019 ||
|-
| SCUS_944.92 || 0x254F6E71 || || 3 || 0x0F || 0x00000032 ||
|-
|            ||            || ||  || 0x10 || 0x00000032 ||
|-
|            ||            || ||  || 0x11 || 0x00000019 ||
|-
| SLUS_009.58 || 0x70356CAF || || 3 || 0x14 || 0x0000000C ||
|-
|            ||            || ||  || 0x19 || 0x0000000C ||
|-
|            ||            || ||  || 0x1C || 0x00000002 ||
|-
| SLUS_003.79 || 0xA9A06E01 || || 1 || 0x1C || 0x00000002 ||
|-
| SLUS_004.10 || 0x96316D15 || || 1 || 0x1C || 0x00000002 ||
|-
| SLUS_004.31 || 0xF1636D84 || || 2 || 0x13 || 0x00000001 ||
|-
|            ||            || ||  || 0x1C || 0x00000002 ||
|-
| SLUS_004.85 || 0x45C86D54 || || 2 || 0x13 || 0x00000001 ||
|-
|            ||            || ||  || 0x1C || 0x00000002 ||
|-
| SLUS_006.65 || 0x30946C87 || || 2 || 0x13 || 0x00000001 ||
|-
|            ||            || ||  || 0x1C || 0x00000002 ||
|-
| SLUS_006.67 || 0xD3DC6C57 || || 2 || 0x13 || 0x00000001 ||
|-
|            ||            || ||  || 0x1C || 0x00000002 ||
|-
| SLUS_010.41 || 0xA69371A0 || || 4 || 0x2C || 0xFFFFFFF0 ||
|-
|            ||            || ||  || 0x22 || 0x000001F4 ||
|-
|            ||            || ||  || 0x21 || 0x000001F4 ||
|-
|            ||            || ||  || 0x33 || 0x00000514 ||
|-
| SLUS_010.80 || 0x868E72C8 || || 4 || 0x2C || 0xFFFFFFF0 ||
|-
|            ||            || ||  || 0x22 || 0x000001F4 ||
|-
|            ||            || ||  || 0x21 || 0x000001F4 ||
|-
|            ||            || ||  || 0x33 || 0x00000514 ||
|-
| SLUS_008.79 || 0x25E96D12 || || 1 || 0x20 || 0x00000002 ||
|-
| SLUS_002.38 || 0x4C1C7189 || || 1 || 0x1C || 0x00000002 ||
|-
| SLUS_001.13 || 0xF2BD6EE2 || || 1 || 0x1C || 0x00000002 ||
|-
| SLUS_002.36 || 0xC1117292 || || 2 || 0x16 || 0x00000007 ||
|-
|            ||            || ||  || 0x1C || 0x00000002 ||
|-
| SLUS_005.18 || 0xD212739F || || 1 || 0x1C || 0x00000002 ||
|-
| SLUS_004.40 || 0xE28F729A || || 1 || 0x1C || 0x00000002 ||
|-
| SLUS_000.61 || 0xE1B4752C || || 1 || 0x1C || 0x00000002 ||
|-
| SLUS_000.67 || 0xDC237170 || || 1 || 0x21 || 0x00000708 ||
|-
| SLUS_000.42 || 0x93C071A2 || || 3 || 0x03 || 0x0000044C ||
|-
|            ||            || ||  || 0x13 || 0x00000001 ||
|-
|            ||            || ||  || 0x1C || 0x00000002 ||
|-
| SLUS_000.27 || 0x3B037462 || || 1 || 0x1C || 0x00000002 ||
|-
| SLUS_001.52 || 0x59207131 || || 1 || 0x1C || 0x00000002 ||
|-
| SLUS_002.32 || 0x055E74C4 || || 1 || 0x1C || 0x00000002 ||
|-
| SLUS_004.37 || 0xCB24738B || || 1 || 0x1C || 0x00000002 ||
|-
| SCUS_943.04 || 0xC0546D88 || || 1 || 0x1C || 0x00000002 ||
|-
| SLUS_007.07 || 0x2C9D6E1E || || 1 || 0x03 || 0x0000044C ||
|-
| SCUS_944.24 || 0x6C8C7285 || || 1 || 0x20 || 0x00000008 ||
|-
| SLUS_000.19 || 0x32FE7217 || || 5 || 0x03 || 0x00000320 ||
|-
|            ||            || ||  || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x12 || 0x00000008 ||
|-
|            ||            || ||  || 0x18 || 0x000000C8 ||
|-
|            ||            || ||  || 0x30 || 0x00000001 ||
|-
| SLUS_001.34 || 0xF84A722C || || 4 || 0x03 || 0x00000320 ||
|-
|            ||            || ||  || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x12 || 0x00000008 ||
|-
|            ||            || ||  || 0x18 || 0x000000C8 ||
|-
| SLUS_001.35 || 0x993A71DF || || 4 || 0x03 || 0x00000320 ||
|-
|            ||            || ||  || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x12 || 0x00000008 ||
|-
|            ||            || ||  || 0x18 || 0x000000C8 ||
|-
| SLUS_001.36 || 0xF6F4718E || || 4 || 0x03 || 0x00000320 ||
|-
|            ||            || ||  || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x12 || 0x00000008 ||
|-
|            ||            || ||  || 0x18 || 0x000000C8 ||
|-
| SLUS_002.70 || 0xE562706A || || 4 || 0x03 || 0x00000320 ||
|-
|            ||            || ||  || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x12 || 0x00000008 ||
|-
|            ||            || ||  || 0x36 || 0x00000007 ||
|-
| SLUS_002.71 || 0x8C5B703D || || 4 || 0x03 || 0x00000320 ||
|-
|            ||            || ||  || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x12 || 0x00000008 ||
|-
|            ||            || ||  || 0x36 || 0x00000007 ||
|-
| SLUS_002.72 || 0xF4A37003 || || 4 || 0x03 || 0x00000320 ||
|-
|            ||            || ||  || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x12 || 0x00000008 ||
|-
|            ||            || ||  || 0x36 || 0x00000007 ||
|-
| SLUS_002.73 || 0x05877031 || || 4 || 0x03 || 0x00000320 ||
|-
|            ||            || ||  || 0x04 || 0x000000C8 ||
|-
|            ||            || ||  || 0x12 || 0x00000008 ||
|-
|            ||            || ||  || 0x36 || 0x00000007 ||
|-
| SLUS_000.76 || 0x7E91728C || || 1 || 0x14 || 0x00000006 ||
|-
| SLUS_000.28 || 0x64D8758D || || 1 || 0x14 || 0x00000006 ||
|-
| SLUS_001.37 || 0xCAE576E7 || || 1 || 0x14 || 0x00000006 ||
|-
| SCUS_944.48 || 0x68537091 || || 1 || 0x38 || 0x00000002 ||
|-
| SLUS_012.53 || 0x4A926D54 || || 1 || 0x12 || 0x00000020 ||
|-
| SLUS_012.54 || 0x5C3D6FD0 || || 1 || 0x12 || 0x00000020 ||
|-
| SLUS_004.33 || 0x34FA737C || || 1 || 0x01 || 0x00000001 ||
|-
| SCUS_944.54 || 0x49486D8E || || 2 || 0x04 || 0x00000064 ||
|-
|            ||            || ||  || 0x13 || 0x00000001 ||
|-
| SCUS_942.00 || 0x0E9575ED || || 1 || 0x1B || 0x000002BC ||
|-
| SLUS_013.95 || 0xCA8D7292 || || 1 || 0x04 || 0x00000007 ||
|-
| SLUS_011.61 || 0xD2647347 || || 1 || 0x05 || 0xFFFFFF9C ||
|-
| SLUS_002.08 || 0x99127457 || || 1 || 0x28 || 0xFFFFFFFA ||
|-
| Slus_005.98 || 0x90F1753A || || 1 || 0x1F || 0x00000001 || Game ID use mix of lowercase and uppercase in emu, DON'T EDIT
|-
| SLUS_009.80 || 0xEBB37080 || || 1 || 0x30 || 0x00000001 ||
|-
| SLUS_008.92 || 0x10D26D0B || || 1 || 0x31 || 0x00000002 ||
|-
| SLUS_009.08 || 0xC83E6DC6 || || 1 || 0x31 || 0x00000002 ||
|-
| SLUS_009.09 || 0xC88B6CC3 || || 1 || 0x31 || 0x00000002 ||
|-
| SLUS_009.10 || 0x25D66D0D || || 1 || 0x31 || 0x00000002 ||
|-
| SLUS_014.70 || 0x55257373 || || 1 || 0x16 || 0x00000018 ||
|-
| SCES_021.05 || 0x24066F28 || || 1 || 0x02 || 0x001727E4 ||
|-
| SCES_003.11 || 0xD0317129 || || 1 || 0x02 || 0x0017298C ||
|-
| SLES_027.54 || 0xCF2870BB || || 1 || 0x02 || 0x00172A8C ||
|-
|}
== Possible Cobra implementation issues ==
Every CFW which use cobra module potentially can be affected by nasty bug that is there probably even before 7.00.<br>
So the deal is patch in cobra that allow skip region check, example based on ps1_emu.  


=== Command 0x3B (netemu 4.83 up to 4.88) ===
<pre>SprxPatch ps1_emu_patches[] =
PS1 SPU DMA related config. Seems to change some cycles calculation.
{
*Default value: 0
{ ps1_emu_get_region_offset, LI(R29, 0x82), &condition_true }, /* regions 0x80-0x82 bypass region check. */
*Valid values: 0/1
{ 0 }
};
</pre>


== Ps1_emu Commands Info ==
While patch actually skip region check, is also skipping part of code where region of ps3 is stored for future usage. And probably set whole emulation to JPN<br>
This can be important because function that cobra patch, probably is responsible for selecting region of ps1_rom. <br>
There is a string in emulator JJJJAEJEAEJJEJJA which seems to be selector for bios/rom region based on target ID ([[Product_Code]]).
<pre>J    J    J    J    A    E    J    E    A    E    J    J    E    J    J    A
0x80 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x88 0x89 0x8A 0x8B 0x8C 0x8D 0x8E 0x8F</pre>


=== Command 0x15 (ps1emu 4.83 up to 4.88) ===
Hard patch to 0x82 potentially lead to known PAL games frame pacing issues, and to desynced audio, and maybe more. While i can't test that i'm 100% sure that better solution here will be read third character of Title ID from SYSTEM.CNF file of disc/iso, and then patching same place with<br> ps1_emu_get_region_offset, LI(R29, title_id_based_region), &condition_true . <br>
*Valid values found:
Generally if title have E then patch to ANY EU target ID, similar for US, for titles where U or E isn't found just use default J target ID.
**3 (launch game using ps1_netemu)
Above is based on static elf analyse, so i can't tell 100% that is an issue, but it looks like it in emu code.
**Different values are ignored


== Ps1_newemu Commands Info ==
* Is that patch being applied every time, even on the PAL region console? I have never noticed any issues and I was playing the PAL games mostly. The only thing I noticed is the slowed and pitched down licence screen when the PAL game is launched through the ps1_netemu. --[[User:Agrippa|Agrippa]] ([[User talk:Agrippa|talk]]) 17:40, 6 January 2022 (UTC)


=== Command 0x18 (ps1newemu 4.83 up to 4.88) ===
== ps1_emu vs ps1_netemu emulation differences ==
Supposed to launch game using different emulator, but all paths do nothing.
*Valid values found:
**3 (Do nothing, but with print! [https://imgflip.com/i/7x4j2p 1])
**Different values do nothing


== Known bugs ==
In some cracktros (Spyro 3, Sydney 2000, NFS Porsche 2000) the GP0 command E4h (E4080200) draws the image on the wrong coordinates, causing the frozen image of the zoomed PS1 licence screen. According to this [https://psx-spx.consoledev.net/graphicsprocessingunitgpu/#gp0e4h-set-drawing-area-bottom-right-x2y2 info], that command does make use of the newer 2MB VRAM GPU coordinates. Restricting the drawing area to the lower coordinates does fix the image. It looks like a lot of emulators are affected by this, either the Sony ones (ps1_emu on PS3, PS1 on PS2 hardware emulator, POPS on PSP) or the homebrew pSX 1.13. The ps1_netemu is displaying the image correctly. Does it mean the ps1_netemu emulate a different, newer GPU or just increase the emulation accuracy in general (assuming these cracktros work fine even on the oldest PSX released EDIT: I have found reports they are picky even on the original PS1 hardware too.)?
* Yes, this should fail also on old PS1 GPU. I can also confirm that PS1DRV (at least before deckard PS2 models) emulate old GPU model.
As for PS3. ps1_emu, and ps1_newemu emulate old GPU, ps1_netemu emulate new GPU at least partially. Also small tip, all emulators have pair of 2 embed
SPE ELFs. One is SPU emulator, second is GPU emulator. All of them have debug symbols.


=== ps1_netemu.elf ===
ps1_emu
==== Cdr int reads with nonstandard index ====
<pre>
Emulator ignore interrupt flag register and interrupt enable register reads if cdrom index is 2, or 3. Reads like that are undocummented behavior, but confirmed to be successful on real hardware. Also Nocash docs, and Duckstation source handle that correctly, and i remember there are games which used that.
.text:000014D0 E4_cmd:                             
.text:000014D0      il        r56, 0x3FF
.text:000014D4      hbrr      loc_1504, loc_403C
.text:000014D8      rotmi      r54, r12, -10      # r12 = whole 32 bit command
                                                  # r54 = is command shifted by 10 to skip
                                                  # x-cord. So now first bits are y-cord.
.text:000014DC      lqr        r51, xmmword_E520
.text:000014E0      and        r55, r12, r56      # x-cord and with whole 10 bits.
.text:000014E4      cwd        r53, 0xF0+var_F0(sp)
.text:000014E8      cwd        r49, 0xF0+var_F0+8(sp)
.text:000014EC      ai        r52, r55, 1
.text:000014F0      andi      r50, r54, 0x1FF    # y-cord and with 0x1FF, so only 9 bits.
</pre>


0xD81F0 read_0x1F801803:
ps1_netemu
0xD81F0  lwz      r0, (.1F801800 - 0x2E8480)(r8)
<pre>
0xD81F4  clrlwi    r0, r0, 30        # cdrom.index & 3
.text:00003338 E4_cmd:                        
0xD81F8  cmpwi    cr7, r0, 0        # cdrom.index = 0
.text:00003338      rotmi      r18, r12, -10      # r12 = whole 32 bit command
0xD81FC  beq       cr7, read_interrupt_enable_register
                                                  # r18 = is command shifted by 10 to skip
0xD8200  cmpwi    cr7, r0, 1        # cdrom.index = 1
                                                  # x-cord. So now first bits are y-cord.
0xD8204  beq      cr7, read_interrupt_flag_register
.text:0000333C      hbrr       loc_3384, loc_3328
0xD8208  li       r3, 0            # return 0 if index was 2 or 3
.text:00003340      il        r19, 0x3FF
0xD820C  lwz      r7, off_1BC0D4
.text:00003344      lqr        r39, xmmword_150D0
0xD8210  clrldi    r3, r3, 32
.text:00003348      il        r8, 0x200
0xD8214  dcbt      0, r7
.text:0000334C      lqr        r33, xmmword_150E0
0xD8218  blr
.text:00003350      and       r44, r12, r19      # x-cord and with whole 10 bits.
.text:00003354      cwd        r42, arg_0+0xC(sp)
.text:00003358      and        r43, r18, r19      # y-cord and with 0x3FF, so whole 10 bits.
</pre>
---kozarovv.


This can be fixed by simple patch from
==Patches==
0xD81F4  clrlwi    r0, r0, 30  #hex 54 00 07 BE
====Disable Dithering====
0xD8264  clrlwi    r0, r0, 30  #hex 54 00 07 BE
Always set bit 9 in GP0 E1 command to 0. Patches apply to SPE PS1 GPU emulation program. Based on 4.86, but should be valid for all firmwares since 4.6x<br><br>
to
For ps1_emu.elf
0xD81F4  clrlwi    r0, r0, 31  #hex 54 00 07 FE
0xD8264  clrlwi    r0, r0, 31  #hex 54 00 07 FE
This change cdrom.index & 3, into cdrom.index & 1. This way index 2, and 3 will be respected as 0, and 1. Sadly there is no easy hex pattern, so patch need to be done manually. Memory offsets for 4.86.
 
==== Bad encoding of malformed conditional branch 0 ====
Emulator don't ignore few bits, and expect they are 0. While real hardware seems to don't care about them.  
<pre>
<pre>
  31..26 |25..21|20..16|15..11|10..6 |  5..0  |
search for: 23 EC A4 04 23 E3 3B 85  33 7E 26 00 32 05 86 00 0F 3D C6 11
  6bit | 5bit | 5bit | 5bit | 5bit |  6bit  |
replace to: 23 EC A4 04 23 E3 3B 85 33 7E 26 00 32 05 86 00 40 80 00 11
  -------+------+------+------+------+--------+------------
  000001 | rs  | 0XXX0| <--immediate16bit--> | bltz
  000001 | rs  | 0XXX1| <--immediate16bit--> | bgez
  000001 | rs  | 1XXX0| <--immediate16bit--> | bltzal
  000001 | rs  | 1XXX1| <--immediate16bit--> | bgezal
</pre>
</pre>


Problem start when bits 17,18,19 are not zero. Emulator don't clear those bits, and explicitly check only for 0x0,0x1,0x10,0x11.
For ps1_netemu.elf
<pre>
<pre>
r24 hold 20..16 bits extracted from opcode.
search for: 7C 38 41 94 20 7F F4 94 0F 3D C6 3C 12 7F F3 8A
 
replace to: 7C 38 41 94 20 7F F4 94 40 80 00 3C 12 7F F3 8A
0x107958 bcondz_107958:                         # CODE XREF: r3000_opcode_table+12C↑j
0x107958                cmpwi    cr7, r24, 1  # jumptable 001067D4 case BcondZ
0x10795C                beq      cr7, loc_107E98
0x107960                cmplwi    cr7, r24, 1
0x107964                blt      cr7, loc_107E78
0x107968                cmpwi    cr7, r24, 0x10
0x10796C                beq      cr7, loc_1082A4
0x107970                cmpwi    cr7, r24, 0x11
0x107974                beq      cr7, loc_10821C
</pre>
</pre>
Correct solution here will be patch to AND r24 with 0x11 first, to clear meaningless bits before comparison.
This is reason why emulator fail this "Branch Advance" CPU test: https://emulation.gametechwiki.com/index.php/PS1_Tests#CPU . Possibly standard "Branch" test is failed for the same reason.
== GTE commands ==
List of GTE commands is available at 0x001B345C in ps1_netemu 4.86. List include following data {CommandFunctionOPD, Cycles}.
Emulator handle only commands listed below (CMD, addr in emu).


For ps1_newemu.elf
<pre>
<pre>
.GTE_RTPS 0xC4500
search for: 20 7F FD 4C 23 9D C5 85  32 05 B2 80 12 05 B2 0B 0F 3D C6 58
.GTE_MVMVA 0xC4C00
replace to: 20 7F FD 4C 23 9D C5 85  32 05 B2 80 12 05 B2 0B 40 80 00 58
.GTE_SQR_sf 0xC5168
.GTE_NCLIP 0xC527C
.GTE_AVSZ3 0xC5338
.GTE_AVSZ4 0xC5420
.GTE_OP_sf 0xC5518
.GTE_GPF_sf 0xC5678
.GTE_GPL_sf 0xC58C8
.GTE_RTPT 0xC6288
.GTE_NCT 0xC7710
.GTE_NCS 0xC8AD8
.GTE_CC 0xC91E8
.GTE_NCCT 0xC9748
.GTE_NCCS 0xCADF8
.GTE_DCPL 0xCB5F8
.GTE_DPCS 0xCBAD8
.GTE_CDP 0xCBF80
.GTE_NCDT 0xCC760
.GTE_NCDS 0xCE5F8
.GTE_INTPL 0xCF078
.GTE_DPCT 0xCF540
</pre>
</pre>


== CD Drive Commands ==
Patch for rpcs3 (newemu only) for testing purpose.
 
List of CD commands is available at 001B365C in ps1_netemu 4.86. List include following data {Respond INT count (minus INT3), CMD_nr, Function OPD}. Emulator handle only commands listed below (CMD, addr in emu).
 
<pre>
<pre>
.cdr_cmd_Sync 0xD8290
Version: 1.2
.cdr_cmd_Reset 0xD8368
.cdr_cmd_Test 0xD8478
.cdr_cmd_Getparam 0xD8798
.cdr_cmd_Setmode 0xD8918
.cdr_cmd_Init 0xDBC48
.cdr_cmd_MotorOn 0xDD0C0
.cdr_cmd_SeekP 0xDD3D0
.cdr_cmd_Play 0xDD67C
.cdr_cmd_ReadS 0xDD8E8
.cdr_cmd_Backward 0xDDBD0
.cdr_cmd_Pause 0xDDF58
.cdr_cmd_GetTD 0xDE1F8
.cdr_cmd_Getstat 0xDE598
.cdr_cmd_GetlocP 0xDE728
.cdr_cmd_ReadN 0xDEDD0
.cdr_cmd_SetSession 0xDF130
.cdr_cmd_Mute 0xDF970
.cdr_cmd_SeekL 0xDFBAC
.cdr_cmd_Setloc 0xDFE58
.cdr_cmd_Demute 0xE03E0
.cdr_cmd_Setfilter 0xE0618
.cdr_cmd_Forward 0xE0878
.cdr_cmd_GetlocL 0xE0B98
.cdr_cmd_Stop 0xE0FF0
.cdr_cmd_GetTN 0xE1298
.cdr_cmd_GetID 0xE1544
.cdr_cmd_ReadTOC 0xE1C58


Commands 0x17, 0x18, 0x1D are handled as cmd_Sync. Commands above 0x1E seems to be not supported.
SPU-f3d8be702bf4cb8545656e37c29fcc6201a57991:
  "Disable Dithering":
    Games:
      All:
        All: [ All ]
    Author: "kozarovv"
    Patch Version: 1.0
    Patch:
      - [ be32, 0xFB0, 0x40800058 ]
</pre>
</pre>
Please note that all contributions to PS3 Developer wiki are considered to be released under the GNU Free Documentation License 1.2 (see PS3 Developer wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following hCaptcha:

Cancel Editing help (opens in new window)