Editing Talk:PSP 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:
== Playstation Portable memory regions ? ==
==PSP Emulator Types and Revisions==
<div>
<div style="float:top; text-align:center;">'''PSP Emulators Types and Revisions'''</div>
<div style="float:left; width:33%;">
{| class="wikitable" style="font-size:xx-small;"
|+ psp_emulator.elf (decrypted)
! Firmware !! Bytes !! MD5 !! <abbr title="Revision">Rev</abbr>
|-
! [[1.00_CEX|1.00]] ~ [[3.10_CEX|3.10]]
| colspan="3" {{no}}
|-
! [[3.15_CEX|3.15]]
| ? || ? || ?
|-
! ?
| ? || ? || ?
|-
! ?
| ? || ? || ?
|-
! [[3.66_CEX|3.66]]
| 419.120 || DFED8FCDB36A4284A27369304D47674F || ?
|-{{cellcolors|#ddddff}}
! [[3.70_CEX|3.70]]
| rowspan="3" | 419.176 || 0F6F1D92D045A86565DF705276776A41 || rowspan="3" | same
|-{{cellcolors|#ddddff}}
! ~
| style="text-align:center; background-color:#ddddff;" | ''Any''
|-{{cellcolors|#ddddff}}
! [[3.74_CEX|3.74]]
| DC8C67FEEB605D73D073BBCAD8F17E6A
|-{{cellcolors|#bbbbff}}
! [[4.00_CEX|4.00]]
| rowspan="2" | 419.416 || 7371A95BB0ACB1152EB13EA11C866F87 || rowspan="2" | same
|-{{cellcolors|#bbbbff}}
! [[4.01_CEX|4.01]]
| C17EE35A278E64227558FA9C39E805B5
|-{{cellcolors|#ddddff}}
! [[4.10_CEX|4.10]]
| rowspan="2" | 419.472 || DAA4E9816037E1EFFFF15B344B61BD1D || rowspan="2" | same
|-{{cellcolors|#ddddff}}
! [[4.11_CEX|4.11]]
| 2DF5AFE349E082A79AF4E50B8100F80A
|-
! [[4.15_CEX|4.15]]
| ? || ? || ?
|-{{cellcolors|#bbbbff}}
! [[4.20_CEX|4.20]]
| rowspan="3" | 419.480 || 540422B0759D20738BF498337E33B7E2 || rowspan="3" | same
|-{{cellcolors|#bbbbff}}
! ~
| style="text-align:center; background-color:#bbbbff;" | ''Any''
|-{{cellcolors|#bbbbff}}
! [[4.25_CEX|4.25]]
| 5D20DFAE9E0D704F6DD17D2A807A1D2C
|-
! ?
| ? || ? || ?
|-
! ?
| ? || ? || ?
|-
! ?
| ? || ? || ?
|-{{cellcolors|#ddddff}}
! [[4.78_CEX|4.78]]
| rowspan="3" | 419.520 || EFEA0DFDDD6E7C479983B5E4E8B95295 || rowspan="3" | same
|-{{cellcolors|#ddddff}}
! ~
| style="text-align:center; background-color:#ddddff;" | ''Any''
|-{{cellcolors|#ddddff}}
! [[4.82_CEX|4.82]]
| 5CAC36C3F940749B4DD5E03DB02C732A
|}
<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 difference is the target firmware">every firmware version</abbr><br>
{{widedot}}'''<abbr title="0x20 bytes">Build label</abbr>''': no/unknown<br>
{{widedot}}'''<abbr title="2 bytes">Target Firmware</abbr>''': yes, repeated '''two''' times<br>
{{widedot}}'''Revision''': unknown
</span>
</div>
<div style="float:left; width:33%;">
{| class="wikitable" style="font-size:xx-small;"
|+ psp_translator.elf (decrypted)
! Firmware !! Bytes !! MD5 !! <abbr title="Revision">Rev</abbr>
|-
! [[1.00_CEX|1.00]] ~ [[3.10_CEX|3.10]]
| colspan="3" {{no}}
|-
! [[3.15_CEX|3.15]]
| ? || ? || ?
|-
! ?
| ? || ? || ?
|-
! ?
| ? || ? || ?
|-
! [[3.66_CEX|3.66]]
| 283.128 || 0F52CE7666276B71FF5C560D7BD28014 || ?
|-{{cellcolors|#ddddff}}
! [[3.70_CEX|3.70]]
| rowspan="3" | 283.128 || C35D80E8B1A4A61212EA773C061BF1DC || rowspan="3" | same
|-{{cellcolors|#ddddff}}
! ~
| style="text-align:center; background-color:#ddddff;" | ''Any''
|-{{cellcolors|#ddddff}}
! [[3.74_CEX|3.74]]
| A42CD1453C52149297A975F2BA5B2D38
|-{{cellcolors|#bbbbff}}
! [[4.00_CEX|4.00]]
| rowspan="2" | 283.128 || DF07955312D1C09DC2DC355EBA47F8AA || rowspan="2" | same
|-{{cellcolors|#bbbbff}}
! [[4.01_CEX|4.01]]
| A06E7BF7C1D062878593E1D4EA85B4C9
|-{{cellcolors|#ddddff}}
! [[4.10_CEX|4.10]]
| rowspan="2" | 283.128 || FB4801625CA15AC58DB28A4223EFD4A2 || rowspan="2" | same
|-{{cellcolors|#ddddff}}
! [[4.11_CEX|4.11]]
| 3154FF57D36E3D7C4F2C061393816482
|-
! [[4.15_CEX|4.15]]
| ? || ? || ?
|-{{cellcolors|#bbbbff}}
! [[4.20_CEX|4.20]]
| rowspan="3" | 283.120 || C125A486D3C48EA2C957EAFC0AB69B39 || rowspan="3" | same
|-{{cellcolors|#bbbbff}}
! ~
| style="text-align:center; background-color:#bbbbff;" | ''Any''
|-{{cellcolors|#bbbbff}}
! [[4.23_SEX|4.23 S]]
| C469B41798157C53C3E7794E9BDF9D36
|-
! [[4.25_CEX|4.25]]
| 283.120 || A675423F5C8B9FD02AA2150D46B953AE || ?
|-
! ?
| ? || ? || ?
|-
! ?
| ? || ? || ?
|-
! ?
| ? || ? || ?
|-{{cellcolors|#ddddff}}
! [[4.78_CEX|4.78]]
| rowspan="3" | 283.120 || A35809CE6C184F3E3B52C18E0AE19217 || rowspan="3" | same
|-{{cellcolors|#ddddff}}
! ~
| style="text-align:center; background-color:#ddddff;" | ''Any''
|-{{cellcolors|#ddddff}}
! [[4.82_CEX|4.82]]
| 58E104453AC60DE2B671E43F09D96E80
|}
<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 difference is the target firmware">every firmware version</abbr><br>
{{widedot}}'''<abbr title="0x20 bytes">Build label</abbr>''': no/unknown<br>
{{widedot}}'''<abbr title="2 bytes">Target Firmware</abbr>''': yes, repeated '''one''' time<br>
{{widedot}}'''Revision''': unknown
</span>
</div>
</div>
<br style="clear: both;" />
 
== Playstation Portable ==
  PPSSPP
  PPSSPP
  00010000 Scratchpad
  00010000 Scratchpad
Line 10: Line 175:
  B0000000 Default load address
  B0000000 Default load address


== Cryptobrainstorming ==
=== Crypto ===
Supported Kirk Crypto ? (1,4,7,11,12,13,14,16,17,18,19)


== emulator_api errors ==
Supported Kirk Crypto ? (1,4,7,11,12,13,14,16,17,18,19)
 
=== emulator_api errors ===
Google translations from japanese error messages:
Google translations from japanese error messages:


Line 77: Line 243:
  S7003 I could not connect.
  S7003 I could not connect.
  S7004 We were leaving from the room.
  S7004 We were leaving from the room.
== Emulator patches ==
This patches are intended to be applyed to the PSP emulator
=== Patch to redirect unsupported commands (experimental) ===
This ugly and highly experimental poc code simply redirects unsupported cmd's to 0x01010005 (Seek Begin), prolly breaks other cmd's
{{boxcode|float=left|width=50%|title=Original|code=<syntaxhighlight lang="asm">
00000000000285B0
00000000000285B0 empty_buffer:                          # CODE XREF: sceIoIoctlAsync+74�j
00000000000285B0                                        # sceIofileAsync+140�j ...
00000000000285B0                li        r31, 0       
00000000000285B4                clrldi    r27, r3, 32 
00000000000285B8                li        r29, 0       
00000000000285BC                cmpwi    cr4, r31, 0 
00000000000285C0
00000000000285C0 IoFileMgrForUser_822ADD32:              # CODE XREF: sceIoIoctlAsync+184�j
00000000000285C0                                        # sceIofileAsync+2D0�j
00000000000285C0                clrldi    r7, r23, 32  # out data ptr
00000000000285C4                extsw    r3, r24      # id
00000000000285C8                extsw    r4, r28      # cmd
00000000000285CC                mr        r6, r27      # in size
00000000000285D0                clrldi    r8, r25, 32  # out len
00000000000285D4                mr        r5, r29      # in data ptr
00000000000285D8                bl        _IoFileMgrForUser_822ADD32 # pspFileSystem.... ?
00000000000285DC                ld        r2, 0xC0+var_98(r1)
00000000000285E0                mr        r31, r3
00000000000285E4                beq      cr4, loc_285F4 # nop
00000000000285E8                mr        r3, r29
00000000000285EC                bl        _sys_libc_free
00000000000285F0                ld        r2, 0xC0+var_98(r1)
00000000000285F4
00000000000285F4 loc_285F4:                              # CODE XREF: sceIoIoctlAsync+B4�j
00000000000285F4                stw      r31, 8(r30)  # return value
</syntaxhighlight>}}
{{boxcode|float=right|width=50%|title=Patched|code=<syntaxhighlight lang="asm">
00000000000285B0
00000000000285B0 loc_285B0:                              # CODE XREF: sceIoIoctlAsync+74�j
00000000000285B0                                        # sceIoIoctlAsync+140�j ...
00000000000285B0                bl        _sys_libc_malloc
00000000000285B4                clrldi    r26, r3, 32
00000000000285B8                lis      r28, 0x101 # 0x1010005                          # Seek cmd id
00000000000285BC                ori      r28, r28, 5 # 0x1010005
00000000000285C0                b        loc_28724
00000000000285C4 # ---------------------------------------------------------------------------
00000000000285C4
00000000000285C4 loc_285C4:                              # CODE XREF: sceIoIoctlAsync+184�j  #
00000000000285C4                                        # sceIoIoctlAsync+2D0�j              # Both branches also modified, so we can use 5x4 bytes
00000000000285C4                clrldi    r7, r23, 32
00000000000285C8                extsw    r3, r24
00000000000285CC                extsw    r4, r28
00000000000285D0                mr        r6, r27
00000000000285D4                clrldi    r8, r25, 32
00000000000285D8                mr        r5, r29
00000000000285DC                bl        _IoFileMgrForUser_822ADD32
00000000000285E0                ld        r2, 0xC0+var_98(r1)
00000000000285E4                mr        r31, r3
00000000000285E8                mr        r3, r29
00000000000285EC                bl        _sys_libc_free
00000000000285F0                ld        r2, 0xC0+var_98(r1)
00000000000285F4                stw      r31, 8(r30)
</syntaxhighlight>}}{{clear}}
Unsupported ID's will be replaced with empty buffers and simply sent through IoIoctl.<br>
PGD = ID 0x04100001
Supported cmd ID's:
0x1010005 (UMD file seek set)
0x1010009
0x101000A
(0x1020006)
(0x1020007)
0x1030008 (Read UMD file)
(0x1D20002)
0x1F100A6 (UMD file seek whence)
0x1F30003 (UMD disc read sectors operation)
*Reference help:
**https://raw.githubusercontent.com/hrydgard/ppsspp/master/Core/HLE/sceIo.cpp
**https://code.google.com/p/jpcsp/source/browse/trunk/src/jpcsp/HLE/modules150/IoFileMgrForUser.java
<pre>
0x01020001 - Get UMD Primary Volume Descriptor
0x01020002 - Get UMD Path Table
0x01020003 - Get UMD sector size
0x01020004 - Get UMD file pointer
0x01010005 - Set UMD file seek
0x01020006 - Get UMD file start sector
0x01020007 - Get UMD file length in bytes
0x01030008 - Read UMD file
0x01D20001 - Get UMD device file current sector seek position
0x01F30003 - Read raw sectors from UMD device file
0x01F100A6 - Set UMD device file seek by sector
0x04100001 - Define decryption key (DRM by amctrl.prx)
0x04100002 - Set PGD offset
0x04100010 - Get PGD data size
</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)

Templates used on this page: