Talk:PS2 Classics Emulator Compatibility List: Difference between revisions
No edit summary |
No edit summary |
||
Line 1,609: | Line 1,609: | ||
*Jak Emu used*</pre> | *Jak Emu used*</pre> | ||
==== | ====Getaway==== | ||
PAL | PAL | ||
<br>Text | <br>Text |
Revision as of 13:14, 18 August 2018
Official PS2emu Configuration Files
Here are configuration files extracted from official packages, to improve PS2 emulator compatibility on PS4. Most of them require also emulator/recompiler files from extracted pkg to work correctly.
Canis Canem Edit/Bully
SLES 535.61
LUA
apiRequest(0.1) -- Bully bug 9392 -- Performance fix local emuObj = getEmuObject() local thresholdArea = 600 emuObj.SetGsTitleFix( "ignoreUpRender", thresholdArea , {alpha=0x80000044 , zmsk=1 , tw=4, th=4 } )
Text
--fpu-accurate-mul-fast=1 --fpu-accurate-muldiv-range=0x3fa5c0,0x3fa5c0 --gs-flush-ad-xyz=SafeZWrite --vu1-opt-vf00=2 --vu1-di-bits=0 --ee-hook=0x001f3ef4,FastForwardClock --gs-use-deferred-l2h=0 --vu1-injection=1 --vu1-mpg-cycles=2500 --fpu-rsqrt-fast-estimate=0 --safe-area-min=1.0
ALL
SLUS-21269_features.lua
This is a substantial file. Over 150 lines with an extensive performance fix. I'm sharing the file itself as a download link. https://drive.google.com/file/d/12gt2fONqMP1rmEB9UMw3rIpEYbz1dQq8/view #Official widescreen support.
Destroy All Humans
SLUS_209.45
Text
--gs-use-mipmap=1 --gs-kernel-cl="mipmap" --gs-kernel-cl-up="mipmap2x2" --gs-ignore-dirty-page-border=1 --fpu-accurate-addsub-range=0x28bf00,0x28c100 #Fix for graphical glitches.
SLUS_209.45
SLUS-20945_features.lua
-- Lua 5.3 -- Title: Destroy All Humans! PS2 - SLUS-20945 (USA) -- Author: Ernesto Corvi, Adam McInnis -- Changelog: apiRequest(0.1) -- request version 0.1 API. Calling apiRequest() is mandatory. local eeObj = getEEObject() local emuObj = getEmuObject() local gpr = require( "ee-gpr-alias" ) -- you can access EE GPR by alias (gpr.a0 / gpr["a0"]) -- Widescreen eeObj.AddHook(0x308270, 0x3c0336c5, function() -- Graphics::Script::SetScreenRatio local mode = eeObj.GetGpr(gpr.v0) -- print(string.format("mode: %08x", mode)) if mode == 0x36c59d2b then -- widescreen emuObj.SetDisplayAspectWide() elseif mode == 0x855a87ef then -- standard emuObj.SetDisplayAspectNormal() end end) eeObj.AddHook(0x3078F4, 0xae0000f4, function() -- Graphics::Renderer::Renderer local renderer = eeObj.GetGpr(gpr.s0) eeObj.WriteMemFloat(renderer+0x200, 1.3333333) eeObj.WriteMemFloat(renderer+0x204, 1.7777777) eeObj.WriteMem32(renderer+0x208, 2) end) emuObj.SetDisplayAspectWide() -- CRC "settings.display.widescreen" = 0xbcf14d81 -- $s2 = SaveType (1 = new save) local overlay = InsnOverlay({ 0x27bdffe0, -- addiu $sp, -0x20 0xffbf0010, -- sd $ra, 0x10($sp) 0x0c0d49d8, -- jal Core::Memset(void *,int,uint) 0x00000000, -- nop 0x24030001, -- li $v1, 1 0x1472000b, -- bne $s2, $v1, +11 0x00000000, -- nop 0x0c09dacc, -- jal UFO::Progress::Get(void) 0x00000000, -- nop 0x3c01bcf1, -- lui $at, 0xbcf1 0x34214d81, -- ori $at, $at, 0x4d81 0xafa10000, -- sw $at, 0($sp) 0x24030001, -- li $v1, 1 0xa3a30004, -- sb $v1, 4($sp) 0x03a0282d, -- move $a1, $sp 0x0c09dd4c, -- jal UFO::Progress::Record::AddKey(UFO::Progress::Content const&) 0x0040202d, -- move $a0, $v0 0xdfbf0010, -- ld $ra, 0x10($sp) 0x03e00008, -- jr $ra 0x27bd0020 -- addiu $sp, 0x20 }) local call_overlay = 0x0c000000 | (overlay >> 2) eeInsnReplace(0x2789F8, 0x0c0d49d8, call_overlay) -- UFO::Progress::Storage::PrepareWrite #Official widescreen support.
Destroy All Humans 2
SLUS_214.39
Text
--gs-use-mipmap=1 --gs-kernel-cl="mipmap" --gs-kernel-cl-up="mipmap2x2" #Fix for graphical glitches.
SLUS_214.39
SLUS-21439_features.lua
-- Lua 5.3 -- Title: Destroy All Humans! 2 PS2 - SLUS-21439 (USA) -- Author: Ernesto Corvi, Adam McInnis -- Changelog: apiRequest(0.7) -- request version 0.1 API. Calling apiRequest() is mandatory. local eeObj = getEEObject() local emuObj = getEmuObject() local gpr = require( "ee-gpr-alias" ) -- you can access EE GPR by alias (gpr.a0 / gpr["a0"]) -- Widescreen eeObj.AddHook(0x33ca98, 0x3c0436c5, function() -- Graphics::Script::SetScreenRatio local mode = eeObj.GetGpr(gpr.v0) -- print(string.format("mode: %08x", mode)) if mode == 0x36c59d2b then -- widescreen emuObj.SetDisplayAspectWide() elseif mode == 0x855a87ef then -- standard emuObj.SetDisplayAspectNormal() end end) eeObj.AddHook(0x33afac, 0x0000282d, function() -- Graphics::Renderer::Renderer eeObj.SetGpr(gpr.a1, 2) end) emuObj.SetDisplayAspectWide() -- CRC "settings.display.anamorphic" = 0x8b36afe9 -- $s2 = SaveType (1 = new save) local overlay = InsnOverlay({ 0x27bdffe0, -- addiu $sp, -0x20 0xffbf0010, -- sd $ra, 0x10($sp) 0x0c059d02, -- memset 0x00000000, -- nop 0x24030001, -- li $v1, 1 0x1472000b, -- bne $s2, $v1, +11 0x00000000, -- nop 0x0c09b400, -- jal UFO::Progress::Get(void) 0x00000000, -- nop 0x3c01bcf1, -- lui $at, 0x8b36 0x34214d81, -- ori $at, $at, 0xafe9 0xafa10000, -- sw $at, 0($sp) 0x24030001, -- li $v1, 1 0xa3a30004, -- sb $v1, 4($sp) 0x03a0282d, -- move $a1, $sp 0x0c09dd4c, -- jal UFO::Progress::Record::AddKey(UFO::Progress::Content const&) 0x0040202d, -- move $a0, $v0 0xdfbf0010, -- ld $ra, 0x10($sp) 0x03e00008, -- jr $ra 0x27bd0020 -- addiu $sp, 0x20 }) local call_overlay = 0x0c000000 | (overlay >> 2) eeInsnReplace(0x271AD0, 0x0c059d02, call_overlay) -- UFO::Progress::Storage::PrepareWrite -- Disable Progressive Scan and Adjust Screen Position local overlay2 = InsnOverlay({ 0x27bdfff0, -- addiu $sp, -0x10 0xffbf0000, -- sd $ra, 0(sp) 0xffb00008, -- sd $s0, 8(sp) 0x3c05000f, -- lui $a1, 0x000f 0x34a57000, -- ori $a1, 0x7000 0x0c0db8b6, -- jal Script::State::DoString 0x0080802d, -- move $s0, $a0 0x24050001, -- li $a1, 1 0x0c0dba4c, -- jal Script::State::IsNull(int) 0x0200202d, -- move $a0, $s0 0xdfb00008, -- ld $s0, 8(sp) 0xdfbf0000, -- ld $ra, 0(sp) 0x03e00008, -- jr ra 0x27bd0010 -- addiu $sp, 0x10 }) local call_overlay2 = 0x0c000000 | (overlay2 >> 2) eeInsnReplace(0x2e5a14, 0x0c0dba4c, call_overlay2) -- Sim::Manager::ProcessScript near Sim::Manager::SetPauseFlag eeObj.AddHook(0x2e5a10, 0x0240202d, function() -- Sim::Manager::ProcessScript near Sim::Manager::SetPauseFlag local luaString = [[ -- disable progressive scan and adjust screen gui.i.SMOptionsDisplay.table.slots[3] = nil gui.i.SMOptionsDisplay.table.slots[4] = nil ]] eeObj.WriteMemStrZ(0xf7000, luaString) end) #Official widescreen support.
Everybody's Tennis/Hot Shots Tennis
SCES_545.35
Text
--gs-use-deferred-l2h=0 --l2h-2d-params=0x0000000800000010,0x00000000300a1400,256 --gs-motion-factor=50 --mtap1=always --gs-opt-frbuff-switch=1 --gs-ignore-dirty-page-border=1 --gs-ignore-rect-correction=1 --ee-native-function=memcpy,0x11e328 --ee-native-function=memset,0x11e4e0 #performance and visual fix(?)
SCES_545.35
LUA
local gpr = require("ee-gpr-alias") require( "ee-hwaddr" ) apiRequest(1.4) local eeObj = getEEObject() -- function dump(addr) -- print(string.format("=== dump %x ===", addr)) -- for i=0,0x1e do -- print(string.format(" %08x : %08x %08x %08x %08x", -- addr + i*16, -- eeObj.ReadMem32(addr + i*16 + 0), -- eeObj.ReadMem32(addr + i*16 + 4), -- eeObj.ReadMem32(addr + i*16 + 8), -- eeObj.ReadMem32(addr + i*16 +12))) -- end -- end -- Bug#8285 -- This patch changes the color of background on : -- - Language selection -- - Company logo -- - Start screen -- - Some menu -- which are in menu.bin overlay. Nothing affected in the actual game. eeObj.DmaAddHook( 1, function() if eeObj.ReadMem32(vif1_hw.TADR) == 0x1fd1c0 then -- On language select if eeObj.ReadMem32(0x4c8ef0) == 0x00ff9090 then eeObj.WriteMem32(0x4c8ef0, 0) end if eeObj.ReadMem32(0x548f30) == 0x00ff9090 then eeObj.WriteMem32(0x548f30, 0) end -- On company logo if eeObj.ReadMem32(0x4c6d70) == 0x00ff9090 then eeObj.WriteMem32(0x4c6d70, 0) end if eeObj.ReadMem32(0x546db0) == 0x00ff9090 then eeObj.WriteMem32(0x546db0, 0) end end end) eeInsnReplace(0x103d58, 0x27bdffc0, 0x03e00008) -- <SyncDCache> eeInsnReplace(0x103d5c, 0xffb20020, 0x00000000) eeNativeHook (0x103d58, 0x03e00008,'AdvanceClock',0x600) eeInsnReplace(0x103dd8, 0x3c02ffff, 0x03e00008) -- <iSyncDCache> eeInsnReplace(0x103ddc, 0x3442ffc0, 0x00000000) eeNativeHook (0x103dd8, 0x03e00008,'AdvanceClock',0x600) eeInsnReplace(0x103e98, 0x27bdffc0, 0x03e00008) -- <InvalidDCache> eeInsnReplace(0x103e9c, 0xffb20020, 0x00000000) eeNativeHook (0x103e98, 0x03e00008,'AdvanceClock',0x600) eeInsnReplace(0x103f18, 0x3c02ffff, 0x03e00008) -- <iInvalidDCache> eeInsnReplace(0x103f1c, 0x3442ffc0, 0x00000000) eeNativeHook (0x103f18, 0x03e00008,'AdvanceClock',0x600) eeInsnReplace(0x106970, 0x3c19ffff, 0x03e00008) -- <sceSifWriteBackDCache> eeInsnReplace(0x106974, 0x3739ffc0, 0x00000000) eeNativeHook (0x106970, 0x03e00008,'AdvanceClock',0x1700)
Fahrenheit/Indigo Prophecy
SLES_535.39
Text
--ee-hook=0x002097d0,FastForwardClock,0x8c6261fc --ee-hook=0x1a5570,AdvanceClock,,500000 --ee-hook=0x00223c48,AdvanceClock,0x0080382d,8000 --gs-kernel-cl="h2lpool" --gs-kernel-cl-up="h2lpool2x2" #Performance fix.
SLES_535.39
LUA
This is a substantial file. Over 20,000 lines with an extensive performance fix. I'm sharing the file itself as a download link. https://drive.google.com/file/d/1L2YxondID65KIAybKVCBH9KgFegqqOeQ/view -- Performace fix (bug #9785 ) -- bug#8571 -- ignore 'no wait vsync' case. -- unsyncv causes major slowness on loading screen, because the game pushes LOTS of identical frame data to GS.
SLES_535.39
SLES-53539_features.lua
-- Lua 5.3 -- Title: Fahrenheit PS2 - SLES-53539 (EUR) -- Author: Ernesto Corvi, Adam McInnis -- Changelog: require( "ee-gpr-alias" ) -- you can access EE GPR by alias (gpr.a0 / gpr["a0"]) require( "ee-cpr0-alias" ) -- for EE CPR apiRequest(0.1) -- request version 0.1 API. Calling apiRequest() is mandatory. local eeObj = getEEObject() local emuObj = getEmuObject() local L1 = function() -- QDT::SINT::SCRIPT_LOADING_SCREEN::EM::Run emuObj.ThrottleMax() end local L2 = function() -- QDT::SINT::SCRIPT_LOADING_SCREEN::EM::Stop emuObj.ThrottleNorm() end local load1 = eeObj.AddHook(0x387040, 0x3c02004b, L1) -- QDT::SINT::SCRIPT_LOADING_SCREEN::Run local load2 = eeObj.AddHook(0x387090, 0x3c02004b, L2) -- QDT::SINT::SCRIPT_LOADING_SCREEN::Stop -- Widescreen eeInsnReplace(0x20a7c0, 0x3c013faa, 0x3c013fe3) eeInsnReplace(0x20a7c4, 0x3421aaab, 0x34218e39) emuObj.SetDisplayAspectWide() -- Skip video mode options local videomenuVM = { 0x04, 0x01, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x3B, 0x0D, 0x00, 0x00, 0x3B, 0x0B, 0x00, 0x00, 0x3B, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 } local visualmenuVM = { 0x04, 0x01, 0x00, 0x00, 0xA2, 0x00, 0x00, 0x00, 0x3B, 0x19, 0x00, 0x00, 0x3B, 0x18, 0x00, 0x00 } -- locates src chunk on (dst,cnt). -1 if not found, offset if found local locateChunk = function(src, dst, count) local offs = -1 for x = 0, count - #src do if eeObj.ReadMem8(dst+x) == src[1] then local found = true for y = 1, #src do if eeObj.ReadMem8(dst+x+y-1) ~= src[y] then found = false break end end if found == true then offs = x break end end end return offs end eeObj.AddHook(0x2812b0, 0x27bdfff0, function() -- QDT::VM::BYTE_CODE::BYTE_CODE local obj = eeObj.GetGpr(gpr.a1) local bytecode = eeObj.ReadMem32(obj+0x18) local count = eeObj.ReadMem32(obj+0x20) if count > #videomenuVM then local offs = locateChunk(videomenuVM, bytecode, count) if offs >= 0 then print("Skipping video mode menu") eeObj.WriteMem8(bytecode+offs+4, 8) -- beq 0x44 -> beq 0x8 end end if count > #visualmenuVM then local offs = locateChunk(visualmenuVM, bytecode, count) if offs >= 0 then print("Skipping visual mode video menu") eeObj.WriteMem8(bytecode+offs+1, 2) -- beq 0xa2 -> bne 0xa2 end end end) -- Force 60hz eeInsnReplace(0x207ae0, 0x00a0802d, 0x24100001) -- move $s0, $a1 -> li $s0, 1 -- Fix for bug 9716, which is a bug in the game. -- Trying to retrieve a COM handle in the game will cause an infinite -- loop if the handle has been deallocated and the debug server is not -- connected. There's apparently a small race condition in the Asylum -- level that sometimes can trigger the bug. -- The fix involves getting out of the loop. -- It causes a small visual glitch but otherwise the game continues to work fine. eeInsnReplace(0x1c5958, 0x10400005, 0) -- QDT::KCOM::COM_SERVICE::RetrieveComHandle eeInsnReplace(0x1c5b6c, 0x10400005, 0) -- QDT::KCOM::COM_SERVICE::RetrieveComHandle eeInsnReplace(0x1c5d24, 0x10400005, 0) -- QDT::KCOM::COM_SERVICE::RetrieveComHandle #Official widescreen support, forced 60Hz/NTSC, along with a game crash bug fix.
Fatal Fury: Battle Archives volume 2
ALL
Text
--gs-uprender=none --gs-upscale=point --host-audio-latency=0.010 --force-frame-blend=1 #Graphical fix.
SLUS_217.23
SLUS-21723_features.lua
This is a substantial file. Over 500 lines with additional controller/fightstick support and various shader/bezel files. I'm sharing the file itself as a download link. https://drive.google.com/file/d/1FPPPJiHOazTXaD-H6K3kLACYDSdDeAE1/view #official widescreen support in the form of screen bezels, along with expanded fightstick support and scanline shaders.
Fu'un Super Combo!!!
SLPS_257.81
Text
--gs-uprender=2x2 --gs-upscale=point --host-audio-latency=0.3 --ee-hook=0x127050,AdvanceClock,0x2403002b,0x4000 --ee-hook=0x106734,FastForwardClock,0x0c04149c --ee-native-function=memcpy,0x11fa9c,0x0080402d --force-frame-blend=1 --vif1-ignore-cmd-ints=1 #Graphical and performance fixes.
SLPS_257.81
LUA
apiRequest(1.4) eeNativeFunction(0x11fa9c, 0x0080402d, 'memcpy') eeNativeFunction(0x11fb48, 0x2cc20008, 'memset') eeInsnReplace(0x1279d0, 0x27bdffc0, 0x03e00008) -- <SyncDCache> eeInsnReplace(0x1279d4, 0xffb20020, 0x00000000) eeNativeHook (0x1279d0, 0x03e00008,'AdvanceClock',0xa00) eeInsnReplace(0x127b00, 0x27bdffc0, 0x03e00008) -- <InvalidDCache> eeInsnReplace(0x127b04, 0xffb20020, 0x00000000) eeNativeHook (0x127b00, 0x03e00008,'AdvanceClock',0xa00) eeInsnReplace(0x12a258, 0x3c19ffff, 0x03e00008) -- <sceSifWriteBackDCache> eeInsnReplace(0x12a25c, 0x3739ffc0, 0x00000000) eeNativeHook (0x12a258, 0x03e00008,'AdvanceClock',0x1700) require("ee-gpr-alias") local eeObj = getEEObject() local emuObj = getEmuObject() -- *** viBufBeginPut (1) --eeInsnReplace(0x105628, 0x0c049c78, 0) -- jal 1271e0 <WaitSema> eeInsnReplace(0x1056c8, 0x0c049c70, 0) -- jal 1271c0 <SignalSema> -- *** viBufEndPut (1) eeInsnReplace(0x105708, 0x0c049c78, 0) -- jal 1271e0 <WaitSema> --eeInsnReplace(0x105730, 0x0c049c70, 0) -- jal 1271c0 <SignalSema> -- *** viBufFlush (1) --eeInsnReplace(0x105a88, 0x0c049c78, 0) -- jal 1271e0 <WaitSema> --eeInsnReplace(0x105ab8, 0x0c049c70, 0) -- jal 1271c0 <SignalSema> -- *** viBufPutTs (1) eeInsnReplace(0x105c10, 0x0c049c78, 0) -- jal 1271e0 <WaitSema> eeInsnReplace(0x105cf4, 0x0c049c70, 0) -- jal 1271c0 <SignalSema> -- it's redundant calling of _waitIpuIdle in libmpeg... not so huge impact tho. eeInsnReplace(0x118620, 0x0c04672a, 0) -- jal 119ca8 <_waitIpuIdle> -- bug# 9972 local emuObj = getEmuObject() emuObj.SetGsTitleFix( "ignoreSubBuffCov", "reserved", { } ) #Crash/stall fixes.
Grand Theft Auto III
SLUS_200.62
Text
--vu1-no-clamping=0 --gs-check-trans-rejection=1 --gs-kernel-cl-up="up2x2tc" --gs-optimize-30fps=1 --ee-hook=0x27cea8,FastForwardClock #Performance and graphical fix.
SLUS_200.62
LUA
apiRequest(0.1) -- request version 0.1 API. Calling apiRequest() is mandatory. -- Performace fix local emuObj = getEmuObject() local thresholdArea = 600 emuObj.SetGsTitleFix( "ignoreUpRender", thresholdArea , {alpha=0x80008068 , zmsk=1 } ) -- Bug#9133 -- workaround ... -16020(gp) value is something wrong. the value comes from CCamera::Process(). -- unfortunately accurate math or any other flags don't help for this problem, -- even though it should be calculation error issue. -- for here, it's just given 0 radian for CSprite::RenderBufferedOneXLUSprite_Rotate_Dimension() -- actually the cloud is a billboard, so it should have 0 degree in view-space. -- so given 0 degree must be OK.... but could cause some corruption (wrong perspective or something) eeInsnReplace(0x318344, 0xc792c16c, 0x44809000) -- lwc1 $f18,-16020(gp) #Performance fix.
SLUS_200.62
SLUS-20062_features.lua
-- Lua 5.3 -- Title: Grand Theft Auto III PS2 - SLUS-20062 (USA) v1.40 -- Author: Nicola Salmoria -- Date: November 3, 2015 require( "ee-gpr-alias" ) -- you can access EE GPR by alias (gpr.a0 / gpr["a0"]) apiRequest(0.7) -- need widescreen support local eeObj = getEEObject() local emuObj = getEmuObject() local USEWIDESCREEN_ADDRESS = 0x416748 local H1 = -- start of main() function() eeObj.WriteMem8(USEWIDESCREEN_ADDRESS, 1) -- enable widescreen end local H2 = -- change widescreen flag function() local isWidescreen = eeObj.GetGpr(gpr.v0) if isWidescreen == 0 then emuObj.SetDisplayAspectNormal() else emuObj.SetDisplayAspectWide() end end local hook1 = eeObj.AddHook(0x27ed04, 0x7fbf0000, H1) -- <main>: local hook2 = eeObj.AddHook(0x270e50, 0xa382b8d8, H2) -- <CMenuManager::AnaliseMenuContents(void)>: #Official widescreen support.
Grand Theft Auto: San Andreas
SLUS_209.46
Text
--gs-optimize-30fps=1 --ee-hook=0x34dee8,FastForwardClock --ee-hook=0x00245ee0,FastForwardClock --cop2-no-clamping=1 --gs-flush-ad-xyz=safe --vu1-clamp-range=0x04a,0x069 --gs-use-deferred-l2h=0 #Performance optimisation/fix.
SLUS_209.46
LUA
apiRequest(0.6) -- request version 0.1 API. Calling apiRequest() is mandatory. -- bug#8979 -- The game bugged. -- CStreaming::StreamPedsIntoRandomSlots(int*) expects 8 integers arrray to process, -- but CCheat::LoveConquersAllCheat() function copies just only 6 integers to the stack. -- it seems the table of the source is correct, so using lq/sq instead of ld/sd to copy -- the contents of the table correctly. eeInsnReplace(0x59fbb0, 0xdca20010, 0x78a20010) -- ld v0,16(a1) => lq eeInsnReplace(0x59fbb8, 0xfc820010, 0x7c820010) -- sd v0,16(a0) => sq -- bug#8979, actually different one -- the game has another bug... see https://pss.usrd.scea.com/bugzilla/show_bug.cgi?id=8979 eeInsnReplace(0x1abdd8, 0x102000d9, 0x102000cf) -- beqz at,1ac140 <CPopulation::AddPed(ePedType, unsigned int, CVector const &, bool)+0x3a0> -- Performace fix local emuObj = getEmuObject() local thresholdArea = 700 emuObj.SetGsTitleFix( "ignoreUpRender", thresholdArea , {alpha=0x80000044 , zmsk=1 } ) #Performance and rendering fixes.
SLUS_209.46
SLUS-20946_features.lua
-- Lua 5.3 -- Title: Grand Theft Auto: San Andreas - SLUS-20946 (USA) v3.00 -- Author: Nicola Salmoria -- Date: November 5, 2015 require( "ee-gpr-alias" ) -- you can access EE GPR by alias (gpr.a0 / gpr["a0"]) apiRequest(0.7) -- need widescreen support local eeObj = getEEObject() local emuObj = getEmuObject() local USEWIDESCREEN_ADDRESS = 0x7004ef local H1 = -- init widescreen flag function() eeObj.WriteMem8(USEWIDESCREEN_ADDRESS, 1) -- enable widescreen end local H2 = -- main game loop function() local isWidescreen = eeObj.ReadMem8(USEWIDESCREEN_ADDRESS) if isWidescreen == 0 then emuObj.SetDisplayAspectNormal() else emuObj.SetDisplayAspectWide() end end local hook1 = eeObj.AddHook(0x233584, 0xa200004f, H1) -- <CMenuManager::__ct(void)>: local hook2 = eeObj.AddHook(0x246750, 0x24040012, H2) -- <TheGame(void)>: #Official widescreen support.
Grand Theft Auto: Vice City
SLUS_205.52
Text
--gs-check-trans-rejection=1 --gs-kernel-cl-up="up2x2tc" --gs-optimize-30fps=1 --ee-hook=0x277b88,FastForwardClock --ee-hook=0x279a18,FastForwardClock #Performance fix.
SLUS_205.52
LUA
apiRequest(0.1) -- request version 0.1 API. Calling apiRequest() is mandatory. -- Performace fix local emuObj = getEmuObject() local thresholdArea = 600 emuObj.SetGsTitleFix( "ignoreUpRender", thresholdArea , {alpha=0x80008068 , zmsk=1 } ) -- Bug#9147 -- workaround ... -2104(gp) value is something wrong. the value comes from CCamera::Process(). -- unfortunately accurate math or any other flags don't help for this problem, -- even though it should be calculation error issue. -- for here, it's just given 0 radian for CSprite::RenderBufferedOneXLUSprite_Rotate_Dimension() -- actually the cloud is a billboard, so it should have 0 degree in view-space. -- so given 0 degree must be OK.... but could cause some corruption (wrong perspective or something) eeInsnReplace(0x334d64, 0xc792f7c8, 0x44809000) -- lwc1 $f18,-2104(gp) #Performance fix.
SLUS_205.52
SLUS-20552_features.lua
-- Lua 5.3 -- Title: Grand Theft Auto: Vice City - SLUS-20552 (USA) v3.00 -- Author: Nicola Salmoria -- Date: November 4, 2015 require( "ee-gpr-alias" ) -- you can access EE GPR by alias (gpr.a0 / gpr["a0"]) apiRequest(0.7) -- need widescreen support local eeObj = getEEObject() local emuObj = getEmuObject() local USEWIDESCREEN_ADDRESS = 0x4ba7bc local H1 = -- start of main() function() eeObj.WriteMem8(USEWIDESCREEN_ADDRESS, 1) -- enable widescreen end local H2 = -- main game loop function() local isWidescreen = eeObj.ReadMem8(USEWIDESCREEN_ADDRESS) if isWidescreen == 0 then emuObj.SetDisplayAspectNormal() else emuObj.SetDisplayAspectWide() end end local hook1 = eeObj.AddHook(0x279384, 0xffbf0000, H1) -- <main>: local hook2 = eeObj.AddHook(0x277784, 0x00000000, H2) -- <TheGame(void)>: -- Fix for bug #9161. The 'flying cars' cheat causes crashes when attempting to -- fly an helicopter. We avoid that by disabling recognition of the cheat altogether. -- The SLPM version comes with the cheat disabled out of the box. eeInsnReplace(0x27db2c, 0x14400015, 0x10000015) -- bnez -> b #Official widescreen support and removal of "flying cars" cheat due to game crash.
Jak and Daxter: The Precursor Legacy
SCES_503.61
Text
--ee-jit-pagefault-threshold=20 --gs-frontend-opt-mode=1 --gs-use-mipmap=1 --gs-kernel-cl="mipmap" --gs-kernel-cl-up="mipmap2x2" --vif-ignore-invalid-cmd=1 --vu1-mpg-cycles=144 --cop2-no-clamping=1 --host-audio-latency=0.040 #performance and graphical fix.
SCES_503.61
LUA
-- Jak EU apiRequest(2.2) local gpr = require("ee-gpr-alias") local emuObj = getEmuObject() local eeObj = getEEObject() local gsObj = getGsObject() local eeOverlay = eeObj.getOverlayObject() -- Disable internal field shift compensation, part of post-process removal feature. gsObj.SetDeinterlaceShift(0) -- Fix shadow emuObj.SetGsTitleFix( "forceSimpleFetch", "reserved", { texMode=1 } ) -- Reduce flush count emuObj.SetGsTitleFix( "SetSelfRender", "reserved", { fbmask= 0x00FFFFFF , renderSelf=1 , zmsk=1 , alpha=0 , texMode=1 } ) -- Disable post-processing -- update: removed due to occasional regression (bug#10608). post-processing is now skipped in the EE via 'depth-cue' -- emuObj.SetGsTitleFix( "ignoreSprite", "reserved", { texType=1 , tw=5 , th=8, zmsk=1 , alpha=0x80000044 } ) -- ------------------------- OVERLAY MANAGER -------------------------- g_OnOverlayRegistered = function(filename, start, size) -- global function provided for adding per-overlay callback handlers. end local DH8 = function() local s0 = eeObj.GetGpr(gpr.s0) local linkblock = eeObj.ReadMem32(s0+0x5c) --print( string.format("--> PRELOAD %08x %08x",s0, linkblock) ) local linkblock_allocate_length = eeObj.ReadMem32 (linkblock + 0x00) local linkblock_allocate_version = eeObj.ReadMem32 (linkblock + 0x04) local linkblock_allocate_segment_count = eeObj.ReadMem32 (linkblock + 0x08) local linkblock_allocate_name = eeObj.ReadMemStr(linkblock + 0x0c) local linkblock_allocate_seg1_linkptr = eeObj.ReadMem32 (linkblock + 0x4C) local linkblock_allocate_seg1_dataptr = eeObj.ReadMem32 (linkblock + 0x50) local linkblock_allocate_seg1_size = eeObj.ReadMem32 (linkblock + 0x54) local linkblock_allocate_seg1_flags = eeObj.ReadMem32 (linkblock + 0x58) local linkblock_allocate_seg2_linkptr = eeObj.ReadMem32 (linkblock + 0x5C) local linkblock_allocate_seg2_dataptr = eeObj.ReadMem32 (linkblock + 0x60) local linkblock_allocate_seg2_size = eeObj.ReadMem32 (linkblock + 0x64) local linkblock_allocate_seg2_flags = eeObj.ReadMem32 (linkblock + 0x68) local linkblock_allocate_seg3_linkptr = eeObj.ReadMem32 (linkblock + 0x6C) local linkblock_allocate_seg3_dataptr = eeObj.ReadMem32 (linkblock + 0x70) local linkblock_allocate_seg3_size = eeObj.ReadMem32 (linkblock + 0x74) local linkblock_allocate_seg3_flags = eeObj.ReadMem32 (linkblock + 0x78) -- seg1 is equiv to main in Jak3 -- seg3 is equiv to top in Jak3 -- seg2 appears to be unused ... ? --jstine if emuObj.IsToolingVerbose() then print( string.format("--> LOADED SEGMENT alloc_len %08x ver %08x segcount %08x name:\"%s\"", linkblock_allocate_length, linkblock_allocate_version, linkblock_allocate_segment_count, linkblock_allocate_name) ) print( string.format(" seg1linkptr %08x seg1dataptr %08x seg1size %08x seg1flags %08x", linkblock_allocate_seg1_linkptr, linkblock_allocate_seg1_dataptr, linkblock_allocate_seg1_size, linkblock_allocate_seg1_flags) ) print( string.format(" seg2linkptr %08x seg2dataptr %08x seg2size %08x seg2flags %08x", linkblock_allocate_seg2_linkptr, linkblock_allocate_seg2_dataptr, linkblock_allocate_seg2_size, linkblock_allocate_seg2_flags) ) print( string.format(" seg3linkptr %08x seg3dataptr %08x seg3size %08x seg3flags %08x", linkblock_allocate_seg3_linkptr, linkblock_allocate_seg3_dataptr, linkblock_allocate_seg3_size, linkblock_allocate_seg3_flags) ) end if linkblock_allocate_seg1_size ~= 0 then eeOverlay.Register(linkblock_allocate_name .. ".seg1", linkblock_allocate_seg1_dataptr, linkblock_allocate_seg1_size, false) end if linkblock_allocate_seg3_size ~= 0 then eeOverlay.Register(linkblock_allocate_name .. ".seg3", linkblock_allocate_seg3_dataptr, linkblock_allocate_seg3_size, true) end if (g_OnOverlayRegistered ~= nil) then -- Make sure to execute any previously registered OnOverlay handler if linkblock_allocate_seg1_size ~= 0 then g_OnOverlayRegistered(linkblock_allocate_name .. ".seg1", linkblock_allocate_seg1_dataptr, linkblock_allocate_seg1_size) end if linkblock_allocate_seg1_size ~= 0 then g_OnOverlayRegistered(linkblock_allocate_name .. ".seg3", linkblock_allocate_seg3_dataptr, linkblock_allocate_seg3_size) end end end assert(g_OnOverlayRegistered ~= nil) local prev_OnOverlayRegistered = g_OnOverlayRegistered g_OnOverlayRegistered = function(filename, start, size) if filename == "depth-cue.seg1" then -- Disable full-screen post process via depth-cue. -- This also removes half-pixel shift during interlacing. -- <depth-cue.seg1+00039c> -- 00701DFC:67BDFFF0 daddiu $sp,$sp,-0x10 (0xfffffff0) -> 03E00008 jr $ra -- 00701E00:FFBE0008 sd $fp,8($sp) -> 00000000 nop eeObj.WriteMem32(start + 0x39c, 0x03E00008) eeObj.WriteMem32(start + 0x3a0, 0x00000000) eeObj.WriteMem32(start + 0x004, 0x03E00008) eeObj.WriteMem32(start + 0x008, 0x00000000) end if (prev_OnOverlayRegistered ~= nil) then -- Make sure to execute any previously registered OnOverlay handler prev_OnOverlayRegistered(filename, start, size) end end -- hooked in link_control::finish(void)>: eeObj.AddHook(0x0010ACF8, 0x040C825, DH8) -- this is address US:0010abe0 JP:0010abd8 EU:0010ACF8 #Graphical fix, removal of intensive post process effects.
ALL
SCES-50361_features.lua
This is a substantial file. Over 700 lines with an extensive graphical and control fix. I'm sharing the file itself as a download link. https://drive.google.com/file/d/1KppgZpiK5bgESrpSRKo6kKPTysZ-NAC9/view #Shadows fix, control scheme changes, forced 60Hz/NTSC/Widescreen.
King of Fighters 98 Ultimate Match
ALL
Text
--force-frame-blend=1 --gs-use-deferred-l2h=0 #Graphical fix.
SLES_552.80
SLES-55280_features.lua
This is a substantial file. Over 800 lines with additional controller/fightstick support and various shader/bezel files. I'm sharing the file itself as a download link. https://drive.google.com/file/d/1-lArL1Yqe079Ni3G-ZtHr8hqNPUsjQJy/view #More stick support, shaders, bezels, widescreen fix.
King of Fighters 2000
ALL
Text
--gs-uprender=none --gs-upscale=point --host-audio-latency=0.01 --hid-pad=1 #graphical fixes and support for further fightsticks.
ALL
LUA
-- The King of Fighters 2000 apiRequest(1.1) local emuObj = getEmuObject() --will fix sprite rendering artifact ndx = 28 val = 0x86 -- spriteCorrectionTab[ndx] = val emuObj.SetGsTitleFix( "globalSet", "reserved", { fixSpriteDivTab = val | ( ndx<<16) }) #graphical fixes.
SLUS_208.34
SLUS-20834_features.lua
This is a substantial file. Over 700 lines with additional controller/fightstick support and various shader/bezel files. I'm sharing the file itself as a download link. https://drive.google.com/file/d/1FsPnuxgEa0ymnGdU6w2tdy-eamRN6l3e/view #More stick support, shaders, bezels, widescreen fix.
Manhunt
SLUS_208.27
Text
--ee-hook=0x4329e0,FastForwardClock,0x1600fff1 --gs-uv-shift-pointsampling=1 --ee-hook=0x1d1d60,AdvanceClock,0x27bdffb0,225 --ee-hook=0x1d71e0,AdvanceClock,0x0c09a4d0,100 #Fix crane issue, and probably fixing lightsourcing.
SLUS_208.27
Lua
-- Manhunt [US] local gpr = require('ee-gpr-alias') apiRequest(0.1) -- request version 0.1 API. Calling apiRequest() is mandatory. local emuObj = getEmuObject() local eeObj = getEEObject() -- Bug #9413 -- Disable uprender on the draw command which samples the framebuffer (0x3200) using bilinear sampling (texMode=2) -- All lighting effects use TriFan prim type, so use that as well to filter against. emuObj.SetGsTitleFix( "forceSimpleFetch", "reserved", {prim=5, texMode=2, tbp=0x320000} ) -- Bug#9277 -- Shorten the timeout period for some particular execution command(s). -- When entering the crane, some instruction is executed with a wait period of 0x7333. -- Shortening the wait period to 0x4000 it. Note that 0x5000 is enough to fix entering the -- crane once, but a more aggressive value was needed for subsequent entry into the crane. local FixBug9277 = function() local s0 = eeObj.GetGpr(gpr.s0) --local v0 = eeObj.GetGpr(gpr.v0) --print( string.format("-------- v0=0x%08x s0=0x%08x", v0, s0) ) if s0 == 0x7333 then eeObj.SetGpr(gpr.s0, 0x5800) end end -- No longer seems necessary, when FastForwardClock is applied here instead (see _cli.conf) eeObj.AddHookJT(0x1d71f8, 0x10000036, FixBug9277) #Further bug fixes as well as fixing bloom/overglare from lightsources.
Metal Slug Anthology
ALL
Text
--host-audio-latency=0.010 --gs-upscale=point --gs-uprender=none #fix for graphical glitches.
SLUS_215.50
LUA
-- Metal Slug Anthology PS2 - SLUS-21550 (USA) apiRequest(1.2) -- request version 0.1 API. Calling apiRequest() is mandatory. local eeObj = getEEObject() local emuObj = getEmuObject() -- Fix for black screen booting an elf. This is a game bug. -- The v1.0 of the game suffered from an intermittent bug on the real PS2 -- where sometimes it would hang on a black screen trying to launch a new elf. -- This is apparently due to a bad IOP state, which caused sceCdInit to hang. -- Later versions of the game (1.1, 1.2) attempted to fix this in different ways. -- On Olympus, v1.0 (USA) hangs always, while v1.2 (EUR/JPN) works always. -- The fix implemented here replaces a call to FlushCache() to loadImageAndReboot(), -- which is a function that reboots the IOP and resolves the hang. eeInsnReplace(0x189c24, 0x0c08f7f8, 0x0c061dd2) -- FlushCache() -> loadImageAndReboot() eeInsnReplace(0x117804, 0x0c0c1e08, 0x0c045e20) -- FlushCache() -> loadImageAndReboot()
Red Faction
SLUS_200.73
Text
--gs-use-deferred-l2h=1 --l2h-2d-params=0x0000000800000001,0x000000003a0a2300,512,2 --vu1=jit-sync --ee-cycle-scalar=1.02 --ee-hook=0x00213370,FastForwardClock,0x8F8293A8 --ee-hook=0x24ce30,AdvanceClock,0x8c620000,20000 --ee-hook=0x272b44,FastForwardClock,0x3c0201ee --ee-hook=0x272bc4,FastForwardClock,0x3c0201ee --ee-hook=0x21b354,AdvanceClock,0x3c031000,0x1240 #performance fixes.
SLUS_200.73
LUA
-- Red Faction [US] apiRequest(1.6) local gpr = require("ee-gpr-alias") -- title uses memcpy() to write to VU1 memory, so some instances will be hotfixed to -- use slowpath_memcpy() at runtime. eeNativeFunction(0x259820, 0x0080402d, 'memcpy') eeNativeFunction(0x2599d8, 0x2cc20008, 'memset') eeNativeFunction(0x253870, 0x27bdffd0, 'ieee754_acosf') eeNativeFunction(0x254620, 0x44026000, 'ieee754_sqrtf') eeNativeFunction(0x255a50, 0x44026000, 'cosf') eeNativeFunction(0x255df0, 0x44026000, 'sinf') eeNativeFunction(0x256318, 0x27bdffa0, 'acosf') eeInsnReplace(0x24d7e0, 0x24030064, 0x03e00008) -- <FlushCache> eeInsnReplace(0x24d7e4, 0x0000000c, 0x00000000) eeNativeHook (0x24d7e0, 0x03e00008,'AdvanceClock',0xa00) eeInsnReplace(0x24d810, 0x2403ff98, 0x03e00008) -- <iFlushCache> eeInsnReplace(0x24d814, 0x0000000c, 0x00000000) eeNativeHook (0x24d810, 0x03e00008,'AdvanceClock',0xa00) eeInsnReplace(0x24de20, 0x27bdffe0, 0x03e00008) -- <SyncDCache> eeInsnReplace(0x24de24, 0x0080302d, 0x00000000) eeNativeHook (0x24de20, 0x03e00008,'AdvanceClock',0x600) eeInsnReplace(0x24de98, 0x3c02ffff, 0x03e00008) -- <iSyncDCache> eeInsnReplace(0x24de9c, 0x3442ffc0, 0x00000000) eeNativeHook (0x24de98, 0x03e00008,'AdvanceClock',0x600) eeInsnReplace(0x24df58, 0x27bdffe0, 0x03e00008) -- <InvalidDCache> eeInsnReplace(0x24df5c, 0x0080302d, 0x00000000) eeNativeHook (0x24df58, 0x03e00008,'AdvanceClock',0x600) eeInsnReplace(0x24dfd0, 0x3c02ffff, 0x03e00008) -- <iInvalidDCache> eeInsnReplace(0x24dfd4, 0x3442ffc0, 0x00000000) eeNativeHook (0x24dfd0, 0x03e00008,'AdvanceClock',0x600) local emuObj = getEmuObject() local eeObj = getEEObject() -- bug#10159 workaround -- slowdown the jeep speed.... local jeepObj = 0 eeObj.AddHook(0x1376f0, 0xc6600174, function() jeepObj = eeObj.GetGpr(gpr.s1) end) eeObj.AddHook(0x137a48, 0xc7ac00bc, function() local s1 = eeObj.GetGpr(gpr.s1) if s1 == jeepObj then eeObj.SetFpr(12, eeObj.GetFpr(12)*0.90) end end) -- bug#10249 workaround -- forcibly calculate the jeep's suspension. eeObj.AddHook(0x19ee08, 0x8ec2120c, function() if jeepObj - 624 == eeObj.GetGpr(gpr.s6) then eeObj.SetGpr(gpr.v0, 1) end end) -- debug code for jeep movment target. -- local px = 0.0 -- local pz = 0.0 -- eeObj.AddHook(0x1375bc, 0x26650174, function() -- local s1 = eeObj.GetGpr(gpr.s1) -- if s1 == jeepObj then -- local s3 = eeObj.GetGpr(gpr.s3) -- px = eeObj.ReadMemFloat(s3 + 372) -- pz = eeObj.ReadMemFloat(s3 + 380) -- end -- end) -- eeObj.AddHook(0x1375c8, 0xa2620170, function() -- local s1 = eeObj.GetGpr(gpr.s1) -- if s1 == 0x19a7a00 then -- local s3 = eeObj.GetGpr(gpr.s3) -- local x = eeObj.ReadMemFloat(s3 + 372) -- local z = eeObj.ReadMemFloat(s3 + 380) -- if px ~= x or pz ~= z then -- print(string.format("[%f %f] => [%f %f] v0=%d", -- px, pz, x, z, eeObj.GetGpr(gpr.v0))) -- end -- end -- end) #physics calculations and performance fix.
SLUS_200.73
SLUS-20073_features.lua
-- Lua 5.3 -- Title: Red Faction PS2 - SLUS-20073 (USA) -- Author: Ernesto Corvi, Adam McInnis -- Changelog: apiRequest(1.1) -- request version 1.1 API. Calling apiRequest() is mandatory. local eeObj = getEEObject() local emuObj = getEmuObject() local L1 = -- main function() emuObj.ThrottleMax() end local L2 = -- main function() emuObj.ThrottleNorm() end local load1 = eeObj.AddHook(0x165590, 0x27bdffb0, L1) -- game_load_level local load2 = eeObj.AddHook(0x16578C, 0x7bb10010, L2) -- game_load_level -- Widescreen support -- eeInsnReplace(0x2071c4, 0x00000000, 0x3c013f40) -- gr_setup_3d eeInsnReplace(0x2071d0, 0x00000000, 0x4481f000) -- gr_setup_3d eeInsnReplace(0x2072e0, 0x00000000, 0x461ea502) -- gr_setup_3d eeInsnReplace(0x2072e8, 0x00000000, 0x461ead43) -- gr_setup_3d eeInsnReplace(0x23a34c, 0x44826000, 0x461e0303) -- shadow_ngps_render_and_copy eeInsnReplace(0x23a444, 0x3c024334, 0x3c024309) -- shadow_ngps_render_and_copy emuObj.SetDisplayAspectWide() #Official widescreen support.
Resident Evil Code: Veronica X
ALL
Text
--ee-jit-pagefault-threshold=30 #crash fix.
ALL
LUA
-- VeronicaX apiRequest(0.1) -- request version 0.1 API. Calling apiRequest() is mandatory. -- Bug# 9976 local emuObj = getEmuObject() emuObj.SetGsTitleFix( "clipScissors", "reserved", {alpha = 0 , frameW = 4 , psm = 0} ) #graphical fix.
Rogue Galaxy
ALL
Text
--gs-kernel-cl-up="up2x2skipinterp" --gs-optimize-30fps=1 #visual fixes and performance optimisation.
SCUS_974_90
LUA
require("ee-gpr-alias") apiRequest(0.1) -- request version 0.1 API. Calling apiRequest() is mandatory. -- Bug#8404 WORKAROUND -- See https://pss.usrd.scea.com/bugzilla/show_bug.cgi?id=8404 eeInsnReplace(0x124898, 0x3442ffff, 0x3442fffe) -- ori v0,v0,0xffff #unsure what this fixes.
Samurai Shodown Anthology
SLUS_216.29
Text
--gs-upscale=point --gs-uprender=2x2 --gs-motion-factor=25 --host-audio-latency=0.01 --gs-ignore-dirty-page-border=1 --gs-kernel-cl="h2lpool" --gs-kernel-cl-up="h2lpool2x2" --gs-h2l-list-opt=1 --gs-h2l-accurate-hash=1 #fix for substantial slowdown during combat.
Samurai Shodown VI
ALL
Text
--gs-upscale=point --gs-uprender=2x2 --gs-motion-factor=25 --host-audio-latency=0.01 --gs-ignore-dirty-page-border=1 --gs-kernel-cl="h2lpool" --gs-kernel-cl-up="h2lpool2x2" --gs-h2l-list-opt=1 --gs-h2l-accurate-hash=1 #same as Anthology, which VI is a patched-out section of; substantial slowdown during combat has been mitigated.
Twisted Metal Black
ALL
Text
--mtap1=always --gs-use-deferred-l2h=0 --l2h-2d-params=0x0000000400000004,0x00000000300a0000,240 --vu1-di-bits=0 --vu1-opt-vf00=2 #performance fix.
SCUS_971.01
LUA
require("ee-gpr-alias") apiRequest(0.1) -- request version 0.1 API. Calling apiRequest() is mandatory. -- This game uses an old kernel which has a bug on _TerminateThread. -- It is necessary to check the target thread is already in readyqueue or not. iopObj = getIOPObject() iopInsnReplace(0x0000C5C0, 0x0C004430, 0) -- jal 0x000110C0 // unlink_element (in TerminateThread) iopInsnReplace(0x0000C6EC, 0x0C004430, 0) -- jal 0x000110C0 // unlink_element (in iTerminateThread) local fix_TerminateThread = function() local TCB = iopObj.GetGpr(gpr.s0) local TCB_status = iopObj.ReadMem8(TCB + 0xc) local TCB_h_l = TCB if TCB_status == 0x2 then -- the target thread is on ready. local TCB_h_l_prev = iopObj.ReadMem32(TCB_h_l + 0) local TCB_h_l_next = iopObj.ReadMem32(TCB_h_l + 4) if TCB_h_l_prev == TCB_h_l_next then -- last_one_element(&tcb->h.l) -- we need to maintain threadManCB.readymap. -- print("WE NEED TO MAINTAIN threadManCB.readymap!") local s0 = iopObj.ReadMem16(TCB + 0xe) -- prio local s1 = TCB local a0 = s0 >> 5 a0 = a0 << 2 local v1 = s0 & 0x1f local v0 = 1 << v1 v1 = 0x10000 + a0 v1 = iopObj.ReadMem32(v1 + 0x1a08) v0 = ~v0 v1 = v1 & v0 local at = 0x10000+a0 iopObj.WriteMem32(at+0x1a08, v1) -- 0000B798 00102142 srl a0,s0,5 -- 0000B79C 00042080 sll a0,a0,2 -- 0000B7A0 3203001F andi v1,s0,0x1F -- 0000B7A4 24020001 li v0,0x1 -- 0000B7A8 00621004 sllv v0,v0,v1 -- 0000B7AC 3C030001 lui v1,0x1 -- 0000B7B0 00641821 addu v1,v1,a0 -- 0000B7B4 8C631A08 lw v1,0x1A08(v1) -- 0000B7B8 00021027 nor v0,zero,v0 -- 0000B7BC 00621824 and v1,v1,v0 -- 0000B7C0 3C010001 lui at,0x1 -- 0000B7C4 00240821 addu at,at,a0 -- 0000B7C8 AC231A08 sw v1,0x1A08(at) end end -- do unlink_element local v1 = iopObj.ReadMem32(TCB_h_l+0) -- element->prev local v0 = iopObj.ReadMem32(TCB_h_l+4) -- element->next iopObj.WriteMem32(v1 + 4, v0) -- element->prev->next = element->next iopObj.WriteMem32(v0 + 0, v1) end iopObj.AddHook(0x0000C5C4, 0x02002021, fix_TerminateThread) -- move a0,s0 iopObj.AddHook(0x0000C6F0, 0x02002021, fix_TerminateThread) -- move a0,s0 -- _waitIpuIdle64 spin perf down problem. Bug#8289 -- NOTE: new libarary also loops just 500dec around. 0x1389 is too much. eeInsnReplace(0x0020CF80, 0x28421389, 0x28420200) -- slti v0,v0,0x1389 #Performance and stall fixes.
Wild ARMS 3
ALL
Text
--gs-motion-factor=50 --ee-static-block-links=JAL,COP2 #graphical fixes.
SCUS_972.03
LUA
require("ee-gpr-alias") apiRequest(0.1) -- request version 0.1 API. Calling apiRequest() is mandatory. local emuObj = getEmuObject() -- fix vision logo (Wild Arms 3) local thresholdArea = 0 -- ignore alls items : fix #112276 emuObj.SetGsTitleFix( "ignoreUpRender", thresholdArea , { texType = 3, cbp = 0x2390, tbp = 0x288000} ) -- fix bug #9072 -- this is caused by a wrong string, which we patch directly on the disc. emuMediaPatch(0x438a, 12 + 0x174, { 0x6e5c2535 }, { 0x11202535 }) -- Bug#8907. accuracy-muldiv is too slow to use, so here added some value to get correct value. local eeObj = getEEObject() eeObj.AddHook(0x001ef6ec, 0x00000000, function() eeObj.SetFpr(0, eeObj.GetFpr(0) + 0.00001) end) #Graphical glitches and stall fix.
Custom PS2emu Configuration Files
Here are configuration files created by users, to improve PS2 emulator compatibility on PS4
Ace Combat 4
All versions
Text
--gs-kernel-cl="mipmap" --gs-kernel-cl-up="mipmap2x2" --gs-use-mipmap=1 #Fix for terrain textures
Ace Combat 5
All versions
Text
--gs-kernel-cl="mipmap" --gs-kernel-cl-up="mipmap2x2" --gs-use-mipmap=1 #Same fix for terrain textures
SLUS_208.51
LUA
apiRequest(0.1) -- request version 0.1 API. Calling apiRequest() is mandatory. -- Collision detection fix for Stage 3 onwards // Rearranging COP2 instructions that use old results eeInsnReplace(0x1A3B94, 0x4B00682C, 0x48498800) eeInsnReplace(0x1A3B98, 0x4B0C682C, 0x4B00682C) eeInsnReplace(0x1A3BA4, 0x48498800, 0x484A8800) eeInsnReplace(0x1A3BA8, 0x484A8800, 0x4B0C682C)
Ace Combat Zero: The Belkan War
All versions
Text
--gs-kernel-cl="mipmap" --gs-kernel-cl-up="mipmap2x2" --gs-use-mipmap=1 #Once again, same fix for terrain textures.
SLUS_213.46
LUA
apiRequest(0.1) -- request version 0.1 API. Calling apiRequest() is mandatory. -- Collision detection fix. eeInsnReplace(0x131EBC, 0x4B00682C, 0x48498800) eeInsnReplace(0x131EC0, 0x4B0C682C, 0x4B00682C) eeInsnReplace(0x131ECC, 0x48498800, 0x484A8800) eeInsnReplace(0x131ED0, 0x484A8800, 0x4B0C682C)
AirBlade
All versions
Text
--vu0-no-clamping=0 --vu0-clamp-operands=1 --vu0-clamp-results=1 --vu1-no-clamping=0 --vu1-clamp-operands=1 --vu1-clamp-results=1 --cop2-no-clamping=0 --cop2-clamp-operands=1 --cop2-clamp-results=1 #Fix for flickering models and textures
Ape Escape 2
All versions
Text
--gs-use-mipmap=1 --gs-kernel-cl="mipmap" --gs-kernel-cl-up="mipmap2x2" #Fix for flickering textures
Bloody Roar 4
All
Text
--vu0-no-clamping=0 --vu0-clamp-results=1 --vu1-no-clamping=0 --vu1-clamp-results=1 --cop2-no-clamping=0 --cop2-clamp-results=1 #SPS Fix
Cold Winter
All
Text
--vu0-no-clamping=0 --vu1-no-clamping=0 --vu0-clamp-operands=1 --vu0-clamp-results=1 --vu1-clamp-operands=1 --vu1-clamp-results=1 # fix graphic and physics, there are still issue with fmv, and minor stering issue.
Dead or Alive 2: Hardcore
SLUS_200.71
Lua
apiRequest(0.1) -- Fix hang, fix music, and sounds effects emuMediaPatch(0x186A71, 12 + 0x7e4, { 0x2404002b }, { 0x27c40010 }) emuMediaPatch(0x186A71, 12 + 0x7e8, { 0x0c0032b3 }, { 0x0c0032b7 }) emuMediaPatch(0x186A71, 12 + 0x7ec, { 0x27c50010 }, { 0x00000000 }) emuMediaPatch(0x186A71, 12 + 0x5e8, { 0x27bdfff0 }, { 0x03e00008 }) emuMediaPatch(0x186A71, 12 + 0x5ec, { 0xafbe0008 }, { 0x00000000 }) emuMediaPatch(0x186A7B, 12 + 0x6fc, { 0x27bdfff0 }, { 0x03e00008 }) emuMediaPatch(0x186A7B, 12 + 0x700, { 0xafbe0008 }, { 0x00000000 }) emuMediaPatch(0x186A85, 12 + 0x164, { 0x27bdfff0 }, { 0x03e00008 }) emuMediaPatch(0x186A85, 12 + 0x168, { 0xafbe0008 }, { 0x00000000 }) emuMediaPatch(0x186A85, 12 + 0x10c, { 0x27bdfff0 }, { 0x03e00008 }) emuMediaPatch(0x186A85, 12 + 0x110, { 0xafbe0008 }, { 0x00000000 }) emuMediaPatch(0x186A85, 12 + 0x1bc, { 0x27bdfff0 }, { 0x03e00008 }) emuMediaPatch(0x186A85, 12 + 0x1c0, { 0xafbe0008 }, { 0x00000000 }) emuMediaPatch(0x186A86, 12 + 0x7f0, { 0x27bdfff0 }, { 0x03e00008 }) emuMediaPatch(0x186A86, 12 + 0x7f4, { 0xafbe0008 }, { 0x00000000 }) emuMediaPatch(0x186C38, 12 + 0x6ec, { 0x24060001 }, { 0x24060000 })
Disgaea 2: Cursed Memories
SLUS-21397
Text
--gs-kernel-cl="mipmap" --gs-kernel-cl-up="mipmap2x2" --gs-use-mipmap=1 #Fix for lines in terrain textures and flickering textures
Dragon Quest VIII: Journey of the Cursed King
All
Text
--gs-kernel-cl-up="up2x2skipinterp" --gs-optimize-30fps=1 #Fix lines in shadows
Frogger: Ancient Shadow
SLUS_210.98
Text
--vu0-no-clamping=0 --vu1-no-clamping=0 --vu0-clamp-operands=1 --vu0-clamp-results=1 --vu1-clamp-operands=1 --vu1-clamp-results=1 --cop2-no-clamping=0 --cop2-clamp-operands=1 --cop2-clamp-results=1 #Fixes disappearing models during cutscenes and during gameplay
Ghost in the Shell: Stand Alone Complex
SLES_530.20
LUA
apiRequest(0.1) -- request version 0.1 API. Calling apiRequest() is mandatory. eeInsnReplace(0x10BC88, 0x4BEC682C, 0x48468800) eeInsnReplace(0x10BC8C, 0x4B8D617D, 0x4bec682c) eeInsnReplace(0x10BC90, 0x4A6D617C, 0x4b8d617d) eeInsnReplace(0x10BC98, 0x48468800, 0x4a6d617c) eeInsnReplace(0x12B2CC, 0x4BEC682C, 0x48468800) eeInsnReplace(0x12B2D0, 0x4B8D617D, 0x4bec682c) eeInsnReplace(0x12B2D4, 0x4A6D617C, 0x4b8d617d) eeInsnReplace(0x12B2DC, 0x48468800, 0x4a6d617c) eeInsnReplace(0x12B5F4, 0x4BEC682C, 0x48468800) eeInsnReplace(0x12B5F8, 0x4B8D617D, 0x4bec682c) eeInsnReplace(0x12B5FC, 0x4A6D617C, 0x4b8d617d) eeInsnReplace(0x12B604, 0x48468800, 0x4a6d617c) eeInsnReplace(0x1B0B58, 0x4BEC682C, 0x48468800) eeInsnReplace(0x1B0B5C, 0x4BED617D, 0x4bec682c) eeInsnReplace(0x1B0B68, 0x48468800, 0x4b8d617d) eeInsnReplace(0x1BF5FC, 0x4A0002FF, 0x48588800) eeInsnReplace(0x1BF60C, 0x48588800, 0x4a0002ff) eeInsnReplace(0x1BFBB8, 0x4A0002FF, 0x48588800) eeInsnReplace(0x1BFBC8, 0x48588800, 0x4a0002ff) eeInsnReplace(0x1BF818, 0x4A0002FF, 0x48588800) eeInsnReplace(0x1BF828, 0x48588800, 0x4a0002ff) eeInsnReplace(0x1C017C, 0x4A0002FF, 0x48588800) eeInsnReplace(0x1C018C, 0x48588800, 0x4a0002ff) -- Potential fix for broken interactive door // Rearranging COP2 ops so as to avoid macflag bad stuff
Killer7
All versions
Test
--vu0-no-clamping=0 --vu0-clamp-operands=1 --vu0-clamp-results=1 --vu1-no-clamping=0 --vu1-clamp-operands=1 --vu1-clamp-results=1 #fix for flickering polygons.
Klonoa 2
All versions
Text
--fpu-no-clamping=1 #Fix for misplaced objects, still require fix for texturing problems. Require Rogue Galaxy emu
Metal Saga
All versions
Text
--vif1-ignore-cmd-ints=1 #Fix for black-screen on SatCom/Equip menus. Game still unplayable due to immediate freeze during combat.
Need for Speed Carbon
SLES_543.22
Text
--fpu-accurate-range=0x150000,0x170000 # Fix loading freeze, game still unplayable due to 1 fps in-game.
NBA Street Vol.2
All versions
Text
--vu1-no-clamping=0 --vu1-clamp-operands=1 --vu1-clamp-results=1 --gs-adaptive-frameskip=1 # Fix for graphical corruptions, require "JAK" emu.
Oni
SLES_501.34 SLES_501.76 SLES_501.77 SLES_501.78 SLES_501.79
Lua
apiRequest(0.1) -- Fix for hang at loading screen eeInsnReplace(0x1CEF7C, 0x4100FFFF, 0x00000000)
SLUS_200.64
Lua
apiRequest(0.1) -- Fix for hang at loading screen eeInsnReplace(0x1CF3CC, 0x4100FFFF, 0x00000000)
Phantasy Star Universe
ALL
Text
--gs-use-clut-merge=1 --gs-kernel-cl="clutmerge" --gs-kernel-cl-up="clutmerge2x2" #Fix for flickering textures and geometry
Rygar: The Legendary Adventure
SLUS_204.71
Text
--fpu-accurate-range=0x147CC0,0x147EA0 #Fix for freeze after leaving the first area.
SNK vs Capcom: SVC Chaos
ALL
Text
--gs-use-clut-merge=1 --gs-kernel-cl="clutmerge" --gs-kernel-cl-up="clutmerge2x2" #Fixes missing hud/UI elements.
Street Fighter Alpha Anthology
ALL
Text
--gs-motion-factor=50 --host-audio-latency=0.01 --gs-kernel-cl="h2lpool" --gs-kernel-cl-up="h2lpool2x2" --gs-h2l-list-opt=1 --gs-h2l-accurate-hash=1 #Fix for performance issues. PS4 Pro required for full speed.
Tales of Destiny: Directors Cut
SLPS-25842, SLPS-25841, SCKA-20119
Text
--fpu-accurate-range=0x1C0000,0x1D0000 --gs-use-clut-merge=1 --gs-kernel-cl="clutmerge" --gs-kernel-cl-up="clutmerge2x2" # Fix control after exiting the menu, and graphic bugs. 0x1C0000,0x1D0000 range can be clamped is someone will find it slow.
Tales of The Abyss
SLUS_213.86
Text
--gs-uprender=none --gs-upscale=none #fix coruption lines caused by upscsaler, remember to remove 2x2 that already exist in config --fpu-accurate-range=0x27FFFC,0x27FFFF --fpu-accurate-range=0x2921F4,0x2921F8 #choral castle soft lock fix --fpu-no-clamping=0 --vu0-no-clamping=0 --vu1-no-clamping=0 --cop2-no-clamping=0 --fpu-clamp-results=1 --vu0-clamp-results=1 --vu1-clamp-results=1 --cop2-clamp-results=1 #Seems to fix not renedering characters in cut scenes
Tony Hawk Pro Skater 3
All
Text
--vu0-no-clamping=0 --vu1-no-clamping=0 --vu0-clamp-results=1 --vu1-clamp-results=1 --fpu-no-clamping=0 --cop2-no-clamping=0 --fpu-clamp-results=1 --cop2-clamp-results=1 #SPS Fix
Valkyrie Profile 2: Silmeria
All versions
Text
--gs-progressive=1 --gs-uprender=2x2 --gs-upscale=Point --vu-hack-triace=1 --gs-kernel-cl-up="up2x2simple" #Looks like it fix all graphical issues excluding purple effect in Forest at start of game
Vampire: Darkstalkers Collection
ALL
Text
--gs-motion-factor=50 --host-audio-latency=0.01 --gs-kernel-cl="h2lpool" --gs-kernel-cl-up="h2lpool2x2" --gs-h2l-list-opt=1 --gs-h2l-accurate-hash=1 #Fix for performance issues. PS4 Pro required for full speed.
Whiplash
All versions
Text
--gs-kernel-cl="mipmap" --gs-kernel-cl-up="mipmap2x2" --gs-use-mipmap=1 #Fix for texture glitches
X-Files - Resist or Serve
NTSC/U
Text
--vu0-no-clamping=0 --vu0-clamp-results=1 --vu1-no-clamping=0 --vu1-clamp-results=1 --cop2-no-clamping=0 --cop2-clamp-results=1 #fix for missing character models *Jak Emu used*
Getaway
PAL
Text
--vu1-mpg-cycles=950 #fix lag during cutscenes