PS1 Emulation: Difference between revisions
mNo edit summary |
CelesteBlue (talk | contribs) No edit summary |
||
(84 intermediate revisions by 10 users not shown) | |||
Line 1: | Line 1: | ||
== Official games == | |||
=== PS1 games available on PS4 PS Store === | |||
* Dino Crisis (PS5: UP0102-PPSA07831_00-CLASSICDINO00001 or JP0102-PPSA07866_00-CLASSICDINO00001) 2024-10-15 | |||
* 2Xtreme / Street Games '97 UP9000-CUSA41399_00-SCUS945080000000 (PS5: UP9000-PPSA14435_00-SCUS945080000000 or JP9000-PPSA14437_00-SIPS600190000000) 2024-05-21 PS4 11.50 | |||
* G-Police (1997) UP9000-CUSA42756_00-SLUS005440000000 (PS5: UP9000-PPSA15806_00-SLUS005440000000 or JP9000-PPSA15808_00-SCPS100650000000) 2024-05-21 PS4 11.50 | |||
* Alone in the Dark: The New Nightmare (2001) EP4389-CUSA44781_00-SLES028010000000 or UP4389-CUSA44780_00-SLUS012010000000 (PS5: EP4389-PPSA18071_00-AITDNEWNIGHTMARE or UP4389-PPSA18070_00-AITDNEWNIGHTMARE) 2024-04-16, PS4 11.50 | |||
* MediEvil (1998) UP9000-CUSA42759_00-SCUS942270000000 (PS5: UP9000-PPSA15811_00-SCUS942270000000 or JP9000-PPSA15813_00-SCPS100810000000) 2024-04-16 PS4 11.50 | |||
* Cool Boarders (2000) UP9000-CUSA45363_00-SCUS943560000000 (PS5: UP9000-PPSA18836_00-SCUS943560000000) 2024-03-19 | |||
* Rally Cross (PS5: UP9000-PPSA14448_00-SCUS943080000000 or JP9000-PPSA14450_00-SIPS600220000000) 2024-01-16 | |||
* Grandia UP8745-CUSA43159_00-0291383562913011 or JP0184-CUSA43007_00-0451798479123793 2023-11-21 | |||
* Jet Moto UP9000-CUSA43452_00-SCUS943090000000 or JP9000-CUSA43453_00-SIPS600200000000 2023-11-21 | |||
* Jet Moto 2 / JetMoto’98 UP9000-CUSA44712_00-SCES010450000000 (PS5: UP9000-PPSA17995_00-SCES010450000000 or JP9000-PPSA17996_00-SIPS600290000000) 2024-02-20 | |||
* Kurushi™ Final: Mental Blocks / I.Q FINAL UP9000-CUSA32012_00-SCES020090000000 or JP9000-CUSA32014_00-SCPS913110000000 2023-10-17 | |||
* R4 RIDGE RACER TYPE 4® PS4 & PS5 (1998) UP0700-CUSA33746_00-SLUS007970000000 or JP0700-CUSA33744_00-SLPS018000000000 2023-03-21 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners | |||
* TEKKEN2 PS4 & PS5 UP0700-CUSA33750_00-TEKKEN2000000000 or JP0700-CUSA33748_00-TEKKEN2000000000 (PS5: UP0700-PPSA07703_00-SLUS002130000000 or HP0700-PPSA07702_00-SLUS002130000000) 2022-06-13 | |||
* Mr. Driller PS4 & PS5 UP0700-CUSA33766_00-MRDRILLER0000000 or JP0700-CUSA33764_00-MRDRILLER0000000 2022-06-13 | |||
* Twisted Metal (1995) UP9000-CUSA43359_00-SCUS943040000000 or JP9000-CUSA43360_00-SIPS600070000000 (PS5: UP9000-PPSA16427_00-SCUS943040000000 or JP9000-PPSA16428_00-SIPS600070000000) 2023-07-18 | |||
* Twisted Metal 2 / Twisted Metal EX UP9000-CUSA43361_00-SCUS943060000000 or JP9000-CUSA43362_00-SIPS600210000000 (PS5: UP9000-PPSA16429_00-SCUS943060000000 or JP9000-PPSA16430_00-SIPS600210000000) 2023-07-18 | |||
* Herc's Adventures UP1082-CUSA41355_00-0759221165223042 or JP1780-CUSA41630_00-0391043783358035 2023-06-20 | |||
* Hot Shots Golf UP9000-CUSA32006_00-SCUS941880000000 or JP9000-CUSA32008_00-SCPS100420000000 2022-06-13 | |||
* Hot Shots Golf 2 UP9000-CUSA32473_00-SCUS944760000000 or JP9000-CUSA32475_00-SCPS911970000000 2023-01-17 | |||
* STAR WARS Rebel Assault II - The Hidden Empire UP1082-CUSA33312_00-SLUS003810000000 or EP1006-CUSA33313_00-SLES006540000000 or JP1780-CUSA33568_00-SLPS006380000000 (PS5: UP1082-PPSA07366_00-5997104624035590 or JP1780-PPSA07526_00-0763020610695754) 2024-04-16 PS4 11.50 | |||
* STAR WARS Episode I - The Phantom Menace (PS5: UP1082-PPSA07336_00-6684300313937060 or JP1780-PPSA07524_00-4446476017525841) 2024-01-16 | |||
* STAR WARS Demolition UP1082-CUSA33310_00-9257364461708370 2023-01-17 | |||
* Ape Escape UP9000-CUSA31964_00-SCUS944230000000 or JP9000-CUSA31966_00-SCPS100910000000 2022-06-13 | |||
* Syphon Filter UP9000-CUSA31967_00-SCUS942400000000 or JP9000-CUSA31969_00-SLPS022160000000 2022-06-13 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners | |||
* Syphon Filter 2 UP9000-CUSA32470_00-SCUS944510000000 2022-09-20 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners | |||
* Syphon Filter 3 UP9000-CUSA36095_00-SCUS946400000000 2023-01-17 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners | |||
* Disney•Pixar Buzz Lightyear of Star Command (PS5: UP1082-PPSA14381_00-0570380917000461) 2023-12-19 | |||
* Disney•Pixar Toy Story 2: Buzz Lightyear to the Rescue! UP1082-CUSA33334_00-6265507718650825 2022-06-13 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners | |||
* Resident Evil Director’s Cut (1997) UP0102-CUSA33877_00-CLASSICREDC00001 2022-06-13 | |||
* Jumping Flash! UP9000-CUSA32017_00-SCUS941030000000 or JP9000-CUSA32020_00-SCPM850010000000 2022-06-13 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners | |||
* Wild Arms UP9000-CUSA32009_00-SCUS946080000000 or JP9000-CUSA32011_00-SCPS100280000000 2022-06-13 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners | |||
* Wild Arms 2 UP9000-CUSA34855_00-SCUS944840000000 or JP9000-CUSA34857_00-SCPS100890000000 2023-02-21 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners | |||
* Harvest Moon: Back to Nature UP1023-CUSA34071_00-3457003887927414 or JP0507-CUSA34069_00-4859501566917590 2023-02-21 | |||
* The Legend of Dragoon (1999) UP9000-CUSA32477_00-SCUS944910000000 or JP9000-CUSA32479_00-SCPS101190000000 2023-02-21 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners | |||
* Oddworld: Abe's Exoddus (PS1 Emulation) UP4134-CUSA34001_00-9029543245541238 2022-12-20 | |||
* Oddworld: Abe's Oddysee (PS1 Emulation) UP4134-CUSA33999_00-3720818447088678 2022-06-13 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners | |||
* Worms [PS1 Emulation] UP4064-CUSA33244_00-SLUS003360000000 or EP4064-CUSA33243_00-SLES001190000000 2023-06-20 | |||
* Worms Pinball [PS1 Emulation] UP4064-CUSA43205_00-SLES004830000000 (PS5: UP4064-PPSA16239_00-0865341241660737) 2024-05-21 PS4 11.50 | |||
* Worms World Party [PS1 Emulation] UP4064-CUSA33248_00-SLUS014480000000 or EP4064-CUSA33247_00-SLES038040000000 2022-06-13 | |||
* Worms Armageddon [PS1 Emulation] UP4064-CUSA33246_00-SLUS008880000000 or EP4064-CUSA33245_00-SLES022170000000 2022-06-13 | |||
* I.Q Intelligent Qube UP9000-CUSA32015_00-SCUS941810000000 or JP9000-CUSA32018_00-SCUS941810000000 2022-06-13 | |||
=== PS1 games available on PS4 Bluray Disc === | |||
No PS1 Classic game is available on PS4 Bluray Disc, maybe because producers like Limited Run Games thought it would be a waste to store less than 1 GB on a 25 GB Bluray Disc. | |||
=== PS1 remaster games available on PS4 PS Store === | |||
* Clock Tower: Rewind 2024-10-29 "Play Original mode to experience Clock Tower as it was when initially released in 1995, or play Rewind mode with extra content and improvements." | |||
* GRANDIA HD Collection (contains Grandia HD Remaster and Grandia 2 HD Remaster) UP8299-CUSA43589_00-0792833251161643 2024-03-26 | |||
* MediEvil HD UP9000-CUSA11227_00-MEDIEVILHD000001 or EP9000-CUSA12982_00-MEDIEVILHD000001 PS4 6.72 2019-10-24 | |||
* Tomb Raider: Definitive Edition (in Tomb Raider: Definitive Survivor Trilogy) UP0082-CUSA27687_00-4584232154698924 2021-03-18 | |||
* Tomb Raider I-III Remastered (PS5: UP1032-PPSA16901_00-TOMBRAIDER123224) 2024-02-14 | |||
* Tomb Raider: The Last Revelation (in Tomb Raider IV-VI Remastered PS4 & PS5) (PS5: UP1032-PPSA18154_00-TOMBRAIDER456225) 2025-02-14 | |||
* Tomb Raider: Chronicles (in Tomb Raider IV-VI Remastered PS4 & PS5) (PS5: UP1032-PPSA18154_00-TOMBRAIDER456225) 2025-02-14 | |||
=== PS1 remaster games available on PS5 PS Store === | |||
* Clock Tower: Rewind UP2053-PPSA21337_00-CLOCKTOWERPS5USA 2024-10-29 "Play Original mode to experience Clock Tower as it was when initially released in 1995, or play Rewind mode with extra content and improvements." | |||
* Legend of Mana UP0082-CUSA24495_00-LOMPS4NA00000001 2021-06-24 | |||
* Tomba! Special Edition 2024-08-01 | |||
=== PS1 remaster games available on PS4 Bluray Disc === | |||
* Clock Tower: Rewind PS4 (Limited Run #560) 2024-10-29 "Play Original mode to experience Clock Tower as it was when initially released in 1995, or play Rewind mode with extra content and improvements." | |||
* GRANDIA HD Collection (Limited Run Games #544) (contains Grandia HD Remaster and Grandia 2 HD Remaster) UP8299-CUSA43589_00-0792833251161643 2024-03-26 | |||
* MediEvil HD UP9000-CUSA11227_00-MEDIEVILHD000001 or EP9000-CUSA12982_00-MEDIEVILHD000001 PS4 6.72 | |||
* Tomb Raider: Definitive Edition (in Tomb Raider: Definitive Survivor Trilogy) UP0082-CUSA27687_00-4584232154698924 | |||
=== PS1 remaster games available on PS5 Bluray Disc === | |||
* Clock Tower: Rewind PS5 (by Limited Run #105) UP2053-PPSA21337_00-CLOCKTOWERPS5USA 2024-10-29 "Play Original mode to experience Clock Tower as it was when initially released in 1995, or play Rewind mode with extra content and improvements." https://store.playstation.com/en-us/concept/10010305 Notice: PS1 Clock Tower is not the original game. | |||
** The first game in the series was Clock Tower (1995) - first released on the SNES, later ported to PS1, PC and WonderSwan, but only ever released in Japan. | |||
** The PS1 game is the second game, and was called Clock Tower 2 in Japan but just Clock Tower everywhere else, even though it is a sequel and not a port of the original. | |||
** Clock Tower 2 on the PS1 is the third game. | |||
** Clock Tower 3 on the PS2 is the fourth game. | |||
* Gex Trilogy (by Limited Run, includes Gex, Gex: Enter the Gecko & Gex 3: Deep Cover Gecko) — but these aren't isn't just re-runs! This Carbon Engine collection includes extras and quality of life improvements to bring Gex back into prime time! | |||
* Tomba! Special Edition PS5 (by Limited Run #108) UP6893-PPSA21381_00-0240103642659799 2024-08-01 | |||
=== To be announced === | |||
* Tomba 2 The Evil Swine Return (TBA 2025 by Limited Run Games) | |||
* Fear Effect (TBA 2025 by Limited Run Games) | |||
* Fighting Force and Fighting Force 2 (TBA 2025 by Limited Run Games) | |||
"Five PS1 games were recently announced for PS5 and PS4 with trophy support: Gex, Gex Enter the Gecko, Gex 3 Deep Cover Gecko, Clock Tower, and Tomba. All five games were announced to be using Limited Run Games' Carbon Engine, which so far has been primarily used to support older console emulation like the SNES and Sega Genesis, but has now officially revealed support for Sony's original PlayStation as well. These PS1 ports for PS5 and PS4 will use Limited Run Games' "Carbon Engine," which allows these classic titles to implement modern features like trophy support." | |||
=== Cross-gen buy on PS Store === | |||
* https://www.reddit.com/r/PS3/comments/1cscsb2/all_ps1pspps3_games_that_have_crossbuy_or_free/ | |||
* https://www.reddit.com/r/PlayStationPlus/comments/vfg39t/is_there_a_clear_list_of_which_ps1_classic_ps4ps5/ | |||
* "I have bought some of them on the PS3/PSP/PS Vita and the ones I could claim on the PS4/PS5 were Tekken 2 (which previously was not redeemable), all Syphon Filter games, all Wild Arms games, Legend of Dragoon, Ridge Racer Type 4 and Jumping Flash. Resident Evil Director's Cut is NOT redeemable. The rule of thumb is: if you can buy it on PS4/PS5 - and not only claim it through plus premium/deluxe sub, like Resident Evil 1 - they are redeemable from a previous purchase on PS3/PSP/PS Vita." | |||
== Description == | == Description == | ||
The PlayStation emulator running officially on the PlayStation 4 is called internally ps1hd. Emulation on PS4 is handled differently comparing to PS3, PSP and PS Vita. 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 | 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. | ||
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 == | ||
=== config-title.txt === | |||
{| 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 | ||
|- | |||
| --wait|| || || | |||
|- | |||
| --bios|| path || Need to match region of game, relative to sandbox root || --bios=SCPH101.bin | |||
|- | |||
| --configpath|| || || | |||
|- | |||
| --texdump|| || || | |||
|- | |||
| --texreplace|| || || | |||
|- | |- | ||
| --region|| SCEE SCEA SCEI || Image/Bios region || --region="SCEE" | | --region|| SCEE SCEA SCEI || Image/Bios region || --region="SCEE" | ||
Line 47: | Line 122: | ||
| --image|| path || game image path, sandbox root relative || "data/MyGame.bin" | | --image|| path || game image path, sandbox root relative || "data/MyGame.bin" | ||
|- | |- | ||
| --libcrypt|| CRC16 || Libcrypt magic, unknown what is really hashed. required for many PAL games || --libcrypt="0xAB34" | | --libcrypt|| "CRC16" || Libcrypt magic, unknown what is really hashed. required for many PAL games, Without it a lot of games will either crash or produce glitches || --libcrypt="0xAB34" | ||
|- | |- | ||
| --scale|| 1 , 2 , 4, auto || 1 = 1280x720, 2 = 1920x1080, 4 = 3840x2160, auto= same as ps4 video settings(?) please keep in mind that even using scale=1 can cause upscaling glitches || scale=2 | | --scale|| 1 , 2 , 4, 6, auto || 1 = 1280x720, 2 = 1920x1080, 4 = 3840x2160, auto= same as ps4 video settings(?) please keep in mind that even using scale=1 can cause upscaling glitches || scale=2 | ||
|- | |- | ||
| --antialias|| SSAA4x , MSAA4x || same as above, using this can cause visual glitches on games that scales bad || --antialias=SSAA4x | | --antialias|| off?, SSAA4x , MSAA4x || same as above, using this can cause visual glitches on games that scales bad || --antialias=SSAA4x | ||
|- | |- | ||
| -- | | --gpu-scanout-fps-override || ntsc, pal? || || --gpu-scanout-fps-override=ntsc | ||
|- | |- | ||
| -- | | --remap || ? || Remap Buttons ? || ? | ||
|- | |- | ||
| -- | | --multitap || on,off || Enables multitap for games like Crash Bash || --multitap=true | ||
|- | |||
| --metal-gear-solid || 0,1 || Specific Command for MGS1|| --metal-gear-solid=1 | |||
|- | |||
| --vram-read-frame-delay || True? False? || Speedhack?? || ? | |||
|- | |- | ||
| -- | | --sim-analog-pad || || Enable joysticks to work instead of d-pad? || --sim-analog-pad=0x2020 | ||
|- | |- | ||
| -- | | --cdrom-cmd-time || 0,100? || Can be used to fix black screens || --cdrom-cmd-time=100 | ||
|- | |- | ||
| -- | | --cdrom-max-seek || true, false || Can be used to fix black screens || --cdrom-max-seek=true | ||
|- | |- | ||
| -- | | --texrecent|| true , false || Optimize texture hashes Leading To better Performance || --texrecent=true | ||
|- | |- | ||
| -- | | --use-lopnor-spu|| 1, 0 || like this is FiX for sound || --use-lopnor-spu=1 | ||
|- | |- | ||
| -- | | --userui-settings-graphics|| 1, 0 || | ||
'''filter''' | |||
>> None,Bicubic,Lanczos,Cubic | |||
'''Anti-Aliasing''' >> FXAA,CMAA | |||
'''Upscale Factor''' >>2x,3x,4x,5x,6x Scale | |||
|| --userui-settings-graphics=1 | |||
|- | |- | ||
| -- | | --enable-user-color-adjustment || 1, 0 || it can change your brightness,contrast, gamma etc. || --enable-user-color-adjustment=1 | ||
|- | |- | ||
|} | |} | ||
=== | === 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. | |||
==== 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 !! | ! Command !! Usage !! Example !! Notes | ||
|- | |- | ||
|GetPC || | |GetPC || R3K_GetPC() || ||Return current Program counter. | ||
|- | |- | ||
|SetPC || | |SetPC || R3K_SetPC(address) || ||Set current Program counter to address. | ||
|- | |- | ||
|GetHi || | |GetHi || R3K_GetHi || ||Return Hi register value. | ||
|- | |- | ||
|SetHi || | |SetHi || R3K_SetHi(value) || ||Set Hi register value. | ||
|- | |- | ||
|GetLo || | |GetLo || R3K_GetLo || ||Return Lo register value. | ||
|- | |- | ||
|SetLo || | |SetLo || R3K_SetLo(value) || ||Set Lo register value. | ||
|- | |- | ||
|GetGpr || | |GetGpr || R3K_GetGpr(reg) || ||Return register value, require formatting like here: r3k.GetGpr(gpr.a0). | ||
|- | |- | ||
|SetGpr || | |SetGpr || R3K_SetGpr(reg, value) || ||Set register value, require formatting like here: r3k.GetGpr(gpr.a0, value). | ||
|- | |- | ||
|ReadMem8 || | |ReadMem8 || R3K_ReadMem8(address) || ||Read/return byte from address. | ||
|- | |- | ||
|ReadMem16 || | |ReadMem16 || R3K_ReadMem16(address) || ||Read/return half from address. | ||
|- | |- | ||
|ReadMem32 || | |ReadMem32 || R3K_ReadMem32(address) || ||Read/return word from address. | ||
|- | |- | ||
|ReadMemFloat || | |ReadMemFloat || R3K_ReadMemFloat(address) || ||Read/return float from address. | ||
|- | |- | ||
|ReadMemStr || | |ReadMemStr || R3K_ReadMemStr(address) || ||Read/return string from address. | ||
|- | |- | ||
|WriteMem8 || | |WriteMem8 || R3K_WriteMem8(address, value) || ||Write/set selected memory as byte to value. | ||
|- | |- | ||
|WriteMem16 || | |WriteMem16 || R3K_WriteMem16(address, value) || ||Write/set selected memory as half to value. | ||
|- | |- | ||
|WriteMem32 || | |WriteMem32 || R3K_WriteMem32(address, value) || R3K_WriteMem16(0x0006c71c,0x0900) || Write/set selected memory as word to value. | ||
|- | |- | ||
|WriteMemFloat || | |WriteMemFloat || R3K_WriteMemFloat(address, value) || ||Write/set selected memory as float to value. | ||
|- | |- | ||
|WriteMemStr || | |WriteMemStr || R3K_WriteMemStr(address, value) || ||Write/set selected memory as string to value. | ||
|- | |- | ||
|WriteMemStrZ || | |WriteMemStrZ || R3K_WriteMemStrZ(address, value) || || | ||
|- | |- | ||
|AddHook | |AddHook || R3K_AddHook(address, original opcode, function/hook) || ||Add hook into mips code. | ||
|- | |- | ||
|RemoveHook | |RemoveHook|| R3K_RemoveHook(?) || || Remove hook from mips code. | ||
|- | |- | ||
|InsnReplace || | |InsnReplace || R3K_InsnReplace(address, original opcode, replace opcode) || || similar to pcsx2 pnach, but additionally use original opcode as a check. | ||
|- | |- | ||
|FuncReplace || | |FuncReplace || R3K_FuncReplace(address, original opcode, function name) || || Hook/replace function in mips code with predefinied one. | ||
|- | |- | ||
|BurnCycles || || | |BurnCycles || R3K_BurnCycles()|| || | ||
|- | |- | ||
|FlushCache || | |FlushCache || R3K_FlushCache() || || Flush mips instruction cache. | ||
|- | |- | ||
|} | |} | ||
==== | ==== 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 !! Notes | ! Command !! Usage !! Example !! Notes | ||
|- | |- | ||
|PadRead || | |PadRead || EM_PadRead() || ||Return pad state (pushed buttons). | ||
|- | |- | ||
|PadReadLeftStick || | |PadReadLeftStick || EM_PadReadLeftStick() || ||Return pad left stick state. | ||
|- | |- | ||
|PadReadRightStick || | |PadReadRightStick || EM_PadReadRightStick() || ||Return pad right stick state. | ||
|- | |- | ||
|PadSetButtonsMode || | |PadSetButtonsMode || EM_PadSetButtonMode(value) || ||Set some pad mode, in one of official configs described as "switch Select/Start -> Touchpad/Options mode" with used value 2. | ||
|- | |- | ||
|AddVsyncHook | |AddVsyncHook || EM_AddVsyncHook(anything) || ||Add hook that trigger on every vsync, param usually will be previously prepared function. | ||
|- | |- | ||
|RemoveVsyncHook | |RemoveVsyncHook|| EM_RemoveVsyncHook()|| ||Remove hook that trigger on every vsync. | ||
|- | |- | ||
|ThrottleMax | |ThrottleMax || EM_ThrottleMax() || ||Remove framelimiter, used frequently for loadings. | ||
|- | |- | ||
|ThrottleNormal | |ThrottleNormal || EM_ThrottleNormal() || ||Set framelimiter to default game value. | ||
|- | |- | ||
|Log | |Log || EM_Log(value) || ||Print debug messages to usermode console, ex. emu.Log(string.format("Overlay: %02x", overlay)). | ||
|- | |- | ||
|GetNativeLanguage || | |GetNativeLanguage|| EM_GetNativeLanguage() || ||Return used PS4 language. | ||
|- | |- | ||
|LoadConfig | |LoadConfig||EM_LoadConfig() || || | ||
|- | |- | ||
|SaveConfig | |SaveConfig||EM_SaveConfig() || || | ||
|- | |- | ||
|LoadState | |LoadState|| EM_LoadState()|| ||Load savestate, seems to be disabled in MediEvil emu. | ||
|- | |- | ||
|SaveState | |SaveState||EM_SaveState() || ||Save savestate, seems to be disabled in MediEvil emu. | ||
|- | |- | ||
|PostEffect | |PostEffect|| EM_PostEffect() || || | ||
|- | |- | ||
|PostEffectParams || || | |PostEffectParams|| EM_PostEffectParams()|| || | ||
|- | |- | ||
|NeoMode | |NeoMode|| EM_NeoMode() || || Return 1 if PS4 PRO, 0 otherwise. | ||
|- | |- | ||
|CRC32 | |CRC32 || || || | ||
|- | |- | ||
|AddFBMapping | |AddFBMapping|| EM_AddFBMapping( , , , ) || || Add framebffer mapping, in MediEvil used with EM_AddFBMapping(768, 256, 180, 256) values. | ||
|- | |- | ||
|RemoveFBMapping | |RemoveFBMapping|| EM_RemoveFBMapping( , ) || || Remove framebffer mapping, in MediEvil used with EM_RemoveFBMapping(768, 256) values. | ||
|- | |- | ||
|Launch | |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. | ||
|- | |- | ||
|} | |} | ||
<br>'''''LUA example:''''' | |||
<pre> | |||
local patcher = function() | |||
R3K_WriteMem16(0x0006c71c,0x0900) | |||
end | |||
EM_AddVsyncHook(patcher) | |||
</pre> | |||
== Emulators == | |||
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 PlayStation 4. They have to be unpacked from a container that is downloaded from the PS Store for each specific PS1 game. The following list includes the typical usage of some of the emulators. | |||
{| 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) | ||
|- | |- | ||
| | | Syphon Filter || Most popular emulator so far and the one with the highest compatibility. It is used in PSXFPKG v0.3 as the default emulator || ? || ? | ||
|- | |||
| MediEvil || An unofficial emulator made by Sony that is very bad in terms of compatibility. || ? || ? | |||
|- | |- | ||
|} | |} | ||
== PAL Libcrypt games == | == PAL Libcrypt games == | ||
Some PAL PSX games include libcrypt protection, those are known to | |||
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 312: | Line 403: | ||
* Vagrant Story (Europe) , (France) , (Germany) | * Vagrant Story (Europe) , (France) , (Germany) | ||
* Walt Disney World Quest - Magical Racing Tour (Europe) (En,Fr,De,Es,It,Nl,Sv,No,Da) | * Walt Disney World Quest - Magical Racing Tour (Europe) (En,Fr,De,Es,It,Nl,Sv,No,Da) | ||
* Wonderworld 2: Arena Of Courage (Europe) (En,Es,Fr,De,It,Da) | |||
* 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. 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 emulator configuration. | |||
{| 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 325: | Line 417: | ||
|- | |- | ||
|Crash Team Racing (PAL) || | |Crash Team Racing (PAL) || | ||
Game will hang | Game will hang at the end of the loading screen, when trying to use a warp from the main level to any race track. | ||
|- | |||
|Final Fantasy VIII (PAL) || | |||
Game immediately hangs on a black screen. It doesn't even play any intros. | |||
|- | |- | ||
|Legacy of Kain: Soul Reaver (PAL) || | |Legacy of Kain: Soul Reaver (PAL) || | ||
Line 353: | Line 448: | ||
|V-Rally: Championship Edition 2 (PAL) || | |V-Rally: Championship Edition 2 (PAL) || | ||
The game will endlessly load on the heartbeat loading screen (with no disc activity). | The game will endlessly load on the heartbeat loading screen (with no disc activity). | ||
|- | |||
|Vagrant Story (PAL) || | |||
Will hang on the "now loading"-screen, after choosing "new game" on the main menu. | |||
|- | |||
|Wonderworld 2: Arena Of Courage (PAL) || | |||
Still hangs on the "Loading, please wait..."-screen, when you start the mission. | |||
|- | |- | ||
|Wip3out (PAL) || | |Wip3out (PAL) || | ||
Line 359: | Line 460: | ||
|} | |} | ||
* Libcrypt | * Libcrypt information was mostly taken from: https://github.com/Kippykip/SBITools#libcrypt-failed-check-causes-and-effects | ||
== | == Multi-Disc support == | ||
This needs more [[User talk:139.47.102.134|testing]] but in theory it should work as follows. | |||
=== On Real PS1 Hardware, PS2, PSP, PS Vita, PS3 === | |||
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. | |||
** If doing so, the Save File already creates a "Flag" containing Information that this Save File requires the next Disc (this is perfectly visible with Final Fantasy VIII as seen [https://i.ytimg.com/vi/xDSRMghD6Is/maxresdefault.jpg here]). | |||
*** Example: ''When Aerith dies and you fight JENOVA, the Game creates the Save File asking for CD 2 while you are still on CD 1.'' | |||
* After you saved the Game, it will immediately ask you to insert the next Disc. | |||
** The reason why this works and it's supported because in theory, you could save your Game right before you get asked to change the Disc but instead of doing so, you shut down your console and decides to play further tomorrow. | |||
*** So when loading the same Save File on next day, it will already ask in the beginning for the next Disc. | |||
**** If the next Disc is already inserted, then it will load the Game immediately. | |||
**** If not then it will ask again for switching Discs (same when inserting a wrong Disc like "Disc 3" for instance but "Disc 2" is needed). | |||
=== 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: | |||
* You create a FPKG containing '''Disc 1''' of Final Fantasy VII '''only''' (Example [[Content ID]] = CUSAFF7'''D1'''). | |||
* You play the Game normally until it asks you to save the Game before it will ask you to change the Disc. | |||
* Save the Game and close the Application. | |||
* On your PS4 [[Harddrive]], there should be ''theoretically'' the Save File somewhere (within the Game Files from the Game itself ???). | |||
* Dump the Save File and edit the "Parameters" (PARAM.SFO ???) so ''CUSAFF7'''D1''''' gets into ''CUSAFF7'''D2'''''. | |||
* Create your next FPKG containing '''Disc 2''' of Final Fantasy VII '''only''' and insert your edited Save File (Content ID = CUSAFF7'''D2''' for both the FPKG as the Save File). | |||
* 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. | |||
=== Alternative solution - Disc Merge === | |||
Alternatively ps1 discs can be merged into single bin/cue. There could be potential limitations in file size because MM:SS:FF can only go up to 99:99:99 which translates to around 870MB. For sure this will be problem for games with CDDA tracks. For now there is no confirmation that this limit apply to data only games. How hard is disc merging depends highly on game we want to use. Parasite Eve is one of easiest games to do that since second disc check is triggered only if files from disc 2 are not present on current disc, which they are since discs are merged. Game also use the same EXE and PE file on both discs, and do not use lba based tables. So merging discs is literally repacking them into single disc. But different games use different approaches, games like MGS need additional patches to few files to skip shell open checks, and lba adjustments. For now Chinese Parasite Eve fan translation is only confirmed game that works (thx 苏宇 for playing whole game to test it). | |||
== Memory mapping == | |||
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | |||
! Offset From !! Offset To !! Name !! Memory Name (PS4) | |||
|- | |||
| 0x200000000 || 0x208000000 || R3000 Memory || HeapDirectMem[0] | |||
|- | |||
|} | |||
== Converting PSX cheats for the PS4 == | |||
'''PSX cheats into a shn''' | |||
<pre> | |||
Only tested in Syphon Filter's emulator | |||
1. Get an offset [You can get them from Gamehacking.org / Duckstation / Epsxe] | |||
2. Remove the first 2 numbers from the offset | |||
3. Increase the offset by 0xEB2A0 using a hex calculator and add it to your shn | |||
</pre> | |||
'''For ps4cheater''' | |||
<pre> | |||
Only tested in Syphon filter's emulator | |||
1. Get an offset [You can get them from Gamehacking.org / Duckstation / Epsxe] | |||
2. Remove the first 2 numbers from the offset | |||
3. Increase the offset by 0x2000EB2A0 using a hex calculator and use it in ps4 cheater | |||
</pre> | |||
=== PC register script (Syphon Filter) === | |||
<br>For the usage in PS4cheater. | |||
<br>'''PSX.cht''' | |||
<pre> | |||
1.5|eboot.bin|ID:|VER:|FM:505 | |||
simple pointer|pointer|4 bytes|@A3A2B0_2_3A2B0+C4|data|4 bytes|2147848120|0|PC| | |||
</pre> | |||
=== PC register script (Syphon Filter 3) === | |||
<pre> | |||
1.5|eboot.bin|ID:|VER:01.00|FM:505 | |||
simple pointer|pointer|4 bytes|@A51220_2_51220+C4|data|4 bytes|2147752604|0|RA| | |||
simple pointer|pointer|4 bytes|@A51220_2_51220+D4|data|4 bytes|2147825396|0|PC| | |||
</pre> | |||
== TOC file layout == | |||
For multi bin images, probably requires an emulator from PS Plus. | |||
<br /> | |||
Track entry structure: | |||
{| class="wikitable" | |||
|- | |||
! Entry Nº !! Offset !! Length !! Name !! Example !! Notes | |||
|- | |||
| rowspan="10" style="background-color:#DDDDDD;" | 1 || 0x00 || 0x01 (1 byte) || '''TYPE''' || 0x41/0x01 || entry flags | |||
|- | |||
| 0x01 || 0x01 (1 byte) || '''TNO''' || 00 || Track number, usually 00, bcd | |||
|- | |||
| 0x02 || 0x01 (1 byte) || '''POINT''' || 0xA0/0xA1/0xA2/0x01/0x02/0x03/etc || bcd + special case A0-A2. | |||
|- | |||
| 0x03 || 0x01 (1 byte) || '''MIN''' || varies || absolute, bcd | |||
|- | |||
| 0x04 || 0x01 (1 byte) || '''SEC''' || varies || absolute, bcd | |||
|- | |||
| 0x05 || 0x01 (1 byte) || '''FRAME''' || varies || absolute, bcd | |||
|- | |||
| 0x06 || 0x01 (1 byte) || '''ZERO''' || 00 || always zero | |||
|- | |||
| 0x07 || 0x01 (1 byte) || '''PMIN''' || varies || bcd | |||
|- | |||
| 0x08 || 0x01 (1 byte) || '''PSEC''' || varies || bcd | |||
|- | |||
| 0x09 || 0x01 (1 byte) || '''PFRAME''' || varies || bcd | |||
|- | |||
| style="background-color:#DDDDDD;" | Up to 102 || || || || || same structure than the previous entry | |||
|} | |||
POINT indicates successive track numbers, and PMIN, PSEC and PFRAME indicate the starting time of that track.<br> | |||
POINT = A0, PMIN gives the physical track number of the first piece of data (PSEC and PFRAME are zero).<br> | |||
POINT = A1, PMIN indicates the last track on the disc<br> | |||
POINT = A2, the starting point of the lead-out track is given in PMIN, PSEC and PFRAME.<br> | |||
POINT = 01 - 99 Index number within track.<br> | |||
POINT = 00, Pause (2sec?, Also pregap?) | |||
== Folder/File layout == | |||
Example: MediEvil internal emulator. Standalone PKG can differ. | |||
<pre> | |||
├──assets | |||
│ ├──common | |||
│ │ ├──gamespec | |||
│ │ │ └──icon.png | |||
│ │ ├──localization | |||
│ │ │ ├──ar-AR.json | |||
│ │ │ ├──cs-CZ.json | |||
│ │ │ ├──da-DK.json | |||
│ │ │ ├──de-DE.json | |||
│ │ │ ├──el-GR.json | |||
│ │ │ ├──en-GB.json | |||
│ │ │ ├──en-US.json | |||
│ │ │ ├──es-ES.json | |||
│ │ │ ├──es-MX.json | |||
│ │ │ ├──fi-FI.json | |||
│ │ │ ├──fr-CA.json | |||
│ │ │ ├──fr-FR.json | |||
│ │ │ ├──hu-HU.json | |||
│ │ │ ├──id-ID.json | |||
│ │ │ ├──it-IT.json | |||
│ │ │ ├──ja-JP.json | |||
│ │ │ ├──ko-KR.json | |||
│ │ │ ├──nl-NL.json | |||
│ │ │ ├──no-NO.json | |||
│ │ │ ├──pl-PL.json | |||
│ │ │ ├──pt-BR.json | |||
│ │ │ ├──pt-PT.json | |||
│ │ │ ├──ro-RO.json | |||
│ │ │ ├──ru-RU.json | |||
│ │ │ ├──sv-SE.json | |||
│ │ │ ├──th-TH.json | |||
│ │ │ ├──tr-TR.json | |||
│ │ │ ├──uk-UA.json | |||
│ │ │ ├──vi-VN.json | |||
│ │ │ ├──zh-CHS.json | |||
│ │ │ └──zh-CHT.json | |||
│ │ ├──msdf | |||
│ │ │ └──icon.png | |||
│ │ ├──SFX | |||
│ │ │ ├──Browse.ogg | |||
│ │ │ ├──BROWSE_DOWN.ogg | |||
│ │ │ ├──Browse_UP.ogg | |||
│ │ │ ├──CloseWindow.ogg | |||
│ │ │ ├──CloseWindow2.ogg | |||
│ │ │ ├──OpenWindow.ogg | |||
│ │ │ ├──OpenWindow2.ogg | |||
│ │ │ ├──Slider.ogg | |||
│ │ │ ├──TimelineSlideDown.ogg | |||
│ │ │ └──TimelineSlideUp.ogg | |||
│ │ │ | |||
│ │ ├──arrow_left.png | |||
│ │ ├──arrow_right.png | |||
│ │ ├──checkmark.png | |||
│ │ ├──consola.ttf | |||
│ │ ├──DPad-Down.png | |||
│ │ ├──DPad-Left.png | |||
│ │ ├──DPad-Right.png | |||
│ │ ├──DPad-UP.png | |||
│ │ ├──forbidden.png | |||
│ │ ├──fpd.png | |||
│ │ ├──L1.png | |||
│ │ ├──L2.png | |||
│ │ ├──R1.png | |||
│ │ ├──R2.png | |||
│ │ ├──select.png | |||
│ │ ├──start.png | |||
│ │ ├──start_select_controls_embedded_ps4.png | |||
│ │ ├──start_select_controls_embedded_ps5.png | |||
│ │ ├──start_select_controls_ps4.png | |||
│ │ ├──start_select_controls_ps5.png | |||
│ │ ├──Touchpad.png | |||
│ │ ├──Touchpad_left.png | |||
│ │ ├──Touchpad_right.png | |||
│ │ ├──ui_ps_circle.png | |||
│ │ ├──ui_ps_cross.png | |||
│ │ ├──ui_ps_dpad_left.png | |||
│ │ ├──ui_ps_dpad_right.png | |||
│ │ ├──ui_ps_l1.png | |||
│ │ ├──ui_ps_r1.png | |||
│ │ ├──ui_ps_square.png | |||
│ │ ├──ui_ps_touchpad.png | |||
│ │ └──ui_ps_triangle.png | |||
│ │ | |||
│ └──PS1HD | |||
│ └──bios | |||
│ ├── SCPH5500.bin | |||
│ ├── SCPH5501.bin | |||
│ └── SCPH5502.bin | |||
├──conf | |||
│ └── PS1HD | |||
│ ├── dev-pc.conf | |||
│ ├── dev-ps4.conf | |||
│ ├── dev-ps5.conf | |||
│ ├── package-pc.conf | |||
│ ├── package-ps4.conf | |||
│ └── package-ps5.conf | |||
├──data | |||
│ ├── image.toc | |||
│ └── image.bin | |||
├──global | |||
│ ├──presets | |||
│ │ ├── Default.json | |||
│ │ ├── Modern.json | |||
│ │ ├── RetroClassic.json | |||
│ │ └── RetroModern.json | |||
│ └──scripts | |||
│ └──lua_include | |||
│ ├── disc-selection.lua | |||
│ └── sce-locale.lua | |||
├──sce_module | |||
│ ├── libc.prx | |||
│ ├── libSceFios2.prx | |||
│ └── libSceNpToolkit2.prx | |||
├──sce_sys | |||
│ ├── icon0.png | |||
│ ├── pic0.png | |||
│ ├── pic1.png | |||
│ ├── save_data.png | |||
│ └── param.sfo | |||
├──scripts | |||
│ ├── discswap.lua | |||
│ ├── speedup.lua | |||
│ ├── trophies.lua | |||
│ ├── patches.lua | |||
│ └── XXXXYYYYY.lua | |||
├──SIEA | |||
│ ├── config-region.txt | |||
│ ├── config-region.json | |||
│ ├── regional_icon.png | |||
│ └── app_boot.lua | |||
├──config-title.txt | |||
├──eboot.bin | |||
├──revision.conf | |||
</pre> | |||
== Emulator patches == | |||
=== Syphon Filter 3 emu === | |||
Emu build from 2023-Feb-17 | |||
=== The Legend Of Dragoon emu === | |||
Emu build from 2023-Feb-21 | |||
==== Remove dithering ==== | |||
Universal dithering removal patch, works with every single game. PS1 cheats/patches are no longer required to disable dither pattern. To apply unself self file, edit, and sign it again after that. Alternatively you can use cheat engine, offset need to be adjusted to emu base then.<br> | |||
''Replaces *and ecx, 7FFh* with *and ecx, 5FFh* to always remove dither enable bit on E1 write.'' | |||
*Emu memory offset: 0x50EA2 | |||
*Elf memory offset: 0x54EA2 | |||
Original bytes: | |||
81 E1 FF 07 00 00 | |||
Replace to: | |||
81 E1 FF 05 00 00 | |||
== See also == | |||
* 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/ | ||
* https://twitter.com/Vitt0x_Lar_YT/status/1284239865027198976 | * https://twitter.com/Vitt0x_Lar_YT/status/1284239865027198976 | ||
* https://github.com/Zcor3x/Ps1HDemu-for-Playstation-4 | * https://github.com/Zcor3x/Ps1HDemu-for-Playstation-4 | ||
* https://www.youtube.com/watch?v=04EY7huZq9M | * https://www.youtube.com/watch?v=04EY7huZq9M | ||
* For getting cheats: https://gamehacking.org/system/psx | |||
* https://github.com/Goatman13/Cue2toc | |||
* https://forums.pcsx2.net/Thread-PSOne-Dithering-OFF-patches | |||
* https://ps1hd.pages.dev | |||
{{Reverse Engineering}} | {{Reverse Engineering}} | ||
<noinclude>[[Category:Main]]</noinclude> | <noinclude> | ||
[[Category:Main]] | |||
</noinclude> |
Latest revision as of 23:09, 29 November 2024
Official games[edit | edit source]
PS1 games available on PS4 PS Store[edit | edit source]
- Dino Crisis (PS5: UP0102-PPSA07831_00-CLASSICDINO00001 or JP0102-PPSA07866_00-CLASSICDINO00001) 2024-10-15
- 2Xtreme / Street Games '97 UP9000-CUSA41399_00-SCUS945080000000 (PS5: UP9000-PPSA14435_00-SCUS945080000000 or JP9000-PPSA14437_00-SIPS600190000000) 2024-05-21 PS4 11.50
- G-Police (1997) UP9000-CUSA42756_00-SLUS005440000000 (PS5: UP9000-PPSA15806_00-SLUS005440000000 or JP9000-PPSA15808_00-SCPS100650000000) 2024-05-21 PS4 11.50
- Alone in the Dark: The New Nightmare (2001) EP4389-CUSA44781_00-SLES028010000000 or UP4389-CUSA44780_00-SLUS012010000000 (PS5: EP4389-PPSA18071_00-AITDNEWNIGHTMARE or UP4389-PPSA18070_00-AITDNEWNIGHTMARE) 2024-04-16, PS4 11.50
- MediEvil (1998) UP9000-CUSA42759_00-SCUS942270000000 (PS5: UP9000-PPSA15811_00-SCUS942270000000 or JP9000-PPSA15813_00-SCPS100810000000) 2024-04-16 PS4 11.50
- Cool Boarders (2000) UP9000-CUSA45363_00-SCUS943560000000 (PS5: UP9000-PPSA18836_00-SCUS943560000000) 2024-03-19
- Rally Cross (PS5: UP9000-PPSA14448_00-SCUS943080000000 or JP9000-PPSA14450_00-SIPS600220000000) 2024-01-16
- Grandia UP8745-CUSA43159_00-0291383562913011 or JP0184-CUSA43007_00-0451798479123793 2023-11-21
- Jet Moto UP9000-CUSA43452_00-SCUS943090000000 or JP9000-CUSA43453_00-SIPS600200000000 2023-11-21
- Jet Moto 2 / JetMoto’98 UP9000-CUSA44712_00-SCES010450000000 (PS5: UP9000-PPSA17995_00-SCES010450000000 or JP9000-PPSA17996_00-SIPS600290000000) 2024-02-20
- Kurushi™ Final: Mental Blocks / I.Q FINAL UP9000-CUSA32012_00-SCES020090000000 or JP9000-CUSA32014_00-SCPS913110000000 2023-10-17
- R4 RIDGE RACER TYPE 4® PS4 & PS5 (1998) UP0700-CUSA33746_00-SLUS007970000000 or JP0700-CUSA33744_00-SLPS018000000000 2023-03-21 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners
- TEKKEN2 PS4 & PS5 UP0700-CUSA33750_00-TEKKEN2000000000 or JP0700-CUSA33748_00-TEKKEN2000000000 (PS5: UP0700-PPSA07703_00-SLUS002130000000 or HP0700-PPSA07702_00-SLUS002130000000) 2022-06-13
- Mr. Driller PS4 & PS5 UP0700-CUSA33766_00-MRDRILLER0000000 or JP0700-CUSA33764_00-MRDRILLER0000000 2022-06-13
- Twisted Metal (1995) UP9000-CUSA43359_00-SCUS943040000000 or JP9000-CUSA43360_00-SIPS600070000000 (PS5: UP9000-PPSA16427_00-SCUS943040000000 or JP9000-PPSA16428_00-SIPS600070000000) 2023-07-18
- Twisted Metal 2 / Twisted Metal EX UP9000-CUSA43361_00-SCUS943060000000 or JP9000-CUSA43362_00-SIPS600210000000 (PS5: UP9000-PPSA16429_00-SCUS943060000000 or JP9000-PPSA16430_00-SIPS600210000000) 2023-07-18
- Herc's Adventures UP1082-CUSA41355_00-0759221165223042 or JP1780-CUSA41630_00-0391043783358035 2023-06-20
- Hot Shots Golf UP9000-CUSA32006_00-SCUS941880000000 or JP9000-CUSA32008_00-SCPS100420000000 2022-06-13
- Hot Shots Golf 2 UP9000-CUSA32473_00-SCUS944760000000 or JP9000-CUSA32475_00-SCPS911970000000 2023-01-17
- STAR WARS Rebel Assault II - The Hidden Empire UP1082-CUSA33312_00-SLUS003810000000 or EP1006-CUSA33313_00-SLES006540000000 or JP1780-CUSA33568_00-SLPS006380000000 (PS5: UP1082-PPSA07366_00-5997104624035590 or JP1780-PPSA07526_00-0763020610695754) 2024-04-16 PS4 11.50
- STAR WARS Episode I - The Phantom Menace (PS5: UP1082-PPSA07336_00-6684300313937060 or JP1780-PPSA07524_00-4446476017525841) 2024-01-16
- STAR WARS Demolition UP1082-CUSA33310_00-9257364461708370 2023-01-17
- Ape Escape UP9000-CUSA31964_00-SCUS944230000000 or JP9000-CUSA31966_00-SCPS100910000000 2022-06-13
- Syphon Filter UP9000-CUSA31967_00-SCUS942400000000 or JP9000-CUSA31969_00-SLPS022160000000 2022-06-13 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners
- Syphon Filter 2 UP9000-CUSA32470_00-SCUS944510000000 2022-09-20 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners
- Syphon Filter 3 UP9000-CUSA36095_00-SCUS946400000000 2023-01-17 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners
- Disney•Pixar Buzz Lightyear of Star Command (PS5: UP1082-PPSA14381_00-0570380917000461) 2023-12-19
- Disney•Pixar Toy Story 2: Buzz Lightyear to the Rescue! UP1082-CUSA33334_00-6265507718650825 2022-06-13 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners
- Resident Evil Director’s Cut (1997) UP0102-CUSA33877_00-CLASSICREDC00001 2022-06-13
- Jumping Flash! UP9000-CUSA32017_00-SCUS941030000000 or JP9000-CUSA32020_00-SCPM850010000000 2022-06-13 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners
- Wild Arms UP9000-CUSA32009_00-SCUS946080000000 or JP9000-CUSA32011_00-SCPS100280000000 2022-06-13 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners
- Wild Arms 2 UP9000-CUSA34855_00-SCUS944840000000 or JP9000-CUSA34857_00-SCPS100890000000 2023-02-21 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners
- Harvest Moon: Back to Nature UP1023-CUSA34071_00-3457003887927414 or JP0507-CUSA34069_00-4859501566917590 2023-02-21
- The Legend of Dragoon (1999) UP9000-CUSA32477_00-SCUS944910000000 or JP9000-CUSA32479_00-SCPS101190000000 2023-02-21 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners
- Oddworld: Abe's Exoddus (PS1 Emulation) UP4134-CUSA34001_00-9029543245541238 2022-12-20
- Oddworld: Abe's Oddysee (PS1 Emulation) UP4134-CUSA33999_00-3720818447088678 2022-06-13 Free PS4/PS5 version for PS3/PSP/PS Vita PSone Classics owners
- Worms [PS1 Emulation] UP4064-CUSA33244_00-SLUS003360000000 or EP4064-CUSA33243_00-SLES001190000000 2023-06-20
- Worms Pinball [PS1 Emulation] UP4064-CUSA43205_00-SLES004830000000 (PS5: UP4064-PPSA16239_00-0865341241660737) 2024-05-21 PS4 11.50
- Worms World Party [PS1 Emulation] UP4064-CUSA33248_00-SLUS014480000000 or EP4064-CUSA33247_00-SLES038040000000 2022-06-13
- Worms Armageddon [PS1 Emulation] UP4064-CUSA33246_00-SLUS008880000000 or EP4064-CUSA33245_00-SLES022170000000 2022-06-13
- I.Q Intelligent Qube UP9000-CUSA32015_00-SCUS941810000000 or JP9000-CUSA32018_00-SCUS941810000000 2022-06-13
PS1 games available on PS4 Bluray Disc[edit | edit source]
No PS1 Classic game is available on PS4 Bluray Disc, maybe because producers like Limited Run Games thought it would be a waste to store less than 1 GB on a 25 GB Bluray Disc.
PS1 remaster games available on PS4 PS Store[edit | edit source]
- Clock Tower: Rewind 2024-10-29 "Play Original mode to experience Clock Tower as it was when initially released in 1995, or play Rewind mode with extra content and improvements."
- GRANDIA HD Collection (contains Grandia HD Remaster and Grandia 2 HD Remaster) UP8299-CUSA43589_00-0792833251161643 2024-03-26
- MediEvil HD UP9000-CUSA11227_00-MEDIEVILHD000001 or EP9000-CUSA12982_00-MEDIEVILHD000001 PS4 6.72 2019-10-24
- Tomb Raider: Definitive Edition (in Tomb Raider: Definitive Survivor Trilogy) UP0082-CUSA27687_00-4584232154698924 2021-03-18
- Tomb Raider I-III Remastered (PS5: UP1032-PPSA16901_00-TOMBRAIDER123224) 2024-02-14
- Tomb Raider: The Last Revelation (in Tomb Raider IV-VI Remastered PS4 & PS5) (PS5: UP1032-PPSA18154_00-TOMBRAIDER456225) 2025-02-14
- Tomb Raider: Chronicles (in Tomb Raider IV-VI Remastered PS4 & PS5) (PS5: UP1032-PPSA18154_00-TOMBRAIDER456225) 2025-02-14
PS1 remaster games available on PS5 PS Store[edit | edit source]
- Clock Tower: Rewind UP2053-PPSA21337_00-CLOCKTOWERPS5USA 2024-10-29 "Play Original mode to experience Clock Tower as it was when initially released in 1995, or play Rewind mode with extra content and improvements."
- Legend of Mana UP0082-CUSA24495_00-LOMPS4NA00000001 2021-06-24
- Tomba! Special Edition 2024-08-01
PS1 remaster games available on PS4 Bluray Disc[edit | edit source]
- Clock Tower: Rewind PS4 (Limited Run #560) 2024-10-29 "Play Original mode to experience Clock Tower as it was when initially released in 1995, or play Rewind mode with extra content and improvements."
- GRANDIA HD Collection (Limited Run Games #544) (contains Grandia HD Remaster and Grandia 2 HD Remaster) UP8299-CUSA43589_00-0792833251161643 2024-03-26
- MediEvil HD UP9000-CUSA11227_00-MEDIEVILHD000001 or EP9000-CUSA12982_00-MEDIEVILHD000001 PS4 6.72
- Tomb Raider: Definitive Edition (in Tomb Raider: Definitive Survivor Trilogy) UP0082-CUSA27687_00-4584232154698924
PS1 remaster games available on PS5 Bluray Disc[edit | edit source]
- Clock Tower: Rewind PS5 (by Limited Run #105) UP2053-PPSA21337_00-CLOCKTOWERPS5USA 2024-10-29 "Play Original mode to experience Clock Tower as it was when initially released in 1995, or play Rewind mode with extra content and improvements." https://store.playstation.com/en-us/concept/10010305 Notice: PS1 Clock Tower is not the original game.
- The first game in the series was Clock Tower (1995) - first released on the SNES, later ported to PS1, PC and WonderSwan, but only ever released in Japan.
- The PS1 game is the second game, and was called Clock Tower 2 in Japan but just Clock Tower everywhere else, even though it is a sequel and not a port of the original.
- Clock Tower 2 on the PS1 is the third game.
- Clock Tower 3 on the PS2 is the fourth game.
- Gex Trilogy (by Limited Run, includes Gex, Gex: Enter the Gecko & Gex 3: Deep Cover Gecko) — but these aren't isn't just re-runs! This Carbon Engine collection includes extras and quality of life improvements to bring Gex back into prime time!
- Tomba! Special Edition PS5 (by Limited Run #108) UP6893-PPSA21381_00-0240103642659799 2024-08-01
To be announced[edit | edit source]
- Tomba 2 The Evil Swine Return (TBA 2025 by Limited Run Games)
- Fear Effect (TBA 2025 by Limited Run Games)
- Fighting Force and Fighting Force 2 (TBA 2025 by Limited Run Games)
"Five PS1 games were recently announced for PS5 and PS4 with trophy support: Gex, Gex Enter the Gecko, Gex 3 Deep Cover Gecko, Clock Tower, and Tomba. All five games were announced to be using Limited Run Games' Carbon Engine, which so far has been primarily used to support older console emulation like the SNES and Sega Genesis, but has now officially revealed support for Sony's original PlayStation as well. These PS1 ports for PS5 and PS4 will use Limited Run Games' "Carbon Engine," which allows these classic titles to implement modern features like trophy support."
Cross-gen buy on PS Store[edit | edit source]
- https://www.reddit.com/r/PS3/comments/1cscsb2/all_ps1pspps3_games_that_have_crossbuy_or_free/
- https://www.reddit.com/r/PlayStationPlus/comments/vfg39t/is_there_a_clear_list_of_which_ps1_classic_ps4ps5/
- "I have bought some of them on the PS3/PSP/PS Vita and the ones I could claim on the PS4/PS5 were Tekken 2 (which previously was not redeemable), all Syphon Filter games, all Wild Arms games, Legend of Dragoon, Ridge Racer Type 4 and Jumping Flash. Resident Evil Director's Cut is NOT redeemable. The rule of thumb is: if you can buy it on PS4/PS5 - and not only claim it through plus premium/deluxe sub, like Resident Evil 1 - they are redeemable from a previous purchase on PS3/PSP/PS Vita."
Description[edit | edit source]
The PlayStation emulator running officially on the PlayStation 4 is called internally ps1hd. Emulation on PS4 is handled differently comparing to PS3, PSP and PS Vita. 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 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[edit | edit source]
config-title.txt[edit | edit source]
Command | Values | Notes | Usage |
---|---|---|---|
--wait | |||
--bios | path | Need to match region of game, relative to sandbox root | --bios=SCPH101.bin |
--configpath | |||
--texdump | |||
--texreplace | |||
--region | SCEE SCEA SCEI | Image/Bios region | --region="SCEE" |
--image | path | game image path, sandbox root relative | "data/MyGame.bin" |
--libcrypt | "CRC16" | Libcrypt magic, unknown what is really hashed. required for many PAL games, Without it a lot of games will either crash or produce glitches | --libcrypt="0xAB34" |
--scale | 1 , 2 , 4, 6, auto | 1 = 1280x720, 2 = 1920x1080, 4 = 3840x2160, auto= same as ps4 video settings(?) please keep in mind that even using scale=1 can cause upscaling glitches | scale=2 |
--antialias | off?, SSAA4x , MSAA4x | same as above, using this can cause visual glitches on games that scales bad | --antialias=SSAA4x |
--gpu-scanout-fps-override | ntsc, pal? | --gpu-scanout-fps-override=ntsc | |
--remap | ? | Remap Buttons ? | ? |
--multitap | on,off | Enables multitap for games like Crash Bash | --multitap=true |
--metal-gear-solid | 0,1 | Specific Command for MGS1 | --metal-gear-solid=1 |
--vram-read-frame-delay | True? False? | Speedhack?? | ? |
--sim-analog-pad | Enable joysticks to work instead of d-pad? | --sim-analog-pad=0x2020 | |
--cdrom-cmd-time | 0,100? | Can be used to fix black screens | --cdrom-cmd-time=100 |
--cdrom-max-seek | true, false | Can be used to fix black screens | --cdrom-max-seek=true |
--texrecent | true , false | Optimize texture hashes Leading To better Performance | --texrecent=true |
--use-lopnor-spu | 1, 0 | like this is FiX for sound | --use-lopnor-spu=1 |
--userui-settings-graphics | 1, 0 |
filter >> None,Bicubic,Lanczos,Cubic Anti-Aliasing >> FXAA,CMAA Upscale Factor >>2x,3x,4x,5x,6x Scale |
--userui-settings-graphics=1 |
--enable-user-color-adjustment | 1, 0 | it can change your brightness,contrast, gamma etc. | --enable-user-color-adjustment=1 |
XXXXYYYYY.LUA[edit | edit source]
scripts/XXXXYYYYY.LUA
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[edit | edit source]
Command | Usage | Example | Notes |
---|---|---|---|
GetPC | R3K_GetPC() | Return current Program counter. | |
SetPC | R3K_SetPC(address) | Set current Program counter to address. | |
GetHi | R3K_GetHi | Return Hi register value. | |
SetHi | R3K_SetHi(value) | Set Hi register value. | |
GetLo | R3K_GetLo | Return Lo register value. | |
SetLo | R3K_SetLo(value) | Set Lo register value. | |
GetGpr | R3K_GetGpr(reg) | Return register value, require formatting like here: r3k.GetGpr(gpr.a0). | |
SetGpr | R3K_SetGpr(reg, value) | Set register value, require formatting like here: r3k.GetGpr(gpr.a0, value). | |
ReadMem8 | R3K_ReadMem8(address) | Read/return byte from address. | |
ReadMem16 | R3K_ReadMem16(address) | Read/return half from address. | |
ReadMem32 | R3K_ReadMem32(address) | Read/return word from address. | |
ReadMemFloat | R3K_ReadMemFloat(address) | Read/return float from address. | |
ReadMemStr | R3K_ReadMemStr(address) | Read/return string from address. | |
WriteMem8 | R3K_WriteMem8(address, value) | Write/set selected memory as byte to value. | |
WriteMem16 | R3K_WriteMem16(address, value) | Write/set selected memory as half to value. | |
WriteMem32 | R3K_WriteMem32(address, value) | R3K_WriteMem16(0x0006c71c,0x0900) | Write/set selected memory as word to value. |
WriteMemFloat | R3K_WriteMemFloat(address, value) | Write/set selected memory as float to value. | |
WriteMemStr | R3K_WriteMemStr(address, value) | Write/set selected memory as string to value. | |
WriteMemStrZ | R3K_WriteMemStrZ(address, value) | ||
AddHook | R3K_AddHook(address, original opcode, function/hook) | Add hook into mips code. | |
RemoveHook | R3K_RemoveHook(?) | Remove hook from mips code. | |
InsnReplace | R3K_InsnReplace(address, original opcode, replace opcode) | similar to pcsx2 pnach, but additionally use original opcode as a check. | |
FuncReplace | R3K_FuncReplace(address, original opcode, function name) | Hook/replace function in mips code with predefinied one. | |
BurnCycles | R3K_BurnCycles() | ||
FlushCache | R3K_FlushCache() | Flush mips instruction cache. |
Emulator commands[edit | edit source]
Command | Usage | Example | Notes |
---|---|---|---|
PadRead | EM_PadRead() | Return pad state (pushed buttons). | |
PadReadLeftStick | EM_PadReadLeftStick() | Return pad left stick state. | |
PadReadRightStick | EM_PadReadRightStick() | Return pad right stick state. | |
PadSetButtonsMode | EM_PadSetButtonMode(value) | Set some pad mode, in one of official configs described as "switch Select/Start -> Touchpad/Options mode" with used value 2. | |
AddVsyncHook | EM_AddVsyncHook(anything) | Add hook that trigger on every vsync, param usually will be previously prepared function. | |
RemoveVsyncHook | EM_RemoveVsyncHook() | Remove hook that trigger on every vsync. | |
ThrottleMax | EM_ThrottleMax() | Remove framelimiter, used frequently for loadings. | |
ThrottleNormal | EM_ThrottleNormal() | Set framelimiter to default game value. | |
Log | EM_Log(value) | Print debug messages to usermode console, ex. emu.Log(string.format("Overlay: %02x", overlay)). | |
GetNativeLanguage | EM_GetNativeLanguage() | Return used PS4 language. | |
LoadConfig | EM_LoadConfig() | ||
SaveConfig | EM_SaveConfig() | ||
LoadState | EM_LoadState() | Load savestate, seems to be disabled in MediEvil emu. | |
SaveState | EM_SaveState() | Save savestate, seems to be disabled in MediEvil emu. | |
PostEffect | EM_PostEffect() | ||
PostEffectParams | EM_PostEffectParams() | ||
NeoMode | EM_NeoMode() | Return 1 if PS4 PRO, 0 otherwise. | |
CRC32 | |||
AddFBMapping | EM_AddFBMapping( , , , ) | Add framebffer mapping, in MediEvil used with EM_AddFBMapping(768, 256, 180, 256) values. | |
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. |
LUA example:
local patcher = function() R3K_WriteMem16(0x0006c71c,0x0900) end EM_AddVsyncHook(patcher)
Emulators[edit | edit source]
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 PlayStation 4. They have to be unpacked from a container that is downloaded from the PS Store for each specific PS1 game. The following list includes the typical usage of some of the emulators.
Emulator | Usage | API Version | Similar emulators (Usage) |
---|---|---|---|
Syphon Filter | Most popular emulator so far and the one with the highest compatibility. It is used in PSXFPKG v0.3 as the default emulator | ? | ? |
MediEvil | An unofficial emulator made by Sony that is very bad in terms of compatibility. | ? | ? |
PAL Libcrypt games[edit | edit source]
Some PAL PSX games include libcrypt protection, those are known to cause issues for emulators.
List[edit | edit source]
- Actua Ice Hockey 2 (Europe)
- Anstoss - Premier Manager (Germany)
- Ape Escape (Europe) , (France) , (Germany) , (Italy)
- Ape Escape - La Invasion de los Monos (Spain)
- Asterix - Mega Madness (Europe) (En,Fr,De,Es,It,Nl)
- Barbie - Aventure Equestre (France)
- Barbie - Race & Ride (Europe) , (Germany) , (Italy) , (Spain)
- Barbie - Sports Extreme (France)
- Barbie - Super Sports (Germany) , (Europe) , (Italy) , (Spain)
- BDFL Manager 2001 (Germany)
- BDFL Manager 2002 (Germany)
- Canal+ Premier Manager (Europe) (Fr,Es,It)
- Crash Bash (Europe) (En,Fr,De,Es,It)
- CTR - Crash Team Racing (Europe) (En,Fr,De,Es,It,Nl) (EDC)
- CTR - Crash Team Racing (Europe) (En,Fr,De,Es,It,Nl) (No EDC)
- Dino Crisis (Europe) , (France) , (Germany) , (Italy) , (Spain)
- Disney Fais Ton Histoire! - Mulan (France)
- Disney Libro Animato Creativo - Mulan (Italy)
- Disney's Tarzan (Europe) , (Netherlands) , (Sweden) , (Germany) , (Italy) , (France) , (Spain)
- Disney's 102 Dalmatians - Puppies to the Rescue (Europe) (Fr,De,Es,It,Nl)
- Disney's 102 Dalmatians - Puppies to the Rescue (Europe)
- Disney's Aventura Interactiva - Mulan (Spain)
- Disney's Story Studio - Mulan (Europe)
- Disney's Verhalenstudio - Mulan (Netherlands)
- Disneys Interaktive Abenteuer - Mulan (Germany)
- EA Sports Superbike 2000 (Europe) (En,Fr,De,Es,It,Sv)
- Eagle One - Harrier Attack (Europe) (En,Fr,De,Es,It)
- Esto es Futbol (Spain)
- F.A. Premier League Football Manager 2001, The (Europe)
- F1 2000 (Europe) (En,Fr,De,Nl)
- F1 2000 (Italy)
- Final Fantasy IX (Europe) , (France) , (Germany) , (Italy) , (Spain) , (Disc 1)
- Final Fantasy IX (Europe) , (France) , (Germany) , (Italy) , (Spain) , (Disc 2)
- Final Fantasy IX (Europe) , (France) , (Germany) , (Italy) , (Spain) , (Disc 3)
- Final Fantasy IX (Europe) , (France) , (Germany) , (Italy) , (Spain) , (Disc 4)
- Final Fantasy VIII (Europe, Australia) , (France) , (Germany) , (Italy) , (Spain) , (Disc 1)
- Final Fantasy VIII (Europe, Australia) , (France) , (Germany) , (Italy) , (Spain) , (Disc 2)
- Final Fantasy VIII (Europe, Australia) , (France) , (Germany) , (Italy) , (Spain) , (Disc 3)
- Final Fantasy VIII (Europe, Australia) , (France) , (Germany) , (Italy) , (Spain) , (Disc 4)
- Football Manager Campionato 2001 (Italy)
- Formula One 99 (Europe) (En,Es,Fi)
- Formula One 99 (Europe) (En,Fr,De,It)
- Frontschweine (Germany)
- Fussball Live (Germany)
- Fussball Manager 2001 (Germany)
- Galerians (Europe) , (France) , (Germany) , (Disc 1)
- Galerians (Europe) , (France) , (Germany) , (Disc 2)
- Galerians (Europe) , (France) , (Germany) , (Disc 3)
- Gekido - Urban Fighters (Europe) (En,Fr,De,Es,It)
- Hogs of War (Europe)
- Italian Job, The (Europe) , (Germany)
- Jackie Chan Stuntmaster (Europe)
- Le Mans 24 Hours (Europe) (En,Fr,De,Es,It,Pt)
- Legacy of Kain - Soul Reaver (Europe) , (France) , (Germany) , (Italy) , (Spain)
- Les Cochons de Guerre (France)
- LMA Manager 2001 (Europe)
- LMA Manager 2002 (Europe)
- Lucky Luke - Western Fever (Europe) (En,Fr,De,Es,It,Nl)
- MediEvil (Europe) , (France) , (Germany) , (Italy) , (Spain)
- MediEvil 2 (Europe) (En,Fr,De)
- MediEvil 2 (Europe) (Es,It,Pt)
- MediEvil 2 (Russia)
- Men in Black - The Series - Crashdown (Europe) , (France) , (Germany) , (Italy) , (Spain)
- Michelin Rally Masters - Race of Champions (Europe) (En,De,Sv)
- Michelin Rally Masters - Race of Champions (Europe) (Fr,Es,It)
- Mike Tyson Boxing (Europe) (En,Fr,De,Es,It)
- Mission - Impossible (Europe) (En,Fr,De,Es,It)
- MoHo (Europe) (En,Fr,De,Es,It)
- Monde des Bleus, Le - Le jeu officiel de l'equipe de France (France)
- N-Gen Racing (Europe) (En,Fr,De,Es,It)
- Need for Speed - Porsche 2000 (Europe) (En,De,Sv)
- Need for Speed - Porsche 2000 (Europe) (Fr,Es,It)
- Parasite Eve II (Europe) , (France) , (Germany) , (Italy) , (Spain) , (Disc 1)
- Parasite Eve II (Europe) , (France) , (Germany) , (Italy) , (Spain) , (Disc 2)
- PGA European Tour Golf (Europe) (En,De)
- Premier Manager 2000 (Europe)
- Prince Naseem Boxing (Europe) (En,Fr,De,Es,It)
- Radikal Bikers (Europe) (En,Fr,De,Es,It)
- RC Revenge (Europe) (En,Fr,De,Es)
- Resident Evil 3 - Nemesis (Europe) , (France) , (Germany) , (Ireland) , (Italy) , (Spain)
- Ronaldo V-Football (Europe) (De,Es,It,Pt)
- Ronaldo V-Football (Europe) (En,Fr,Nl,Sv)
- SaGa Frontier 2 (Europe) , (France) , (Germany)
- SnoCross Championship Racing (Europe) (En,Fr,De,Es,It)
- Space Debris (Europe) , (France) , (Germany) , (Italy)
- Speed Freaks (Europe)
- Spyro - Year of the Dragon (Europe) (En,Fr,De,Es,It) (v1.0) , (v1.1)
- Spyro 2 - Gateway to Glimmer (Europe) (En,Fr,De,Es,It)
- Sydney 2000 (Europe) , (France) , (Germany) , (Spain)
- TechnoMage - De Terugkeer der Eeuwigheid (Netherlands)
- TechnoMage - Die Rueckkehr der Ewigkeit (Germany)
- TechnoMage - En Quete de L'Eternite (France)
- TechnoMage - Return of Eternity (Europe)
- Theme Park World (Europe) (En,Fr,De,Es,It,Nl,Sv)
- This Is Football (Europe) (Fr,Nl)
- This Is Football (Europe) , (Italy)
- TOCA World Touring Cars (Europe) (En,Fr,De)
- TOCA World Touring Cars (Europe) (Es,It)
- UEFA Euro 2000 (Europe) , (France) , (Germany) , (Italy)
- UEFA Striker (Europe) (En,Fr,De,Es,It,Nl)
- Urban Chaos (Europe) (En,Es,It)
- Urban Chaos (Germany)
- V-Rally - Championship Edition 2 (Europe) (En,Fr,De)
- Vagrant Story (Europe) , (France) , (Germany)
- Walt Disney World Quest - Magical Racing Tour (Europe) (En,Fr,De,Es,It,Nl,Sv,No,Da)
- Wonderworld 2: Arena Of Courage (Europe) (En,Es,Fr,De,It,Da)
- Wip3out (Europe) (En,Fr,De,Es,It)
Known Issues[edit | edit source]
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 emulator configuration.
Game | Behavior |
---|---|
Ape Escape (PAL) |
Main menu navigation will be completely disabled, making you unable to start the game. |
Crash Team Racing (PAL) |
Game will hang at the end of the loading screen, when trying to use a warp from the main level to any race track. |
Final Fantasy VIII (PAL) |
Game immediately hangs on a black screen. It doesn't even play any intros. |
Legacy of Kain: Soul Reaver (PAL) |
The game will hang when you're introduced with the combat tutorial when the camera pans to show the enemies. |
Lucky Luke: Western Fever (PAL) |
The game stops when you get to the Mexican guy blocking the bridge, he just won't move from there, ever. Even when you complete the quest. The game also has anti-cracking protection where the game will block a path with a fallen tree + maybe more. |
MediEvil (PAL) |
Will have a disc error icon upon loading The Hilltop Mausoleum. Interesting to note this was actually the FIRST game to use LibCrypt. |
MediEvil 2 (PAL) |
Will also have the same disc error icon as above, except upon loading Kensington. |
PGA European Tour Golf (PAL) |
In the third hole of the first tournament or by selecting some holes, the game will get stuck in "demo" mode (and will not you play anything). |
Resident Evil 3: Nemesis (PAL) |
Will hang at the "Game contains violence and gore" screen. |
Spyro 3: Year of the Dragon (PAL) |
Interesting case for this one, the game will eventually randomly delete eggs, reset progress with unlocked characters, remove sheep in boss battles, change the language and even tell you off for playing a "hacked copy" + more. Interesting to note that the game also detected early LibCrypt knockout PPF patches back when the game was first released as it had checksum checks throughout the game, which caused the same effects above. The US platinum release only has anti mod detection (not libcrypt) and will do the above effects if it realises it's been modified. The original US release appears to not have any protection. |
This is Football (PAL) |
Hangs on the loading screen going ingame. |
V-Rally: Championship Edition 2 (PAL) |
The game will endlessly load on the heartbeat loading screen (with no disc activity). |
Vagrant Story (PAL) |
Will hang on the "now loading"-screen, after choosing "new game" on the main menu. |
Wonderworld 2: Arena Of Courage (PAL) |
Still hangs on the "Loading, please wait..."-screen, when you start the mission. |
Wip3out (PAL) |
The game will freeze when passing the finish line. |
- Libcrypt information was mostly taken from: https://github.com/Kippykip/SBITools#libcrypt-failed-check-causes-and-effects
Multi-Disc support[edit | edit source]
This needs more testing but in theory it should work as follows.
On Real PS1 Hardware, PS2, PSP, PS Vita, PS3[edit | edit source]
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.
- If doing so, the Save File already creates a "Flag" containing Information that this Save File requires the next Disc (this is perfectly visible with Final Fantasy VIII as seen here).
- Example: When Aerith dies and you fight JENOVA, the Game creates the Save File asking for CD 2 while you are still on CD 1.
- If doing so, the Save File already creates a "Flag" containing Information that this Save File requires the next Disc (this is perfectly visible with Final Fantasy VIII as seen here).
- After you saved the Game, it will immediately ask you to insert the next Disc.
- The reason why this works and it's supported because in theory, you could save your Game right before you get asked to change the Disc but instead of doing so, you shut down your console and decides to play further tomorrow.
- So when loading the same Save File on next day, it will already ask in the beginning for the next Disc.
- If the next Disc is already inserted, then it will load the Game immediately.
- If not then it will ask again for switching Discs (same when inserting a wrong Disc like "Disc 3" for instance but "Disc 2" is needed).
- So when loading the same Save File on next day, it will already ask in the beginning for the next Disc.
- The reason why this works and it's supported because in theory, you could save your Game right before you get asked to change the Disc but instead of doing so, you shut down your console and decides to play further tomorrow.
So how to do this on a PS4?[edit | edit source]
Since as mentioned above the problematic we have is that every PKG contains not only the Game as an Image-File, but also the 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 = CUSAFF7D1).
- You play the Game normally until it asks you to save the Game before it will ask you to change the Disc.
- Save the Game and close the Application.
- On your PS4 Harddrive, there should be theoretically the Save File somewhere (within the Game Files from the Game itself ???).
- Dump the Save File and edit the "Parameters" (PARAM.SFO ???) so CUSAFF7D1 gets into CUSAFF7D2.
- Create your next FPKG containing Disc 2 of Final Fantasy VII only and insert your edited Save File (Content ID = CUSAFF7D2 for both the FPKG as the Save File).
- 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.
Alternative solution - Disc Merge[edit | edit source]
Alternatively ps1 discs can be merged into single bin/cue. There could be potential limitations in file size because MM:SS:FF can only go up to 99:99:99 which translates to around 870MB. For sure this will be problem for games with CDDA tracks. For now there is no confirmation that this limit apply to data only games. How hard is disc merging depends highly on game we want to use. Parasite Eve is one of easiest games to do that since second disc check is triggered only if files from disc 2 are not present on current disc, which they are since discs are merged. Game also use the same EXE and PE file on both discs, and do not use lba based tables. So merging discs is literally repacking them into single disc. But different games use different approaches, games like MGS need additional patches to few files to skip shell open checks, and lba adjustments. For now Chinese Parasite Eve fan translation is only confirmed game that works (thx 苏宇 for playing whole game to test it).
Memory mapping[edit | edit source]
Offset From | Offset To | Name | Memory Name (PS4) |
---|---|---|---|
0x200000000 | 0x208000000 | R3000 Memory | HeapDirectMem[0] |
Converting PSX cheats for the PS4[edit | edit source]
PSX cheats into a shn
Only tested in Syphon Filter's emulator 1. Get an offset [You can get them from Gamehacking.org / Duckstation / Epsxe] 2. Remove the first 2 numbers from the offset 3. Increase the offset by 0xEB2A0 using a hex calculator and add it to your shn
For ps4cheater
Only tested in Syphon filter's emulator 1. Get an offset [You can get them from Gamehacking.org / Duckstation / Epsxe] 2. Remove the first 2 numbers from the offset 3. Increase the offset by 0x2000EB2A0 using a hex calculator and use it in ps4 cheater
PC register script (Syphon Filter)[edit | edit source]
For the usage in PS4cheater.
PSX.cht
1.5|eboot.bin|ID:|VER:|FM:505 simple pointer|pointer|4 bytes|@A3A2B0_2_3A2B0+C4|data|4 bytes|2147848120|0|PC|
PC register script (Syphon Filter 3)[edit | edit source]
1.5|eboot.bin|ID:|VER:01.00|FM:505 simple pointer|pointer|4 bytes|@A51220_2_51220+C4|data|4 bytes|2147752604|0|RA| simple pointer|pointer|4 bytes|@A51220_2_51220+D4|data|4 bytes|2147825396|0|PC|
TOC file layout[edit | edit source]
For multi bin images, probably requires an emulator from PS Plus.
Track entry structure:
Entry Nº | Offset | Length | Name | Example | Notes |
---|---|---|---|---|---|
1 | 0x00 | 0x01 (1 byte) | TYPE | 0x41/0x01 | entry flags |
0x01 | 0x01 (1 byte) | TNO | 00 | Track number, usually 00, bcd | |
0x02 | 0x01 (1 byte) | POINT | 0xA0/0xA1/0xA2/0x01/0x02/0x03/etc | bcd + special case A0-A2. | |
0x03 | 0x01 (1 byte) | MIN | varies | absolute, bcd | |
0x04 | 0x01 (1 byte) | SEC | varies | absolute, bcd | |
0x05 | 0x01 (1 byte) | FRAME | varies | absolute, bcd | |
0x06 | 0x01 (1 byte) | ZERO | 00 | always zero | |
0x07 | 0x01 (1 byte) | PMIN | varies | bcd | |
0x08 | 0x01 (1 byte) | PSEC | varies | bcd | |
0x09 | 0x01 (1 byte) | PFRAME | varies | bcd | |
Up to 102 | same structure than the previous entry |
POINT indicates successive track numbers, and PMIN, PSEC and PFRAME indicate the starting time of that track.
POINT = A0, PMIN gives the physical track number of the first piece of data (PSEC and PFRAME are zero).
POINT = A1, PMIN indicates the last track on the disc
POINT = A2, the starting point of the lead-out track is given in PMIN, PSEC and PFRAME.
POINT = 01 - 99 Index number within track.
POINT = 00, Pause (2sec?, Also pregap?)
Folder/File layout[edit | edit source]
Example: MediEvil internal emulator. Standalone PKG can differ.
├──assets │ ├──common │ │ ├──gamespec │ │ │ └──icon.png │ │ ├──localization │ │ │ ├──ar-AR.json │ │ │ ├──cs-CZ.json │ │ │ ├──da-DK.json │ │ │ ├──de-DE.json │ │ │ ├──el-GR.json │ │ │ ├──en-GB.json │ │ │ ├──en-US.json │ │ │ ├──es-ES.json │ │ │ ├──es-MX.json │ │ │ ├──fi-FI.json │ │ │ ├──fr-CA.json │ │ │ ├──fr-FR.json │ │ │ ├──hu-HU.json │ │ │ ├──id-ID.json │ │ │ ├──it-IT.json │ │ │ ├──ja-JP.json │ │ │ ├──ko-KR.json │ │ │ ├──nl-NL.json │ │ │ ├──no-NO.json │ │ │ ├──pl-PL.json │ │ │ ├──pt-BR.json │ │ │ ├──pt-PT.json │ │ │ ├──ro-RO.json │ │ │ ├──ru-RU.json │ │ │ ├──sv-SE.json │ │ │ ├──th-TH.json │ │ │ ├──tr-TR.json │ │ │ ├──uk-UA.json │ │ │ ├──vi-VN.json │ │ │ ├──zh-CHS.json │ │ │ └──zh-CHT.json │ │ ├──msdf │ │ │ └──icon.png │ │ ├──SFX │ │ │ ├──Browse.ogg │ │ │ ├──BROWSE_DOWN.ogg │ │ │ ├──Browse_UP.ogg │ │ │ ├──CloseWindow.ogg │ │ │ ├──CloseWindow2.ogg │ │ │ ├──OpenWindow.ogg │ │ │ ├──OpenWindow2.ogg │ │ │ ├──Slider.ogg │ │ │ ├──TimelineSlideDown.ogg │ │ │ └──TimelineSlideUp.ogg │ │ │ │ │ ├──arrow_left.png │ │ ├──arrow_right.png │ │ ├──checkmark.png │ │ ├──consola.ttf │ │ ├──DPad-Down.png │ │ ├──DPad-Left.png │ │ ├──DPad-Right.png │ │ ├──DPad-UP.png │ │ ├──forbidden.png │ │ ├──fpd.png │ │ ├──L1.png │ │ ├──L2.png │ │ ├──R1.png │ │ ├──R2.png │ │ ├──select.png │ │ ├──start.png │ │ ├──start_select_controls_embedded_ps4.png │ │ ├──start_select_controls_embedded_ps5.png │ │ ├──start_select_controls_ps4.png │ │ ├──start_select_controls_ps5.png │ │ ├──Touchpad.png │ │ ├──Touchpad_left.png │ │ ├──Touchpad_right.png │ │ ├──ui_ps_circle.png │ │ ├──ui_ps_cross.png │ │ ├──ui_ps_dpad_left.png │ │ ├──ui_ps_dpad_right.png │ │ ├──ui_ps_l1.png │ │ ├──ui_ps_r1.png │ │ ├──ui_ps_square.png │ │ ├──ui_ps_touchpad.png │ │ └──ui_ps_triangle.png │ │ │ └──PS1HD │ └──bios │ ├── SCPH5500.bin │ ├── SCPH5501.bin │ └── SCPH5502.bin ├──conf │ └── PS1HD │ ├── dev-pc.conf │ ├── dev-ps4.conf │ ├── dev-ps5.conf │ ├── package-pc.conf │ ├── package-ps4.conf │ └── package-ps5.conf ├──data │ ├── image.toc │ └── image.bin ├──global │ ├──presets │ │ ├── Default.json │ │ ├── Modern.json │ │ ├── RetroClassic.json │ │ └── RetroModern.json │ └──scripts │ └──lua_include │ ├── disc-selection.lua │ └── sce-locale.lua ├──sce_module │ ├── libc.prx │ ├── libSceFios2.prx │ └── libSceNpToolkit2.prx ├──sce_sys │ ├── icon0.png │ ├── pic0.png │ ├── pic1.png │ ├── save_data.png │ └── param.sfo ├──scripts │ ├── discswap.lua │ ├── speedup.lua │ ├── trophies.lua │ ├── patches.lua │ └── XXXXYYYYY.lua ├──SIEA │ ├── config-region.txt │ ├── config-region.json │ ├── regional_icon.png │ └── app_boot.lua ├──config-title.txt ├──eboot.bin ├──revision.conf
Emulator patches[edit | edit source]
Syphon Filter 3 emu[edit | edit source]
Emu build from 2023-Feb-17
The Legend Of Dragoon emu[edit | edit source]
Emu build from 2023-Feb-21
Remove dithering[edit | edit source]
Universal dithering removal patch, works with every single game. PS1 cheats/patches are no longer required to disable dither pattern. To apply unself self file, edit, and sign it again after that. Alternatively you can use cheat engine, offset need to be adjusted to emu base then.
Replaces *and ecx, 7FFh* with *and ecx, 5FFh* to always remove dither enable bit on E1 write.
- Emu memory offset: 0x50EA2
- Elf memory offset: 0x54EA2
Original bytes:
81 E1 FF 07 00 00
Replace to:
81 E1 FF 05 00 00
See also[edit | edit source]
- 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://twitter.com/Vitt0x_Lar_YT/status/1284239865027198976
- https://github.com/Zcor3x/Ps1HDemu-for-Playstation-4
- https://www.youtube.com/watch?v=04EY7huZq9M
- For getting cheats: https://gamehacking.org/system/psx
- https://github.com/Goatman13/Cue2toc
- https://forums.pcsx2.net/Thread-PSOne-Dithering-OFF-patches
- https://ps1hd.pages.dev
|