PS4 [Research]PS2 emulator configuration on PS4

Fix for Soul Calibur 3 NTSC

CLI
Code:
--vif1-instant-xfer=0
--ee-cycle-scalar=2.8

LUA
Code:
-- Soul Calibur III (SLUS-21216)

apiRequest(1.0)

local eeObj = getEEObject()
local emuObj = getEmuObject()
local patcher = function()

-- 16:9
eeObj.WriteMem32(0x0012a118,0x3c013f40)
eeObj.WriteMem32(0x0012a11c,0x34210000)

end

emuObj.AddVsyncHook(patcher)

-- Performace fix (bug #9785 )
emuObj.SetGsTitleFix( "globalSet",  "reserved", { waveThreshold = 90000} )
emuObj.SetGsTitleFix( "ignoreAreaUpdate", 0, { } )
certain characters still cause severe slowdown/glitching

emu used=jakx v2

 
Last edited:
I just wanted to stop by and say: WOW GUYS!
So much stuff going on here, what at first seemed like very limited emu has now progressed to something else, all thanks to your persistence and knowledge sharing. I'm blown away of some results you can get out of PS2 software emulation on the potato PS4!
 
From the looks of the compatibility list, it seems the SSX games have the same exact issues as netemu on PS3: freezing with buzzing sound. Netemu only seems to have trouble with the first SSX game, though. I deduced problem lies in something to do with character rendering. I made a WIP config for both NTSC-U and PAL version that fixes a couple of the freezes, but still has some more freezes to deal with.

If problem is exactly the same on PS4, this should fix some of the freeze...mostly on the first and second level and warmup stage:

SSX (SLUS-20095)

lua

Code:
apiRequest(1.0)

local eeObj = getEEObject()
local emuObj = getEmuObject()
local patcher = function()
eeObj.WriteMem32(0x001CDA78,0x100000BB)
eeObj.WriteMem32(0x00117B1C,0x00000000)
eeObj.WriteMem32(0x001182A0,0x00000000)
eeObj.WriteMem32(0x00118BDC,0x00000000)
end

emuObj.AddVsyncHook(patcher)



SSX (SLES-50030)

lua
Code:
apiRequest(1.0)

local eeObj = getEEObject()
local emuObj = getEmuObject()
local patcher = function()
eeObj.WriteMem32(0x001D01A0,0x100000BB)
eeObj.WriteMem32(0x00117B24,0x00000000)
eeObj.WriteMem32(0x001182A8,0x00000000)
eeObj.WriteMem32(0x00118BE4,0x00000000)
end

emuObj.AddVsyncHook(patcher)

If all is well, it should fix general freezes. Quick test would be to select warmup and hold back on the analog stick after starting. Without config, it will freeze when speed decreases to around 20km/h. Config should fix this, pther freezes on warmup and first level, as well as some Elysium Alps freezes IF ISSUE IS EXACTLY THE SAME. There will still be freezes 90% of the time when picking up a perk, as well as freeze on beginning of Aloha level. Also random rare freezes throughout. If issue is not the same, then I can't do much more to fix it without a PS4.
 
From the looks of the compatibility list, it seems the SSX games have the same exact issues as netemu on PS3: freezing with buzzing sound. Netemu only seems to have trouble with the first SSX game, though. I deduced problem lies in something to do with character rendering. I made a WIP config for both NTSC-U and PAL version that fixes a couple of the freezes, but still has some more freezes to deal with.

If problem is exactly the same on PS4, this should fix some of the freeze...mostly on the first and second level and warmup stage:

SSX (SLUS-20095)

lua
Code:
apiRequest(1.0)

local eeObj = getEEObject()
local emuObj = getEmuObject()
local patcher = function()
eeObj.WriteMem32(0x001CDA78,0x100000BB)
eeObj.WriteMem32(0x00117B1C,0x00000000)
eeObj.WriteMem32(0x001182A0,0x00000000)
eeObj.WriteMem32(0x00118BDC,0x00000000)
end

emuObj.AddVsyncHook(patcher)


SSX (SLES-50030)

lua
Code:
apiRequest(1.0)

local eeObj = getEEObject()
local emuObj = getEmuObject()
local patcher = function()
eeObj.WriteMem32(0x001D01A0,0x100000BB)
eeObj.WriteMem32(0x00117B24,0x00000000)
eeObj.WriteMem32(0x001182A8,0x00000000)
eeObj.WriteMem32(0x00118BE4,0x00000000)
end

emuObj.AddVsyncHook(patcher)
If all is well, it should fix general freezes. Quick test would be to select warmup and hold back on the analog stick after starting. Without config, it will freeze when speed decreases to around 20km/h. Config should fix this, pther freezes on warmup and first level, as well as some Elysium Alps freezes IF ISSUE IS EXACTLY THE SAME. There will still be freezes 90% of the time when picking up a perk, as well as freeze on beginning of Aloha level. Also random rare freezes throughout. If issue is not the same, then I can't do much more to fix it without a PS4.

--iop-cycle-scalar=1.8
--host-audio-latency=1.1

Allows SSX to run flawlessly on the JakX v2 emu without @mrjaredbeta fix
 
Last edited:
Fix for The Simpsons Hit and Run NTSC

*edit - new better fix here - https://www.psx-place.com/threads/r...nfiguration-on-ps4.16131/page-113#post-317941

CLI
Code:
--gs-optimize-30fps=1
--gs-motion-factor=25
--ee-cycle-scalar=3.6
--iop-cycle-scalar=3.6
--ee-regalloc-scalar=RW
--gs-progressive=1

LUA
Code:
-- The Simpsons - Hit & Run (NTSC-U)<use kinetica v2 emu>
-- Widescreen hack by ElHecht

local gpr = require("ee-gpr-alias")
apiRequest(1.0)

local eeObj = getEEObject()
local emuObj = getEmuObject()
local patcher = function()

-- 16:9 ver
eeObj.WriteMem32(0x00138a88,0x00000000) -- 10400005
eeObj.WriteMem32(0x0014b360,0x00000000) -- 10400004
eeObj.WriteMem32(0x0014b364,0x00000000) -- 10400004
eeObj.WriteMem32(0x002a0b38,0x00000000) -- 10400004
eeObj.WriteMem32(0x0031c888,0x00000000) -- 10400004
eeObj.WriteMem32(0x0031d674,0x00000000) -- 10400004
end

emuObj.AddVsyncHook(patcher)

emulator used=Kinetica v2

 
Last edited:
@Stayhye is amazing finding these fixes.
Just one question. Will all these fixes be added to the ps4 ps2 compatibilty list.

We already know PS5 can run ps2 classics using ps4 backwards compatibility.
 
Updated fix for Soul Calibur 3

CLI
Code:
--vif1-instant-xfer=0
--ee-cycle-scalar=1.4
--iop-cycle-scalar=2.1
--vu1-mpg-cycles=190
--framelimiter=1
--framelimit-fps=60.0
--framelimit-scalar=2
--host-vsync=60

Near flawless gameplay and video. All characters render correctly. No more slowdown.

JakX v2 used.

 
Last edited:
--vif1-instant-xfer=0 --ee-cycle-scalar=1.4 --iop-cycle-scalar=2.1 --vu1-mpg-cycles=190 --framelimiter=1 --framelimit-fps=60.0 --framelimit-scalar=2 --host-vsync=60
I saw some new commands that you released. Can you explain what each command fixes? This makes it easier for more people to understand the knowledge.
 
I saw some new commands that you released. Can you explain what each command fixes? This makes it easier for more people to understand the knowledge.

Still learning, but they appear to have different effects on different games

All of the "cycle-scaler" commands reduce judder/stutter on some and fixes graphical artifacts on others.
"host-vsync" reduces tearing on fast movement on some games tested.
"vu1-mpg-cycles" have the same effect as the cycle-scaler, depending on game
"framelimiter" 1 or 0 enables the framelimiter.
"framelimiter-fps" sets the FPS(?)

commands grabbed from here
https://www.psdevwiki.com/ps4/PS2_Emulation#Emulator_Configuration

learned a lot from this


To everyone, I'm no expert. I'm just trying command/switches one at a time to see the effect on problematic games. Not only that, you could try for hours with one emu with no success, and then the first try with a different emu would solve the issue. It's all hit and miss.

Also, from a technical standpoint, I have no idea what the commands are actually doing internally on the emu. @kozarovv is the one for that knowledge.
 
Last edited:
Still learning, but they appear to have different effects on different games

All of the "cycle-scaler" commands reduce judder/stutter on some and fixes graphical artifacts on others.
"host-vsync" reduces tearing on fast movement on some games tested.
"vu1-mpg-cycles" have the same effect as the cycle-scaler, depending on game
"framelimiter" 1 or 0 enables the framelimiter.
"framelimiter-fps" sets the FPS(?)

commands grabbed from here
https://www.psdevwiki.com/ps4/PS2_Emulation#Emulator_Configuration

learned a lot from this


To everyone, I'm no expert. I'm just trying command/switches one at a time to see the effect on problematic games. Not only that, you could try for hours with one emu with no success, and then the first try with a different emu would solve the issue. It's all hit and miss.

Also, from a technical standpoint, I have no idea what the commands are actually doing internally on the emu. @kozarovv is the one for that knowledge.
Okay, thank you for your reply, as I thought, of course, the problems in each game and the applied commands are definitely different. Even if a certain command can fix common problems, the subsequent numerical utilization may be different , This coincides with my original idea. It is very difficult to test and repair the game. Sometimes it even needs to test hundreds of times to confirm the perfect repair of a certain game. Thank you for your hard work.
 
The more you use the "cycle-scalers" on games that are affected by them, you notice that they seem to "dial in/tune" the correct speed of said game. I discovered the usage trying to fix the horrible stutter on the menus of Simpsons Hit and Run. After trying so many other things, different emus, etc, this was all it really took(for that game) Discovered the effect of the "vu1-mpg-cycles" trying to fix GTA liberty city stories. That was the only command that sped up anything on that game
 
Yes, only after you have a better understanding of the game can you do more attempts to repair it. This experience is great! If you find the same problem with the same game, you can also use these commands to fix it, the only possibility is that the value changes!
 
I saw some new commands that you released. Can you explain what each command fixes? This makes it easier for more people to understand the knowledge.
--vif1-instant-xfer=0 is setting VIF to mode where it is not instantly transferring data no matter what other components do. To be honest i never thought about testing value 0, as i never imagined that they set instant VIF as default behavior. This is really nice find by @Stayhye , and should fix many games.

--ee-cycle-scalar=1.4 should be option that multiply/divide ps2 mips cycles that passed since one event to another. Every PS2 mips instruction take some cycles (from 5 to even 48), i doubt they are counting that perfectly. So scaling is done as workaround for games that don't like standard. This is little bit like overclocking/underclocking main EE core. But not exactly that, all depend what, and where game use.

--iop-cycle-scalar=2.1 similar to above but is unknown that scalar is between EE-IOP cycles, or IOP in overall.

--vu1-mpg-cycles=190 This is another not 100% known option, but it seems to be VU microprogram cycles head start. It determines how many cycles ONE microprogram will start ahead of EE on event (usually on branch test).

--framelimiter=1 is default behavior, or some games will run 4x times faster than they should. But is possible that is required for other limiter commands to work.

--framelimit-fps=60.0 set framelimit FPS, originally for NTSC titles is 59,94.

--framelimit-scalar=2 is multiplier of framelimit. So with previous command it will have unexpected behavior, or being ignored, or will multiply 60 or 59,94 fpas limit 2 times. So it will most likely set what -framelimit-fps=120.0 will do.

--host-vsync=60 as far as i know accept only 0,1 (or non zero without changes to behavior when 1 is used). What it do is described here: https://en.wikipedia.org/wiki/Screen_tearing#Vertical_synchronization
Is not recommended to use vsync if there is no need, it will introduce input lag.

Btw. Can anyone test Taz Wanted with new commands?
 

Similar threads

Back
Top