Editing PS2 Emulation

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

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 131: Line 131:
= Emulators =
= Emulators =


Every PS2 emulator is programmed differently. Sometimes choosing the right emulator is the only way to fix a game. Emulators are not provided pre-installed in the PS4 OS, but instead they have to be unpacked from an official PS2 CLASSICS PKG file signed by Sony. This list includes the typical usage of those emulators. Emus with apis below 1.5 are considered old, Emus with apis above 1.5 and below 2.0 are considered in-between, and 2.0 and above are modern.
Every PS2 emulator is programmed differently. Sometimes choosing the right emulator is the only way to fix a game. Emulators are not provided pre-installed in the PS4 OS, but instead they have to be unpacked from an official PS2 CLASSICS PKG file signed by Sony. This list includes the typical usage of those emulators.


{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center; font-size:small;"
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center; font-size:small;"
Line 159: Line 159:
| The King of Fighters 2000 || Seemingly one of the most GIF-accurate emus, it '''prevents Koei Tecmo games (Dynasty Warriors 5: Empires and Samurai Warriors 2) from suddenly freezing when battle starts. Moreover, it is likely the only emulator where '''Batman Begins''' does not crash.''' Often referred to as "KOF2000"|| 1.2 || '''Roguev1''', '''KOF98''', '''Okage'''
| The King of Fighters 2000 || Seemingly one of the most GIF-accurate emus, it '''prevents Koei Tecmo games (Dynasty Warriors 5: Empires and Samurai Warriors 2) from suddenly freezing when battle starts. Moreover, it is likely the only emulator where '''Batman Begins''' does not crash.''' Often referred to as "KOF2000"|| 1.2 || '''Roguev1''', '''KOF98''', '''Okage'''
|-
|-
| Destroy All Humans! || Fixed '''Tenchu: Fatal Shadows'''', and Veggietales crashing, as well as Bratz The Movie from freezing. || 0.1 ||  
| Destroy All Humans! || Fixed '''Tenchu: Fatal Shadows'''' crashing. || 0.1 ||  
|-
|-
| Destroy All Humans! 2 ||  || 0.7 ||  
| Destroy All Humans! 2 ||  || 0.7 ||  
Line 301: Line 301:
| --mute-streaming-audio || all,none,main,bgm || || --mute-streaming-audio=all
| --mute-streaming-audio || all,none,main,bgm || || --mute-streaming-audio=all
|-
|-
|-style="background-color:#D7EF54"
|  || Controllers || ||
|-
| --ds4-deadzone-adjust ||  ||  ||
|-
| --ds4-diagonal-adjust ||  ||  ||
|-
| --host-pad-loses-focus ||  ||  ||  --host-pad-loses-focus=1
|-
| --host-gamepads || 0, 1 ||  || --host-gamepads=1
|-
| --pad-record ||  0, 1  ||  Enables logging pad info in emulog ||
|-
| --pad-analog-to-digital || 0, 1 || Eternel ring emu uses the value 0 || --pad-analog-to-digital=0
|-
| --mtap1 || Disabled, Always, ByHost || Multitap switch. The values are correct but the multitap only works in certain games. || --mtap1=always
|-
| --mtap2 || Disabled, Always, ByHost || Multitap switch. Some games require multitap to be selected only on second port (1, 2-a, 2-b, 2-c layout). To achieve that, we need to disable the first mtap. In some cases, the emulator can be flawed in how it handles multi-tap when it involves "--mtap2". All functions for 2A, 2B, 2C, 2D must be redirected to ports on multi-tap 1 by using memory patches. || --mtap2=always
|}
|}


Line 331: Line 349:
0x4 beq zero,v1,0x0 <-- Advancelock cannot work here
0x4 beq zero,v1,0x0 <-- Advancelock cannot work here
0x8 nop <-- Advancelock cannot work here
0x8 nop <-- Advancelock cannot work here
0x10 nop <-- Advancelock can work here on both old and new emulators.</pre> Mfifodrain is still unknown, but only works on modern emus such as Jakv2. ||--ee-hook=0x0025A9F2,AdvanceClock,,500 <br>--ee-hook=0x0019F0AD,FastForwardClock
0x10 nop <-- Advancelock can work here on both old and new emulators.</pre> Mfifodrain is still unknown. ||--ee-hook=0x0025A9F2,AdvanceClock,,500 <br>--ee-hook=0x0019F0AD,FastForwardClock
|-
|-
|-style="background-color:#D7EF54"
|-style="background-color:#D7EF54"
Line 467: Line 485:
|  || || || Speedhacks || ||
|  || || || Speedhacks || ||
|-
|-
| --cop2-opt-flags || {{Universal}} || 0, 1 ,2 || {{Semi-Binary}} || Optimize flags upon recompilation (1 is safe, 2 update sticky, and mac flag on every status flag update) setting it to 0 or 2 can in some cases improve FPU accuracy. [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L280 More Info] || --cop2-opt-flags=1
| --cop2-opt-flags || {{Universal}} || 0, 1 ,2 || {{Semi-Binary}} || Optimize flags upon recompilation (1 is safe, 2 update sticky, and mac flag on every status flag update) setting it to 0 can in some cases improve FPU accuracy. [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L280 More Info] || --cop2-opt-flags=1
|-  
|-  
| --cop2-opt-vf00 || {{Universal}} || 0, 1, 2 || {{Semi-Binary}} || Seems to be a hacky way of optimization through the vf00 register. || --cop2-opt-vf00=1
| --cop2-opt-vf00 || {{Universal}} || 0, 1, 2 || {{Semi-Binary}} || Seems to be a hacky way of optimization through the vf00 register. || --cop2-opt-vf00=1
Line 521: Line 539:
| || || || Graphical fixes  || ||
| || || || Graphical fixes  || ||
|-
|-
| --vu-xgkick-delay  || {{Universal}} || Default = 1<br>Limit is between (0 => 31)  || {{1 Byte}}|| Delay xgkick instruction execution. PCSX2 uses 6 cycles, PS3 uses 2-8 cycles depending on the game. A game with missing graphics will require a low value such as 0, while one that crashes might require a high value such as 7.|| --vu-xgkick-delay=8
| --vu-xgkick-delay  || {{Universal}} || Limit is between (0 => 31)  || {{1 Byte}}|| Delay xgkick instruction execution. PCSX2 uses 6 cycles, PS3 uses 2-8 cycles depending on the game. A game with missing graphics will require a low value such as 0, while one that crashes might require a high value such as 7.|| --vu-xgkick-delay=8
|-
|-
| --vu-custom-min-max  || {{Universal}} || 0, 1 || {{binary}} || Custom Max/Mini logic for denormals. Disabled on pcsx2 by default but enabled by default on a couple of emus such as jakv2. Disabling it could potentially restore missing graphics, as it tends to adjust VU timing.|| --vu-custom-min-max=0
| --vu-custom-min-max  || {{Universal}} || 0, 1 || {{binary}} || Custom Max/Mini logic for denormals. Disabled on pcsx2 by default but enabled by default on a couple of emus such as jakv2. Disabling it could potentially restore missing graphics, as it tends to adjust VU timing.|| --vu-custom-min-max=0
Line 572: Line 590:
|  || || Speedhacks || ||  ||
|  || || Speedhacks || ||  ||
|-
|-
| --vu1-mpg-cycles  || {{Universal}} || 1 - 65535 || {{2 Bytes}}||  Set initial speed for VU1 Micro-programs. 100 is the default value. Generally, if VU1 requirements were a bottleneck, increasing it will result in better performance while possibly breaking graphics and lowering internal frame rates, and decreasing it might result in the opposite. There is no one-size-fits-all solution, as lowering or raising could yield differing results. || --vu1-mpg-cycles=1000<br><pre> Symbols (They change values close to VU1-mpg-cycles' offset):
| --vu1-mpg-cycles  || {{Universal}} || 1 - 65535 || {{2 Bytes}}||  Set initial speed for VU1 Micro-programs. 100 is the default value. If VU1 requirements were a bottleneck, increasing it will result in better performance while decreasing it will result in the opposite. As a side note, increasing it can benefit MTVU-sensitive games. || --vu1-mpg-cycles=1000<br><pre> Symbols (They change values close to VU1-mpg-cycles' offset):


$ goes to the specified succeeding offsets. $0 will go 2 bytes forward and change them. $1 will go 4 bytes forward and change the 2 bytes specified. For example, $0,$1 will change the 4 bytes ahead as the specified 2 bytes' value.
$ goes to the specified succeeding offsets. $0 will go 2 bytes forward and change them. $1 will go 4 bytes forward and change the 2 bytes specified. For example, $0,$1 will change the 4 bytes ahead as the specified 2 bytes' value.
Line 584: Line 602:
| --vu1-const-prop || {{Universal}} || 0, 1|| {{binary}} || Enabled by default. 0 will disable it and cause performance issues but with higher compatability.[https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L312 More info] || --vu1-const-prop=1
| --vu1-const-prop || {{Universal}} || 0, 1|| {{binary}} || Enabled by default. 0 will disable it and cause performance issues but with higher compatability.[https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L312 More info] || --vu1-const-prop=1
|-
|-
| --vu1-opt-flags || {{Universal}} || 0, 1, 2 ||  {{Semi-Binary}} || Optimize flags upon recompilation (1 is safe, 2 update sticky, and mac flag on every status flag update) Seems to be set to 1 at default. [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L280 More Info] || --vu1-opt-flags=0
| --vu1-opt-flags || {{Universal}} || 0, 1, 2 ||  {{Semi-Binary}} || Optimize flags upon recompilation (1 is safe, 2 update sticky, and mac flag on every status flag update) [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L280 More Info] || --vu1-opt-flags=0
|-  
|-  
| --vu1-opt-vf00 || {{Universal}} || 0, 1, 2 || {{Semi-Binary}} || Seems to be a hacky way of optimization through the vf00 register. || --vu1-opt-vf00=2
| --vu1-opt-vf00 || {{Universal}} || 0, 1, 2 || {{Semi-Binary}} || Seems to be a hacky way of optimization through the vf00 register. || --vu1-opt-vf00=2
|-  
|-  
| --vu1-jr-cache-policy || {{Exclusive}} || newprog, sameprog, auto, new, same || {{string}} || PCSX2 uses newprog as the default setting. Setting it into newprog has been proven to fix some crashes, and reduce stuttering. [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L319 Info] || --vu1-jr-cache-policy=newprog
| --vu1-jr-cache-policy || {{Exclusive}} || newprog, sameprog, auto, new, same || {{string}} || PCSX2 uses newprog as the default setting. Setting it into newprog has been proven to fix some crashes [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L319 Info] || --vu1-jr-cache-policy=newprog
|-
|-
| --vu1-jalr-cache-policy|| {{Exclusive}} || newprog, sameprog, auto, new, same || {{string}} || PCSX2 uses newprog as the default setting. Setting it into newprog has been proven to fix some crashes, and reduce stuttering. [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L319 Info] || --vu1-jalr-cache-policy=newprog
| --vu1-jalr-cache-policy|| {{Exclusive}} || newprog, sameprog, auto, new, same || {{string}} || PCSX2 uses newprog as the default setting. Setting it into newprog has been proven to fix some crashes [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L319 Info] || --vu1-jalr-cache-policy=newprog
|-  
|-  
|-style="background-color:#D7EF54"
|-style="background-color:#D7EF54"
Line 601: Line 619:
| --vu1-clamp-range || {{Exclusive}} || vu1 memory offset start,end (0x0 - 0x800) ||  style="background:#5c32a8; color:#ffffff;"|Hex combination || Values must not exceed 0x800 ||
| --vu1-clamp-range || {{Exclusive}} || vu1 memory offset start,end (0x0 - 0x800) ||  style="background:#5c32a8; color:#ffffff;"|Hex combination || Values must not exceed 0x800 ||
|-
|-
| --vu1-accurate-addsub-range ||  {{Exclusive}} || vu1 memory offset start,end (0x0 - 0x800) ||  style="background:#5c32a8; color:#ffffff;"|Hex combination || Allows the VU1 to accurately add/subtract in the specified memory range by using software floats rather than hardware floats.|| --vu1-accurate-addsub-range=0x000,0x800
| --vu1-accurate-addsub-range ||  {{Exclusive}} || vu1 memory offset start,end (0x0 - 0x800) ||  style="background:#5c32a8; color:#ffffff;"|Hex combination || Allows the VU1 to accurately add/subtract in the specified memory range by using software floats rather than hardware floats.|| --vu1-accurate-addsub-range=0x0000,0x0600
|-  
|-  
| --vu1-mul0fix-range || {{Exclusive}} || vu1 memory offset start,end (0x0 - 0x800) || style="background:#5c32a8; color:#ffffff;"|Hex combination || Allows the VU1 to accurately multiply by 0 in the specified memory range by using software floats rather than hardware floats. || --vu1-mul0fix-range=0x0,0x800
| --vu1-mul0fix-range || {{Exclusive}} || vu1 memory offset start,end (0x0 - 0x800) || style="background:#5c32a8; color:#ffffff;"|Hex combination || Allows the VU1 to accurately multiply by 0 in the specified memory range by using software floats rather than hardware floats. || --vu1-mul0fix-range=0x123,0x123
|-  
|-  
| --vu1-injection || {{Universal}} || 0, 1 || {{binary}} || Replace some VU1 instructions with pre-made optimized instructions? || --vu1-injection=1
| --vu1-injection || {{Universal}} || 0, 1 || {{binary}} || unknown || --vu1-injection=1
|-
|-
| --vu1-native-patch || {{Exclusive}} || 0, 1 || {{binary}} || Use native patches from recompiler, not compatible with Jak emus. Sony uses it for their official release of Primal || --vu1-native-patch=1
| --vu1-native-patch || {{Exclusive}} || 0, 1 || {{binary}} || Use native patches from recompiler, not compatible with Jak emus. Sony uses it for their official release of Primal || --vu1-native-patch=1
Line 663: Line 681:
| --vu0-no-clamping || {{Universal}} || 0,1 || {{binary}} || Changes the clamping behavior of the VU0. Setting specific to ps4 emulators, unimplemented in pcsx2. The default emulator's value is 1. || --vu0-no-clamping=0
| --vu0-no-clamping || {{Universal}} || 0,1 || {{binary}} || Changes the clamping behavior of the VU0. Setting specific to ps4 emulators, unimplemented in pcsx2. The default emulator's value is 1. || --vu0-no-clamping=0
|-  
|-  
| --vu0-accurate-addsub-range || {{Exclusive}} || offset (0x0 - 0x200) || style="background:#5c32a8; color:#ffffff;"|Hex combination || Allows the VU0 to accurately Add/Subtract in the specified memory range by using software floats rather than hardware floats. Strangely, it rejects offsets higher than 0x200. || --vu0-accurate-addsub-range=0x0,0x200
| --vu0-accurate-addsub-range || {{Exclusive}} || offset (0x0 - 0x200) || style="background:#5c32a8; color:#ffffff;"|Hex combination || Allows the VU0 to accurately Add/Subtract in the specified memory range by using software floats rather than hardware floats. Strangely, it rejects offsets higher than 0x200. ||  
|-
|-
| --vu0-mul0fix-range || {{Exclusive}} || vu0 memory offset start,end (0x0 - 0x200) ||  style="background:#5c32a8; color:#ffffff;"|Hex combination || Allows the VU0 to accurately Multiply by 0 in the specified memory range by using software floats rather than hardware floats. Strangely, it rejects offsets higher than 0x200. || --vu0-mul0fix-range=0x0,0x200
| --vu0-mul0fix-range || {{Exclusive}} || vu0 memory offset start,end (0x0 - 0x200) ||  style="background:#5c32a8; color:#ffffff;"|Hex combination || Allows the VU0 to accurately Multiply by 0 in the specified memory range by using software floats rather than hardware floats. Strangely, it rejects offsets higher than 0x200. ||
|-
|-
|-style="background-color:#FEA15C"
|-style="background-color:#FEA15C"
|  || || Other || || ||
|  || || Other || || ||
|-
|-
| --vu0-injection || {{Exclusive}} || 0, 1 || {{binary}} || Replace some VU0 instructions with pre-made optimized instructions? || --vu0-injection=1
| --vu0-injection || {{Exclusive}} || 0, 1 || {{binary}} || Unknown usage. || --vu0-injection=1
|-
|-
| --vu0-inst-q || {{Universal}} || 0, 1  || {{binary}} || instant Q, no stalling on WAITQ, or instances of Q  || --vu0-inst-q=1
| --vu0-inst-q || {{Universal}} || 0, 1  || {{binary}} || instant Q, no stalling on WAITQ, or instances of Q  || --vu0-inst-q=1
Line 707: Line 725:
| --vif1-ignore-cmd-ints || {{Exclusive}} || 0, 1 ||  {{Binary}} ||  Set to 1 to ignore command interrupt bit. ([https://psi-rockin.github.io/ps2tek/#vifcommands info] , explanation of int bit is right before command list). Can in some cases fix games that freeze while showing the same frame if set to 1. Games likes "Men in Black II - Alien Escape" and "Test Drive Unlimited" Will always need it. || --vif1-ignore-cmd-ints=1
| --vif1-ignore-cmd-ints || {{Exclusive}} || 0, 1 ||  {{Binary}} ||  Set to 1 to ignore command interrupt bit. ([https://psi-rockin.github.io/ps2tek/#vifcommands info] , explanation of int bit is right before command list). Can in some cases fix games that freeze while showing the same frame if set to 1. Games likes "Men in Black II - Alien Escape" and "Test Drive Unlimited" Will always need it. || --vif1-ignore-cmd-ints=1
|-
|-
| --vif1-instant-xfer || {{Universal}} ||  1 = Instant VIF1<br>0 = Delayed VIF1 || {{Binary}} || Changes VIF1 timing. 0 slows its timing and is the compatible option for most games, while 1 speeds up its timing, and being more compatible with a small fraction of games. It can be used to fix graphical glitches or potentially prevent games from freezing and crashing. || --vif1-instant-xfer=0
| --vif1-instant-xfer || {{Universal}} ||  1 = Instant VIF1<br>0 = Delayed VIF1 || {{Binary}} || Changes VIF1 timing. 0 slows its timing and is the compatible option for most games, while 1 speeds up its timing, and being more compatible with a small fraction of games. It can be used to fix graphical glitches or potentially prevent games from freezing. || --vif1-instant-xfer=0
|}
|}


Line 719: Line 737:
|  ||  || || || SIF1 (IOP) ||
|  ||  || || || SIF1 (IOP) ||
|-
|-
| --iop-sif1-cycle-scalar || {{Exclusive}} || Accelerate SIF cycles: (0.99 => 0.1)<br>Default = 1.0<br>Decelerate SIF cycles: (1.1 => ∞ )|| {{Float}}|| Controls the speed at which the IOP receives from the EE || --iop-sif1-cycle-scalar=0.1
| --iop-sif1-cycle-scalar || {{Exclusive}} || Accelerate SIF cycles: (0.99 => 0.1)<br>Decelerate SIF cycles: (1.1 => ∞ )|| {{Float}}|| Controls the speed at which the IOP receives from the EE || --iop-sif1-cycle-scalar=0.1
|-
|-
| --ee-sif1-cycle-scalar || {{Exclusive}} ||Accelerate SIF cycles: (0.99 => 0.1)<br>Default = 5.0<br>Decelerate SIF cycles: (1.1 => ∞ )|| {{Float}}|| Controls the speed at which the EE sends to the IOP || --ee-sif1-cycle-scalar=0.1
| --ee-sif1-cycle-scalar || {{Exclusive}} ||Accelerate SIF cycles: (0.99 => 0.1)<br>Decelerate SIF cycles: (1.1 => ∞ )|| {{Float}}|| Controls the speed at which the EE sends to the IOP || --ee-sif1-cycle-scalar=0.1
|-style="background-color:#99ddff"
|-style="background-color:#99ddff"
|  ||  || || || SIF0 (EE) ||
|  ||  || || || SIF0 (EE) ||
|-
|-
| --iop-sif0-cycle-scalar || {{Exclusive}} || Accelerate SIF cycles: (0.99 => 0.1)<br>Default = 1.0<br>Decelerate SIF cycles: (1.1 => ∞ )|| {{Float}}|| Controls the speed at which the IOP sends to the EE || --iop-sif0-cycle-scalar=0.1
| --iop-sif0-cycle-scalar || {{Exclusive}} || Accelerate SIF cycles: (0.99 => 0.1)<br>Decelerate SIF cycles: (1.1 => ∞ )|| {{Float}}|| Controls the speed at which the IOP sends to the EE || --iop-sif0-cycle-scalar=0.1
|-
|-
| --ee-sif0-cycle-scalar || {{Exclusive}} || Accelerate SIF cycles: (0.99 => 0.1)<br>Default = 5.0<br>Decelerate SIF cycles: (1.1 => ∞ )|| {{Float}}|| Controls the speed at which the EE receives from the IOP || --ee-sif0-cycle-scalar=0.1
| --ee-sif0-cycle-scalar || {{Exclusive}} || Accelerate SIF cycles: (0.99 => 0.1)<br>Decelerate SIF cycles: (1.1 => ∞ )|| {{Float}}|| Controls the speed at which the EE receives from the IOP || --ee-sif0-cycle-scalar=0.1
|-
|-
|}
|}
Line 768: Line 786:
| --gs-flush-ad-xyz || {{Exclusive}} ||  always, safe, safeZwrite, off, 0 || {{string}} || Force a primitive flush when a framebuffer is also an input texture. This fixes some processing effects, but it can sometimes be heavy on the GS in terms of performance. GTA: SA, and Jak 3 use this command. || --gs-flush-ad-xyz=safe
| --gs-flush-ad-xyz || {{Exclusive}} ||  always, safe, safeZwrite, off, 0 || {{string}} || Force a primitive flush when a framebuffer is also an input texture. This fixes some processing effects, but it can sometimes be heavy on the GS in terms of performance. GTA: SA, and Jak 3 use this command. || --gs-flush-ad-xyz=safe
|-
|-
| --gs-force-bilinear || {{Universal}} || 0, 1 || {{binary}} || Forces bilinear filtering, can fix ghosting problems in some cases, and corrects positioning between pixels. Recommended for most games except the ones using 2D images, as it could possibly break games that rely on nearest filtering. || --gs-force-bilinear=1
| --gs-force-bilinear || {{Universal}} || 0, 1 || {{binary}} || Forces bilinear filtering, can fix ghosting problems in some cases. Not recommended for games that use 2D images, as it could possibly break games that rely on nearest filtering.|| --gs-force-bilinear=1
|-
|-
|-style="background-color:#D7EF54"
|-style="background-color:#D7EF54"
Line 805: Line 823:
| --gs-fieldswap-delay || {{Universal}} || Default = 0<br>Highest = 254 || {{1 Byte}} || Wait longer than usual to change field. In essence, it blurs/sharpens image. ||
| --gs-fieldswap-delay || {{Universal}} || Default = 0<br>Highest = 254 || {{1 Byte}} || Wait longer than usual to change field. In essence, it blurs/sharpens image. ||
|-   
|-   
| --gs-uv-shift-pointsampling || {{Exclusive}} || 0, 1 || {{binary}} || It is used on games like manhunt. || --gs-uv-shift-pointsampling=1
| --gs-uv-shift-pointsampling || {{Exclusive}} || 0, 1 || {{binary}} || Can be used on games like manhunt that have issues with [https://github.com/PCSX2/pcsx2/issues/257#issuecomment-1140338680 UV light rendering] || --gs-uv-shift-pointsampling=1
|-
|-
| --gs-render-tile-threshold || {{Exclusive}} || Lowest = 0<br>Default = 4294967295 || {{4 Bytes}}  || Unknown. Used by Psychonauts|| --gs-render-tile-threshold=300000
| --gs-render-tile-threshold || {{Exclusive}} || Lowest = 0<br>Default = 4294967295 || {{4 Bytes}}  || Unknown. Used by Psychonauts|| --gs-render-tile-threshold=300000
Line 811: Line 829:
| --threaded-gs || {{Universal}} || 0, 1 || {{binary}} || Multi-threaded-gs ? || --threaded-gs=1
| --threaded-gs || {{Universal}} || 0, 1 || {{binary}} || Multi-threaded-gs ? || --threaded-gs=1
|-
|-
| --gs-aspect-ratio || {{Universal}} || aspect/float (default=0.81) ||  {{float}} || Can fix too-zoomed in games and vice versa. || --gs-aspect-ratio=0.65
| --gs-aspect-ratio || {{Universal}} || aspect/float (default=0.81) ||  {{float}} || || --gs-aspect-ratio=0.65
|-
|-
| --gs-frontend-opt-mode || {{Exclusive}} || 0, 1, 2 || {{Semi-Binary}} || GS optimization mode? Unknown effect. Used on the Jak series. || --gs-frontend-opt-mode=1
| --gs-frontend-opt-mode || {{Exclusive}} || 0, 1, 2 || {{Semi-Binary}} || GS optimization mode? Unknown effect. Used on the Jak series. || --gs-frontend-opt-mode=1
Line 848: Line 866:
|}
|}


====Input/Output====
==== IOP ====
=====IOP=====


<pre>The emulated I/O Processor (IOP) settings. Commands here are rarely useful, as very few games will require them. The IOP controls the emulated DEV9, SPU2, USB, Memory cards, CDVD, Firewire, along with other input/output devices</pre>
<pre>The emulated I/O Processor (IOP) settings. Commands here are rarely useful, as very few games will require them. The IOP controls the emulated DEV9, SPU2, USB, Memory cards, CDVD, Firewire, along with other input/output devices</pre>
Line 864: Line 881:
| --iop-tight-slice-count || {{Exclusive}} || Fastest = 0<br>Default = 8<br>Slowest=65534 || {{4 Bytes}} || Seems to slow down the iop the higher the value. Can be used to fix CDVD timing issues. || --iop-tight-slice-count=12
| --iop-tight-slice-count || {{Exclusive}} || Fastest = 0<br>Default = 8<br>Slowest=65534 || {{4 Bytes}} || Seems to slow down the iop the higher the value. Can be used to fix CDVD timing issues. || --iop-tight-slice-count=12
|-
|-
| --iop-hook || {{Variable}} || AdvanceClock<br>FastForwardClock<br>Mfifodrain || style="background:#212d9c; color:#ffffff;|4 Byte hex (offset),string,4 Byte hex (opcode),4 Byte Decimals (advanceclock value) || IOP native hook, Sony uses it on their official release of Red Dead Revolver. It helps fix timing issues. It runs the specified functionality each time a selected IOP offset is reached. FastForwardClock and AdvanceClock help fix core sync issues. It is believed that AdvanceClock stalls the IOP for a specified amount of cycles, while FastForwardClock behaves similarly. For a mysterious reason, some offsets are ignored by AdvanceClock - it could be that this function only works on instructions 2 cycles ahead of a branch, likely specifically designed to work at both the start or end of a branch (on newer emus, only the end of a branch works). Mfifodrain is still unknown, but only works on modern emus such as Jakv2. || --iop-hook=0x0086ac,FastForwardClock
| --iop-hook || {{Variable}} || AdvanceClock<br>FastForwardClock<br>Mfifodrain || style="background:#212d9c; color:#ffffff;|4 Byte hex (offset),string,4 Byte hex (opcode),4 Byte Decimals (advanceclock value) || IOP native hook, Sony uses it on their official release of Red Dead Revolver. It helps fix timing issues. It runs the specified functionality each time a selected IOP offset is reached. FastForwardClock and AdvanceClock help fix core sync issues. It is believed that AdvanceClock stalls the IOP for a specified amount of cycles, while FastForwardClock behaves similarly. For a mysterious reason, some offsets are ignored by AdvanceClock - it could be that this function only works on instructions 2 cycles ahead of a branch, likely specifically designed to work at both the start or end of a branch (on newer emus, only the end of a branch works). Mfifodrain is still unknown. || --iop-hook=0x0086ac,FastForwardClock
|-
|-
| --iop-block-validation || {{Universal}} || IsC, ShortHash, Hash || {{string}} || Way of validating that block been modified, and require recompilation. Other Possible values include PageProt, None, PageProtection || --iop-block-validation=IsC
| --iop-block-validation || {{Universal}} || IsC, ShortHash, Hash || {{string}} || Way of validating that block been modified, and require recompilation. Other Possible values include PageProt, None, PageProtection || --iop-block-validation=IsC
Line 881: Line 898:
| --detect-idle-iop || {{Universal}} || 0, 1  || {{binary}}|| Enabled by default. || --detect-idle-iop=0
| --detect-idle-iop || {{Universal}} || 0, 1  || {{binary}}|| Enabled by default. || --detect-idle-iop=0
|-
|-
| --iop-jit-disasm || {{Universal}} || 0, 1, 2?|| || ||   
| --iop-jit-disasm || {{Universal}} || || || ||   
|-
|-
| --iop-evt-check-full || {{Universal}} || 0, 1 ?|| {{binary}} || ||  
| --iop-evt-check-full || {{Universal}} || 0, 1 ?|| {{binary}} || ||  
Line 887: Line 904:
|}
|}


=====CDVD=====
====CDVD====


<pre>The emulated CDVD settings. These commands help games with timing issues.</pre>
<pre>The emulated CDVD settings. These commands help games with timing issues.</pre>
Line 899: Line 916:
| --boot-disc-id || {{Universal}} || 1-5  ||  {{1 Byte}} || sets boot disc for multi-disc pkg || --boot-disc-id=0
| --boot-disc-id || {{Universal}} || 1-5  ||  {{1 Byte}} || sets boot disc for multi-disc pkg || --boot-disc-id=0
|-
|-
| --switch-disc-reset || {{Exclusive}}||  1 = Enables resetting the game upon disc swap,<br>0 = Disables resetting the game upon disc swap|| {{Binary}} || 0 Can be used to prevent resetting the game when switching multiple discs. Useful for games like Samurai Warriors 2 that include an import data feature. Sadly this command isn't supported by many emulators, but jakv2 is confirmed to support it || --switch-disc-reset=1
| --switch-disc-reset || {{Exclusive}}||  1 = Enables resetting the game upon disc swap, 0 = Disables resetting the game upon disc swap|| {{Binary}} || 0 Can be used to prevent resetting the game when switching multiple discs. Useful for games like Samurai Warriors 2 that include an import data feature. Sadly this command isn't supported by many emulators, but jakv2 is confirmed to support it || --switch-disc-reset=1
|-style="background-color:#46a4e8"
|-style="background-color:#46a4e8"
|  || || Timing || || ||
|  || || Timing || || ||
Line 908: Line 925:
|-
|-
| --verbose-cdvd-reads || {{Universal}} || 0, 1 || {{Binary}} || Significantly helps games with CDVD timing issues when set to 1. || --verbose-cdvd-reads=0
| --verbose-cdvd-reads || {{Universal}} || 0, 1 || {{Binary}} || Significantly helps games with CDVD timing issues when set to 1. || --verbose-cdvd-reads=0
|-
|}
=====Pad=====
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center; font-size:small;"
! Command !! Emulator Support !! Values  !! Value Type !! Notes !! Usage
|-
| --ds4-deadzone-adjust || {{universal}} || ||  ||  ||
|-
| --ds4-diagonal-adjust ||  {{universal}} ||  || || ||
|-
| --host-pad-loses-focus ||  {{universal}} ||  ||  || || --host-pad-loses-focus=1
|-
| --host-gamepads || {{universal}} || 0, 1 || {{binary}} ||  || --host-gamepads=1
|-
| --pad-record || {{universal}} ||  0, 1  || {{binary}} || Enables logging pad info in emulog ||
|-
| --pad-analog-to-digital || {{exclusive}} || 0, 1 || {{binary}} || Eternel ring emu uses the value 0 || --pad-analog-to-digital=0
|-
| --mtap1 || {{universal}} || Disabled, Always, ByHost || {{string}} || Multitap switch. The values are correct but the multitap only works in certain games. || --mtap1=always
|-
| --mtap2 || {{universal}} || Disabled, Always, ByHost || {{string}} || Multitap switch. Some games require multitap to be selected only on second port (1, 2-a, 2-b, 2-c layout). To achieve that, we need to disable the first mtap. In some cases, the emulator can be flawed in how it handles multi-tap when it involves "--mtap2". All functions for 2A, 2B, 2C, 2D must be redirected to ports on multi-tap 1 by using memory patches. || --mtap2=always
|}
=====Memory Card=====
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center; font-size:small;"
! Command !! Emulator Support !! Values  !! Value Type !! Notes !! Usage
|-
| --mcd1 || {{universal}}  ||  || || ||
|-
| --mcd2 ||  {{universal}} ||  || || ||
|-
| --mcd1-initialize ||  {{universal}} ||  || || ||
|-
| --mcd2-initialize ||  {{universal}} ||  || || ||
|-
| --mcd1-write-type || {{universal}}  ||  || || ||
|-
| --mcd2-write-type || {{universal}}  ||  || || ||
|-
| --vmc-src || {{universal}}  || native, host, target, null || {{string}} || ||
|-
| --formatted-vmc || {{universal}}  ||  || || ||
|-
| --vmc1 || {{universal}}  ||  || || ||
|-
| --vmc2 || {{universal}}  ||  || || ||
|-
| --vmc1-src || {{universal}}  ||  || || ||
|-
| --vmc2-src || {{universal}}  ||  || || ||
|-
| --vmc1-dest || {{universal}}  ||  || || ||
|-
| --vmc2-dest || {{universal}}  ||  || || ||
|-
|-
|}
|}
Line 969: Line 931:


{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center; font-size:small;"
{| cellspacing="0" cellpadding="2" border="1" class="wikitable" style="text-align: center; font-size:small;"
! Command !! Emulator Support !! Values !! Value Type !! Notes !! Usage
! Command !! Values !! Notes !! Usage
|-
| --mfifo-manual-drain || {{Exclusive}} || 0.1/5.0  || {{float}} || || --mfifo-manual-drain=0.30
|-
| --mfifo-chunk-drain-cycles || {{Exclusive}} || 0<br>Default = 10000<br>800000 || {{4 Bytes}} || || --mfifo-chunk-drain-cycles=210000
|-
| --pcr0-delta-hack || {{Exclusive}} || 0<br>Default=1.0<br>400000.0 || {{float}} || A scalar that modifies delta of pcr0 when reading it from MFC0. Some games rely on good performance counters accuracy (Spyro ANB cutscenes), and since emulator don't implement most events, hack it is. || --pcr0-delta-hack=1.0
|-
|-
| --jitproc-use-aslr || || || ||Disables compiler process ASLR, useful for easier debugging, as the compiler process will be always on fixed address. Theoretically useful for mast1c0re, but to change it you need to be already in... || --jitproc-use-aslr=0
| --mfifo-manual-drain || 0.1/5.0 || ||--mfifo-manual-drain=0.30
|-
|-
| --verbose-deci2 || {{Exclusive}} || 0, 1 || {{Binary}} || ||
| --mfifo-chunk-drain-cycles || 0<br>Default = 10000<br>800000 || ||--mfifo-chunk-drain-cycles=210000
|-
|-
| --verbose-cpu-cycles || {{Exclusive}} || 0, 1 || {{Binary}} || ||
| --pcr0-delta-hack || 0<br>Default=1.0<br>400000.0 || A scalar that modifies delta of pcr0 when reading it from MFC0. Some games rely on good performance counters accuracy (Spyro ANB cutscenes), and since emulator don't implement most events, hack it is. || --pcr0-delta-hack=1.0
|-
|-
| --detect-idle-intc || {{universal}} ||0, 1 || {{Binary}}|| Enabled by default, 0 disables it || --detect-idle-intc=0
| --jitproc-use-aslr || || Disables compiler process ASLR, useful for easier debugging, as the compiler process will be always on fixed address. Theoretically useful for mast1c0re, but to change it you need to be already in... || --jitproc-use-aslr=0
|-
|-
| --detect-idle-chcr|| {{universal}} || 0, 1 || {{Binary}} || Enabled by default, 0 disables it || --detect-idle-chcr=0
| --detect-idle-intc ||0, 1|| Enabled by default, 0 disables it || --detect-idle-intc=0
|-
|-
| --rom || || || location of the bios that's inside of the fpkg || Could allow to use custom bios, though still not working || --rom="PS20220WD20050620.crack" or --rom="/roms/PS20220WD20050620.crack"
| --detect-idle-chcr|| 0, 1|| Enabled by default, 0 disables it  || --detect-idle-chcr=0
|-
|-
| --cop1 || {{universal}} || jit, trans || {{string}} || ?  ||
| --rom || location of the bios that's inside of the fpkg || Could allow to use custom bios, though still not working || --rom="PS20220WD20050620.crack" or --rom="/roms/PS20220WD20050620.crack"
|-
|-
| --cop2 || {{universal}} || jit, trans || {{string}} || ? ||
| --cop2 || jit, trans || ? ||  
|-
|-
| --vu0 || {{universal}} || jit, trans || {{string}} || ? ||
| --vu0 || jit, trans || ? ||  
|-
|-
| --r30 || {{universal}} || jit, trans || {{string}} || ||
| --r30 || jit, trans || ? ||  
|-
|-
|}
|}
Line 2,664: Line 2,620:
| DMA writes when busy signal is engaged || Ratchet and Clank games, Metal gear solid 2, others || None yet || AKA eetiminghack
| DMA writes when busy signal is engaged || Ratchet and Clank games, Metal gear solid 2, others || None yet || AKA eetiminghack
|-
|-
|VIF1 runs too fast || Urban reign, Avatar, PaRappa The Rapper 2, Eternal Poison, Soul Calibur 2, Soul Calibur 3, Others || Using LUA's SchedulerDelayEvent command or CLI'S vif1-instant-xfer command, combined with vu1 jit-sync and mpg cycles. The emu, Redfaction, has a higher chance of fixing this issue. || Sony wanted to improve the performance, which is the reason VIF1 is instant. The lua's command can be customizable to set the delay period, the cli can't, therefore lua's command is much more compatible
|VIF1 runs too fast || Urban reign, Avatar, PaRappa The Rapper 2, Eternal Poison, Soul Calibur 2, Soul Calibur 3, Others || Using LUA's SchedulerDelayEvent command or Using CLI'S vif1-instant-xfer command || Sony wanted to improve the performance, which is the reason VIF1 is instant. The lua's command can be customizable to set the delay period, the cli can't, therefore lua's command is much more compatible
|-
|-
|Reading VU TPC registers returns wrong values || Street Fighter 3 EX(VU0), R: Racing Revolution(VU0), Spiderman 3 (VU0, in T-Bit handler...), Edge of Reality games(VU1) || Patches in lua. || In this emu TPC stores full addresses, which is wrong. Real hardware keep there addr >> 3. Worth noting that EoR games read VU1 TPC in a nasty way, accessing 0x43A0(VU1 TPC) from COP2 code.
|Reading VU TPC registers returns wrong values || Street Fighter 3 EX(VU0), R: Racing Revolution(VU0), Spiderman 3 (VU0, in T-Bit handler...), Edge of Reality games(VU1) || Patches in lua. || In this emu TPC stores full addresses, which is wrong. Real hardware keep there addr >> 3. Worth noting that EoR games read VU1 TPC in a nasty way, accessing 0x43A0(VU1 TPC) from COP2 code.
Line 2,682: Line 2,638:
! Issue !! Games affected !! Solution !! Description
! Issue !! Games affected !! Solution !! Description
|-
|-
| Games crash or get stuck from an LW from (VIF_STAT) 0x10003C00 or (GIF_STAT) 0x10003020 || SSX 3, Monopoly, Tomb Raider - The Angel of Darkness, Dragon Ball Z - Budokai Tenkaichi 1, Tony Hawk's Underground 2, and some Nickelodeon games.  || LUA patches to nop loops (50% chance of working). If that doesn't work, then seemingly nothing will. Emus such as War of the Monsters, RECVX, KOF2000, Forbidden Siren and Red Faction have a higher chance of success. || Issue seems to be specific to the PS4 emu. Seemingly related to FIFO emulation.
| Games get stuck loading from 0x10003c00 || SSX 3, Monopoly || ? ||  ||  
|-
|-
| Incorrect GIF speed || Taz Wanted, The Matrix, Batman Begins, Dynasty warriors 5 Empires, others. || For a fast GIF: eeObj.SchedulerDelayEvent("gif.dma", 0x10500) end). For a slow GIF, there is seemingly no solution. || Some games need a fast GIF timing, and others need a slow one.
| Incorrect GIF speed || Taz Wanted, The Matrix, Batman Begins, Dynasty warriors 5 Empires, others. || For a fast GIF: eeObj.SchedulerDelayEvent("gif.dma", 0x10500) end). For a slow GIF, there is seemingly no solution. || Some games need a fast GIF timing, and others need a slow one.
Please note that all contributions to PS4 Developer wiki are considered to be released under the GNU Free Documentation License 1.2 (see PS4 Developer wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following hCaptcha:

Cancel Editing help (opens in new window)