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'''== | =='''PSPHD'''== | ||
== 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'''. | |||
=== config-emu-ps4.txt 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 !! 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] | ||
|- | |||
| --volume || ? || Adjust volume level, seems pretty redundant || | |||
|- | |- | ||
| --notrophies || || Enable/disable trophies|| | | --notrophies || || Enable/disable trophies|| | ||
|- | |- | ||
| --locale || || || | | --locale || || || | ||
Line 81: | Line 19: | ||
| --image || umd0 ,disc0 || Set path for disc image || | | --image || umd0 ,disc0 || Set path for disc image || | ||
|- | |- | ||
| -- | | --texreplace || Directory || Set directory of texture replacement folder || --texreplace="host0:texreplace" | ||
|- | |||
| --samplereplace || || || | |||
|- | |- | ||
| --addon || || || | | --addon || || || | ||
|- | |- | ||
| --host || | | --host || host0, flash0 || Set whether the game is using sdcard or internal storage ? || | ||
|- | |- | ||
| -- | | --texsave || || || | ||
|- | |- | ||
| --xobuttonmode || oenter, ocancel || Switcher between x and circle button, made specifically for japanese gamers | | --texmissingsave || || || | ||
|- | |||
| --loglevel || none, all, warn, info, error, debug, trace || debug logging | |||
|- | |||
| --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" | ||
|- | |||
| --parappareplacecolor || The command expects 8 Hex values || (rgb?) || | |||
|- | |||
| --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 | |||
|- | |- | ||
| --savedata-mode || ? || ? || | | --savedata-mode || ? || ? || | ||
Line 99: | Line 47: | ||
| --multisaves || true, false || Enable Multiple Savegames || --multisaves=true | | --multisaves || true, false || Enable Multiple Savegames || --multisaves=true | ||
|- | |- | ||
| -- | | --savedatamulti-size-game || || || | ||
|- | |- | ||
| -- | | --savedatamulti-size-user || || || | ||
|- | |- | ||
| -- | | --samplesave || ? || ? || | ||
|- | |- | ||
| -- | | --vramcopyback || 0, 10000000 || || --vramcopyback=45 | ||
|- | |- | ||
| -- | | --replacementfilter || true, false || This forces alpha blending to on for replaced textures. || --replacementfilter=true | ||
|- | |- | ||
| --clamp-line-thickness-min || ? || ? || | | --clamp-line-thickness-min || ? || ? || | ||
Line 139: | Line 61: | ||
| --clamp-line-thickness-max || ? || ? || | | --clamp-line-thickness-max || ? || ? || | ||
|- | |- | ||
| -- | | --spu2Trace || true, false || || --spu2Trace=true | ||
|- | |- | ||
| -- | | --spu2-c1-memin-to-bgm || true, false || || --spu2-c1-memin-to-bgm=true | ||
|- | |- | ||
| -- | | --replacementalpha || true, false || || --replacementalpha=true | ||
|- | |- | ||
|- | | --parappaalphahack || true, false || || --parappaalphahack=true | ||
| | |||
|- | |- | ||
| -- | | --parappajapanesefonthack || true, false || Enables Support For Japanese Fonts ??|| --parappajapanesefonthack=true | ||
|- | |- | ||
| -- | | --locorocomeshsmooth || true, false || Custom mesh smoothing for loco roco games|| --locorocomeshsmooth=true | ||
|- | |- | ||
| -- | | --godofwarhack || true, false || Seems specifically made for god of war, unknown effect || --godofwarhack=true | ||
|- | |- | ||
| -- | | --locorocomeshsmoothnonindexed || true, false || ||--locorocomeshsmoothnonindexed=true | ||
|- | |- | ||
| --gputhread || true, false || | | --gputhread || true, false || Run the PSP GPU on a separate thread || --gputhread=true | ||
|- | |- | ||
| -- | | --antialias || off, MSAA4x, SSAA4x|| Anti-aliasing options || --antialias=off | ||
|- | |- | ||
| -- | | --texcachemode || patchworkheroes drawbounds, drawboundsloco, patchworkheroes, locoroco2, rondo || || --texcachemode=patchworkheroes | ||
|- | |- | ||
| -- | | --texclutmode || filter, full || || --texclutmode=full | ||
|- | |- | ||
| -- | | --texloadmode || launch, ondemand_lz4 || Seems to be a selector of when to load textures, either before the game requires it, or once the game requires it || | ||
| | |||
|- | |- | ||
| -- | | --texloadcores || 0, 10000 || textures to load || texloadcores=2 | ||
|- | |- | ||
| -- | | --depthscalehack || true, false || ||--depthscalehack=true | ||
|- | |- | ||
| -- | | --forcenobilinear || true, false || Turn bilinear filtering on/off ||--forcenobilinear=true | ||
|- | |- | ||
| -- | | --smoothlevel || 0, 12? || Mesh smoothing level? || --smoothlevel=0 | ||
|- | |- | ||
| -- | | --anisolevel || || Anisotropic filtering level?? || | ||
|- | |- | ||
| -- | | --msxxadhoc || true?, false? || ad hoc support ? || | ||
|- | |- | ||
| -- | | --umddelay || true?, false?|| Seems to be I/O timing method [https://github.com/hrydgard/ppsspp/issues/7647 More here] || | ||
|- | |- | ||
|} | |} | ||
==== | ==== Speedhacks ==== | ||
{| 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 | ||
|- | |- | ||
| -- | | --antialias || off || Turning Anti-Alias Off Improves Performance||--antialias=off | ||
|- | |- | ||
| -- | | --texclutmode || full || Turns on filtering of CLUT hashes to avoid repeat indexed textures ||--texclutmode=full | ||
|- | |- | ||
| -- | | --texloadcores || 0, 10000 || Cores to use loading textures (higher count = more memory) ||--texloadcores=12 | ||
|- | |- | ||
| -- | | --smoothlevel || 0,12 ?|| ||--smoothlevel=0 | ||
|- | |- | ||
| -- | | --texcachemode || patchworkheroes drawbounds, drawboundsloco, patchworkheroes, locoroco2, rondo || ||--texcachemode=patchworkheroes | ||
|- | |- | ||
| -- | | --present || vblankstart, setframebuf, drawsync|| Display on draw to reduce latency ||--present=setframebuf | ||
|- | |- | ||
| -- | | --texrecent || true || Optimize texture hashes ||--texrecent=true | ||
|- | |- | ||
| --umddelay || true || ||--umddelay=true | |||
|} | |} | ||
===XXXXYYYYY_patches.lua=== | ===XXXXYYYYY_patches.lua=== | ||
Your lua can be placed as '''\Image0\Patches\XXXXYYYYY\XXXXYYYYY_patches.lua''' | |||
<br>'''XXXXYYYYY''' being the game's Region code | |||
<br>'''Requires Cleanup'''. | |||
{| 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 - Example | ! Command !! Usage !! Notes - Example | ||
|- | |||
| apiRequest || '''apiRequest(<api version>)''' || example: apiRequest(0.1) | |||
Calling api is mandatory. some commands require higher versions. | |||
|- | |||
! !! getEmuObject class !! | |||
|- | |- | ||
|getEmuObject || '''local emuObj = getEmuObject()''' || Required for all functions using emuObj | |getEmuObject || '''local emuObj = getEmuObject()''' || Required for all functions using emuObj | ||
|- | |- | ||
| | | AddVsyncHook ||emuObj.AddVsyncHook()|| | ||
|- | |||
| RemoveVsyncHook ||emuObj.RemoveVsyncHook()|| | |||
|- | |- | ||
| | | AddBootHook ||emuObj.AddBootHook()|| | ||
|- | |||
|RemoveBootHook||emuObj.RemoveBootHook()|| | |||
|- | |- | ||
|Log ||emuObj.Log()|| | |Log ||emuObj.Log()|| | ||
|- | |- | ||
| GetLanguage ||emuObj.GetLanguage()|| | | GetLanguage ||emuObj.GetLanguage()|| | ||
|- | |- | ||
| GetNativeLanguage ||emuObj.GetNativeLanguage()|| | | GetNativeLanguage ||emuObj.GetNativeLanguage()|| | ||
Line 257: | Line 167: | ||
|LoadState ||emuObj.LoadState()|| | |LoadState ||emuObj.LoadState()|| | ||
|- | |- | ||
| SaveState ||emuObj.SaveState()|| | | SaveState ||emuObj.SaveState()|| | ||
|- | |- | ||
| SetFDExtraDelay ||emuObj.SetFDExtraDelay()|| | | SetFDExtraDelay ||emuObj.SetFDExtraDelay()|| | ||
|- | |- | ||
| MeshSmooth ||emuObj.MeshSmooth()|| | | MeshSmooth ||emuObj.MeshSmooth()|| | ||
Line 292: | Line 202: | ||
|- | |- | ||
| PlayVideo||emuObj.PlayVideo()|| | | PlayVideo||emuObj.PlayVideo()|| | ||
|- | |||
| AddGPUHook ||emuObj.AddGPUHook()|| | |||
|- | |- | ||
| RescaleUForUpscale ||emuObj.RescaleUForUpscale()|| | | RescaleUForUpscale ||emuObj.RescaleUForUpscale()|| | ||
Line 303: | Line 215: | ||
| AdjustUVJitter ||emuObj.AdjustUVJitter()|| | | AdjustUVJitter ||emuObj.AdjustUVJitter()|| | ||
|- | |- | ||
| OverrideFBSize||emuObj.OverrideFBSize()|| | | OverrideFBSize||emuObj.OverrideFBSize()|| | ||
|- | |||
| PadSetButtonsMode || emuObj.PadSetButtonsMode() || emuObj.PadSetButtonsMode(pad.BUTTONS_MODE_OPTION_IS_SELECT) | |||
|- | |- | ||
|RemapSavedata || emuObj.RemapSavedata() ||emuObj.RemapSavedata("UCUS98711", "CUSA06171", "504e802b04a1838c32b616abbe0b475fbea1c823825ef0df06cc2bad129ce2f7") | |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() || | | ThrottleMax || emuObj.ThrottleMax() || | ||
|- | |- | ||
| ThrottleFast|| emuObj.ThrottleFast() || | | ThrottleFast|| emuObj.ThrottleFast() || | ||
|- | |- | ||
| ThrottleNorm ||emuObj.ThrottleNorm() || | | ThrottleNorm ||emuObj.ThrottleNorm() || | ||
|- | |- | ||
|SetTextureHashMode||emuObj.SetTextureHashMode()|| | |SetTextureHashMode||emuObj.SetTextureHashMode()|| | ||
Line 328: | Line 244: | ||
|- | |- | ||
| CopyFB || emuObj.CopyFB() || | | CopyFB || emuObj.CopyFB() || | ||
|- | |- | ||
! !! getAXObject class !! | |||
|- | |- | ||
| | | getAXObject ||'''local axObj = getAXObject()''' || Required for all functions using AXObject | ||
|- | |- | ||
| | | AddHook || axObj.AddHook() || | ||
|- | |- | ||
| | | RemoveHook || axObj.RemoveHook() || | ||
|- | |- | ||
| | |SetPC|| axObj.SetPC() || | ||
|- | |- | ||
| | |GetPC|| axObj.GetPC() || | ||
|- | |- | ||
| | | ReadMem32 || axObj.ReadMem32() || axObj.ReadMem32(0x87654321) | ||
|- | |- | ||
| | | WriteMem32 || axObj.WriteMem32() || axObj.WriteMem32(0x87654321,0x87654321) | ||
|- | |- | ||
| | | ReadMem16 || axObj.ReadMem16() || | ||
|- | |- | ||
| | | WriteMem16 || axObj.WriteMem16() || | ||
|- | |- | ||
| | | ReadMem8 || axObj.ReadMem8() || | ||
|- | |- | ||
| | | WriteMem8 || axObj.WriteMem8() || | ||
|- | |- | ||
| | | WriteMemStr16 || axObj.WriteMemStr16() || | ||
|- | |- | ||
| | |WriteMemStr16Z ||axObj.WriteMemStr16Z() || | ||
|- | |- | ||
| | |ReadMemFloat || axObj.ReadMemFloat() || | ||
|- | |- | ||
| | |WriteMemFloat || axObj.WriteMemFloat() || | ||
|- | |- | ||
| GetGpr || axObj.GetGpr() || | | GetGpr || axObj.GetGpr() || | ||
Line 423: | Line 296: | ||
|- | |- | ||
|GetReg||axObj.GetReg()|| | |GetReg||axObj.GetReg()|| | ||
|- | |- | ||
| | | BurnCycles|| axobj.BurnCycles() || | ||
|- | |- | ||
| | |AddAOTBlock ||axObj.AddAOTBlock()|| | ||
|- | |- | ||
| | |Overlay ||axObj.Overlay()|| | ||
|- | |- | ||
! !! Other/Unknown/Standalone Commands !! | ! !! Other/Unknown/Standalone Commands !! | ||
|- | |- | ||
| | |axFuncReplace || axFuncReplace() || axFuncReplace(0x8804670, "__ptmf_scall") | ||
|- | |- | ||
|} | |} | ||
====Examples==== | ====Examples==== | ||
'''User made lua:''' | |||
<pre> | <pre> | ||
apiRequest(0.1) | |||
local axObj = getAXObject() | local axObj = getAXObject() | ||
local emuObj = getEmuObject() | local emuObj = getEmuObject() | ||
local patcher = function() | local patcher = function() | ||
axobj.WriteMem32(0x0053d5d4,0x21c828bd) | |||
end | end | ||
Line 476: | Line 321: | ||
</pre> | </pre> | ||
=====Features.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. | |||
local gpr = require( "ax-gpr-alias" ) -- you can access Allegrex GPR by alias (gpr.a0 / gpr["a0"]) | |||
local emuObj = getEmuObject() -- emulator | |||
local axObj = getAXObject() -- allegrex | |||
local pad = require("pad") | |||
local trophyObj = getTrophyObject() | |||
-- INIT -- | |||
local GLOBAL = 0x8B7D088 | |||
local APPLICATION = 0x8B4C8D4 | |||
local missionID = 0 | |||
local missionRunning = false | |||
local colonyMode = 0 | |||
-- GAME FUNCTIONS -- | |||
-- | local getApplication = function() -- getApplication | ||
local app = axObj.ReadMem32(APPLICATION) --> 0x8c99f60 | |||
if app == 0 then | |||
return 0 | |||
end | |||
return axObj.ReadMem32(app) --> 0x8b8c740 | |||
end | |||
--- Scenes | |||
local getSceneBase = function() -- from Application::initialize | |||
local app = getApplication() | |||
if app == 0 then | |||
return 0 | |||
end | |||
return axObj.ReadMem32(app + 0xCB24) -- -0x34DC($v1) | |||
end | |||
local getNextSceneID = function() -- from System::SceneBase::setNextSceneId | |||
local base = getSceneBase() | |||
if base == 0 then | |||
return 0 | |||
end | |||
return axObj.ReadMem32(base + 8) | |||
end | |||
local getBasesScene = function() | |||
local scene = getSceneBase() | |||
if scene == 0 then | |||
return 0 | |||
end | |||
return axObj.ReadMem32(scene + 0xC) | |||
end | |||
local getMissionScene = function() | |||
local scene = getBasesScene() | |||
if scene == 0 then | |||
return 0 | |||
end | |||
return axObj.ReadMem32(scene + 0xC) | |||
end | |||
local getGameScene = function() | |||
local scene = getMissionScene() | |||
if scene == 0 then | |||
return 0 | |||
end | |||
return axObj.ReadMem32(scene + 0xC) | |||
end | |||
local getSceneID = function(scene) | |||
return axObj.ReadMem32(scene + 0x27354) -- from Labo::Game__Talk__CommandGame__getMissionId | |||
end | |||
local isTitle = function() | |||
return getMissionScene() == 0 | |||
end | |||
local isCamp = function() | |||
return isTitle() == false and getGameScene() == 0 | |||
end | |||
local | local isInMission = function() | ||
if isTitle() == true or isCamp() == true then | |||
return false | |||
end | |||
return getGameScene() ~= 0 | |||
end | end | ||
function | --- Game functions --- | ||
local getMissionID = function() -- from Game::Game::initialize | |||
if isCamp() == true then | |||
local scene = getMissionScene() | |||
return getSceneID(scene) | |||
elseif isInMission() == true then | |||
local scene = getGameScene() | |||
return getSceneID(scene) | |||
end | |||
return -1 | |||
end | end | ||
local | function getMissionName() -- from Bases__Talk__CommandCamp__setMissionNameFromVar | ||
local | local missionName = "" | ||
local index = axObj.ReadMem32(GLOBAL) -- 0x8c9fbc0 | |||
if index == 0 then | |||
local | return | ||
-- the | end | ||
-- 0.. | local offset = axObj.ReadMem32(index + 0x10C0) -- 0x8d07840 | ||
if offset == 0 then | |||
return | |||
if | end | ||
-- | local strPtr = axObj.ReadMem32(offset + 0x1070) | ||
-- | local missionNamePtr = strPtr + 0x5FA2 -- is 0x8D38C62 | ||
-- | |||
-- | missionName = axObj.ReadMemStr16(missionNamePtr) | ||
-- | |||
-- | return missionName | ||
-- | end | ||
-- | --[[ vibrate on objects -- | ||
emuObj.PadVibrate() causes the DS4 to vibrate. The parameters are as follow: | |||
1st parameter: Large Motor speed (0=off, 1 to 255=speed) | |||
2nd parameter: Small Motor speed (0=off, 1 to 255=speed) | |||
3rd parameter: Duration of the vibration in milliseconds (1000 = 1 second, Max 6 seconds). | |||
Once the time has elapsed both motors are turned off automatically. | |||
]]-- | |||
local ctr = 0 | |||
local keyCtr = 0x0 | |||
local keyDown = 0 | |||
local noteCtr = 0 | |||
local playSeq = true | |||
local lastSeq = 0 | |||
local H1 = function() -- sgxResFindSeq | |||
local id = axObj.GetGpr(gpr.a1) | |||
if playSeq == true then | |||
lastSeq = 0 -- reset | |||
playSeq = false | |||
end | |||
if id == lastSeq then | |||
return -- don't repeat | |||
end | |||
-- allow repeat for "step" sounds: dragon,frog,manbroth,demon,worm,plant,machine,crab,crab, | |||
-- machine,demon dragon,demon dragon,demon dragon,worm,worm,kamen rock | |||
if id ~= 0x41c and id ~= 0x418 and id ~= 0x35c and id ~= 0x7cc and id ~= 0x560 and id ~= 0x470 | |||
and id ~= 0x4c4 and id ~= 0x39c and id ~= 0x3c8 and id ~= 0x51c and id ~= 0x800 | |||
and id ~= 0x82c and id ~= 0xd54 and id ~= 0x484 and id ~= 0x19c then | |||
if id == lastSeq then | |||
return -- don't repeat | |||
end | |||
end | |||
lastSeq = id | |||
local missionID = getMissionID() | |||
-- all levels -- | |||
if missionID == 0 then | |||
if id == 0x898 then | |||
emuObj.PadVibrate(0,255,100) -- When a Patapon unit is created for tree of life. | |||
end | |||
end | |||
if id == 0x670 then | |||
emuObj.PadVibrate(50,255,250) -- After the player looses “Fever” mode (whistle down sound) | |||
elseif id == 0x9f0 or id == 0x910 then -- (was 8f0) | |||
emuObj.PadVibrate(0,240,80) -- New Patapon created. | |||
elseif id == 0x3f8 then | |||
emuObj.PadVibrate(20,0,200) -- Kaching collected | |||
end | |||
if missionID > 0 then | |||
if id == 0x568 or id == 0x53c then -- yippe or fireworks after complete. (was 508) | |||
missionRunning = false -- ? 31c 568 3a0 | |||
end | |||
if missionRunning == false then | |||
return | |||
end | |||
if missionID < 123 then | |||
----- non-boss levels ----- | |||
if id == 0x2d0 or id == 0x354 or id == 0x2a4 or id == 0x80 then | |||
emuObj.PadVibrate(100,10,260) -- falling building/object | |||
elseif id == 0x47c or id == 0x450 then | |||
emuObj.PadVibrate(0,150,100) -- picked up object | |||
elseif id == 0x510 then | |||
emuObj.PadVibrate(0,255,100) -- totem award | |||
elseif id == 0x328 then | |||
emuObj.PadVibrate(16,40,200) -- Stick barrier break | |||
elseif id == 0x170 then | |||
emuObj.PadVibrate(66,180,900) -- Windmill breaking | |||
elseif id == 0x334 then | |||
emuObj.PadVibrate(80,40,200) -- Cannon ball blast | |||
elseif id == 0x2b0 then | |||
emuObj.PadVibrate(120,20,300) -- Gillotine | |||
elseif id == 0x19c then | |||
emuObj.PadVibrate(130,30,300) -- Karmemen Rock Toss | |||
end | |||
if id == 0x124 and missionID == 118 then | |||
emuObj.PadVibrate(55,0,7000) -- Gate collapse | |||
end | |||
if id == 0x13c and missionID == 121 then | |||
emuObj.PadVibrate(55,0,500) -- Fort collapse | |||
end | |||
else | |||
----- boss levels ----- | |||
-- Dragon -- | |||
if id == 0x41c then | |||
emuObj.PadVibrate(10,0,100) -- Dragon step | |||
elseif id == 0x448 then | |||
emuObj.PadVibrate(10,0,200) -- Dragon jump, retreat, etc. | |||
elseif id == 0x4f8 then | |||
emuObj.PadVibrate(10,50,100) -- Dragon jump, retreat, etc. | |||
elseif id == 0x5a8 then | |||
emuObj.PadVibrate(120,0,900) -- Dragon fall/dead | |||
-- Demon Dragon -- | |||
elseif id == 0x800 then | |||
emuObj.PadVibrate(30,0,100) -- Demon Dragon step | |||
elseif id == 0x82c then | |||
emuObj.PadVibrate(0,130,100) -- Demon Dragon short step | |||
elseif id == 0xd54 then | |||
emuObj.PadVibrate(0,170,50) -- Demon Dragon wing flap | |||
elseif id == 0xb9c then | |||
emuObj.PadVibrate(170,0,250) -- Demon Dragon fireball | |||
elseif id == 0xbf4 then | |||
emuObj.PadVibrate(190,0,900) -- Demon Dragon fall/dead | |||
-- FrogRobot -- | |||
elseif id == 0x418 then | |||
emuObj.PadVibrate(15,0,200) -- FrogRobot / Spider step | |||
elseif id == 0x5d0 then | |||
emuObj.PadVibrate(15,0,200) -- FrogRobot jump, crawl | |||
elseif id == 0x4f4 then | |||
emuObj.PadVibrate(15,0,200) -- FrogRobot fist slam | |||
elseif id == 0x4c8 then | |||
emuObj.PadVibrate(0,10,2000) -- FrogRobot laser / Plant gas | |||
elseif id == 0x520 then -- cant use 0x54c | |||
emuObj.PadVibrate(150,0,1000) -- FrogRobot fall/dead | |||
-- Manbroth -- | |||
elseif id == 0x35c then | |||
emuObj.PadVibrate(15,0,400) -- Manbroth step | |||
elseif id == 0x388 then | |||
emuObj.PadVibrate(15,0,400) -- Manbroth stomp | |||
elseif id == 0x438 then | |||
emuObj.PadVibrate(0,150,500) -- Manbroth: snow spray / Firebird gas | |||
elseif id == 0x40c then | |||
emuObj.PadVibrate(0,10,500) -- Manbroth: scoop | |||
elseif id == 0x330 then | |||
emuObj.PadVibrate(150,0,700) -- Manbroth: fall/dead | |||
-- Demon -- | |||
elseif id == 0x7cc then | |||
emuObj.PadVibrate(45,5,400) -- Demon step 1 | |||
elseif id == 0x5d8 or id == 0x9dc or id == 0x9b0 then | |||
emuObj.PadVibrate(85,10,180) -- Demon step 2 | |||
elseif id == 0x7a0 then | |||
emuObj.PadVibrate(10,10,180) -- Demon jump | |||
elseif id == 0x7f8 then | |||
emuObj.PadVibrate(0,220,90) -- Demon breath | |||
elseif id == 0x380 then | |||
emuObj.PadVibrate(200,0,150) -- Demon meteors | |||
elseif id == 0x92c then | |||
emuObj.PadVibrate(170,0,2000) -- Demon: fall/dead | |||
-- Firebird -- | |||
elseif id == 0x598 then -- or 0x678? | |||
emuObj.PadVibrate(55,5,450) -- Firebird slam | |||
elseif id == 0x540 then | |||
emuObj.PadVibrate(10,160,180) -- Firebird peck | |||
elseif id == 0x6d0 then | |||
emuObj.PadVibrate(10,230,500) -- Firebird gas | |||
elseif id == 0x490 then | |||
emuObj.PadVibrate(200,0,1000) -- Firebird: fall/dead | |||
-- Worm -- | |||
elseif id == 0x3d4 or id == 0x400 then | |||
emuObj.PadVibrate(5,55,250) -- Worm burrow | |||
elseif id == 0x534 or id == 0x508 then | |||
emuObj.PadVibrate(5,55,250) -- Worm slide | |||
elseif id == 0x4b0 then | |||
emuObj.PadVibrate(5,155,1100) -- Worm fire | |||
elseif id == 0x484 then | |||
emuObj.PadVibrate(75,10,350) -- Worm slam | |||
elseif id == 0x560 then | |||
emuObj.PadVibrate(175,190,850) -- Worm roll | |||
elseif id == 0x3a8 then | |||
emuObj.PadVibrate(140,0,2000) -- Worm: fall/dead | |||
-- Plant -- | |||
elseif id == 0x470 then | |||
emuObj.PadVibrate(5,55,250) -- Plant jump | |||
elseif id == 0x49c then | |||
emuObj.PadVibrate(200,0,800) -- Plant fall/dead | |||
-- Machine -- | |||
elseif id == 0x4c4 then | |||
emuObj.PadVibrate(15,0,500) -- Machine step | |||
elseif id == 0x574 then | |||
emuObj.PadVibrate(180,0,400) -- Machine bomb | |||
elseif id == 0x51c then | |||
emuObj.PadVibrate(10,220,200) -- Machine gun | |||
elseif id == 0x6a8 then | |||
emuObj.PadVibrate(255,220,1000) -- Machine cannon | |||
elseif id == 0x5cc then | |||
emuObj.PadVibrate(100,12,300) -- Machine ball & chain | |||
elseif id == 0x498 then | |||
emuObj.PadVibrate(210,0,900) -- Machine fall/dead | |||
-- Crab -- | |||
elseif id == 0x39c then | |||
emuObj.PadVibrate(85,10,180) -- Crab step | |||
elseif id == 0x3c8 then | |||
emuObj.PadVibrate(190,0,400) -- Crab jump | |||
elseif id == 0x420 then | |||
emuObj.PadVibrate(5,180,180) -- Crab claw | |||
elseif id == 0x370 then | |||
emuObj.PadVibrate(240,10,600) -- Crab fall/dead | |||
-- Spider -- | |||
elseif id == 0x3ec then | |||
emuObj.PadVibrate(210,50,700) -- Spider fall/dead | |||
-- OTHER -- | |||
elseif id == 0x65c then | |||
emuObj.PadVibrate(0,200,80) -- fire (patapon yipe) | |||
elseif id == 0x5ac then | |||
emuObj.PadVibrate(0,200,80) -- fire burn(patapon yipe) | |||
end | end | ||
end | end | ||
end | end | ||
end | end | ||
local H2 = function() -- Labo::Talk::CommandEffect::generateCapEffect | |||
-- | emuObj.PadVibrate(0,255,150) -- When a Patapon unit from the players army is defeated or new special patapon created. | ||
end | |||
local H3 = function() -- Labo::Talk::CommandEffect::killEffect | |||
emuObj.PadVibrate(0,255,250) -- Thunder/Lightning | |||
end | |||
local H4 = function() -- MainGame__Mission__MissionScene__initialize__4LaboFv | |||
missionRunning = true | |||
getMissionName() | |||
end | |||
--- HOOKS --- | |||
local hook1 = axObj.AddHook(0x8828AA0, 0x8FBF0008, H1) -- sgxResFindSeq | |||
local hook2 = axObj.AddHook(0x8901B84, 0x27BDFFC0, H2) -- Labo::Talk__CommandEffect__generateCapEffect | |||
local hook3 = axObj.AddHook(0x89825B8, 0x27BDFF80, H3) -- Labo::Game__Map__ThunderLayer__generateThunder | |||
local hook4 = axObj.AddHook(0x8914844, 0x27BDFFF0, H4) -- MainGame__Mission__MissionScene__initialize__4LaboFv | |||
</pre> | </pre> | ||
===== | |||
=====Patches.lua===== | |||
<pre> | <pre> | ||
-- Lua 5.3 | -- Lua 5.3 | ||
Line 954: | Line 1,088: | ||
</pre> | </pre> | ||
== | ====basic==== | ||
*axInsnReplace (mem, org opcode, new opcode) - Replace allegrex memory | |||
*axFuncReplace - Replace allegrex function. Known implemented functions are: I3dVecSet, I3dRender__ReserveTrashQwc, I3dVecAdd, I3dVecScaleXYZ, I3dGuSetMatrix_PSP, patapon_memcpy | |||
====hooks/registers==== | |||
Hooks, and registers that can be called in lua api. | |||
Allegrex (usage - remove AX_): | |||
*AX_GetPC | |||
*AX_SetPC | |||
*AX_GetHi | |||
*AX_SetHi | |||
*AX_GetLo | |||
*AX_SetLo | |||
*AX_GetReg | |||
*AX_SetReg | |||
*AX_GetFpr | |||
*AX_SetFpr | |||
*AX_ReadMem8 | |||
*AX_ReadMem16 | |||
*AX_ReadMem32 | |||
*AX_ReadMemFloat | |||
*AX_ReadMemString | |||
*AX_WriteMem8 | |||
*AX_WriteMem16 | |||
*AX_WriteMem32 | |||
*AX_WriteMemFloat | |||
*AX_WriteMemString | |||
*AX_WriteMemStringZ | |||
*AX_AddHook | |||
*AX_RemoveHook | |||
*AX_Overlay | |||
*AX_InsnReplace | |||
*AX_FuncReplace | |||
Emulator (usage - remove EM_): | |||
*EM_SetTextureHashMode | |||
*EM_SetTextureScaleOffset | |||
*EM_SetTextureSaveSubdir | |||
*EM_SetSampleTitle | |||
*EM_SetDrawEDRam | |||
*EM_ToggleTextures | |||
*EM_PadRead | |||
*EM_PadReadPitch | |||
*EM_PadReadRoll | |||
*EM_PadVibrate | |||
*EM_PadRegisterSamples | |||
*EM_PadSetButtonsMode | |||
*EM_AddVsyncHook | |||
*EM_RemoveVsyncHook | |||
*EM_ThrottleMax | |||
*EM_ThrottleNormal | |||
*EM_Log | |||
*EM_GetLanguage | |||
*EM_GetNativeLanguage | |||
*EM_DisplayManual | |||
*EM_LoadConfig | |||
*EM_SaveConfig | |||
*EM_LoadMIDI | |||
*EM_GetMIDINotesAtTick | |||
*EM_LoadSlideshow | |||
*EM_StartSlideshow | |||
*EM_LoadState | |||
*EM_SaveState | |||
====Standard: ==== | |||
*patches/ | |||
*_patches.lua | |||
*feature_data/ | |||
*_features.lua | |||
*tooling/ | |||
*_tooling.lua | |||
*trophy_data/ | |||
*_trophies.lua | |||
==Information== | |||
====other==== | |||
*XXXXYYYYY_config.txt | |||
*--vms | |||
*--autoresampler [true] | |||
*videos/ | |||
*.mp4 | |||
*videos/%08x.mp4 | |||
*audio/%08x.ogg | |||
*--texswitch [original, replacement] | |||
videos/ | |||
.mp4 | |||
videos/%08x.mp4 | |||
audio/%08x.ogg | |||
Paths: | Paths: | ||
/app0/ | */app0/ | ||
/download0/ | */download0/ | ||
/savedata | */savedata | ||
/host/ | */host/ | ||
/hostapp/ | */hostapp/ | ||
/data/ | */data/ | ||
== | ====sample==== | ||
<pre>; PS4 configuration file for PSPHD | <pre>; PS4 configuration file for PSPHD | ||
Line 1,653: | Line 1,226: | ||
; With this we can freely make use of a normal alpha channel on replacement textures | ; With this we can freely make use of a normal alpha channel on replacement textures | ||
--replacementalpha=true | --replacementalpha=true | ||
; This enables bilinear filtering on replaced textures. (uncomment to enable) | |||
--replacementfilter=true | |||
; Antialiasing mode. SSAA4x looks best, MSAA4x only smooths edges. | ; Antialiasing mode. SSAA4x looks best, MSAA4x only smooths edges. | ||
Line 1,666: | Line 1,242: | ||
; Parappa Alpha Hack | ; Parappa Alpha Hack | ||
--parappaalphahack=true | --parappaalphahack=true | ||
</pre> | |||
==NIDs in HLE== | ; Adjust overall volume level (does not include pad speaker volume). Range from 0.0 (min) to 1.0 (max) | ||
--volume="0.25"</pre> | |||
===NIDs in HLE=== | |||
=====HLEInterruptManager===== | |||
*sceKernelRegisterSubIntrHandler | |||
*sceKernelReleaseSubIntrHandler | |||
*sceKernelEnableSubIntr | |||
=====HLEStdioForUser===== | |||
*sceIoOpen | |||
*sceIoClose | |||
*sceIoRead | |||
*sceIoWrite | |||
*sceIoLseek | |||
*sceIoLseek32 | |||
*sceIoDopen | |||
*sceIoDread | |||
*sceIoDclose | |||
*sceIoChdir | |||
*sceIoGetstat | |||
*sceIoDevctl | |||
*sceIoRename | |||
*sceIoMkDir | |||
*sceIoChstat | |||
*sceIoRemove | |||
*sceIoRmdir | |||
*sceIoOpenAsync | |||
*sceIoReadAsync | |||
*sceIoIoctlAsync | |||
*sceIoWaitAsync | |||
*sceIoWaitAsyncCB | |||
*sceIoCloseAsync | |||
*sceIoSetAsyncCallback | |||
*sceIoPollAsync | |||
*sceIoLseekAsync | |||
*sceIoGetAsyncStat | |||
*asyncWaitTimerCallback | |||
*asyncCallbackTimerCallback | |||
*sceKernelStdin | |||
*sceKernelStdout | |||
*sceKernelStderr | |||
=====HLELoadExecForUser===== | |||
*sceKernelCpuSuspendIntr | |||
*sceKernelCpuResumeIntr | |||
*sceKernelIsCpuIntrEnable | |||
*sceKernelExitGame | |||
*sceKernelRegisterExitCallback | |||
*sceKernelLoadModule | |||
*sceKernelUnloadModule | |||
*sceKernelStartModule | |||
*sceKernelStopModule | |||
*sceKernelStopUnloadSelfModule | |||
*sceKernelGetModuleIdByAddress | |||
*sceKernelStopUnloadSelfModuleWithStatus | |||
*sceKernelGetModuleId | |||
=====HLEsceAtrac3plus===== | |||
*sceAtracReinit | |||
*sceAtracDecodeData | |||
*sceAtracGetNextDecodePosition | |||
*sceAtracSetHalfwayBufferAndGetID | |||
*sceAtracGetSoundSample | |||
*sceAtracGetStreamDataInfo | |||
*sceAtracGetRemainFrame | |||
*sceAtracSetLoopNum | |||
*sceAtracResetPlayPosition | |||
*sceAtracReleaseAtracID | |||
*sceAtracGetAtracID | |||
*sceAtracGetNextSample | |||
*sceAtracSetData | |||
*sceAtracAddStreamData | |||
=====HLEsceAudio===== | |||
*sceAudioChReserve | |||
*sceAudioChRelease | |||
*sceAudioOutputBlocking | |||
*sceAudioChangeChannelConfig | |||
*sceAudioGetChannelRestLength | |||
*sceAudioChangeChannelVolume | |||
*sceAudioSetChannelDataLen | |||
*sceAudioOutputPanned | |||
*sceAudioOutputPannedBlocking | |||
*sceAudioGetChannelRestLen | |||
*sceAudioOutput2Reserve | |||
*sceAudioOutput2OutputBlocking | |||
*sceAudioOutput2Release | |||
*outputCallback | |||
=====HLEsceCtrl===== | |||
*sceCtrlSetSamplingCycle | |||
*sceCtrlSetSamplingMode | |||
*sceCtrlReadBufferPositive | |||
*sceCtrlReadBufferNegative | |||
*sceCtrlPeekBufferPositive | |||
*sceCtrlPeekBufferNegative | |||
*sceCtrlGetIdleCancelThreshold | |||
*sceCtrlSetIdleCancelThreshold | |||
*sceCtrlReadLatch | |||
*sceCtrlPeekLatch | |||
*sampleControllerCallback | |||
*vibrationControllerCallback | |||
=====HLEsceDisplay===== | |||
*sceDisplaySetMode | |||
*sceDisplaySetFramebuf | |||
*sceDisplayGetFramebuf | |||
*sceDisplayGetVcount | |||
*sceDisplayWaitVblankStart | |||
*sceDisplayWaitVblankStartCB | |||
*sceDisplayGetCurrentHcount | |||
*sceDisplayGetAccumulatedHcount | |||
*sceDisplayGetFramePerSec | |||
*sceDisplayWaitVblank | |||
*sceDisplayWaitVblankCB | |||
*sceDisplayIsVblank | |||
*sceDisplaySetHoldMode | |||
*vblankStart | |||
*vblankEnd | |||
=====HLEsceGe_user===== | |||
*sceGeEdramGetAddr | |||
*sceGeEdramGetSize | |||
*sceGeGetCmd | |||
*sceGeGetMtx | |||
*sceGeListEnQueue | |||
*sceGeListEnQueueHead | |||
*sceGeListDeQueue | |||
*sceGeListSync | |||
*sceGeListUpdateStallAddr | |||
*sceGeDrawSync | |||
*sceGeSetCallback | |||
*sceGeUnsetCallback | |||
*sceGeBreak | |||
*sceGeContinue | |||
*interruptCallback | |||
=====HLEsceImpose===== | |||
*sceImposeGetLanguageMode | |||
*sceImposeSetLanguageMode | |||
*sceImposeSetUMDPopup | |||
=====HLEsceMpeg===== | |||
*sceMpegInit | |||
*sceMpegFinish | |||
*sceMpegCreate | |||
*sceMpegDelete | |||
*sceMpegQueryMemSize | |||
*sceMpegMallocAvcEsBuf | |||
*sceMpegFreeAvcEsBuf | |||
*sceMpegInitAu | |||
*sceMpegGetAvcAu | |||
*sceMpegGetAtracAu | |||
*sceMpegQueryAtracEsSize | |||
*sceMpegAtracDecode | |||
*sceMpegRingbufferQueryMemSize | |||
*sceMpegRingbufferConstruct | |||
*sceMpegRingbufferDestruct | |||
*sceMpegRingbufferPut | |||
*sceMpegRingbufferAvailableSize | |||
*sceMpegAvcCsc | |||
*sceMpegAvcDecodeMode | |||
*sceMpegAvcDecodeDetail | |||
*sceMpegAvcDecodeFlush | |||
*sceMpegAvcQueryYCbCrSize | |||
*sceMpegAvcInitYCbCr | |||
*sceMpegAvcDecodeYCbCr | |||
*sceMpegAvcDecodeStopYCbCr | |||
*sceMpegRegistStream | |||
*sceMpegUnRegistStream | |||
*sceMpegQueryStreamSize | |||
*sceMpegQueryStreamOffset | |||
*sceMpegFlushAllStream | |||
=====HLEsceNet===== | |||
*sceNetInit | |||
*sceNetInetGetsockopt | |||
*sceNetInetSetsockopt | |||
*sceNetInetGetErrno | |||
=====HLEscePower===== | |||
*scePowerRegisterCallback | |||
*scePowerUnregisterCallback | |||
*scePowerSetClockFrequency | |||
*scePowerSetCpuClockFrequency | |||
*scePowerSetBusClockFrequency | |||
=====HLEscePsmf===== | |||
*scePsmfVerifyPsmf | |||
*scePsmfSetPsmf | |||
*scePsmfSpecifyStreamWithStreamTypeNumber | |||
*scePsmfCheckEPmap | |||
*scePsmfGetVideoInfo | |||
*scePsmfGetNumberOfStreams | |||
*scePsmfGetNumberOfEPentries | |||
*scePsmfGetEPWithId | |||
*scePsmfGetPsmfVersion | |||
*scePsmfGetNumberOfSpecificStreams | |||
*scePsmfSpecifyStream | |||
*scePsmfGetCurrentStreamType | |||
=====HLEscePsmfPlayer===== | |||
*scePsmfPlayerCreate | |||
*scePsmfPlayerDelete | |||
*scePsmfPlayerSetPsmf | |||
*scePsmfPlayerReleasePsmf | |||
*scePsmfPlayerStart | |||
*scePsmfPlayerGetAudioOutSize | |||
*scePsmfPlayerStop | |||
*scePsmfPlayerUpdate | |||
*scePsmfPlayerGetVideoData | |||
*scePsmfPlayerGetAudioData | |||
*scePsmfPlayerGetCurrentStatus | |||
*scePsmfPlayerGetPsmfInfo | |||
*scePsmfPlayerConfigPlayer | |||
*scePsmfPlayerBreak | |||
*scePsmfPlayerChangePlayMode | |||
=====HLEsceRtc===== | |||
*sceRtcGetCurrentTick | |||
*sceRtcGetAccumulativeTime | |||
*sceRtcGetCurrentClockLocalTime | |||
=====HLEsceSasCore===== | |||
*sceSasInit | |||
*sceSasCore | |||
*sceSasCoreWithMix | |||
*sceSasGetEndFlag | |||
*sceSasGetPauseFlag | |||
*sceSasGetEnvelopeHeight | |||
*sceSasGetAllEnvelopeHeights | |||
*sceSasGetOutputMode | |||
*sceSasSetOutputMode | |||
*sceSasGetGrain | |||
*sceSasSetGrain | |||
*sceSasSetVoice | |||
*sceSasSetNoise | |||
*sceSasSetPitch | |||
*sceSasSetVolume | |||
*sceSasSetSimpleADSR | |||
*sceSasSetKeyOn | |||
*sceSasSetKeyOff | |||
*sceSasSetPause | |||
*sceSasSetSL | |||
*sceSasSetADSR | |||
*sceSasSetADSRMode | |||
*sceSasRevEVOL | |||
*sceSasRevType | |||
*sceSasRevParam | |||
*sceSasRevVON | |||
=====HLEsceSuspendForUser===== | |||
*sceKernelPowerTick | |||
*sceKernelPowerLock | |||
*sceKernelPowerUnlock | |||
*sceKernelVolatileMemTryLock | |||
*sceKernelVolatileMemUnlock | |||
*sceKernelVolatileMemLock | |||
=====HLEsceUmdUser===== | |||
*sceUmdActivate | |||
*sceUmdGetDriveStat | |||
*sceUmdCheckMedium | |||
*sceUmdRegisterUMDCallback | |||
*sceUmdUnRegisterUMDCallBack | |||
*sceUmdWaitDriveStat | |||
*sceUmdWaitDriveStatWithTimer | |||
*sceUmdWaitDriveStatCB | |||
*sceUmdCancelWaitDriveStat | |||
*_UmdWaitDriveTimeout | |||
=====HLEsceUtility===== | |||
*sceUtilityLoadModule | |||
*sceUtilityUnloadModule | |||
*sceUtilityLoadNetModule | |||
*sceUtilityUnloadNetModule | |||
*sceUtilityLoadAvModule | |||
*sceUtilityUnloadAvModule | |||
*sceUtilityGetSystemParamInt | |||
*sceUtilityGetSystemParamString | |||
*sceUtilitySavedataGetStatus | |||
*sceUtilitySavedataShutdownStart | |||
*sceUtilitySavedataInitStart | |||
*sceUtilitySavedataUpdate | |||
*sceUtilityMsgDialogGetStatus | |||
*sceUtilityMsgDialogShutdownStart | |||
*sceUtilityMsgDialogInitStart | |||
*sceUtilityMsgDialogUpdate | |||
*sceUtilityMsgDialogAbort | |||
*sceUtilityOskGetStatus | |||
*sceUtilityOskShutdownStart | |||
*sceUtilityOskInitStart | |||
*sceUtilityOskUpdate | |||
*saveDataUpdateCallback | |||
*oskUpdateCallback | |||
=====HLEsceWlanDrv===== | |||
*sceWlanGetSwitchState | |||
*sceWlanGetEtherAddr | |||
=====HLESysMemUserForUser===== | |||
*sceKernelMaxFreeMemSize | |||
*sceKernelTotalFreeMemSize | |||
*sceKernelQueryMemoryInfo | |||
*sceKernelDevkitVersion | |||
*sceKernelPrintf | |||
*sceKernelGetPTRIG | |||
*sceKernelSetPTRIG | |||
*sceKernelAllocPartitionMemory | |||
*sceKernelFreePartitionMemory | |||
*sceKernelGetBlockHeadAddr | |||
*sceKernelGetMemoryBlockAddr | |||
*sceKernelAllocMemoryBlock | |||
*sceKernelFreeMemoryBlock | |||
*sceKernelSetCompilerVersion | |||
*sceKernelGetCompiledSdkVersion | |||
*sceKernelSetCompiledSdkVersion | |||
*sceKernelSetCompiledSdkVersion370 | |||
*sceKernelSetCompiledSdkVersion380_390 | |||
*sceKernelSetCompiledSdkVersion395 | |||
*sceKernelSetCompiledSdkVersion401_402 | |||
*sceKernelSetCompiledSdkVersion500_505 | |||
*sceKernelSetCompiledSdkVersion507 | |||
*sceKernelSetCompiledSdkVersion600_602 | |||
*sceKernelSetCompiledSdkVersion603_605 | |||
*sceKernelSetCompiledSdkVersion606 | |||
*sceKernelSetUsersystemLibWork | |||
*sceKernelSysMemUserForUser_ACBD88CA | |||
*sceKernelSysMemUserForUser_D8DE5C1E | |||
*sceKernelSysMemUserForUser_945E45DA | |||
=====HLEThreadManForUser===== | |||
*sceKernelDelayThread | |||
*sceKernelDelayThreadCB | |||
*sceKernelCreateCallback | |||
*sceKernelDeleteCallback | |||
*sceKernelSleepThread | |||
*sceKernelSleepThreadCB | |||
*sceKernelWakeupThread | |||
*sceKernelCreateMsgPipe | |||
*sceKernelDeleteMsgPipe | |||
*sceKernelSendMsgPipe | |||
*sceKernelTrySendMsgPipe | |||
*sceKernelReceiveMsgPipe | |||
*sceKernelTryReceiveMsgPipe | |||
*sceKernelReferMsgPipeStatus | |||
*sceKernelCreateThread | |||
*sceKernelStartThread | |||
*sceKernelExitThread | |||
*sceKernelDeleteThread | |||
*sceKernelExitDeleteThread | |||
*sceKernelGetThreadExitStatus | |||
*sceKernelTerminateThread | |||
*sceKernelTerminateDeleteThread | |||
*sceKernelWaitThreadEnd | |||
*sceKernelWaitThreadEndCB | |||
*sceKernelRotateThreadReadyQueue | |||
*sceKernelReferThreadStatus | |||
*sceKernelSuspendDispatchThread | |||
*sceKernelResumeDispatchThread | |||
*sceKernelSuspendThread | |||
*sceKernelResumeThread | |||
*sceKernelCancelWakeupThread | |||
*sceKernelGetThreadStackFreeSize | |||
*sceKernelGetSystemTimeLow | |||
*sceKernelGetSystemTime | |||
*sceKernelGetSystemTimeWide | |||
*sceKernelGetThreadCurrentPriority | |||
*sceKernelChangeCurrentThreadAttr | |||
*sceKernelGetThreadId | |||
*sceKernelChangeThreadPriority | |||
*sceKernelReferThreadProfiler | |||
*sceKernelCheckCallback | |||
*sceKernelCancelSema | |||
*sceKernelCreateSema | |||
*sceKernelDeleteSema | |||
*sceKernelPollSema | |||
*sceKernelSignalSema | |||
*sceKernelReferSemaStatus | |||
*sceKernelWaitSema | |||
*sceKernelWaitSemaCB | |||
*sceKernelCreateFpl | |||
*sceKernelDeleteFpl | |||
*sceKernelAllocateFpl | |||
*sceKernelAllocateFplCB | |||
*sceKernelTryAllocateFpl | |||
*sceKernelFreeFpl | |||
*sceKernelCancelFpl | |||
*sceKernelReferFplStatus | |||
*sceKernelCreateVpl | |||
*sceKernelDeleteVpl | |||
*sceKernelAllocateVpl | |||
*sceKernelAllocateVplCB | |||
*sceKernelTryAllocateVpl | |||
*sceKernelFreeVpl | |||
*sceKernelCancelVpl | |||
*sceKernelReferVplStatus | |||
*sceKernelCreateEventFlag | |||
*sceKernelSetEventFlag | |||
*sceKernelDeleteEventFlag | |||
*sceKernelClearEventFlag | |||
*sceKernelWaitEventFlag | |||
*sceKernelWaitEventFlagCB | |||
*sceKernelPollEventFlag | |||
*sceKernelCancelEventFlag | |||
*sceKernelReferEventFlagStatus | |||
*sceKernelCreateMbx | |||
*sceKernelDeleteMbx | |||
*sceKernelSendMbx | |||
*sceKernelReceiveMbx | |||
*sceKernelReceiveMbxCB | |||
*sceKernelPollMbx | |||
*sceKernelCancelReceiveMbx | |||
*sceKernelReferMbxStatus | |||
*sceKernelCreateMutex | |||
*sceKernelDeleteMutex | |||
*sceKernelLockMutex | |||
*sceKernelLockMutexCB | |||
*sceKernelTryLockMutex | |||
*sceKernelUnlockMutex | |||
*sceKernelCancelMutex | |||
*sceKernelReferMutexStatus | |||
*_sceKernelDelayThreadCallback | |||
*_sceKernelWaitThreadEndTimeout | |||
*_sceKernelAllocateFplTimeout | |||
*_sceKernelAllocateVplTimeout | |||
*_sceKernelWaitEventFlagTimeout | |||
*_sceKernelMsgPipeTimeout | |||
*_sceKernelLockMutexTimeout | |||
=====HLEUtilsForKernel===== | |||
*sceKernelIcacheInvalidateRange | |||
=====HLEUtilsForUser===== | |||
sceKernelIcacheInvalidateRange | *sceKernelIcacheInvalidateRange | ||
*sceKernelDcacheInvalidateRange | |||
*sceKernelDcacheWritebackInvalidateRange | |||
*sceKernelDcacheWritebackAll | |||
*sceKernelDcacheWritebackRange | |||
*sceKernelDcacheWritebackInvalidateAll | |||
*sceKernelSetGPO | |||
*sceKernelGetGPI | |||
*sceKernelLibcClock | |||
*sceKernelLibcTime | |||
*sceKernelLibcGettimeofday 0x71EC4271 | |||
===Unimplemented functions=== | |||
*sceIoChdir() unimplemented, ignoring | |||
*sceIoChstat unimplemented, ignoring | |||
*sceKernelExitGame() unimplemented | |||
*sceKernelStopUnloadSelfModule() unimplemented | |||
*sceKernelStopUnloadSelfModuleWithStatus() unimplemented | |||
*sceGeGetMtx() unimplemented | |||
*sceGeListDeQueue() unimplemented | |||
*sceGeBreak unimplemented | |||
*sceGeContinue unimplemented | |||
*sceNetInetGetsockopt() unimplemented | |||
*sceNetInetSetsockopt() unimplemented | |||
*sceNetInetGetErrno() unimplemented | |||
*sceWlanGetEtherAddr unimplemented | |||
*sceKernelQueryMemoryInfo() unimplemented | |||
*sceKernelGetPTRIG() unimplemented | |||
*sceKernelSetPTRIG() unimplemented | |||
*sceKernelSetCompiledSdkVersion401_402() unimplemented | |||
*sceKernelSetCompiledSdkVersion507() unimplemented | |||
*sceKernelSetCompiledSdkVersion600_602() unimplemented | |||
*sceKernelSetCompiledSdkVersion603_605() unimplemented | |||
*sceKernelSetUsersystemLibWork() unimplemented | |||
*sceKernelSysMemUserForUser_ACBD88CA() unimplemented | |||
*sceKernelSysMemUserForUser_D8DE5C1E() unimplemented -- sceKernelSafetyCheck0 | |||
*sceKernelSysMemUserForUser_945E45DA() unimplemented | |||
*sceKernelTerminateDeleteThread() unimplemented | |||
*sceKernelCancelSema unimplemented | |||
*sceKernelCancelFpl unimplemented | |||
*sceKernelReferFplStatus unimplemented | |||
*sceKernelCancelVpl unimplemented | |||
*sceKernelCreateMbx unimplemented | |||
*sceKernelDeleteMbx unimplemented | |||
*sceKernelSendMbx unimplemented | |||
*sceKernelReceiveMbx unimplemented | |||
*sceKernelReceiveMbxCB unimplemented | |||
*sceKernelPollMbx unimplemented | |||
*sceKernelCancelReceiveMbx unimplemented | |||
*sceKernelReferMbxStatus unimplemented | |||
===Partially Supported=== | ===Partially Supported=== | ||
'''sceIoIoctl''' | |||
supported: | supported: | ||
* 0x1010005 (UMD file seek set) | |||
* 0x1020006 (Get UMD file start sector) | |||
'''sceIoDevctl''' | |||
supported: | supported: | ||
* 0x1F100A4 (Prepare UMD data into cache) | |||
* 0x2415821 (MScmRegisterMSInsertEjectCallback) | |||
* 0x2415822 (MScmUnregisterMSInsertEjectCallback) | |||
* 0x2025806 (Check if the device is inserted (mscmhc0)) | |||
* 0x2425823 (Check if FAT enabled) | |||
* 0x2415823 (Set FAT as enabled), supported | |||
==Restricted== | ===Restricted=== | ||
*scePowerRegisterCallback - ignoring | |||
scePowerRegisterCallback - ignoring | *scePowerUnregisterCallback - ignoring | ||
scePowerUnregisterCallback - ignoring | *scePowerSetClockFrequency - ignoring | ||
scePowerSetClockFrequency - ignoring | *scePowerSetCpuClockFrequency(%d) - ignoring | ||
scePowerSetCpuClockFrequency(%d) - ignoring | *scePowerSetBusClockFrequency(%d) - ignoring | ||
scePowerSetBusClockFrequency(%d) - ignoring | *sceUtilityMsgDialogInitStart ignored | ||
sceUtilityMsgDialogInitStart ignored | |||
===More Information:=== | ===More Information:=== | ||
* https://gbatemp.net/threads/wip-psp-injection.503103/ | * https://gbatemp.net/threads/wip-psp-injection.503103/ | ||
* https://twitter.com/zordon605/status/993758941627772929 | * https://twitter.com/zordon605/status/993758941627772929 | ||
* https://forums.ppsspp.org/showthread.php?tid=22787 | * https://forums.ppsspp.org/showthread.php?tid=22787 | ||
** https://pastebin.com/CXRpVLdd (by [[User:DarkElement]]) | |||
* https://twitter.com/notzecoxao/status/993950722600460296 | * https://twitter.com/notzecoxao/status/993950722600460296 | ||
* https://twitter.com/ZiL0G80/status/994112249810866176 | * https://twitter.com/ZiL0G80/status/994112249810866176 |