Editing PS2 Emulation
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 15: | Line 15: | ||
* Destroy All Humans! (2005) (not to be confused with the remake EP4389-CUSA14910_00-DAH1REMAKEEU0000) UP4389-CUSA05232_00-SLUS209450000001 or EP4389-CUSA06353_00-SLES531960000001 2016-10-18 | * Destroy All Humans! (2005) (not to be confused with the remake EP4389-CUSA14910_00-DAH1REMAKEEU0000) UP4389-CUSA05232_00-SLUS209450000001 or EP4389-CUSA06353_00-SLES531960000001 2016-10-18 | ||
* Destroy All Humans! 2 (2006) UP4389-CUSA05233_00-SLUS214390000001 or EP4389-CUSA06355_00-SLES543840000001 2016-11-29 | * Destroy All Humans! 2 (2006) UP4389-CUSA05233_00-SLUS214390000001 or EP4389-CUSA06355_00-SLES543840000001 2016-11-29 | ||
* Eternal Ring UP1022-CUSA04654_00-SLUS200150000001 requires PS4 4.70 | * Eternal Ring UP1022-CUSA04654_00-SLUS200150000001 requires PS4 4.70 | ||
* FantaVision JP9000-CUSA02407_00-SCPS150300000001 or UP9000-CUSA01724_00-SCUS971050000001 or EP9000-CUSA01949_00-SCES500020000001 "2015-12-22" | * FantaVision JP9000-CUSA02407_00-SCPS150300000001 or UP9000-CUSA01724_00-SCUS971050000001 or EP9000-CUSA01949_00-SCES500020000001 "2015-12-22" | ||
Line 27: | Line 26: | ||
* Harvest Moon: A Wonderful Life Special Edition UP1014-CUSA06584_00-SLUS211710000001 or EP1014-CUSA06609_00-SLUS211710000001 "2017-03-28" | * Harvest Moon: A Wonderful Life Special Edition UP1014-CUSA06584_00-SLUS211710000001 or EP1014-CUSA06609_00-SLUS211710000001 "2017-03-28" | ||
* Hot Shots® Tennis (Everybody's Tennis) UP9000-CUSA02193_00-SCUS976100000001 or EP9000-CUSA02270_00-SCES545350000001 "2016-09-13" | * Hot Shots® Tennis (Everybody's Tennis) UP9000-CUSA02193_00-SCUS976100000001 or EP9000-CUSA02270_00-SCES545350000001 "2016-09-13" | ||
* Indigo Prophecy (aka Fahrenheit 2005) UP1642-CUSA04798_00-SLUS211960000001 or EP1628-CUSA05760_00-SLES535390000001 "2016-08-09" | * Indigo Prophecy (aka Fahrenheit 2005) UP1642-CUSA04798_00-SLUS211960000001 or EP1628-CUSA05760_00-SLES535390000001 "2016-08-09" | ||
* Jak and Daxter: The Precursor Legacy HP9000-CUSA08427_00-SCPS560030000001 patch 1.01 requires PS4 4.73 | * Jak and Daxter: The Precursor Legacy HP9000-CUSA08427_00-SCPS560030000001 patch 1.01 requires PS4 4.73 | ||
Line 63: | Line 61: | ||
* Siren (Forbidden Siren) UP9000-CUSA02198_00-SCUS973550000001 or EP9000-CUSA02274_00-SCES519200000001 (PS5: UP9000-PPSA22947_00-SCUS973550000000) PS4 patch 1.02 requires PS4 3.00 and 2024-10-15 PS5 patch 1.00 requires PS5 9.40 "2016-06-14" | * Siren (Forbidden Siren) UP9000-CUSA02198_00-SCUS973550000001 or EP9000-CUSA02274_00-SCES519200000001 (PS5: UP9000-PPSA22947_00-SCUS973550000000) PS4 patch 1.02 requires PS4 3.00 and 2024-10-15 PS5 patch 1.00 requires PS5 9.40 "2016-06-14" | ||
* SkyGunner UP9000-CUSA49210_00-SLUS203840000000 (PS5: UP9000-PPSA23535_00-SLUS203840000000) 2024-09-17 patch 1.03 requires PS4 11.52 or PS5 9.60 | * SkyGunner UP9000-CUSA49210_00-SLUS203840000000 (PS5: UP9000-PPSA23535_00-SLUS203840000000) 2024-09-17 patch 1.03 requires PS4 11.52 or PS5 9.60 | ||
* Sly Raccoon (2002), Sly Cooper and the Thievius Raccoonus UP9000-CUSA47431_00-SCUS971980000000 (PS5: UP9000-PPSA21300_00-SCUS971980000000) 2024-06-11 PS4 11.50 | * Sly Raccoon (2002), Sly Cooper and the Thievius Raccoonus UP9000-CUSA47431_00-SCUS971980000000 (PS5: UP9000-PPSA21300_00-SCUS971980000000) 2024-06-11 PS4 11.50 | ||
* Star Ocean Till The End Of Time UP0082-CUSA04778_00-SLUS204880000001 or JP0082-CUSA04842_00-SLPM654380000001 or EP0082-CUSA06379_00-SLES820280000001 | * Star Ocean Till The End Of Time UP0082-CUSA04778_00-SLUS204880000001 or JP0082-CUSA04842_00-SLPM654380000001 or EP0082-CUSA06379_00-SLES820280000001 | ||
* Star Wars Bounty Hunter UP1082-CUSA03472_00-SLUS204200000001 or EP1006-CUSA03493_00-SLES508310000001 2016-01-15 | * Star Wars Bounty Hunter UP1082-CUSA03472_00-SLUS204200000001 or EP1006-CUSA03493_00-SLES508310000001 2016-01-15 | ||
Line 73: | Line 69: | ||
* Summoner PS2 Emulation (2000) UP4389-CUSA48889_00-SLUS200740000000 (PS5: UP4389-PPSA23124_00-SLUS200740000000 or UP4389-PPSA23124_00-EMUPS2SUMMONER00) 2024-07-16 PS4 patch 1.01 requires PS4 11.50, PS5 patch 1.02 requires PS5 9.40 | * Summoner PS2 Emulation (2000) UP4389-CUSA48889_00-SLUS200740000000 (PS5: UP4389-PPSA23124_00-SLUS200740000000 or UP4389-PPSA23124_00-EMUPS2SUMMONER00) 2024-07-16 PS4 patch 1.01 requires PS4 11.50, PS5 patch 1.02 requires PS5 9.40 | ||
* The King of Fighters Collection: The Orochi Saga UP0576-CUSA03753_00-SLUS215540000001 or EP0576-CUSA04164_00-SLUS215540000001 2018-06-26 | * The King of Fighters Collection: The Orochi Saga UP0576-CUSA03753_00-SLUS215540000001 or EP0576-CUSA04164_00-SLUS215540000001 2018-06-26 | ||
* The King of Fighters '98 Ultimate Match | * The King of Fighters '98 Ultimate Match UP0576-CUSA03751_00-SLUS218160000001 or EP0576-CUSA04159_00-SLES552800000001 | ||
* The King of Fighters 2000 UP0576-CUSA03748_00-SLUS208340000001 or UP4002-CUSA03748_00-SLUS208340000001 or EP0576-CUSA04160_00-SLUS208340000001 "2016-05-03" | * The King of Fighters 2000 UP0576-CUSA03748_00-SLUS208340000001 or UP4002-CUSA03748_00-SLUS208340000001 or EP0576-CUSA04160_00-SLUS208340000001 "2016-05-03" | ||
* The Mark of Kri UP9000-CUSA01729_00-SCUS971400000001 or EP9000-CUSA01945_00-SCES511640000001 "2015-12-05" | * The Mark of Kri UP9000-CUSA01729_00-SCUS971400000001 or EP9000-CUSA01945_00-SCES511640000001 "2015-12-05" | ||
Line 104: | Line 100: | ||
* STAR WARS™ BOUNTY HUNTER™ (US version, by Limited Run #273) UP1082-CUSA03472_00-SLUS204200000001 2016-01-15 | * STAR WARS™ BOUNTY HUNTER™ (US version, by Limited Run #273) UP1082-CUSA03472_00-SLUS204200000001 2016-01-15 | ||
* Star Wars Racer Revenge UP1082-CUSA03474_00-SLUS202680000001, requires PS4 FW version ?3.15?, although it was compiled with SDK version 3.008.000 | * Star Wars Racer Revenge UP1082-CUSA03474_00-SLUS202680000001, requires PS4 FW version ?3.15?, although it was compiled with SDK version 3.008.000 | ||
* The King of Fighters '98 Ultimate Match (by Limited Run #344 | * The King of Fighters '98 Ultimate Match (by Limited Run #344) UP0576-CUSA03751_00-SLUS218160000001 | ||
* The King of Fighters 2000 (by Limited Run #386) UP0576-CUSA03748_00-SLUS208340000001 or UP4002-CUSA03748_00-SLUS208340000001 "2016-05-03" | * The King of Fighters 2000 (by Limited Run #386) UP0576-CUSA03748_00-SLUS208340000001 or UP4002-CUSA03748_00-SLUS208340000001 "2016-05-03" | ||
* The King of Fighters™ Collection: the Orochi Saga (by Limited Run #393) UP0576-CUSA03753_00-SLUS215540000001 2018-06-26 | * The King of Fighters™ Collection: the Orochi Saga (by Limited Run #393) UP0576-CUSA03753_00-SLUS215540000001 2018-06-26 | ||
Line 112: | Line 108: | ||
== PS2 remaster games available on PS4 PS Store == | == PS2 remaster games available on PS4 PS Store == | ||
* Destroy All Humans! UP4389-CUSA14899_00-DAH1REMAKEUS0000 | * Destroy All Humans! UP4389-CUSA14899_00-DAH1REMAKEUS0000, JP2880-CUSA19492_00-DAH1REMAKEJP0000, EP4389-CUSA14910_00-DAH1REMAKEEU0000, PS4 7.50 | ||
* Samurai Shodown V Special | |||
* | * Metal Gear Solid Collection Vol 1 | ||
* Metal Gear Solid | * Tales of Symphonia Remastered UP0700-CUSA29214_00-TALESOFSYMPHONIA 2023-02-17 | ||
* | * Legacy of Kain™ Soul Reaver 1&2 Remastered PS4 & PS5 (PS5: UP1032-PPSA18153_00-SOULREAVER120824) 2024-12-10 | ||
* | |||
* Tomb Raider: The Angel of Darkness (in Tomb Raider IV-VI Remastered PS4 & PS5) (PS5: UP1032-PPSA18154_00-TOMBRAIDER456225) 2025-02-14 | * Tomb Raider: The Angel of Darkness (in Tomb Raider IV-VI Remastered PS4 & PS5) (PS5: UP1032-PPSA18154_00-TOMBRAIDER456225) 2025-02-14 | ||
= Description = | = Description = | ||
Line 150: | Line 144: | ||
|- | |- | ||
| Jak and Daxter: The Precursor Legacy || Good compatibility with most PS2 games. It has a very high api version which means more Lua commands are supported. In addition, Jak emulators are one of the few that can use the '''--gs-adaptive-frameskip=1''' command. It is often referred to as "Jak v2"|| 2.2 || '''JakX,''' '''Jak 2,''' '''Jak 3,''' | | Jak and Daxter: The Precursor Legacy || Good compatibility with most PS2 games. It has a very high api version which means more Lua commands are supported. In addition, Jak emulators are one of the few that can use the '''--gs-adaptive-frameskip=1''' command. It is often referred to as "Jak v2"|| 2.2 || '''JakX,''' '''Jak 2,''' '''Jak 3,''' | ||
|- | |- | ||
| Art of Fighting Anthology || Similar to RECVX. It was successful in fixing "'''Coraline'''." Sometimes called "AOFA" || 2.0 || | | Art of Fighting Anthology || Similar to RECVX. It was successful in fixing "'''Coraline'''." Sometimes called "AOFA" || 2.0 || | ||
|- | |- | ||
| Resident Evil - Code: Veronica || Fixes games like '''Jackie chan Adventures, SpongeBob SquarePants: Creature From the Krust Krab, Pac-man World 3, Yu-Gi-Oh: Capsule monsters, SpongeBob's Atlantis SquarePantis''' freezing at a black/splash screen. Additionally, games requiring '''OPL's mode 2''' tend to have a higher chance of being playable under it. Often referred to as "RECVX" || 1.7 || '''Fatal Fury | | Resident Evil - Code: Veronica || Fixes games like '''Jackie chan Adventures, SpongeBob SquarePants: Creature From the Krust Krab, Pac-man World 3, Yu-Gi-Oh: Capsule monsters, SpongeBob's Atlantis SquarePantis''' freezing at a black/splash screen. Additionally, games requiring '''OPL's mode 2''' tend to have a higher chance of being playable under it. Often referred to as "RECVX" || 1.7 || '''Fatal Fury,''' '''Redfaction,''' '''AOFA.''' | ||
|- | |- | ||
| Fatal Fury Battle Archives: Volume 2 || Similarly to RECVX, it is often used to fix frozen games. || || | | Fatal Fury Battle Archives: Volume 2 || Similarly to RECVX, it is often used to fix frozen games. || || | ||
Line 167: | 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 | | Destroy All Humans! || Fixed '''Tenchu: Fatal Shadows'''', and Veggietales crashing, as well as Bratz The Movie from freezing. || 0.1 || | ||
|- | |- | ||
| Destroy All Humans! 2 || || 0.7 || | | Destroy All Humans! 2 || || 0.7 || | ||
Line 329: | Line 321: | ||
| || || || Speedhacks / Desync Fixes|| || | | || || || Speedhacks / Desync Fixes|| || | ||
|- | |- | ||
| --ee-cycle-scalar || {{Universal}} ||Slowest cycles speed: 5.0<br>Normal cycles speed: 1.0<br>Fastest cycles speed: 0.1 || {{Float}} || Changes the cycle speed of the EE. It can benefit core sync or performance (lowering the cycle rate may affect FMVS). The default value for most emulators is ~1.0. It is highly sensitive, as any slight change may break or fix the game. || --ee-cycle-scalar=1.0 | | --ee-cycle-scalar || {{Universal}} ||Slowest cycles speed: 5.0<br>Normal cycles speed: 1.0<br>Fastest cycles speed: 0.1 || {{Float}} || Changes the cycle speed of the EE. It can benefit core sync or performance (lowering the cycle rate may affect FMVS). The default value for most emulators is ~1.0. It is highly sensitive, as any slight change may break or fix the game. (Dividing 100 with the entered value is how to find what EE clock speed percentage % the value is setting. For example, 100/5.00 = 20%) || --ee-cycle-scalar=1.0 | ||
|- | |- | ||
| --ee-context-switch-cycles || {{Exclusive}} || Accelerate cycles ( | | --ee-context-switch-cycles || {{Exclusive}} || Accelerate cycles (360 => 0) <br>Decelerate cycles (361 => ∞ ) || {{4 Bytes}}||Its effects are mysterious. Possibly configures how many CPU cycles the emulator should run before switching between different tasks or threads. Does not work on Jak emulators. Default value is 360. Seems to be useful for Bee Movie, Metal Gear Solid 3, as well as others with IPU issues. It bears no effect on VU timing, but it may alter the core's timing with some DMA channels. || --ee-context-switch-cycles=2700? | ||
|- | |- | ||
| --ee-hook || {{Variable}} || AdvanceClock<br>FastForwardClock<br> | | --ee-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)|| Runs the specified functionality each time a selected EE offset is reached. FastForwardClock and AdvanceClock help fix core sync issues, but can be used as a speedhack. It is believed that AdvanceClock stalls the EE for a specified amount of cycles (numbers likely valued akin to eecyclescalar's), while FastForwardClock behaves similarly. They are commonly used on the offset directly succeeding an affected CTC2 instruction. 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. However, this is only the case for old emulators like King Of Fighters 2000 and War Of The Monsters. Newer ones such as Jak operate differently, where AdvanceClock only works 2 cycles ahead at the end of a branch instruction.<pre> | ||
Advanceclock usage example: | Advanceclock usage example: | ||
0x0 nop <-- Advancelock can work here on old emulators | 0x0 nop <-- Advancelock can work here on old emulators | ||
0x4 | 0x4 beq zero,v1,0x0 <-- 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 | |||
|- | |- | ||
|-style="background-color:#D7EF54" | |-style="background-color:#D7EF54" | ||
Line 476: | Line 467: | ||
| || || || Speedhacks || || | | || || || Speedhacks || || | ||
|- | |- | ||
| --cop2-opt-flags || {{Universal}} || 0, 1 ,2 || {{Semi-Binary}} || Optimize flags upon recompilation. 0 is the accurate option, 1 is mostly safe, 2 is unsafe. Setting it | | --cop2-opt-flags || {{Universal}} || 0, 1 ,2 || {{Semi-Binary}} || Optimize flags upon recompilation. 0 is the accurate option, 1 is mostly safe, 2 is unsafe. Setting it 0 improves FPU accuracy. For example, it fixed Ratchet's gravity issues. [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L280 More Info] || --cop2-opt-flags=0 | ||
|- | |- | ||
| --cop2-opt-vf00 || {{Universal}} || 0, 1, 2 || {{Semi-Binary}} || Seems to be a hacky way of optimization through the vf00 register | | --cop2-opt-vf00 || {{Universal}} || 0, 1, 2 || {{Semi-Binary}} || Seems to be a hacky way of optimization through the vf00 register. || --cop2-opt-vf00=0 | ||
|- | |- | ||
| --cop2-const-prop || {{Universal}} || 0, 1 || {{Binary}} || Disables or enables constant propagation. Can Be Used as speedhack for COP2 hungry games when set to 1 [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L312 More info] || --cop2-const-prop=1 | | --cop2-const-prop || {{Universal}} || 0, 1 || {{Binary}} || Disables or enables constant propagation. Can Be Used as speedhack for COP2 hungry games when set to 1 [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L312 More info] || --cop2-const-prop=1 | ||
Line 486: | Line 477: | ||
| || || || Game fixes || || | | || || || Game fixes || || | ||
|- | |- | ||
| --cop2-no-clamping || {{Universal}} || Enabled = 0<br>Disabled = 1 || {{Binary}} || Changes the clamping behavior of the COP2. The default value is set to 1. | | --cop2-no-clamping || {{Universal}} || Enabled = 0<br>Disabled = 1 || {{Binary}} || Changes the clamping behavior of the COP2. The default value is set to 1. || --cop2-no-clamping=0 | ||
|- | |- | ||
| --cop2-accurate-range || {{Universal}} || start,end offset (0x0 - 0x1FFFFFF) || style="background:#5c32a8; color:#ffffff;"|Hex combination|| Accurate Mul/Div/Add/Sub math instructions for the COP2 by using software floats rather than hardware floats. Can be used for full COP2 mathematical accuracy in the specified range. || --cop2-accurate-range=0x123456,0x134567 | | --cop2-accurate-range || {{Universal}} || start,end offset (0x0 - 0x1FFFFFF) || style="background:#5c32a8; color:#ffffff;"|Hex combination|| Accurate Mul/Div/Add/Sub math instructions for the COP2 by using software floats rather than hardware floats. Can be used for full COP2 mathematical accuracy in the specified range. || --cop2-accurate-range=0x123456,0x134567 | ||
Line 494: | Line 485: | ||
| --cop2-accurate-mul-range || {{Universal}} || start,end offset (0x0 - 0x1FFFFFF) || style="background:#5c32a8; color:#ffffff;"|Hex combination || Accurate multiplication instructions for the COP2 in the specified range by using software floats rather than hardware floats (Offset range seems not to directly match EE's) || --cop2-accurate-mul-range=0x123456,0x134567 | | --cop2-accurate-mul-range || {{Universal}} || start,end offset (0x0 - 0x1FFFFFF) || style="background:#5c32a8; color:#ffffff;"|Hex combination || Accurate multiplication instructions for the COP2 in the specified range by using software floats rather than hardware floats (Offset range seems not to directly match EE's) || --cop2-accurate-mul-range=0x123456,0x134567 | ||
|- | |- | ||
| --cop2-accurate-mul || {{Universal}} || 1 = Enabled<br>0 = Disabled || {{Binary}} || Allows the COP2 to accurately multiply for all offsets by using software floats rather than hardware floats. | | --cop2-accurate-mul || {{Universal}} || 1 = Enabled<br>0 = Disabled || {{Binary}} || Allows the COP2 to accurately multiply for all offsets by using software floats rather than hardware floats. (Extremely slow) || --cop2-accurate-mul=1 | ||
|- | |- | ||
| --cop2-accurate-addsub|| {{Universal}} || 1 = Enabled<br>0 = Disabled || {{Binary}} || Allows the COP2 to accurately Add/Subtract for all offsets by using software floats rather than hardware floats. (Extremely slow) || --cop2-accurate-addsub=1 | | --cop2-accurate-addsub|| {{Universal}} || 1 = Enabled<br>0 = Disabled || {{Binary}} || Allows the COP2 to accurately Add/Subtract for all offsets by using software floats rather than hardware floats. (Extremely slow) || --cop2-accurate-addsub=1 | ||
Line 532: | Line 523: | ||
| --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}} || 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-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.|| --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 | ||
|- | |- | ||
|-style="background-color:#D7EF54" | |-style="background-color:#D7EF54" | ||
| || || || Game fixes || || | | || || || Game fixes || || | ||
|- | |- | ||
| --vu-hack-triace || {{Universal}} || 0, 1 || {{binary}} || A hack designed specifically for games developed by Tri Ace. Corrects the VU's addi calculation. Without it, the result will be one bit off, which is enough to break the game's decryption algo | | --vu-hack-triace || {{Universal}} || 0, 1 || {{binary}} || A hack designed specifically for games developed by Tri Ace. Corrects the VU's addi calculation. Without it, the result will be one bit off, which is enough to break the game's decryption algo. || --vu-hack-triace=1 | ||
|- | |- | ||
| --vu-branch-hazard || {{Universal}} || 0, 1 || {{binary}} || This command relates to how the emulator handles branch hazards in the Vector Units (VU). Setting it to 0 might fix freezes at the expense of causing SPS in some games, while 1 might improve performance. Seems to be enabled by default. Disabling it prevented "'''Batman - Rise of Sin Tzu'''" from crashing|| --vu-branch-hazard=0 | | --vu-branch-hazard || {{Universal}} || 0, 1 || {{binary}} || This command relates to how the emulator handles branch hazards in the Vector Units (VU). Setting it to 0 might fix freezes at the expense of causing SPS in some games, while 1 might improve performance. Seems to be enabled by default. Disabling it prevented "'''Batman - Rise of Sin Tzu'''" from crashing|| --vu-branch-hazard=0 | ||
Line 581: | Line 572: | ||
| || || Speedhacks || || || | | || || Speedhacks || || || | ||
|- | |- | ||
| --vu1-mpg-cycles || {{Universal}} || 1 - 65535 || {{2 Bytes}}|| Set initial speed for VU1 Micro-programs | | --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): | ||
$ 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 593: | Line 584: | ||
| --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. 0 is the accurate option, 1 is mostly safe, 2 is unsafe. Setting it to 0 may fix crashes or sps | | --vu1-opt-flags || {{Universal}} || 0, 1, 2 || {{Semi-Binary}} || Optimize flags upon recompilation. 0 is the accurate option, 1 is mostly safe, 2 is unsafe. Setting it to 0 may fix crashes or sps. [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 || {{Universal}} || 0, 1, 2 || {{Semi-Binary}} || Seems to be a hacky way of optimization through the vf00 register. || --vu1-opt-vf00=0 | ||
|- | |- | ||
| --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, and reduce stuttering. [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L319 Info] || --vu1-jr-cache-policy=newprog | ||
Line 606: | Line 597: | ||
| --vu1 || {{Universal}} || jit-sync || {{string}} || Selector between IR/JIT and it modes. Jit-sync works similarly to disabling MTVU. jit, trans, and jit-async are unimplemented functions that do not change anything. || --vu1=jit-sync | | --vu1 || {{Universal}} || jit-sync || {{string}} || Selector between IR/JIT and it modes. Jit-sync works similarly to disabling MTVU. jit, trans, and jit-async are unimplemented functions that do not change anything. || --vu1=jit-sync | ||
|- | |- | ||
| --vu1-no-clamping || {{Universal}} || Enabled = 0<br>Disabled = 1 || {{binary}} || Changes the clamping behavior of the VU1. Setting specific to PS4 emulators, (unimplemented in PCSX2) | | --vu1-no-clamping || {{Universal}} || Enabled = 0<br>Disabled = 1 || {{binary}} || Changes the clamping behavior of the VU1. Setting specific to PS4 emulators, (unimplemented in PCSX2) with 0 resembling PCSX2's extra, and 1 extra + preserve sign. The default emulator's value is 1. || --vu1-no-clamping=0 | ||
|- | |- | ||
| --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 || | ||
Line 646: | Line 637: | ||
| || || Speedhacks || || || | | || || Speedhacks || || || | ||
|- | |- | ||
| --vu0-mpg-cycles|| {{Exclusive}} || 1 - 65535 || {{2 Bytes}} || Set initial cycle speed for VU0 Micro-programs | | --vu0-mpg-cycles|| {{Exclusive}} || 1 - 65535 || {{2 Bytes}} || Set initial cycle speed for VU0 Micro-programs. 100 is the default value. It is not available in older emulators such as War of the Monsters. Raising the value helps COP2 timing, while lowering does the opposite.|| --vu0-mpg-cycles=1000<br><pre> Symbols (They change values close to VU0-mpg-cycles' offset): | ||
$ goes to the specified succeeding offsets. $0 will go 2 bytes forward and changes them. $1 will go 4 bytes forward and changes 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 changes them. $1 will go 4 bytes forward and changes the 2 bytes specified. For example, $0,$1 will change the 4 bytes ahead as the specified 2 bytes value. | ||
Line 658: | Line 649: | ||
| --vu0-const-prop || {{Universal}} || 0, 1 || {{binary}} || Constant propagation, can be used as speedhack for VU0 hungry games when set to 1 [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L312 More info] || --vu0-const-prop=1 | | --vu0-const-prop || {{Universal}} || 0, 1 || {{binary}} || Constant propagation, can be used as speedhack for VU0 hungry games when set to 1 [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L312 More info] || --vu0-const-prop=1 | ||
|- | |- | ||
| --vu0-opt-vf00 || {{Universal}} || 0, 1, 2 || {{Semi-Binary}} || Seems to be a hacky way of optimization through the vf00 register | | --vu0-opt-vf00 || {{Universal}} || 0, 1, 2 || {{Semi-Binary}} || Seems to be a hacky way of optimization through the vf00 register. || --vu0-opt-vf00=0 | ||
|- | |- | ||
| --vu0-opt-flags || {{Universal}} || 0, 1, 2 || {{Semi-Binary}} || Optimize flags upon recompilation. 0 is the accurate option, 1 is mostly safe, 2 is unsafe. Setting it to 0 may fix crashes or sps | | --vu0-opt-flags || {{Universal}} || 0, 1, 2 || {{Semi-Binary}} || Optimize flags upon recompilation. 0 is the accurate option, 1 is mostly safe, 2 is unsafe. Setting it to 0 may fix crashes or sps.[https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L280 More Info] || --vu0-opt-flags=0 | ||
|- | |- | ||
| --vu0-jr-cache-policy || {{Exclusive}} || newprog, sameprog, auto, new, same || {{string}} || PCSX2 uses newprog as the default setting [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L319 Info] || --vu0-jr-cache-policy=sameprog | | --vu0-jr-cache-policy || {{Exclusive}} || newprog, sameprog, auto, new, same || {{string}} || PCSX2 uses newprog as the default setting [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L319 Info] || --vu0-jr-cache-policy=sameprog | ||
Line 670: | Line 661: | ||
| --vu0-clamp-range || {{Exclusive}} || start, end offset (0x0 - 0x200) || style="background:#5c32a8; color:#ffffff;"|Hex combination || per range clamping for VU0. Strangely, it rejects offsets higher than 0x200. || --vu0-clamp-range=0x100,0x120 | | --vu0-clamp-range || {{Exclusive}} || start, end offset (0x0 - 0x200) || style="background:#5c32a8; color:#ffffff;"|Hex combination || per range clamping for VU0. Strangely, it rejects offsets higher than 0x200. || --vu0-clamp-range=0x100,0x120 | ||
|- | |- | ||
| --vu0-no-clamping || {{Universal}} || Enabled = 0<br>Disabled = 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 || {{Universal}} || Enabled = 0<br>Disabled = 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-accurate-addsub-range=0x0,0x200 | ||
Line 708: | Line 699: | ||
| --vif-ignore-invalid-cmd || {{Exclusive}} || 0, 1 || {{Binary}} || Ignore invalid vif commands. In some cases, setting it to 1 can fix games that freeze while showing the same frame. || --vif-ignore-invalid-cmd=1 | | --vif-ignore-invalid-cmd || {{Exclusive}} || 0, 1 || {{Binary}} || Ignore invalid vif commands. In some cases, setting it to 1 can fix games that freeze while showing the same frame. || --vif-ignore-invalid-cmd=1 | ||
|- | |- | ||
| --vif-thread-chunk-size || {{Exclusive}} || 0, 1024 || {{2 Bytes}} || Slows down both VIFS the lower it is | | --vif-thread-chunk-size || {{Exclusive}} || 0, 1024 || {{2 Bytes}} || Slows down both VIFS the lower it is, and speeds them up the higher it is. 1024 is the limit, with 112 being the default value. || --vif-thread-chunk-size=100 | ||
|- | |- | ||
| --detect-idle-vif || {{Universal}} || 0, 1 || {{Binary}} || Enabled by default. Unknown function || --detect-idle-vif=0 | | --detect-idle-vif || {{Universal}} || 0, 1 || {{Binary}} || Enabled by default. Unknown function || --detect-idle-vif=0 | ||
Line 716: | Line 707: | ||
| --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 | | --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 | ||
|} | |} | ||
Line 777: | Line 768: | ||
| --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, and corrects positioning between pixels | | --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 incorrectly structure pixels' positions. || --gs-force-bilinear=1 | ||
|- | |- | ||
|-style="background-color:#D7EF54" | |-style="background-color:#D7EF54" | ||
Line 784: | Line 775: | ||
| --gs-uprender || {{Universal}} || none,2x2 || {{string}} || Internal resolution upscaler. || --gs-uprender=2x2 | | --gs-uprender || {{Universal}} || none,2x2 || {{string}} || Internal resolution upscaler. || --gs-uprender=2x2 | ||
|- | |- | ||
| --gs-upscale || {{Universal}} || none, gpu, edgesmooth, smooth, motion, motionvec, motionvector, point || {{string}} || Upscaling type | | --gs-upscale || {{Universal}} || none, gpu, edgesmooth, smooth, motion, motionvec, motionvector, point || {{string}} || Upscaling type Selector || --gs-upscale=EdgeSmooth | ||
|- | |- | ||
| --gs-kernel-cl-up || {{Variable}} || "DarkCloud2" "fantavision" "h2lpool2x2", "OptRightTri", "clutmerge2x2", "mipmap2x2", "up2x2simple", "up2x2skipinterp", "up2x2tc", "up2x2", default || {{string}} || Kernel Variant Color lookup Upscaler (?), mipmap and clutmerge and h2l need to be enabled before their options become usable|| --gs-kernel-cl-up="clutmerge2x2" | | --gs-kernel-cl-up || {{Variable}} || "DarkCloud2" "fantavision" "h2lpool2x2", "OptRightTri", "clutmerge2x2", "mipmap2x2", "up2x2simple", "up2x2skipinterp", "up2x2tc", "up2x2", default || {{string}} || Kernel Variant Color lookup Upscaler (?), mipmap and clutmerge and h2l need to be enabled before their options become usable|| --gs-kernel-cl-up="clutmerge2x2" | ||
|- | |- | ||
| --gs-override-small-tri-area || {{Exclusive}} || 0, 1 || {{binary}} || This option is designed to modify how the emulator handles or renders small triangles that fall below a certain area threshold. Enabling this option could resolve graphical problems such as missing, flickering, or incorrectly rendered small details, and could potentially restore missing text in some games. || --gs-override-small-tri-area=1 | |||
|- | |||
| --gs-dirty-page-policy || {{Exclusive}} || 0, 1 || {{binary}} || Unknown. Used by Star Wars: Jedi Starfighter || --gs-dirty-page-policy=1 | |||
|- | |||
| --gs-ignore-dirty-page-border || {{Exclusive}} || 0, 1 || {{binary}} || Unknown. Used by Samurai Shodown Anthology ||--gs-ignore-dirty-page-border=1 | |||
|- | |||
| --gs-ignore-rect-correction || {{Exclusive}} || 0, 1 || {{binary}} || Setting it to 1 is known to fix flickering textures and graphical glitches in far distances. || --gs-ignore-rect-correction=1 | |||
|- | |||
| --gs-opt-frbuff-switch || {{Exclusive}} || 0, 1 || {{binary}} || Unknown. Used by Everybody's Tennis/Hot Shots Tennis || --gs-opt-frbuff-switch=0 | |||
|- | |||
| --gs-kernel-cl || {{Variable}} || h2lpool, clutmerge, mipmap, DarkCloud2, fantavision. || {{string}} || Kernel Variant Color lookup(?). Options included here can be upssed if --gs-kernel-cl-up were used along with it. Mipmap and clutmerge and h2l need to be enabled before their options become usable. || --gs-kernel-cl="clutmerge" | | --gs-kernel-cl || {{Variable}} || h2lpool, clutmerge, mipmap, DarkCloud2, fantavision. || {{string}} || Kernel Variant Color lookup(?). Options included here can be upssed if --gs-kernel-cl-up were used along with it. Mipmap and clutmerge and h2l need to be enabled before their options become usable. || --gs-kernel-cl="clutmerge" | ||
|- | |- | ||
| --force-frame-blend || {{Exclusive}} || 0, 1 || {{binary}} || Enables blend (Deinterlacing?). Should be used to fix games with shaking screens. || --force-frame-blend=1 | |||
|- | |||
| --force-pal-60hz || {{Exclusive}} || 0, 1 || {{binary}} || Enables 60hz PAL mode. || --force-pal-60hz=1 | |||
|- | |||
| --gs-progressive || {{Universal}} || 0, 1 || {{binary}} || Enables progressive scan. Can fix graphical glitches/double screen issues. || | | --gs-progressive || {{Universal}} || 0, 1 || {{binary}} || Enables progressive scan. Can fix graphical glitches/double screen issues. || | ||
|- | |- | ||
| --gs-vert-precision || {{Exclusive}} || 8, 16|| {{1 Byte}} || This option allows the user to choose between 8-bit and 16-bit precision for the vertex calculations in 3D graphics rendering. It reduces the likelihood of visual distortions such as jagged edges, improper alignment of, or | | --gs-vert-precision || {{Exclusive}} || 8, 16|| {{1 Byte}} || This option allows the user to choose between 8-bit and 16-bit precision for the vertex calculations in 3D graphics rendering. It reduces the likelihood of visual distortions such as jagged edges, improper alignment of polygons, or model "warping." The emu expects the values of 8 or 16, any other values are not permitted. It is set at 16 by default. || --gs-vert-precision=8 | ||
|- | |- | ||
| --gs-skip-dirty-flush-on-mipmap || {{Universal}} || 0, 1 || {{binary}} || Skip flushing textures marked as dirty from cache when enabled. It does, however, require mipmap to be enabled first. || --gs-skip-dirty-flush-on-mipmap=1 | | --gs-skip-dirty-flush-on-mipmap || {{Universal}} || 0, 1 || {{binary}} || Skip flushing textures marked as dirty from cache when enabled. It does, however, require mipmap to be enabled first. || --gs-skip-dirty-flush-on-mipmap=1 | ||
Line 799: | Line 804: | ||
|- | |- | ||
| --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. Unknown, could be Pre-Round Sprite. || --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 | |||
|- | |||
| --threaded-gs || {{Universal}} || 0, 1 || {{binary}} || Multi-threaded-gs ? || --threaded-gs=1 | | --threaded-gs || {{Universal}} || 0, 1 || {{binary}} || Multi-threaded-gs ? || --threaded-gs=1 | ||
|- | |- | ||
Line 815: | Line 824: | ||
|- | |- | ||
| --l2h-2d-params || {{Universal}} || TRXREG,BITBLTBUF,height || {{string}} || || --l2h-2d-params=0x0000000800000001,0x000000003a0a2300,512,2 | | --l2h-2d-params || {{Universal}} || TRXREG,BITBLTBUF,height || {{string}} || || --l2h-2d-params=0x0000000800000001,0x000000003a0a2300,512,2 | ||
|- | |- | ||
| --gs-h2l-accurate-hash || {{Exclusive}} || 0, 1 || {{binary}} || Unknown. Used by Samurai Shodown Anthology. ||--gs-h2l-accurate-hash=1 | | --gs-h2l-accurate-hash || {{Exclusive}} || 0, 1 || {{binary}} || Unknown. Used by Samurai Shodown Anthology. ||--gs-h2l-accurate-hash=1 | ||
Line 871: | Line 862: | ||
| --iop-const-folding || {{Universal}}|| None,Gpr,All || {{string}} || IOP constant folding [https://en.wikipedia.org/wiki/Constant_folding More info] || --iop-const-folding=All | | --iop-const-folding || {{Universal}}|| None,Gpr,All || {{string}} || IOP constant folding [https://en.wikipedia.org/wiki/Constant_folding More info] || --iop-const-folding=All | ||
|- | |- | ||
| --iop-tight-slice-count || {{Exclusive}} || Fastest = 0<br>Default = 8<br>Slowest=65534 || {{ | | --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, but only works on modern emus such as Jakv2. || --iop-hook=0x0086ac,FastForwardClock | ||
Line 908: | Line 899: | ||
| --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,<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 | ||
|-style="background-color:#46a4e8" | |-style="background-color:#46a4e8" | ||
| || || Timing || || || | | || || Timing || || || | ||
Line 1,023: | Line 1,012: | ||
|- | |- | ||
| {{cellcolors|#0b9fb3|#000000}}vuClampMode: 2 ||{{cellcolors|#03fcb1|#000000}}<br>--vu1-no-clamping=0<br>--vu0-no-clamping=0<br>--cop2-no-clamping=0 || Works similar. | | {{cellcolors|#0b9fb3|#000000}}vuClampMode: 2 ||{{cellcolors|#03fcb1|#000000}}<br>--vu1-no-clamping=0<br>--vu0-no-clamping=0<br>--cop2-no-clamping=0 || Works similar. | ||
|- | |||
| {{cellcolors|#0b9fb3|#000000}}vuClampMode: 3 || {{cellcolors|#03fcb1|#000000}}<br>--vu1-no-clamping=1<br>--vu0-no-clamping=1<br>--cop2-no-clamping=1<br>--vu-to-double=1 || Works similar. | |||
|- | |- | ||
| {{cellcolors|#0b9fb3|#000000}}eeClampMode: 2 || {{cellcolors|#03fcb1|#000000}}--fpu-to-double=0<br>--fpu-no-clamping=0<br> || Works similar. | | {{cellcolors|#0b9fb3|#000000}}eeClampMode: 2 || {{cellcolors|#03fcb1|#000000}}--fpu-to-double=0<br>--fpu-no-clamping=0<br> || Works similar. | ||
|- | |||
| {{cellcolors|#0b9fb3|#000000}}eeClampMode: 3 || {{cellcolors|#03fcb1|#000000}}--fpu-to-double=1<br>--fpu-no-clamping=1<br> || Works similar. | |||
|- | |- | ||
| {{cellcolors|#0b9fb3|#000000}}eeRoundMode: || {{cellcolors|#03fcb1|#000000}}--fpu-accurate-muldiv=1<br>--fpu-accurate-addsub=1 || | | {{cellcolors|#0b9fb3|#000000}}eeRoundMode: || {{cellcolors|#03fcb1|#000000}}--fpu-accurate-muldiv=1<br>--fpu-accurate-addsub=1 || | ||
Line 1,032: | Line 1,025: | ||
| {{cellcolors|#0b9fb3|#000000}}vu1RoundMode: || {{cellcolors|#03fcb1|#000000}}--vu1-accurate-addsub-range=<br>--vu1-mul0fix-range=|| | | {{cellcolors|#0b9fb3|#000000}}vu1RoundMode: || {{cellcolors|#03fcb1|#000000}}--vu1-accurate-addsub-range=<br>--vu1-mul0fix-range=|| | ||
|- | |- | ||
| {{cellcolors|#0b9fb3|#000000}}eeCycleRate: || {{cellcolors|#03fcb1|#000000}}--ee-cycle-scalar= || '''"Potential" equivalent values: PCSX2 - PS4''':<br>300% --> | | {{cellcolors|#0b9fb3|#000000}}eeCycleRate: || {{cellcolors|#03fcb1|#000000}}--ee-cycle-scalar= || '''"Potential" equivalent values: PCSX2 - PS4''':<br>300% --> 0.333<br>180% --> 0.555<br>130% -->0.769<br>'''100% --> 1.0'''<br>75% --> 1.333<br>60% --> 1.666<br>50% --> 2 | ||
|- | |- | ||
| {{cellcolors|#0b9fb3|#000000}}FpuNegDivHack<br>FpuMulHack || {{cellcolors|#03fcb1|#000000}}--fpu-accurate-muldiv=1 || | | {{cellcolors|#0b9fb3|#000000}}FpuNegDivHack<br>FpuMulHack || {{cellcolors|#03fcb1|#000000}}--fpu-accurate-muldiv=1 || | ||
Line 1,038: | Line 1,031: | ||
| {{cellcolors|#0b9fb3|#000000}}cpuCLUTRender: 1 || {{cellcolors|#03fcb1|#000000}}--gs-uv-shift-pointsampling=1 || | | {{cellcolors|#0b9fb3|#000000}}cpuCLUTRender: 1 || {{cellcolors|#03fcb1|#000000}}--gs-uv-shift-pointsampling=1 || | ||
|- | |- | ||
| {{cellcolors|#0b9fb3|#000000}} | | {{cellcolors|#0b9fb3|#000000}}MTVUSpeedHack: 0 || {{cellcolors|#03fcb1|#000000}}--vu1=jit-sync || Some games will also require --vu1-mpg-cycles= to be between "6000 - 19000" | ||
|- | |- | ||
| {{cellcolors|#0b9fb3|#000000}}mergeSprite<br>alignSprite || {{cellcolors|#03fcb1|#000000}}--gs-kernel-cl-up="up2x2simple" || Note: works similarly but not the equivalent | | {{cellcolors|#0b9fb3|#000000}}mergeSprite<br>alignSprite || {{cellcolors|#03fcb1|#000000}}--gs-kernel-cl-up="up2x2simple" || Note: works similarly but not the equivalent | ||
Line 1,062: | Line 1,055: | ||
--vu0-opt-flags=0 | --vu0-opt-flags=0 | ||
--vu1-opt-flags=0 | --vu1-opt-flags=0 | ||
--vu-custom-min-max=0 | --vu-custom-min-max=0 | ||
--gs-use-mipmap=1 | --gs-use-mipmap=1 | ||
--gs-kernel-cl="mipmap" | --gs-kernel-cl="mipmap" | ||
Line 1,101: | Line 1,090: | ||
{| 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 | ! Command !! Usage !! Notes | ||
|-style="background-color:#D7EF54" | |-style="background-color:#D7EF54" | ||
| | | || Object calling class || | ||
|- | |- | ||
| getEmuObject | | getEmuObject || local emuObj = getEmuObject() || Required for all functions using emuObj, that include: <div align="left"><pre>LoadConfig SaveConfig GetPad AddVsyncHook | ||
RemoveVsyncHook AddEntryPointHook RemoveEntryPointHook | RemoveVsyncHook AddEntryPointHook RemoveEntryPointHook | ||
AddLoginHook RemoveLoginHook AddLogoutHook RemoveLogoutHook | AddLoginHook RemoveLoginHook AddLogoutHook RemoveLogoutHook | ||
Line 1,119: | Line 1,108: | ||
RemoveSnapshotLoadedHook IsNeoMode IsToolingVerbose emuMediaPatch </pre></div> | RemoveSnapshotLoadedHook IsNeoMode IsToolingVerbose emuMediaPatch </pre></div> | ||
|-style="background-color:#c6ecd9" | |-style="background-color:#c6ecd9" | ||
| | | || Hooks || | ||
|- | |- | ||
|AddVsyncHook | |AddVsyncHook || emuObj.AddVsyncHook(<task to be done every vsync>) || emuObj.AddVsyncHook(my_function) | ||
my_function can be anything, from simple patches, to extensive hook. | my_function can be anything, from simple patches, to extensive hook. | ||
Example usage can be found in SLUS-21550 features file. some games are not compatible with it and will crash upon startup. | Example usage can be found in SLUS-21550 features file. some games are not compatible with it and will crash upon startup. | ||
|- | |- | ||
|RemoveVsyncHook | |RemoveVsyncHook || emuObj.RemoveVsyncHook(<previously added task to be removed>) || emuObj.RemoveVsyncHook(my_function) | ||
|- | |- | ||
|AddEntryPointHook | |AddEntryPointHook || emuObj.AddEntryPointHook(<task>) || Task to be done at ps2 game main elf entry point (right where game is loaded). | ||
|- | |- | ||
|RemoveEntryPointHook | |RemoveEntryPointHook || || | ||
|- | |- | ||
|AddLoginHook | |AddLoginHook || || | ||
|- | |- | ||
|RemoveLoginHook | |RemoveLoginHook || || | ||
|- | |- | ||
|AddLogoutHook | |AddLogoutHook || || | ||
|- | |- | ||
|RemoveLogoutHook | |RemoveLogoutHook || || | ||
|- | |- | ||
|AddImageHook | |AddImageHook || || | ||
|- | |- | ||
|AddGifTagHook | |AddGifTagHook || || | ||
|- | |- | ||
| AddSectorReadHook | | AddSectorReadHook || emuObj.AddSectorReadHook(<sector, unk, task>) || Hook to do task when disc image sector is read. Not all values are known (ex. emuObj.AddSectorReadHook(776480, 32, <task/function>) ) | ||
|- | |- | ||
|AddMCWriteHook | |AddMCWriteHook ||emuObj.AddMCWriteHook() || | ||
|- | |- | ||
|AddAssertionHook | |AddAssertionHook ||emuObj.AddAssertionHook() || | ||
|- | |- | ||
|AddSnapshotLoadedHook | |AddSnapshotLoadedHook || || | ||
|- | |- | ||
|RemoveSnapshotLoadedHook | |RemoveSnapshotLoadedHook || || | ||
|- | |- | ||
|AddPadHook | |AddPadHook ||emuObj.AddPadHook() || | ||
|- | |- | ||
|-style="background-color:#ff8080" | |-style="background-color:#ff8080" | ||
| || | | || Audio || | ||
|- | |- | ||
|SetVolumes | |SetVolumes || emuObj.SetVolumes('global', 'main', 'bgm') || Set volume, usually setting global is enough. Example: emuObj.SetVolumes(0.31, 1.0, 1.0) values, in floats 1.0 = 100% | ||
|- | |- | ||
|GetVolumes | |GetVolumes || emuObj.GetVolumes() || Return current volume levels for ('global', 'main', 'bgm') in floating point values. | ||
|- | |- | ||
|SetAudioRoute | |SetAudioRoute || || | ||
|- | |- | ||
|GetAudioRoute | |GetAudioRoute || || | ||
|-style="background-color:#c2c2d6" | |-style="background-color:#c2c2d6" | ||
| || Game loading speed || | |||
|- | |- | ||
| | |ThrottleNorm ||emuObj.ThrottleNorm() || Enable default framelimiter (50/60 fps depend on region). | ||
|- | |- | ||
| | |ThrottleFast || emuObj.ThrottleFast() || Faster than default, but exact value is unknown. | ||
|- | |- | ||
| | |ThrottleMax || emuObj.ThrottleMax() || Disable framelimiter during loading screens. | ||
|-style="background-color:#ffe680" | |-style="background-color:#ffe680" | ||
| || CDVD || | |||
|- | |- | ||
|OpenDiscTray | |OpenDiscTray || || | ||
|- | |- | ||
|CloseDiscTray | |CloseDiscTray || || | ||
|- | |- | ||
|SwitchDisc | |SwitchDisc || emuObj.SwitchDisc(<disc ID>) || ID can be provided as is, or for example read from memory or register when needed. | ||
|- | |- | ||
| GetDiscId | | GetDiscId || emuObj.GetDiscId() || Return DiscId in XXXX_YYY.ZZ format | ||
|- | |- | ||
| GetDiscTitleId || | | GetDiscTitleId || || | ||
|- | |- | ||
|ShowDiscSwitchInfo || | |ShowDiscSwitchInfo || emuObj.ShowDiscSwitchInfo() || | ||
|- | |- | ||
|-style="background-color:#FEA15C" | |-style="background-color:#FEA15C" | ||
| || Other || | |||
|- | |- | ||
| EnableImposeMenu | | EnableImposeMenu || emuObj.EnableImposeMenu(<true/false>) || EnableImposeMenu(false) | ||
|- | |- | ||
|LoadConfig | |LoadConfig || emuObj.LoadConfig( 0 or 1 )|| emuObj.LoadConfig(0) | ||
|- | |- | ||
|SaveConfig | |SaveConfig || emuObj.LoadConfig( 0 or 1 ) || emuObj.LoadConfig(0) | ||
|- | |- | ||
|GetPad | |GetPad || emuObj.GetPad(<gamepad button by bits>)|| example usage for reading input: | ||
<div align="left"><pre>local CheckInputs = function() | <div align="left"><pre>local CheckInputs = function() | ||
Line 1,233: | Line 1,215: | ||
emuObj.AddVsyncHook(CheckInputs) <to trigger check at every vsync></pre></div> | emuObj.AddVsyncHook(CheckInputs) <to trigger check at every vsync></pre></div> | ||
|- | |- | ||
|SwapMemCard | |SwapMemCard || || | ||
|- | |- | ||
|SetFormattedCard | |SetFormattedCard || emuObj.SetFormattedCard(<"file name">) || emuObj.SetFormattedCard("custom_formatted.card") | ||
Allow to use custom memory card. | Allow to use custom memory card. | ||
|- | |- | ||
| GetPs4SystemLang | | GetPs4SystemLang || emuObj.GetPs4SystemLang() || Return PS4 system language (in unknown format). | ||
|- | |- | ||
| SetPs2Lang | | SetPs2Lang || emuObj.SetPs2Lang(<Lang ID>) || Set emulated PS2 language, correct Lang IDs are 0-18. In some cases, games will hang on a black screen with some other language settings (eg Japanese) - Example for usage: emuObj.SetPs2Lang(1) | ||
<div align="left"><pre>0 - japanese | <div align="left"><pre>0 - japanese | ||
1 - english | 1 - english | ||
Line 1,261: | Line 1,243: | ||
18 - english-uk</pre></div> | 18 - english-uk</pre></div> | ||
|- | |- | ||
|PadSetLightBar | |PadSetLightBar || emuObj.PadSetLightBar(<port, red, green, blue>) || Set DS4 light bar color. The correct port values are 0-3, correct light values are 0-255. | ||
|- | |- | ||
|PadPressureStickRemap | |PadPressureStickRemap || emuObj.PadPressureStickRemap()|| | ||
|- | |- | ||
| IsNeoMode | | IsNeoMode || emuObj.IsNeoMode() || Check that PS4 run in NEO (PRO) mode. Return 1/0 | ||
|- | |- | ||
| IsToolingVerbose | | IsToolingVerbose || || | ||
|- | |- | ||
|CheckEntitlement | |CheckEntitlement || || | ||
|- | |- | ||
| emuMediaPatch | | emuMediaPatch || emuMediaPatch(disc sector, 12/24 + offset, { original data }, { replace data }) || Replace 4 bytes from loaded iso file. For unknown reason we always need to add 12 to real offset for DVD game, and 24 for CD game. | ||
|-style="background-color:#c6ecd9" | |-style="background-color:#c6ecd9" | ||
| || GS related || | |||
|- | |- | ||
| CountFrameOnPS2 | | CountFrameOnPS2 || emuObj.CountFrameOnPS2() || updates FRAPS/Actual FPS reading in olympus | ||
|- | |- | ||
| SetGsTitleFix | | SetGsTitleFix || emuObj.SetGsTitleFix() || [[PS2_Emulation#SetGsTitleFix|More info]] | ||
|- | |- | ||
|SetDisplayAspectWide | |SetDisplayAspectWide || emuObj.SetDisplayAspectWide() || Force display area to 16:9 (If game not support widescreen, it will be stretched). | ||
|- | |- | ||
|SetDisplayAspectNormal | |SetDisplayAspectNormal || emuObj.SetDisplayAspectNormal() || Force display area to 4:3. | ||
|- | |- | ||
|ForceRefreshRate | |ForceRefreshRate || emuObj.ForceRefreshRate(<hz>) || emuObj.ForceRefreshRate(50) correct values are 0, 50, 60 where 0 = default. | ||
|- | |- | ||
|LoadFsShader | |LoadFsShader || emuObj.LoadFsShader(<slot?>, "<path>") || <div align="left"><pre>Shaders must be loaded right after GS has been initialized. | ||
Example: | Example: | ||
Global_InitGpuResources = function() | Global_InitGpuResources = function() | ||
Line 1,294: | Line 1,276: | ||
and if depend on shader SetShaderParams.</pre></div> | and if depend on shader SetShaderParams.</pre></div> | ||
|- | |- | ||
|SetDisplaySafeArea | |SetDisplaySafeArea || || | ||
|- | |- | ||
|} | |} | ||
Line 1,303: | Line 1,285: | ||
{| 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 | ! Command !! Usage !! Notes | ||
|-style="background-color:#D7EF54" | |-style="background-color:#D7EF54" | ||
| | | || Object calling class || | ||
|- | |- | ||
| getEEObject | | getEEObject || local eeObj = getEEObject() || Required for all functions using eeObj | ||
|-style="background-color:#7698FF" | |-style="background-color:#7698FF" | ||
| || | | || Memory editing || | ||
|- | |- | ||
|ReplaceMem64 | |ReplaceMem64 || eeObj.ReplaceMem64(<address>, <value>)|| | ||
|- | |- | ||
|ReplaceMem32 | |ReplaceMem32 || eeObj.ReplaceMem32(<address>, <value>) || Permanently replace an offset without needing addvsynchook? | ||
|- | |- | ||
|ReplaceMem16 | |ReplaceMem16 || eeObj.ReplaceMem16(<address>, <value>)|| | ||
|- | |- | ||
|ReplaceMem8 || | |ReplaceMem8 ||eeObj.ReplaceMem8(<address>, <value>) || | ||
|- | |- | ||
|ReadMemFloat | |ReadMemFloat || eeObj.ReadMemFloat(<address>) || eeObj.ReadMemFloat(0x258c3c) | ||
|- | |- | ||
|WriteMemFloat | |WriteMemFloat || eeObj.WriteMemFloat(<address>, <value>) || eeObj.WriteMemFloat(0x365364, 1.3333333) | ||
|- | |- | ||
|ReadMem128 | |ReadMem128 || <pre>eeObj.ReadMem128(<ee memory offset>)</pre> || Read 16 bytes from offset, examples: eeObj.ReadMem128(0x100198) | ||
|- | |- | ||
|ReadMemFloat128 | |ReadMemFloat128 || <pre>eeObj.ReadMemFloat128(<ee memory offset>)</pre> || return 16 bytes from offset in float form | ||
|- | |- | ||
|WriteMem128 || | |WriteMem128 || || | ||
|- | |- | ||
|WriteMemFloat128 | |WriteMemFloat128 || || | ||
|- | |- | ||
| ReadMem64 | | ReadMem64 || <pre>eeObj.ReadMem64(<ee memory offset>)</pre> || Read 8 bytes from offset, examples: eeObj.ReadMem64(0x100198) | ||
|- | |- | ||
| WriteMem64 | | WriteMem64 || <pre>eeObj.WriteMem64(<ee memory offset>, <data>)</pre> || | ||
|- | |- | ||
| ReadMem32 | | ReadMem32 || <pre>eeObj.ReadMem32(<ee memory offset>)</pre> || Read 4 bytes from offset, examples: eeObj.ReadMem32(0x100198) | ||
eeObj.ReadMem32(gp - 31348) | eeObj.ReadMem32(gp - 31348) | ||
|- | |- | ||
| WriteMem32 | | WriteMem32 || <pre>eeObj.WriteMem32(<ee memory offset>, <data>)</pre> || Write 4 bytes to offset, example: eeObj.WriteMem32(0x2c89ac, 0x001b70f0) | ||
|- | |- | ||
| ReadMem16 | | ReadMem16 || <pre>eeObj.ReadMem16(<ee memory offset>)</pre> || Read 2 bytes from offset, example: eeObj.ReadMem16(0x100198) | ||
|- | |- | ||
| WriteMem16 | | WriteMem16 || <pre>eeObj.WriteMem16(<ee memory offset>, <data>)</pre> || Write 2 bytes to offset, example: eeObj.WriteMem16(0x2c89ac, 0x70f0) | ||
|- | |- | ||
| ReadMem8 | | ReadMem8 || <pre>eeObj.ReadMem8(<ee memory offset>)</pre> || Read 1 byte from offset, example: eeObj.ReadMem8(0x100198) | ||
|- | |- | ||
| WriteMem8 | | WriteMem8 || <pre>eeObj.WriteMem8(<ee memory offset>, <data>)</pre> || Write 1 byte to offset, example: eeObj.WriteMem8(0x2c89ac, 0xf0) | ||
|- | |- | ||
|ReadMemStr | |ReadMemStr || eeObj.ReadMemStr(address/register) || Read string from address until null terminator | ||
|- | |- | ||
|WriteMemStr | |WriteMemStr || eeObj.WriteMemStr(address, string) || | ||
|- | |- | ||
|WriteMemStrZ | |WriteMemStrZ || || eeObj.WriteMemStrZ(string pointer, string) . Pointer can be read from GPR | ||
|-style="background-color:#ff9999" | |-style="background-color:#ff9999" | ||
| || GPR require (Necessary for register related commands)|| | |||
|- | |- | ||
| | | || local gpr = require( "ee-gpr-alias" ) | ||
|- | |- | ||
|GetGpr64 | |GetGpr64 || eeObj.GetGPR64(<gpr register>) || example: eeObj.GetGPR64(t3) | ||
|- | |- | ||
|SetGpr64 | |SetGpr64 || || | ||
|- | |- | ||
| GetGprFloat | | GetGprFloat || || Get gpr value as float value | ||
|- | |- | ||
| SetGprFloat | | SetGprFloat || || Set gpr value as float value | ||
|- | |- | ||
|GetGpr | |GetGpr || eeObj.GetGPR(<gpr register>) || eeObj.GetGPR(t3) | ||
|- | |- | ||
|SetGpr | |SetGpr|| eeObj.SetGPR(<gpr register> ,<value>) || example: eeObj.SetGPR(gpr.a3 ,1) | ||
Require defined getEEObject() as eeObj | Require defined getEEObject() as eeObj | ||
|- | |- | ||
| GetFprHex | | GetFprHex || eeObj.GetFprHex(<FPU register (0-31)>)|| Get/return floating point register value as hex string | ||
|- | |- | ||
| SetFprHex | | SetFprHex || eeObj.SetFprHex(<FPU register (0-31), value (u32)>)|| Set floating point register value as hex string | ||
|- | |- | ||
| GetFpr | | GetFpr || eeObj.GetFpr(<register number>) || example eeObj.GetFpr(14) | ||
|- | |- | ||
| SetFpr | | SetFpr || eeObj.SetFpr(<fpr register number>, <value>) || Simple example eeObj.SetFpr(14, 50.0) will set frp 14 to 50.0 | ||
But we can also combine commands to add/sub from registers | But we can also combine commands to add/sub from registers | ||
eeObj.SetFpr(14, eeObj.GetFpr(14) + 50.0) this will add 50.0 to current fpr 14 value | eeObj.SetFpr(14, eeObj.GetFpr(14) + 50.0) this will add 50.0 to current fpr 14 value | ||
|- | |- | ||
|GetPc | |GetPc || eeObj.GetPc() ||This command is very helpful as it will return to you the current EE address that's being read. Can be used also with additional var. like eeObj.GetPc()+4 | ||
|- | |- | ||
|SetPc | |SetPc || eeObj.SetPC(<PC>) ||eeObj.SetPC(0x266B80) | ||
|- | |- | ||
|GetCPR0 | |GetCPR0 || eeObj.GetCPR0(<COP0 register>) || | ||
|- | |- | ||
|SetCPR0 | |SetCPR0 || eeObj.SetCPR0(<COP0 register>) || | ||
|-style="background-color:#c6ecd9" | |-style="background-color:#c6ecd9" | ||
| || Hooks || | |||
|- | |- | ||
| AddHook | | AddHook || eeObj.AddHook(<ee offset>, <original opcode>, <definied hook name>) || example: <div align="left"><pre>local W1 = | ||
function() | function() | ||
emuObj.SetDisplayAspectNormal() | emuObj.SetDisplayAspectNormal() | ||
Line 1,398: | Line 1,380: | ||
local ws1 = eeObj.AddHook(0x1c9840, 0xaf808c78, W1)</pre></div> | local ws1 = eeObj.AddHook(0x1c9840, 0xaf808c78, W1)</pre></div> | ||
|- | |- | ||
|RemoveHook | |RemoveHook || || | ||
|- | |- | ||
|AddPreHook | |AddPreHook || || | ||
|- | |- | ||
|AddPostHook | |AddPostHook || || | ||
|- | |- | ||
|RemovePreHook | |RemovePreHook || || | ||
|- | |- | ||
|RemovePostHook | |RemovePostHook || || | ||
|- | |- | ||
|AddJitResetHook | |AddJitResetHook || || | ||
|- | |- | ||
|RemoveJitResetHook | |RemoveJitResetHook || || | ||
|- | |- | ||
| AddHookJT | | AddHookJT || eeObj.AddHookJT(Offset, offset opcode, function) || Seems be a hook related to the jit | ||
|- | |- | ||
|-style="background-color:#ffb3b3" | |-style="background-color:#ffb3b3" | ||
| || Dma || | |||
|- | |- | ||
| SetVifDataCycleScalar | | SetVifDataCycleScalar || || Used in Jak3 = eeObj.SetVifDataCycleScalar(1, 1.80) | ||
|- | |- | ||
|DmaAddHook | |DmaAddHook || <pre>eeobj.DmaAddHook(channel=%d key=%x)</pre> || Possible Dma channel numbers (?) | ||
<pre> GIF = 0 VIF0 = 1 | <pre> GIF = 0 VIF0 = 1 | ||
VIF1 = 2 SIF0 = 4 | VIF1 = 2 SIF0 = 4 | ||
Line 1,427: | Line 1,409: | ||
<pre>DmaTransfer [VIF0/VIF1], RaiseIntc [VIF0/VIF1], NormalTransfer [SIF0/SIF1]. </pre> | <pre>DmaTransfer [VIF0/VIF1], RaiseIntc [VIF0/VIF1], NormalTransfer [SIF0/SIF1]. </pre> | ||
|- | |- | ||
|DmaRemoveHook | |DmaRemoveHook || || | ||
|- | |- | ||
|-style="background-color:#b3f0ff" | |-style="background-color:#b3f0ff" | ||
| || Speedhacks || | |||
|- | |- | ||
|FastForwardClock | |FastForwardClock || eeObj.FastForwardClock() || Skip Emotion Engine cycles? | ||
<pre> | <pre> | ||
eeObj.AddHook(0x002cc350, 0x78a30000, function() | eeObj.AddHook(0x002cc350, 0x78a30000, function() | ||
Line 1,439: | Line 1,421: | ||
</pre> | </pre> | ||
|- | |- | ||
|AdvanceClock | |AdvanceClock || eeObj.AdvanceClock() || Likely skips an allocated amount of EE cycles. Can only be attached to the start or end of a branch loop (on newer emus, only the end of a branch works) | ||
<pre> | <pre> | ||
eeObj.AddHook(0x002cc350, 0x78a30000, function() | eeObj.AddHook(0x002cc350, 0x78a30000, function() | ||
Line 1,445: | Line 1,427: | ||
end)</pre> | end)</pre> | ||
|- | |- | ||
| GetClock | | GetClock || eeObj.GetClock() || Returns the value of how many cycles the EE is ahead of normal clock (?) | ||
|- | |- | ||
|Vu1MpgCycles | |Vu1MpgCycles || eeObj.Vu1MpgCycles(<cycles>) || Works just like the cli command --vu1-mpg-cycles= | ||
|-style="background-color:#FEA15C" | |-style="background-color:#FEA15C" | ||
| || | | || Other || | ||
|- | |- | ||
| | | CallPredicate | ||
|- | |- | ||
|SchedulerDelayEvent | |SchedulerDelayEvent || eeObj.SchedulerDelayEvent("event", cycles)<br>Example:<br>eeObj.AddHook(0x0033A4DC,0xAC430000, function() eeObj.SchedulerDelayEvent("gif.dma", 0x10500) end) || Parrapa use eeObj.SchedulerDelayEvent("vif1.dma", 0x6500) other events are gif.dma, vif0.dma, vif1.dma, sif0.dma, Sif0-NormalTransfer, sif1.dma, Sif1-NormalTransfer, ipu0.dma, ipu1.dma . This command allows for the delayment of certain DMA transfer by cycles. | ||
|- | |- | ||
|WaitVu1 | |WaitVu1 || eeObj.WaitVu1() || Likely to be the lua equivalent of "--vu1=jit-sync". | ||
|- | |- | ||
|GetPcRingBuffer | |GetPcRingBuffer || || | ||
|- | |- | ||
|Precompile | |Precompile || || Requires unknown values | ||
|- | |- | ||
|CalcInsnHash | |CalcInsnHash || || | ||
|- | |- | ||
| getOverlayObject | |getOverlayObject || eeObj.getOverlayObject() || local eeOverlay = eeObj.getOverlayObject() | ||
|- | |- | ||
| GetVif1Cycles | | GetVif1Cycles || eeObj.GetVif1Cycles() || local vif1_cycles = eeObj.GetVif1Cycles() create vif_cycles value that can be used later. You can rename it as you wish. | ||
|- | |- | ||
|} | |} | ||
Line 2,682: | Line 2,664: | ||
! Issue !! Games affected !! Solution !! Description | ! Issue !! Games affected !! Solution !! Description | ||
|- | |- | ||
| Flags are incorrectly updated || Every Ratchet game except Size Matters, possibly many more. || Setting opt-flags commands to 0 | | Flags are incorrectly updated || Every Ratchet game except Size Matters, possibly many more. || Setting opt-flags commands to 0 || For VU1 or VU0, this may crash games or create sps. As for FPU/COP2, this could possibly mess with physics or also crash games. | ||
|- | |- | ||
| No support for EE Cache || Ice Age 2, DOA2: Extreme, Nascar 2009, Barnyard, [https://github.com/PCSX2/pcsx2/issues/2248 Others]|| Lua patches to the EE memory and picking the right emulator || | | No support for EE Cache || Ice Age 2, DOA2: Extreme, Nascar 2009, Barnyard, [https://github.com/PCSX2/pcsx2/issues/2248 Others]|| Lua patches to the EE memory and picking the right emulator || | ||
Line 2,699: | Line 2,679: | ||
| M-Bit support is broken || '''Every game that uses M-Bit'''. Totally Spies! Totally Party, Mike Tyson Heavyweight Boxing, My Street, Crash Twinsanity, Marvel Nemesis, Panzer Elite Action - Fields of Glory, Super Monkey Ball Adventure, most Eko Software games, and many more. [https://github.com/PCSX2/pcsx2/pull/3593] || Lua patches to the EE memory || While emulator respect m-bit, way that VU0 work on it make it broken most of times (check "VU0 is not running in sync with EE core" issue). | | M-Bit support is broken || '''Every game that uses M-Bit'''. Totally Spies! Totally Party, Mike Tyson Heavyweight Boxing, My Street, Crash Twinsanity, Marvel Nemesis, Panzer Elite Action - Fields of Glory, Super Monkey Ball Adventure, most Eko Software games, and many more. [https://github.com/PCSX2/pcsx2/pull/3593] || Lua patches to the EE memory || While emulator respect m-bit, way that VU0 work on it make it broken most of times (check "VU0 is not running in sync with EE core" issue). | ||
|- | |- | ||
| Multitap doesn't support all games || Urban reign, Digimon Rumble Arena 2 | | Multitap doesn't support all games || Urban reign, Digimon Rumble Arena 2, others || Lua patches || Emulator expect PS4 to be able to use 8 controllers (well, who doesn't? Even PS1 can do it...). That cause all kind of mess with controller detection when game expect multitap in second port. | ||
|- | |- | ||
| 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 | ||
Line 2,724: | Line 2,704: | ||
|- | |- | ||
| 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. | ||
|- | |||
| Unknown IOP issues || Genji - Dawn of the Samurai, Wild Arms 4 || A number of issues can be at play here; IOP's cycle speed, for example, is 2x overclocked, CDVD's read speed and the SIF's speed are unknown.|| | |||
|- | |- | ||
| Unknown GS crashes || Star Wars - Battlefront II || Different combinations of GS commands. || | | Unknown GS crashes || Star Wars - Battlefront II || Different combinations of GS commands. || | ||
|- | |- | ||
|} | |} | ||
Line 4,090: | Line 4,066: | ||
end | end | ||
</pre> | </pre> | ||
= Links = | = Links = | ||
* [https://archive.org/details/sony-playstation-2-manuals-scea Archive of official manuals of PS2 Classic for PS4 games hosted on Amazon AWS (2022-09-21)] | |||
* [https://psi-rockin.github.io/ps2tek/ PS2 Hardware Documentation] | * [https://psi-rockin.github.io/ps2tek/ PS2 Hardware Documentation] | ||
* [https://pastebin.com/yf802Up3 Graphics Synthetizer title fix guide] | * [https://pastebin.com/yf802Up3 Graphics Synthetizer title fix guide] | ||
Line 4,104: | Line 4,077: | ||
* [https://github.com/Zcor3x/Playstation-2-Classics-PS4 Most base emulators for PS2 Classics released on PS4 by Zcor3x] | * [https://github.com/Zcor3x/Playstation-2-Classics-PS4 Most base emulators for PS2 Classics released on PS4 by Zcor3x] | ||
* [https://blog.eu.playstation.com/2018/05/01/12-ps2-classics-hit-ps-now-this-month-heres-why-should-play-them/] | * [https://blog.eu.playstation.com/2018/05/01/12-ps2-classics-hit-ps-now-this-month-heres-why-should-play-them/] | ||
{{Reverse Engineering}} | {{Reverse Engineering}} |