Editing PSP 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: | ||
=='''PSPHD'''== | |||
The new ps plus psp emulator has a lot of undiscovered functionalities. It even allows patches directly to the emulated Allegrex cpu. | |||
Sadly sony has not made it easy for users to use CLI commands. Since sony mostly uses lua patches for the psp releases, not many cli commands were added. Very few commands have a description to their usage inside of the eboot.bin. Everything else is just guesswork from the scene. The psp emulator has not gained the same popularity as the ps2 emulator because currently, there is an unofficial PPSSPP core in the unofficial retroarch port for the ps4. and as far as the compatibility and performance goes, the retroarch core is second to no one. This emulator may still hold potential, though sadly it does not seem to have support for gamedata installation. and that has led to many games becoming currently unusable. with an official retroarch release coming into ps4's way it seems delving deeper into the PSPHD emulator and the PS1's new psplus emulator is pretty useless. | |||
== '''PSPHD''' == | |||
The | |||
== Commands == | == Commands == | ||
'''Known functions:''' Require cleanup. | '''Known functions:''' Require cleanup. | ||
<br>The rest of the cli and lua commands can all be found inside of an emu's decrypted '''eboot.bin'''. | |||
<br>The rest of the | === config-emu-ps4.txt commands === | ||
''General purpose CLI commands, or unknown usage'' | |||
=== | |||
{| 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 !! Values !! Notes !! Usage | ! Command !! Values !! Notes !! Usage | ||
|- | |- | ||
| --boot || || Set directory of psp game's boot.bin || [disc0:/PSP_GAME/SYSDIR/BOOT.BIN] | | --boot || || Set directory of psp game's boot.bin || [disc0:/PSP_GAME/SYSDIR/BOOT.BIN] | ||
|- | |- | ||
| --notrophies || || Enable/disable trophies|| | | --notrophies || || Enable/disable trophies|| | ||
|- | |- | ||
| --locale || || || | | --locale || || || | ||
Line 92: | Line 23: | ||
| --addon || || || | | --addon || || || | ||
|- | |- | ||
| --host || Sets host directory || --host="/hostapp/" | | --host || || Sets host directory || --host="/hostapp/" | ||
|- | |- | ||
| --loglevel || none, all, warn, info, error, debug, trace || debug logging | | --loglevel || none, all, warn, info, error, debug, trace || debug logging | ||
|- | |- | ||
| --xobuttonmode || oenter, ocancel || Switcher between x and circle button, made specifically for japanese gamers | | --xobuttonmode || oenter, ocancel || Switcher between x and circle button, made specifically for japanese gamers | ||
|- | |- | ||
| --lang || Including but not limited to "en" "jp" "fr" "it" || Language selector || --lang="en" | | --lang || Including but not limited to "en" "jp" "fr" "it" || Language selector || --lang="en" | ||
Line 107: | Line 38: | ||
|- | |- | ||
| --samplesave || ? || ? || | | --samplesave || ? || ? || | ||
|-style=" | |- | ||
| || | | --vramcopyback || 0, 10000000 || || --vramcopyback=45 | ||
|- | |||
| --msxxadhoc || true?, false? || ad hoc support ? || | |||
|- | |||
|} | |||
====Graphics==== | |||
''Commands that serve the purpose of improving / fixing graphics and textures'' | |||
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | |||
! Command !! Values !! Notes !! Usage | |||
|- | |||
| --parappareplacecolor || The command expects 8 Hex values || (rgb?) || | |||
|- | |- | ||
| --antialias || off, MSAA4x, SSAA4x|| Anti-aliasing options || --antialias=off | | --antialias || off, MSAA4x, SSAA4x|| Anti-aliasing options || --antialias=off | ||
|- | |- | ||
| --texcachemode || patchworkheroes drawbounds, drawboundsloco, patchworkheroes, locoroco2, rondo | | --clamp-line-thickness-min || ? || ? || | ||
|- | |||
| --clamp-line-thickness-max || ? || ? || | |||
|- | |||
| --texcachemode || patchworkheroes drawbounds, drawboundsloco, patchworkheroes, locoroco2, rondo || Seems to be a selector of texture caching method|| --texcachemode=patchworkheroes | |||
|- | |- | ||
| --texclutmode || filter, full || || --texclutmode=full | | --texclutmode || filter, full || || --texclutmode=full | ||
Line 120: | Line 65: | ||
| --depthscalehack || true?, false? || ||--depthscalehack=true | | --depthscalehack || true?, false? || ||--depthscalehack=true | ||
|- | |- | ||
| --texloadcores || 0, 100 || textures to load || texloadcores=2 | |||
| --texloadcores || 0, 100 || textures to load || texloadcores=2 | |||
|- | |- | ||
| --smoothlevel || 0, 100 || Mesh smoothing level? || --smoothlevel=0 | | --smoothlevel || 0, 100 || Mesh smoothing level? || --smoothlevel=0 | ||
Line 142: | Line 73: | ||
| --parappajapanesefonthack || true?, false? || Enables Support For Japanese Fonts ??|| --parappajapanesefonthack=true | | --parappajapanesefonthack || true?, false? || Enables Support For Japanese Fonts ??|| --parappajapanesefonthack=true | ||
|- | |- | ||
| -- | | --depthscalehack || true?, false? || ||--depthscalehack=true | ||
|- | |- | ||
| -- | | --locorocomeshsmooth || true, false || Custom mesh smoothing for loco roco games|| --locorocomeshsmooth=true | ||
|- | |- | ||
| -- | | --locorocomeshsmoothnonindexed || true, false || Non-indexed mesh smoothing ||--locorocomeshsmoothnonindexed=true | ||
|- | |- | ||
| -- | | --forcenobilinear || true, false || Turn bilinear filtering on/off, setting it to True will fix many graphical glitches in games that use 2D Images ||--forcenobilinear=true | ||
|- | |- | ||
| -- | |} | ||
==== Gamefixes / Hacks ==== | |||
''Commands that serve the purpose of fixing broken games'' | |||
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | |||
! Command !! Values !! Notes !! Usage | |||
|- | |||
| --umddelay || ? || Seems to be I/O timing method, Some games need a delay to work properly. [https://github.com/hrydgard/ppsspp/issues/7647 More here] || | |||
|- | |- | ||
| -- | | --godofwarhack || true?, false? || Seems specifically made for god of war, unknown effect || --godofwarhack=true | ||
|- | |- | ||
| -- | | --parappaalphahack || true?, false? || || --parappaalphahack=true | ||
|- | |- | ||
| | |} | ||
==== Speedhacks ==== | |||
''Commands that imrpove the game's performance. It can contain duplicate commands'' | |||
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | |||
! Command !! Values !! Notes !! Usage | |||
|- | |- | ||
| --antialias || off || Turning Anti-Alias Off Improves Performance||--antialias=off | | --antialias || off || Turning Anti-Alias Off Improves Performance||--antialias=off | ||
Line 167: | Line 109: | ||
| --smoothlevel || 0 || Set mesh smooth level||--smoothlevel=0 | | --smoothlevel || 0 || Set mesh smooth level||--smoothlevel=0 | ||
|- | |- | ||
| --gputhread || true, false || | | --gputhread || true, false || Run the PSP GPU on a separate thread || --gputhread=true | ||
|- | |- | ||
| --texcachemode || patchworkheroes drawbounds, drawboundsloco, patchworkheroes, locoroco2, rondo || Set texture caching method ||--texcachemode=patchworkheroes | | --texcachemode || patchworkheroes drawbounds, drawboundsloco, patchworkheroes, locoroco2, rondo || Set texture caching method ||--texcachemode=patchworkheroes | ||
Line 173: | Line 115: | ||
| --anisolevel || 0, 100 || Anisotropic filtering level?? || | | --anisolevel || 0, 100 || Anisotropic filtering level?? || | ||
|- | |- | ||
| --present || vblankstart, setframebuf, drawsync|| | | --present || vblankstart, setframebuf, drawsync|| Display on draw to reduce latency ||--present=setframebuf | ||
|- | |- | ||
| --texrecent || true || Optimize texture hashes ||--texrecent=true | | --texrecent || true || Optimize texture hashes ||--texrecent=true | ||
|} | |} | ||
==== | |||
====Texture replacement==== | |||
{| 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 !! Values !! Notes !! Usage | ! Command !! Values !! Notes !! Usage | ||
|- | |- | ||
| -- | | --texswitch||true, false|| Enables Texture replacement || --texswitch=true | ||
|- | |- | ||
| -- | | --texsave || || || | ||
|- | |- | ||
| -- | | --texmissingsave || || || | ||
|- | |- | ||
| -- | | --autoresampler || true, false|| Turns on the auto-resampler. Assumes textures in texreplace are at 8x resolution and resamples them at load, May only work on new LocoRoco Midnight Carnival emu || --autoresampler=true | ||
|- | |- | ||
| -- | | --texreplace || Directory || Set directory of texture replacement folder || --texreplace="host0:texreplace" | ||
|- | |- | ||
| -- | | --replacementfilter || true, false || This forces alpha blending to on for replaced textures. || --replacementfilter=true | ||
|- | |- | ||
| -- | | --replacementalpha || true, false || || --replacementalpha=true | ||
|- | |- | ||
| -- | |} | ||
===XXXXYYYYY_patches.lua=== | |||
Your lua can be placed as '''scripts\XXXXYYYYY_patches.lua''' | |||
<br>'''Requires Cleanup'''. | |||
====Emulator commands==== | |||
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | |||
! Command !! Usage !! Notes - Example | |||
|- | |- | ||
| | |getEmuObject || '''local emuObj = getEmuObject()''' || Required for all functions using emuObj | ||
|- | |- | ||
| | | AddVsyncHook ||emuObj.AddVsyncHook()|| Set function to be done on every vsync | ||
|- | |- | ||
| | | RemoveVsyncHook ||emuObj.RemoveVsyncHook()|| Remove vsynchook | ||
|- | |- | ||
| | | AddBootHook ||emuObj.AddBootHook()|| Set function to be done when the game boots up | ||
|- | |- | ||
| | |RemoveBootHook||emuObj.RemoveBootHook()|| remove function to be done when the game boots up | ||
|- | |- | ||
| | |PadRead || emuObj.PadRead() || | ||
|- | |- | ||
| | |PadReadPitch || emuObj.PadReadPitch() || | ||
|- | |- | ||
| | |PadReadRoll || emuObj.PadReadRoll()|| | ||
|- | |- | ||
| | |PadRegisterSamples || emuObj.PadRegisterSamples()|| | ||
|- | |- | ||
| | |LoadSlideshow ||emuObj.LoadSlideshow()|| | ||
|- | |- | ||
| | |StartSlideshow ||emuObj.StartSlideshow()|| | ||
|- | |- | ||
| | |Log ||emuObj.Log()|| | ||
|- | |- | ||
| | | GetLanguage ||emuObj.GetLanguage()|| Get the language the ps4 is using | ||
|- | |||
| GetNativeLanguage ||emuObj.GetNativeLanguage()|| | |||
|- | |||
|DisplayManual || emuObj.DisplayManual()|| | |||
|- | |- | ||
| | | DisplayProduct||emuObj.DisplayProduct()|| | ||
|- | |- | ||
| | |LoadConfig ||emuObj.LoadConfig()|| | ||
|- | |- | ||
| | | SaveConfig||emuObj.SaveConfig()|| | ||
|- | |- | ||
| | | LoadMIDI ||emuObj.LoadMIDI()|| | ||
|- | |- | ||
| | | GetMIDINotesAtTick ||emuObj.GetMIDINotesAtTick()|| | ||
|- | |- | ||
| | |LoadState ||emuObj.LoadState()|| | ||
|- | |- | ||
| | | SaveState ||emuObj.SaveState()|| | ||
|- | |- | ||
| | | SetFDExtraDelay ||emuObj.SetFDExtraDelay()|| | ||
|- | |- | ||
| | | MeshSmooth ||emuObj.MeshSmooth()|| | ||
|- | |- | ||
| | | SetHue ||emuObj.SetHue()|| | ||
|- | |- | ||
| | | SetSaturation ||emuObj.SetSaturation()|| | ||
|- | |- | ||
| | | SetBrightness ||emuObj.SetBrightness()|| | ||
|- | |- | ||
| | | SetContrast ||emuObj.SetContrast()|| | ||
|- | |- | ||
| | | VideoScale ||emuObj.VideoScale()|| | ||
|- | |- | ||
| | | SetOverlay ||emuObj.SetOverlay()|| | ||
|- | |- | ||
| | | DisplayUIOverlay ||emuObj.DisplayUIOverlay()|| | ||
|- | |- | ||
| | | CRC32 ||emuObj.CRC32()|| | ||
|- | |- | ||
| | | SASGetCRC ||emuObj.SASGetCRC()|| | ||
|- | |- | ||
| | | SASGetSampleRate ||emuObj.SASGetSampleRate() | ||
|- | |- | ||
| | | GetAppName ||emuObj.GetAppName()|| | ||
|- | |- | ||
| | | ReadFile ||emuObj.ReadFile()|| | ||
|- | |- | ||
| | | RemapFB ||emuObj.RemapFB()|| | ||
|- | |- | ||
| | | InvalFB ||emuObj.InvalFB()|| | ||
|- | |- | ||
| | | PlayVideo||emuObj.PlayVideo()|| | ||
|- | |- | ||
| | | AddGPUHook ||emuObj.AddGPUHook()|| | ||
|- | |- | ||
| | | RescaleUForUpscale ||emuObj.RescaleUForUpscale()|| | ||
|- | |- | ||
| | | RescaleVForUpscale||emuObj.RescaleVForUpscale()|| | ||
|- | |- | ||
| | | ShrinkUVRect ||emuObj.ShrinkUVRect()|| | ||
|- | |- | ||
| | | ScalePosition ||emuObj.ScalePosition()|| | ||
|- | |- | ||
| | | AdjustUVJitter ||emuObj.AdjustUVJitter()|| | ||
|- | |- | ||
| | | OverrideFBSize||emuObj.OverrideFBSize()|| Override framebuffer size ? | ||
|- | |- | ||
| | | PadSetButtonsMode || emuObj.PadSetButtonsMode() || emuObj.PadSetButtonsMode(pad.BUTTONS_MODE_OPTION_IS_SELECT) | ||
|- | |- | ||
| | |RemapSavedata || emuObj.RemapSavedata() ||emuObj.RemapSavedata("UCUS98711", "CUSA06171", "504e802b04a1838c32b616abbe0b475fbea1c823825ef0df06cc2bad129ce2f7") | ||
|- | |- | ||
| | | PadVibrate|| emuObj.PadVibrate() || emuObj.PadVibrate(5,180,180) | ||
|- | |- | ||
| NeoMode || emuObj.NeoMode() || Checks whether or not the ps4 is pro | | NeoMode || emuObj.NeoMode() || Checks whether or not the ps4 is pro | ||
|- | |- | ||
| ThrottleMax || emuObj.ThrottleMax() || Disable framelimiter | | ThrottleMax || emuObj.ThrottleMax() || Disable framelimiter During loading screens, This setting can sometimes be harmful when used globally in config files. Loading times are faster, but the game also runs faster than it should when the PS4 has enough free cpu power. | ||
|- | |- | ||
| ThrottleFast|| emuObj.ThrottleFast() || Faster than default, but exact value is unknown. | | ThrottleFast|| emuObj.ThrottleFast() || Faster than default, but exact value is unknown. | ||
Line 353: | Line 267: | ||
|- | |- | ||
| CopyFB || emuObj.CopyFB() || | | CopyFB || emuObj.CopyFB() || | ||
|- | |- | ||
| | |} | ||
====Allegrex commands==== | |||
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | |||
! Command !! Usage !! Notes - Example | |||
|- | |- | ||
| | | getAXObject ||'''local axObj = getAXObject()''' || Required for all functions using AXObject | ||
|- | |- | ||
| | | AddHook || axObj.AddHook() || | ||
|- | |- | ||
| | | RemoveHook || axObj.RemoveHook() || | ||
|- | |- | ||
| | |SetPC|| axObj.SetPC() || | ||
|- | |- | ||
| | |GetPC|| axObj.GetPC() || | ||
|- | |- | ||
| | | BurnCycles|| axobj.BurnCycles() || Could be an option to overclock cpu at a hooked offset | ||
|- | |- | ||
| | |AddAOTBlock ||axObj.AddAOTBlock()|| Ahead of time compilation block ? | ||
|- | |- | ||
| | |Overlay ||axObj.Overlay()|| | ||
|-style="background-color:#ff8080" | |||
| GPR || || | |||
|- | |- | ||
| | | gpr require || '''local gpr = require("ax-gpr-alias")''' || Required for any command that includes gpr registers | ||
|- | |- | ||
| | | GetGpr || axObj.GetGpr() || | ||
|- | |- | ||
| | | SetGpr ||axObj.SetGpr() || | ||
|- | |- | ||
| | |SetFpr|| axObj.SetFpr() ||axObj.SetFpr(0) | ||
|- | |- | ||
| | |GetFpr || axObj.GetFpr() || | ||
|- | |- | ||
| | |SetHi|| axObj.SetHi()|| | ||
|- | |- | ||
| | |GetHi|| axObj.GetHi()|| | ||
|- | |- | ||
| | | SetLo || axObj.SetLo()|| | ||
|- | |- | ||
| | | GetLo ||axObj.GetLo()|| | ||
|- | |- | ||
| | | SetReg||axObj.SetReg()|| | ||
|- | |- | ||
| | |GetReg||axObj.GetReg()|| | ||
|-style="background-color:# | |-style="background-color:#D7EF54" | ||
| | | Memory editing || || Do note that the offsets on PPSSPP are different than the ones on the PS4 | ||
|- | |- | ||
| | | ReadMem32 || axObj.ReadMem32() || Read 4 bytes from offset | ||
|- | |- | ||
| | | WriteMem32 || axObj.WriteMem32() || Write 4 bytes to offset | ||
|- | |- | ||
| | | ReadMem16 || axObj.ReadMem16() || Read 2 bytes from offset | ||
|- | |- | ||
| | | WriteMem16 || axObj.WriteMem16() || Write 2 bytes to offset | ||
|- | |- | ||
| | | ReadMem8 || axObj.ReadMem8() || Read 1 byte from offset | ||
|- | |- | ||
| | | WriteMem8 || axObj.WriteMem8() || Write 1 byte to offset | ||
|- | |- | ||
| | | ReadMemString || axObj.ReadMemString() || | ||
|- | |- | ||
| | | WriteMemString || axObj.WriteMemString() || | ||
|- | |- | ||
| | | WriteMemStr16 || axObj.WriteMemStr16() || | ||
|- | |- | ||
| | |WriteMemStr16Z ||axObj.WriteMemStr16Z() || | ||
|- | |- | ||
| | | WriteMemStringZ ||axobj.WriteMemStringZ || | ||
|- | |- | ||
| | |ReadMemFloat || axObj.ReadMemFloat() || | ||
|- | |- | ||
| | |WriteMemFloat || axObj.WriteMemFloat() || | ||
|- | |- | ||
! !! Other/Unknown/Standalone Commands !! | |||
|- | |- | ||
| | |FuncReplace || axFuncReplace() || axFuncReplace(0x8804670, "__ptmf_scall") Replace allegrex function. | ||
|- | |- | ||
| InsnReplace || axInsnReplace() || Replace allegrex memory | |||
| InsnReplace || axInsnReplace() || Replace allegrex memory | |||
|- | |- | ||
|} | |} | ||
====Examples==== | |||
<br>'''''LUA example:''''' | |||
<br>''' | <br> | ||
<br>"NPEZ00164" | <br>Coconut Dodge "NPEZ00164" | ||
<pre> | <pre> | ||
local axObj = getAXObject() | local axObj = getAXObject() | ||
Line 494: | Line 358: | ||
local patcher = function() | local patcher = function() | ||
--Infinite lives | --Infinite lives | ||
axObj.WriteMem32(0x8ACA1A4, 0x3) | axObj.WriteMem32(0x8ACA1A4, 0x3) | ||
end | end | ||
Line 514: | Line 364: | ||
</pre> | </pre> | ||
=====Patches.lua===== | |||
'''An official lua created by sony for Patapon 2''' | |||
====Patches.lua | |||
<pre> | <pre> | ||
-- Lua 5.3 | -- Lua 5.3 | ||
-- Title: | -- Title: Patapon 2 PSP - UCUS-98732 (USA) | ||
-- | |||
apiRequest(1.0) -- request version 1.0 API. Calling apiRequest() is mandatory. | apiRequest(1.0) -- request version 1.0 API. Calling apiRequest() is mandatory. | ||
local emuObj = getEmuObject() | local gpr = require( "ax-gpr-alias" ) -- you can access Allegrex GPR by alias (gpr.a0 / gpr["a0"]) | ||
local | local emuObj = getEmuObject() -- emulator | ||
local axObj = getAXObject() -- allegrex | |||
local pad = require("pad") | |||
-- | -- Hook memcpy to catch framebuffer effects | ||
axFuncReplace(0x881D194, "patapon_memcpy") | |||
-- Accelerate some functions | |||
axFuncReplace(0x8804670, "__ptmf_scall") | |||
-- Accelerate some functions | |||
axFuncReplace(0x8804670, "__ptmf_scall") | |||
axFuncReplace(0x8892230, "Renderer__makeWorldMatrix__4psysFv") | axFuncReplace(0x8892230, "Renderer__makeWorldMatrix__4psysFv") | ||
axFuncReplace(0x88209A8, "patapon_strcmp") | axFuncReplace(0x88209A8, "patapon_strcmp") | ||
Line 997: | Line 771: | ||
== 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> | |||
{| 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 ( | ! Emulator !! Usage !! API Version !! Similar emulators (Usage) | ||
|- | |- | ||
| Echochrome || The default | | Echochrome || The default psp emulator for PSPFPKG tool at the time of writing and the best in terms of compatibility. || ? || ? | ||
|- | |- | ||
| | | LocoRoco Midnight Carnival || ? || ? || ? | ||
|- | |- | ||
| LocoRoco | | LocoRoco 1 || ? || ? || ? | ||
|- | |- | ||
| LocoRoco | | LocoRoco 2 || ? || ? || ? | ||
|- | |- | ||
| | | Castlevania Requiem || ? || ? || ? | ||
|- | |- | ||
| Patapon 2 | | Patapon 2 || ? || ? || ? | ||
|- | |- | ||
| | | PaRappa the Rapper || An unofficial emulator developed by sony with very bad compatibility || ? || ? | ||
|- | |- | ||
| | |} | ||
|- | |||
==Memory mapping== | |||
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | |||
! Offset From !! Offset To !! Name | |||
|- | |- | ||
| | | 0x1008000000 || 0x10887FFFFF || Allegrex memory(?) | ||
|- | |- | ||
|} | |} | ||
==Registers Map== | |||
== | |||
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | {| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | ||
! | ! Register !! Offset | ||
|- | |- | ||
| || | | - || - | ||
|- | |- | ||
| | |} | ||
|- | |||
= Known issues = | |||
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center;" | |||
! Issue !! Games affected !! Solution !! Description | |||
|- | |- | ||
| | | - || || || | ||
| | |||
| | |||
|- | |- | ||
|} | |} | ||
= | =LUA include files= | ||
ax-gpr-alias.lua | |||
< | <pre> | ||
-- Recommended method to import this module: | |||
-- local gpr = require("ax-gpr-alias") | |||
gpr = {} | |||
gpr.zero = 0 | |||
gpr.at = 1 | |||
gpr.v0 = 2 | |||
gpr.v1 = 3 | |||
gpr.a0 = 4 | |||
gpr.a1 = 5 | |||
gpr.a2 = 6 | |||
gpr.a3 = 7 | |||
gpr.t0 = 8 | |||
gpr.t1 = 9 | |||
gpr.t2 = 10 | |||
gpr.t3 = 11 | |||
gpr.t4 = 12 | |||
gpr.t5 = 13 | |||
gpr.t6 = 14 | |||
gpr.t7 = 15 | |||
gpr.s0 = 16 | |||
gpr.s1 = 17 | |||
gpr.s2 = 18 | |||
gpr.s3 = 19 | |||
gpr.s4 = 20 | |||
gpr.s5 = 21 | |||
gpr.s6 = 22 | |||
gpr.s7 = 23 | |||
gpr.t8 = 24 | |||
gpr.t9 = 25 | |||
gpr.k0 = 26 | |||
gpr.k1 = 27 | |||
gpr.gp = 28 | |||
gpr.sp = 29 | |||
gpr.fp = 30 | |||
gpr.ra = 31 | |||
return gpr | |||
</pre> | |||
pad.lua | |||
< | |||
<pre> | <pre> | ||
-- Recommended method to import this module: | |||
-- local pad = require("pad") | |||
-- | |||
-- Buttons marked PS4 are not used by the emulator, but can be read from Lua | |||
-- | |||
-- Read the Pad state with getEmuObject().PadRead() | |||
-- ie: | |||
-- local padstate = getEmuObject().PadRead() | |||
-- | |||
pad = {} | |||
pad.L3 = 0x00000002 -- L3 (PS4) | |||
pad.R3 = 0x00000004 -- R3 (PS4) | |||
pad.OPTIONS = 0x00000008 -- Options (PS4) | |||
pad.UP = 0x00000010 -- Up | |||
pad.RIGHT = 0x00000020 -- Right | |||
pad.DOWN = 0x00000040 -- Down | |||
pad.LEFT = 0x00000080 -- Left | |||
pad.L2 = 0x00000100 -- L2 (PS4) | |||
pad.R2 = 0x00000200 -- R2 (PS4) | |||
pad.L1 = 0x00000400 -- L1 | |||
pad.R1 = 0x00000800 -- R1 | |||
pad.TRIANGLE = 0x00001000 -- Triangle | |||
pad.CIRCLE = 0x00002000 -- Circle | |||
pad.CROSS = 0x00004000 -- Cross | |||
pad.SQUARE = 0x00008000 -- Square | |||
pad.SELECT = 0x00010000 -- Select | |||
pad.START = 0x00020000 -- Start | |||
-- Automap SELECT or START to the Options Button, leaving the full touchar for the opposite, with getEmuObject().PadSetButtonsMode(mode) | |||
-- ie: | |||
-- getEmuObject().PadSetButtonsMode(pad.BUTTONS_MODE_OPTION_IS_SELECT) | |||
= | pad.BUTTONS_MODE_NORMAL = 0 -- Touch bar is split in two for Start/Select. Option is unmapped (default behaviour) | ||
pad.BUTTONS_MODE_OPTION_IS_SELECT = 1 -- Touch bar is Start. Option is Select | |||
pad.BUTTONS_MODE_OPTION_IS_START = 2 -- Touch bar is Select. Option is Start | |||
return pad | |||
</pre> | |||
<pre> | |||
=Information= | |||
Note: Missing entries | |||
==Folder/File layout== | |||
===Echochrome=== | |||
<pre> | |||
├── assets | |||
├── iso | |||
├── lua_include | |||
├── sce_module | |||
├── sce_sys | |||
├── SIEA | |||
│ └── data | |||
│ └── USER_L0.IMG | |||
├── usermodule | |||
│ └──libfont.lib | |||
├── sce_discmap.plt | |||
├── config-title.txt | |||
├── package-ps4.conf | |||
├── eboot.bin | |||
├── revision.conf | |||
└── config-title.txt | |||
</pre> | </pre> | ||
===Old emulators=== | |||
<pre> | <pre> | ||
├── assets | |||
├── flash0 | |||
├── iso | |||
├── lua_include | |||
├── scripts | |||
│ ├──XXXXYYYYY_patches.lua | |||
│ ├──XXXXYYYYY_features.lua | |||
│ ├──XXXXYYYYY_tooling.lua | |||
│ └──XXXXYYYYY_trophies.lua | |||
├── pspfonts | |||
├── sce_module | |||
├── sce_sys | |||
├── trophy_data | |||
├── usermodule | |||
│ └──libfont.lib | |||
├── sce_discmap.plt | |||
├── eboot.bin | |||
├── revision.conf | |||
└── config-title.txt | |||
</pre> | |||
- | |||
==Other== | |||
<pre> | |||
XXXXYYYYY_config.txt | |||
videos/ | |||
.mp4 | |||
videos/%08x.mp4 | |||
audio/%08x.ogg | |||
Paths: | |||
/app0/ | |||
/download0/ | |||
/savedata | |||
/host/ | |||
/hostapp/ | |||
/data/ | |||
</pre> | </pre> | ||
==Sample== | |||
<pre>; PS4 configuration file for PSPHD | |||
< | |||
; PS4 configuration file for PSPHD | |||
; Game Image | ; Game Image | ||
Line 1,746: | Line 1,015: | ||
--parappaalphahack=true | --parappaalphahack=true | ||
</pre> | </pre> | ||
==NIDs in HLE== | |||
== NIDs in HLE == | |||
<pre> | <pre> | ||
|HLEInterruptManager| | |HLEInterruptManager| | ||
Line 2,352: | Line 1,559: | ||
* https://forums.ppsspp.org/showthread.php?tid=11961 | * https://forums.ppsspp.org/showthread.php?tid=11961 | ||
* https://github.com/LunaMoo/PPSSPP_workarounds/blob/master/cheat.db | * https://github.com/LunaMoo/PPSSPP_workarounds/blob/master/cheat.db | ||
===More Information:=== | ===More Information:=== |