Editing PS1 Emulation
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
== | == Description == | ||
Playstation 1 emulator called internally ps1hd. Emulation on PS4 is handled differently comparing to PS3. Each PS1 game PS4 package file (.pkg) include emulator itself, so there is no included emulator in PS4 firmware. | |||
Fact that emulator is now included in game pkg, is slightly complicating providing [[PS1_Classics_Emulator_Compatibility_List|compatibility list]], as emulators include some per title patches, and different default settings. | |||
Next difference is that BIOS/ROM in external file is included in .pkg, emu need different region bios for different region titles. This time bios is not any special version, standard SCPH-550X is used. | |||
PS1 Emulator supports LUA scripting by "Lua Bridge", is powerful interface that provide many possibilities to improve compatibility. | |||
Memory card is created at first run of emulator, so you don't need to include one in pkg. | |||
Emulator have some leftovers from PSP emulator (like axinsnreplace), so core of non PS1 specific functions is the same as in PSP emu. Rest of emu seems to be "inspired" by mednafen. | |||
== Configuration Files == | == Configuration Files == | ||
=== config-emu-ps4.txt === | |||
=== config- | |||
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | {| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | ||
! style="width:10%" | Command !! style="width:15%" | Values !! Notes !! style="width:20%" | Usage | ! style="width:10%" | Command !! style="width:15%" | Values !! Notes !! style="width:20%" | Usage | ||
Line 110: | Line 16: | ||
| --wait|| || || | | --wait|| || || | ||
|- | |- | ||
| --bios|| path || Need to match region of game, relative to sandbox root || --bios= | | --bios|| path || Need to match region of game, relative to sandbox root || --bios="BIOS/SCPH5502.bin" | ||
|- | |- | ||
| --configpath|| || || | | --configpath|| || || | ||
Line 145: | Line 51: | ||
|- | |- | ||
| --texrecent|| true , false || Optimize texture hashes Leading To better Performance || --texrecent=true | | --texrecent|| true , false || Optimize texture hashes Leading To better Performance || --texrecent=true | ||
|- | |- | ||
|} | |} | ||
=== XXXXYYYYY.LUA === | ===XXXXYYYYY.LUA=== | ||
<br>'''scripts/XXXXYYYYY.LUA''' | <br>'''scripts/XXXXYYYYY.LUA''' | ||
<br>Lua patches are split between 2 categories R3K (r3000 mips), and EM (emulator). Objects do not need to be called in order for their commands to be usable, contrary to the PS2's emulator. | <br>Lua patches are split between 2 categories R3K (r3000 mips), and EM (emulator). Objects do not need to be called in order for their commands to be usable, contrary to the PS2's emulator. | ||
====R3000 commands==== | |||
==== R3000 commands ==== | |||
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | {| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | ||
! Command !! Usage !! Example !! Notes | ! Command !! Usage !! Example !! Notes | ||
Line 221: | Line 113: | ||
|} | |} | ||
==== Emulator commands ==== | ====Emulator commands==== | ||
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | {| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | ||
! Command !! Usage !! Example !! Notes | ! Command !! Usage !! Example !! Notes | ||
Line 250: | Line 141: | ||
|SaveConfig||EM_SaveConfig() || || | |SaveConfig||EM_SaveConfig() || || | ||
|- | |- | ||
|LoadState|| EM_LoadState()|| ||Load savestate, seems to be disabled in | |LoadState|| EM_LoadState()|| ||Load savestate, seems to be disabled in Medievil emu. | ||
|- | |- | ||
|SaveState||EM_SaveState() || ||Save savestate, seems to be disabled in | |SaveState||EM_SaveState() || ||Save savestate, seems to be disabled in Medievil emu. | ||
|- | |- | ||
|PostEffect|| EM_PostEffect() || || | |PostEffect|| EM_PostEffect() || || | ||
Line 262: | Line 153: | ||
|CRC32 || || || | |CRC32 || || || | ||
|- | |- | ||
|AddFBMapping|| EM_AddFBMapping( , , , ) || || Add framebffer mapping, in | |AddFBMapping|| EM_AddFBMapping( , , , ) || || Add framebffer mapping, in Medievil used with EM_AddFBMapping(768, 256, 180, 256) values. | ||
|- | |- | ||
|RemoveFBMapping|| EM_RemoveFBMapping( , ) || || Remove framebffer mapping, in | |RemoveFBMapping|| EM_RemoveFBMapping( , ) || || Remove framebffer mapping, in Medievil used with EM_RemoveFBMapping(768, 256) values. | ||
|- | |- | ||
|Launch || EM_Launch("path") || || Emulator is able to launch selfs in own sandbox, require full path (for example "/app0/folder/my_self.bin"), can be used for multidisc games. | |Launch || EM_Launch("path") || || Emulator is able to launch selfs in own sandbox, require full path (for example "/app0/folder/my_self.bin"), can be used for multidisc games. | ||
Line 280: | Line 171: | ||
== Emulators == | == Emulators == | ||
<pre>Every emulator is programmed in a different way, sometimes choosing the right emulator is the only possible way to fix a game. Emulators are not provided pre-installed on the ps4, they have to be unpacked from a backup that's downloaded from the ps store from that specific game. this list includes The typical usage of some of The emulators.</pre> | |||
Every emulator is programmed in a different way | |||
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | {| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | ||
! Emulator !! Usage !! API Version !! Similar emulators (Usage) | ! Emulator !! Usage !! API Version !! Similar emulators (Usage) | ||
|- | |- | ||
| Syphon | | Syphon filter || Most popular emulator so far and the one with the highest compatibility, It's used in PSXFPKG v0.3 as the default emulator || ? || ? | ||
|- | |- | ||
| | | Medievil || An unofficial emulator made by sony that's very bad emulator in terms of compatibility. || ? || ? | ||
|- | |- | ||
|} | |} | ||
== PAL Libcrypt games == | == PAL Libcrypt games == | ||
Some PAL PSX games include libcrypt protection, those are known to [http://wiki.redump.org/index.php?title=PlayStation_1:_LibCrypt_protection_(Old) cause issues for emulators.] | Some PAL PSX games include libcrypt protection, those are known to [http://wiki.redump.org/index.php?title=PlayStation_1:_LibCrypt_protection_(Old) cause issues for emulators.] | ||
===List=== | |||
=== List === | |||
* Actua Ice Hockey 2 (Europe) | * Actua Ice Hockey 2 (Europe) | ||
Line 406: | Line 293: | ||
* Wip3out (Europe) (En,Fr,De,Es,It) | * Wip3out (Europe) (En,Fr,De,Es,It) | ||
=== Known Issues === | === Known Issues === | ||
The exact effects of libcrypt depend on the game. However, they usually render the game unplayable in some form. | |||
The exact effects of libcrypt depend on the game. However, they usually render the game unplayable in some form. Here is list of libcrypt-caused issues known to the community. Be sure to patch these games before creating a pkg, or try to fix them by using the --libcrypt command in the | Here is list of libcrypt-caused issues known to the community. | ||
Be sure to patch these games before creating a pkg, or try to fix them by using the --libcrypt command in the emu config. | |||
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | {| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | ||
Line 460: | Line 348: | ||
|} | |} | ||
* Libcrypt | * Libcrypt info mostly taken from: https://github.com/Kippykip/SBITools#libcrypt-failed-check-causes-and-effects | ||
== Multi-Disc support == | == Multi-Disc support == | ||
This needs more [[User talk:139.47.102.134|testing]] but in theory it should work as follows. | This needs more [[User talk:139.47.102.134|testing]] but in theory it should work as follows. | ||
=== On Real PS1 Hardware, PS2, PSP, | === On Real PS1 Hardware, PS2, PSP, PSV, PS3 === | ||
Example Game: '''Final Fantasy VII''' containing 3 Discs: | Example Game: '''Final Fantasy VII''' containing 3 Discs: | ||
* Before the Game asks you to change Discs, it will ask you if you wish to save the Game. | * Before the Game asks you to change Discs, it will ask you if you wish to save the Game. | ||
Line 479: | Line 365: | ||
=== So how to do this on a PS4? === | === So how to do this on a PS4? === | ||
Since as mentioned [[PS1 Emulation#Description|above]] the problematic we have is that every PKG contains not only the Game as an Image-File, but also the [[PS1 Emulation|Emulator]] and a Save File itself. So a workaround is needed: | Since as mentioned [[PS1 Emulation#Description|above]] the problematic we have is that every PKG contains not only the Game as an Image-File, but also the [[PS1 Emulation|Emulator]] and a Save File itself. So a workaround is needed: | ||
* You create a FPKG containing '''Disc 1''' of Final Fantasy VII '''only''' (Example [[Content ID]] = CUSAFF7'''D1'''). | * You create a FPKG containing '''Disc 1''' of Final Fantasy VII '''only''' (Example [[Content ID]] = CUSAFF7'''D1'''). | ||
Line 489: | Line 374: | ||
* Start the new FPKG created and it should recognize your Save File and load the Game from the beginning of Disc 2 | * Start the new FPKG created and it should recognize your Save File and load the Game from the beginning of Disc 2 | ||
* Do the same process for every other additional Disc. | * Do the same process for every other additional Disc. | ||
==Memory mapping== | |||
== Memory mapping == | |||
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | {| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | ||
! Offset From !! Offset To !! Name !! Memory Name (PS4) | ! Offset From !! Offset To !! Name !! Memory Name (PS4) | ||
Line 502: | Line 381: | ||
|- | |- | ||
|} | |} | ||
==Converting psx cheats for the ps4== | |||
== Converting | '''Psx cheats into a shn''' | ||
''' | |||
<pre> | <pre> | ||
Only tested in Syphon | Only tested in Syphon filter's emulator | ||
1. Get an offset [You can get them from Gamehacking.org / Duckstation / Epsxe] | 1. Get an offset [You can get them from Gamehacking.org / Duckstation / Epsxe] | ||
2. Remove the first 2 numbers from the offset | 2. Remove the first 2 numbers from the offset | ||
Line 518: | Line 394: | ||
'''For ps4cheater''' | '''For ps4cheater''' | ||
<pre> | <pre> | ||
Only tested in Syphon filter's emulator | Only tested in Syphon filter's emulator | ||
Line 528: | Line 403: | ||
3. Increase the offset by 0x2000EB2A0 using a hex calculator and use it in ps4 cheater | 3. Increase the offset by 0x2000EB2A0 using a hex calculator and use it in ps4 cheater | ||
</pre> | </pre> | ||
===PC register script=== | |||
=== PC register script | |||
<br>For the usage in PS4cheater. | <br>For the usage in PS4cheater. | ||
<br>'''PSX.cht''' | <br>'''PSX.cht''' | ||
Line 538: | Line 411: | ||
</pre> | </pre> | ||
==TOC file layout== | |||
For multi bin images, probably require emu from ps plus. | |||
<br> | |||
== TOC file layout == | |||
For multi bin images, probably | |||
<br | |||
Track entry structure: | Track entry structure: | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 586: | Line 450: | ||
== Folder/File layout == | == Folder/File layout == | ||
Example: Medievil internal emulator, standalone pkg can differ. | |||
Example: | |||
<pre> | <pre> | ||
├──bios | |||
│ | │ ├── scph5500.bin | ||
│ ├── scph5501.bin | |||
│ └── scph5502.bin | |||
├──config-emu-ps4.txt | |||
│ | |||
│ | |||
├──data | ├──data | ||
│ └── image.bin | │ └── image.bin | ||
├──eboot.bin | |||
├──sce_module | ├──sce_module | ||
│ ├── libc.prx | │ ├── libc.prx | ||
│ ├── libSceAudioLatencyEstimation.prx | |||
│ ├── libSceFace.prx | |||
│ ├── libSceFaceTracker.prx | |||
│ ├── libSceFios2.prx | │ ├── libSceFios2.prx | ||
│ └── | │ ├── libSceHand.prx | ||
│ ├── libSceHandTracker.prx | |||
│ ├── libSceHeadTracker.prx | |||
│ ├── libSceJobManager.prx | |||
│ ├── libSceNpToolkit2.prx | |||
│ └── libSceS3DConversion.prx | |||
├──sce_sys | ├──sce_sys | ||
│ └── param.sfo | │ └── param.sfo | ||
├──scripts | ├──scripts | ||
│ └── XXXXYYYYY.lua | │ └── XXXXYYYYY.lua | ||
</pre> | </pre> | ||
== | == Links == | ||
* https://www.psdevwiki.com/ps4/Talk:PS1_Classics_Emulator_Compatibility_List | * https://www.psdevwiki.com/ps4/Talk:PS1_Classics_Emulator_Compatibility_List | ||
* https://www.psx-place.com/threads/psx-fpkg-0-2-by-jabu-new-tool-to-convert-ps1-games-for-ps4.30498/ | * https://www.psx-place.com/threads/psx-fpkg-0-2-by-jabu-new-tool-to-convert-ps1-games-for-ps4.30498/ | ||
Line 756: | Line 486: | ||
* https://www.youtube.com/watch?v=04EY7huZq9M | * https://www.youtube.com/watch?v=04EY7huZq9M | ||
* For getting cheats: https://gamehacking.org/system/psx | * For getting cheats: https://gamehacking.org/system/psx | ||
{{Reverse Engineering}} | {{Reverse Engineering}} | ||
<noinclude> | <noinclude>[[Category:Main]]</noinclude> | ||
[[Category:Main]] | |||
</noinclude> |