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 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
* Dropship: United Peace Force: announced on 2025-02-12. Enhanced with up-rendering, rewind, quick save, and custom video filters.
* 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"
* Indiana Jones and the Staff of Kings UP1082-CUSA41353_00-SLUS218850000000 (PS5: UP1082-PPSA14388_00-SLUS218850000000 or UP1082-PPSA14388_00-0064394372965033) 2024-11-26 PS4 12.00 or PS5 10.40
* 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 or PS5 9.20
* 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 2: Band of Thieves™ (PS5: UP9000-PPSA22287_00-SCUS973160000000) 2024-12-10 PS5 10.01
* Sly 3: Honour Among Thieves™ (PS5: UP9000-PPSA22288_00-SCUS974640000000) 2024-12-10 PS5 10.01
* 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 (not to be confused with the Final Edition) UP0576-CUSA03751_00-SLUS218160000001 or EP0576-CUSA04159_00-SLES552800000001 2018-03-20
* 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, not to be confused with the Final Edition) UP0576-CUSA03751_00-SLUS218160000001
* 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 or JP2880-CUSA19492_00-DAH1REMAKEJP0000 or EP4389-CUSA14910_00-DAH1REMAKEEU0000, PS4 7.50 2020-07-28
* Destroy All Humans! UP4389-CUSA14899_00-DAH1REMAKEUS0000, JP2880-CUSA19492_00-DAH1REMAKEJP0000, EP4389-CUSA14910_00-DAH1REMAKEEU0000, PS4 7.50
* Destroy All Humans! 2 (in Destroy All Humans! 2 - Reprobed) (PS5: UP4389-PPSA05398_00-DAH2REPRODBEDUS0) 2022-08-30
* Samurai Shodown V Special
* Metal Gear Solid 2: Sons of Liberty (HD Collection version i.e. Metal Gear Solid 2: Substance) (in METAL GEAR SOLID: MASTER COLLECTION Vol.1 PS4 & PS5) 2023-10-24
* Metal Gear Solid Collection Vol 1
* Metal Gear Solid 3: Snake Eater (HD Collection version i.e. Metal Gear Solid 3: Subsistence) (in METAL GEAR SOLID: MASTER COLLECTION Vol.1 PS4 & PS5) 2023-10-24
* Tales of Symphonia Remastered UP0700-CUSA29214_00-TALESOFSYMPHONIA 2023-02-17
* Tales of Symphonia (in 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
* Legacy of Kain™ Soul Reaver 2 (in 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
* The King of Fighters '98 Ultimate Match (in The King of Fighters '98 Ultimate Match Final Edition) UP0576-CUSA29364_00-KOF98UMFE00000US or EP0576-CUSA29365_00-KOF98UMFE00000EU 2022-06-21


= 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,'''  
|-
| Jak x || Useful for games with COP2 issues. It fixed Superman - Shadow of Apokolips's sps. || || '''Jak,''' '''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,''' '''Samurai Showdown,''' '''Redfaction,''' '''AOFA.'''  
| 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. This may be a result of a good GIF/VIF timing. || 0.1 ||  
| 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 (359 => 0) <br>Decelerate cycles (361 => ∞ ) || {{4 Bytes}}||Its effects are mysterious. Possibly delays EE startup when starting new tasks. 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-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>MfifoDrain<br>ForceEOB<br>SO3_AudioRequest<br>SO3_AudioWriteBack || 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. AdvanceClock stalls the EE for a specified amount of cycles (in decimals), while FastForwardClock behaves similarly. They are commonly used on CTC2 instructions. FastoForwardClock can be used on any offset. However, some offsets are ignored by AdvanceClock - it could be that this function only works on instructions reached after processing a branch instruction, likely specifically designed to work at both the start or end of a branch instruction (a loop). 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 at the end of a branch instruction (when it's false).<pre>
| --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 nop <-- Advancelock cannot work here ✗
0x4 beq zero,v1,0x0 <-- Advancelock cannot work here
0x8 beq zero,v1,0x0 <-- Advancelock cannot work here
0x8 nop <-- Advancelock cannot work here
0xC 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, but only works on modern emus such as Jakv2. However, it seems to somehow negatively impact performance. On Red Dead Revolver, it was used on two LW instructions grabbing data from 0x1000D010 and 0x1000D000. Both instructions were located at the start of a loop. ||--ee-hook=0x0025A9F2,AdvanceClock,,500 <br>--ee-hook=0x0019F0AD,FastForwardClock
|-
|-
|-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 to 0 improves FPU accuracy. For example, it fixed gravity issues (falling through the floor) in Ratchet, and Brave - The Search for Spirit Dancer. It is an insignificant speedhack which should always be set to 0. [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L280 More Info] || --cop2-opt-flags=0
| --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. Set to 1 by default, setting it to 0 fixed Superman Shadow of Apokolips freezing. It is an insignificant speedhack which should always be set to 0. || --cop2-opt-vf00=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=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. It may slightly adjust COP2 timing. || --cop2-no-clamping=0
| --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. It is slightly slow. || --cop2-accurate-mul=1
| --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. Named by PCSX2 as "VuAddSubHack". || --vu-hack-triace=1
| --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 (delay VIF1 startup). 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 change values close to VU1-mpg-cycles' offset. Potentially, the vu1mpgcycles command sets the speed for every portion of the mpg. Thus, by using symbols, one could specify the speed for different specific portions of the mpg rather than the whole mpg. However, this is not limited to only altering the vu1mpgcycles' speed, as going further can change other parts of the emulator, such as eecyclescalar.
| --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. It is an insignificant speedhack which should always be set to 0. [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. 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. It is an insignificant speedhack which should always be set to 0. || --vu1-opt-vf00=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=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). It's not perfect, as some games such as Midnight Club 3, Shrek The Third, and Surf's Up do not work well with it. The default emulator's value is 1. It may slightly adjust VU1 timing. || --vu1-no-clamping=0
| --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 (delay VIF0 startup). 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):
| --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. It is an insignificant speedhack which should always be set to 0. || --vu0-opt-vf00=0
| --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. It is an insignificant speedhack which should always be set to 0. [https://github.com/PCSX2/pcsx2/blob/58f5a5b915915293b90e7e8f34c33f9c0424d1e8/pcsx2/x86/microVU_Misc.h#L280 More Info] || --vu0-opt-flags=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.[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. It may slightly adjust VU0 timing. || --vu0-no-clamping=0
| --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(?) 1024 is the limit, with 112 being the default value.  ||  --vif-thread-chunk-size=100  
| --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 transfer speed. 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 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, such as in Pac-Man World Rally. Recommended for most games except the ones using 2D images, as it could incorrectly structure pixels' positions. || --gs-force-bilinear=1
| --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 selector || --gs-upscale=EdgeSmooth
| --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 missing polygons, and model 'warping' when set to 8. 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-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-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
|-
| --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-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-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 || {{2 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, 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
|-
| --cdvd-determinism || {{Exclusive}} || || || || Unknown
|-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% --> Unavailable<br>180% --> 0.2<br>130% -->0.7<br>'''100% --> 1.0'''<br>75% --> 1.333<br>60% --> 1.666<br>50% --> 2
| {{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}}MTVU: 0 || {{cellcolors|#03fcb1|#000000}}--vu1=jit-sync || Some games will also require --vu1-mpg-cycles= to be between "6000 - 19000"
| {{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
--cop2-opt-vf00=0
--vu0-opt-vf00=0
--vu1-opt-vf00=0
--vu-custom-min-max=0
--vu-custom-min-max=0
--vu-xgkick-delay=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 !! Emulator Support !! Usage !! Notes
! Command !! Usage !! Notes
|-style="background-color:#D7EF54"
|-style="background-color:#D7EF54"
|| || Object calling class ||
|  || Object calling class ||
|-
|-
| getEmuObject || || local emuObj = getEmuObject() || Required for all functions using emuObj, that include: <div align="left"><pre>LoadConfig SaveConfig GetPad AddVsyncHook
| 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 ||
|  || Hooks ||
|-
|-
|AddVsyncHook || {{Universal}} || emuObj.AddVsyncHook(<task to be done every vsync>) || emuObj.AddVsyncHook(my_function)  
|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 ||  || emuObj.RemoveVsyncHook(<previously added task to be removed>) || emuObj.RemoveVsyncHook(my_function)
|RemoveVsyncHook || emuObj.RemoveVsyncHook(<previously added task to be removed>) || emuObj.RemoveVsyncHook(my_function)
|-
|-
|AddEntryPointHook ||  || emuObj.AddEntryPointHook(<task>) || Task to be done at ps2 game main elf entry point (right where game is loaded).
|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 || || 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>) )
| 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 || ||emuObj.AddMCWriteHook() ||
|AddMCWriteHook ||emuObj.AddMCWriteHook() ||
|-
|-
|AddAssertionHook || ||emuObj.AddAssertionHook() ||
|AddAssertionHook ||emuObj.AddAssertionHook() ||
|-
|-
|AddSnapshotLoadedHook || || ||
|AddSnapshotLoadedHook || ||
|-
|-
|RemoveSnapshotLoadedHook || || ||
|RemoveSnapshotLoadedHook || ||
|-
|-
|AddPadHook ||  ||emuObj.AddPadHook() ||
|AddPadHook ||emuObj.AddPadHook() ||
|-
|-
|-style="background-color:#ff8080"
|-style="background-color:#ff8080"
|  || ||  Audio ||  
|  || Audio ||  
|-
|-
|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%
|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 ||  || emuObj.GetVolumes() || Return current volume levels for ('global', 'main', 'bgm') in floating point values.
|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 speed ||  
|  || Game loading speed ||  
|-
|ThrottleNorm || {{Exclusive}} || emuObj.ThrottleNorm() || Enable default framelimiter (50/60 fps depend on region).
|-
|-
|ThrottleFast ||  {{Exclusive}} || emuObj.ThrottleFast() || Faster than default, but exact value is unknown.
|ThrottleNorm ||emuObj.ThrottleNorm() || Enable default framelimiter (50/60 fps depend on region).
|-
|-
|ThrottleMax ||  {{Exclusive}} || emuObj.ThrottleMax() || Disable framelimiter during loading screens.  
|ThrottleFast || emuObj.ThrottleFast() || Faster than default, but exact value is unknown.
|-
|-
| SetFrameLimiter || {{Exclusive}} || emuObj.SetFrameLimiter() || Disable framelimiter when left empty, enable when any value is added to it. <pre>
|ThrottleMax || emuObj.ThrottleMax() || Disable framelimiter during loading screens.  
local Nolimit = emuObj.SetFrameLimiter()
local LimitFrames = emuObj.SetFrameLimiter(1)
eeObj.AddHook(0x000FF904, 0x0, Nolimit)
eeObj.AddHook(0x000FF90C, 0x0, LimitFrames)
</pre>
|-style="background-color:#ffe680"
|-style="background-color:#ffe680"
|  ||  || CDVD ||  
|  || CDVD ||  
|-
|-
|OpenDiscTray || || ||
|OpenDiscTray || ||
|-
|-
|CloseDiscTray || || ||
|CloseDiscTray || ||
|-
|-
|SwitchDisc || || emuObj.SwitchDisc(<disc ID>) || ID can be provided as is, or for example read from memory or register when needed.
|SwitchDisc || emuObj.SwitchDisc(<disc ID>) || ID can be provided as is, or for example read from memory or register when needed.
|-
|-
| GetDiscId || || emuObj.GetDiscId() || Return DiscId in XXXX_YYY.ZZ format
| GetDiscId || emuObj.GetDiscId() || Return DiscId in XXXX_YYY.ZZ format
|-
|-
| GetDiscTitleId || ||  ||
| GetDiscTitleId || ||
|-
|-
|ShowDiscSwitchInfo || ||  emuObj.ShowDiscSwitchInfo() ||
|ShowDiscSwitchInfo || emuObj.ShowDiscSwitchInfo() ||
|-
|-
|-style="background-color:#FEA15C"
|-style="background-color:#FEA15C"
|  ||  || Other ||  
|  || Other ||  
|-
|-
| EnableImposeMenu ||  || emuObj.EnableImposeMenu(<true/false>) || EnableImposeMenu(false)
| EnableImposeMenu || emuObj.EnableImposeMenu(<true/false>) || EnableImposeMenu(false)
|-
|-
|LoadConfig ||  || emuObj.LoadConfig( 0 or 1 )|| emuObj.LoadConfig(0)
|LoadConfig || emuObj.LoadConfig( 0 or 1 )|| emuObj.LoadConfig(0)
|-
|-
|SaveConfig ||  || emuObj.LoadConfig( 0 or 1 ) || emuObj.LoadConfig(0)
|SaveConfig || emuObj.LoadConfig( 0 or 1 ) || emuObj.LoadConfig(0)
|-
|-
|GetPad ||  || emuObj.GetPad(<gamepad button by bits>)|| example usage for reading input:  
|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 || || emuObj.SetFormattedCard(<"file name">) || emuObj.SetFormattedCard("custom_formatted.card")
|SetFormattedCard || emuObj.SetFormattedCard(<"file name">) || emuObj.SetFormattedCard("custom_formatted.card")
  Allow to use custom memory card.  
  Allow to use custom memory card.  
|-
|-
| GetPs4SystemLang || || emuObj.GetPs4SystemLang() || Return PS4 system language (in unknown format).
| GetPs4SystemLang || emuObj.GetPs4SystemLang() || Return PS4 system language (in unknown format).
|-
|-
| 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)
| 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 || || emuObj.PadSetLightBar(<port, red, green, blue>) || Set DS4 light bar color. The correct port values are 0-3, correct light values are 0-255.
|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 || || emuObj.PadPressureStickRemap()||
|PadPressureStickRemap || emuObj.PadPressureStickRemap()||
|-
|-
| IsNeoMode || || emuObj.IsNeoMode() || Check that PS4 run in NEO (PRO) mode. Return 1/0
| IsNeoMode || emuObj.IsNeoMode() || Check that PS4 run in NEO (PRO) mode. Return 1/0
|-
|-
| IsToolingVerbose || || ||
| IsToolingVerbose || ||
|-
|-
|CheckEntitlement || || ||
|CheckEntitlement || ||
|-
|-
| 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.  
| 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 ||
|  || GS related ||
|-
|-
| CountFrameOnPS2 || {{exclusive}} || emuObj.CountFrameOnPS2() || updates FRAPS/Actual FPS reading in olympus
| CountFrameOnPS2 || emuObj.CountFrameOnPS2() || updates FRAPS/Actual FPS reading in olympus
|-
|-
| SetGsTitleFix || || emuObj.SetGsTitleFix() ||  [[PS2_Emulation#SetGsTitleFix|More info]]
| SetGsTitleFix || emuObj.SetGsTitleFix() ||  [[PS2_Emulation#SetGsTitleFix|More info]]
|-
|-
|SetDisplayAspectWide || || emuObj.SetDisplayAspectWide() || Force display area to 16:9 (If game not support widescreen, it will be stretched).
|SetDisplayAspectWide || emuObj.SetDisplayAspectWide() || Force display area to 16:9 (If game not support widescreen, it will be stretched).
|-
|-
|SetDisplayAspectNormal || || emuObj.SetDisplayAspectNormal() || Force display area to 4:3.
|SetDisplayAspectNormal || emuObj.SetDisplayAspectNormal() || Force display area to 4:3.
|-
|-
|ForceRefreshRate || {{exclusive}} || emuObj.ForceRefreshRate(<hz>) || emuObj.ForceRefreshRate(50) correct values are 0, 50, 60 where 0 = default.  
|ForceRefreshRate || emuObj.ForceRefreshRate(<hz>) || emuObj.ForceRefreshRate(50) correct values are 0, 50, 60 where 0 = default.  
|-
|-
|LoadFsShader || || emuObj.LoadFsShader(<slot?>, "<path>") || <div align="left"><pre>Shaders must be loaded right after GS has been initialized.  
|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 !! Emulator Support !! Usage !! Notes
! Command !! Usage !! Notes
|-style="background-color:#D7EF54"
|-style="background-color:#D7EF54"
|| || Object calling class ||
|  || Object calling class ||
|-
|-
| getEEObject ||  || local eeObj = getEEObject() || Required for all functions using eeObj
| getEEObject || local eeObj = getEEObject() || Required for all functions using eeObj
|-style="background-color:#7698FF"
|-style="background-color:#7698FF"
|  || ||  Memory editing ||  
|  || Memory editing ||  
|-
|-
|ReplaceMem64 ||  || eeObj.ReplaceMem64(<address>, <value>)||
|ReplaceMem64 || eeObj.ReplaceMem64(<address>, <value>)||
|-
|-
|ReplaceMem32 ||  || eeObj.ReplaceMem32(<address>, <value>) || Permanently replace an offset without needing addvsynchook?
|ReplaceMem32 || eeObj.ReplaceMem32(<address>, <value>) || Permanently replace an offset without needing addvsynchook?
|-
|-
|ReplaceMem16 ||  || eeObj.ReplaceMem16(<address>, <value>)||
|ReplaceMem16 || eeObj.ReplaceMem16(<address>, <value>)||
|-
|-
|ReplaceMem8 || ||  eeObj.ReplaceMem8(<address>, <value>) ||
|ReplaceMem8 ||eeObj.ReplaceMem8(<address>, <value>) ||
|-
|-
|ReadMemFloat ||  || eeObj.ReadMemFloat(<address>) || eeObj.ReadMemFloat(0x258c3c)
|ReadMemFloat || eeObj.ReadMemFloat(<address>) || eeObj.ReadMemFloat(0x258c3c)
|-
|-
|WriteMemFloat ||  || eeObj.WriteMemFloat(<address>, <value>) || eeObj.WriteMemFloat(0x365364, 1.3333333)
|WriteMemFloat || eeObj.WriteMemFloat(<address>, <value>) || eeObj.WriteMemFloat(0x365364, 1.3333333)
|-
|-
|ReadMem128 ||  || <pre>eeObj.ReadMem128(<ee memory offset>)</pre> || Read 16 bytes from offset, examples: eeObj.ReadMem128(0x100198)
|ReadMem128 || <pre>eeObj.ReadMem128(<ee memory offset>)</pre> || Read 16 bytes from offset, examples: eeObj.ReadMem128(0x100198)
|-
|-
|ReadMemFloat128 ||  || <pre>eeObj.ReadMemFloat128(<ee memory offset>)</pre> || return 16 bytes from offset in float form
|ReadMemFloat128 || <pre>eeObj.ReadMemFloat128(<ee memory offset>)</pre> || return 16 bytes from offset in float form
|-
|-
|WriteMem128 || ||  ||
|WriteMem128 || ||
|-
|-
|WriteMemFloat128 ||  || ||
|WriteMemFloat128 || ||
|-
|-
| ReadMem64 ||  || <pre>eeObj.ReadMem64(<ee memory offset>)</pre> || Read 8 bytes from offset, examples: eeObj.ReadMem64(0x100198)
| ReadMem64 || <pre>eeObj.ReadMem64(<ee memory offset>)</pre> || Read 8 bytes from offset, examples: eeObj.ReadMem64(0x100198)
|-
|-
| WriteMem64 ||  || <pre>eeObj.WriteMem64(<ee memory offset>, <data>)</pre> ||  
| WriteMem64 || <pre>eeObj.WriteMem64(<ee memory offset>, <data>)</pre> ||  
|-
|-
| ReadMem32 ||  || <pre>eeObj.ReadMem32(<ee memory offset>)</pre> || Read 4 bytes from offset, examples: eeObj.ReadMem32(0x100198)
| 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 ||  {{Universal}} || <pre>eeObj.WriteMem32(<ee memory offset>, <data>)</pre> || Write 4 bytes to offset, example: eeObj.WriteMem32(0x2c89ac, 0x001b70f0)
| WriteMem32 || <pre>eeObj.WriteMem32(<ee memory offset>, <data>)</pre> || Write 4 bytes to offset, example: eeObj.WriteMem32(0x2c89ac, 0x001b70f0)
|-
|-
| ReadMem16 ||  || <pre>eeObj.ReadMem16(<ee memory offset>)</pre> || Read 2 bytes from offset, example: eeObj.ReadMem16(0x100198)
| ReadMem16 || <pre>eeObj.ReadMem16(<ee memory offset>)</pre> || Read 2 bytes from offset, example: eeObj.ReadMem16(0x100198)
|-
|-
| WriteMem16 ||  || <pre>eeObj.WriteMem16(<ee memory offset>, <data>)</pre> || Write 2 bytes to offset, example: eeObj.WriteMem16(0x2c89ac, 0x70f0)
| WriteMem16 || <pre>eeObj.WriteMem16(<ee memory offset>, <data>)</pre> || Write 2 bytes to offset, example: eeObj.WriteMem16(0x2c89ac, 0x70f0)
|-
|-
| ReadMem8 ||  || <pre>eeObj.ReadMem8(<ee memory offset>)</pre> || Read 1 byte from offset, example: eeObj.ReadMem8(0x100198)
| ReadMem8 || <pre>eeObj.ReadMem8(<ee memory offset>)</pre> || Read 1 byte from offset, example: eeObj.ReadMem8(0x100198)
|-
|-
| WriteMem8 ||  || <pre>eeObj.WriteMem8(<ee memory offset>, <data>)</pre> || Write 1 byte to offset, example: eeObj.WriteMem8(0x2c89ac, 0xf0)
| WriteMem8 || <pre>eeObj.WriteMem8(<ee memory offset>, <data>)</pre> || Write 1 byte to offset, example: eeObj.WriteMem8(0x2c89ac, 0xf0)
|-
|-
|ReadMemStr ||  || eeObj.ReadMemStr(address/register) || Read string from address until null terminator
|ReadMemStr || eeObj.ReadMemStr(address/register) || Read string from address until null terminator
|-
|-
|WriteMemStr ||  || eeObj.WriteMemStr(address, string) ||  
|WriteMemStr || eeObj.WriteMemStr(address, string) ||  
|-
|-
|WriteMemStrZ || ||  || eeObj.WriteMemStrZ(string pointer, string) .  Pointer can be read from GPR
|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)||  
|  || GPR require (Necessary for register related commands)||  
|-
|-
| ||  || local gpr = require( "ee-gpr-alias" ) ||
| || local gpr = require( "ee-gpr-alias" )
|-
|-
|GetGpr64 ||  || eeObj.GetGPR64(<gpr register>) || example: eeObj.GetGPR64(t3)
|GetGpr64 || eeObj.GetGPR64(<gpr register>) || example: eeObj.GetGPR64(t3)
|-
|-
|SetGpr64 ||  || ||
|SetGpr64 || ||
|-
|-
| GetGprFloat ||  || || Get gpr value as float value
| GetGprFloat || || Get gpr value as float value
|-
|-
| SetGprFloat ||  || || Set gpr value as float value
| SetGprFloat || || Set gpr value as float value
|-
|-
|GetGpr ||  || eeObj.GetGPR(<gpr register>) || eeObj.GetGPR(t3)
|GetGpr || eeObj.GetGPR(<gpr register>) || eeObj.GetGPR(t3)
|-
|-
|SetGpr||  || eeObj.SetGPR(<gpr register> ,<value>) || example: eeObj.SetGPR(gpr.a3 ,1)
|SetGpr|| eeObj.SetGPR(<gpr register> ,<value>) || example: eeObj.SetGPR(gpr.a3 ,1)
Require defined getEEObject() as eeObj
Require defined getEEObject() as eeObj
|-
|-
| GetFprHex ||  || eeObj.GetFprHex(<FPU register (0-31)>)|| Get/return floating point register value as hex string
| GetFprHex || eeObj.GetFprHex(<FPU register (0-31)>)|| Get/return floating point register value as hex string
|-
|-
| SetFprHex ||  || eeObj.SetFprHex(<FPU register (0-31), value (u32)>)|| Set floating point register value as hex string
| SetFprHex || eeObj.SetFprHex(<FPU register (0-31), value (u32)>)|| Set floating point register value as hex string
|-
|-
| GetFpr ||  || eeObj.GetFpr(<register number>) || example eeObj.GetFpr(14)
| GetFpr || eeObj.GetFpr(<register number>) || example eeObj.GetFpr(14)
|-
|-
| SetFpr || || eeObj.SetFpr(<fpr register number>, <value>) || Simple example eeObj.SetFpr(14, 50.0) will set frp 14 to 50.0
| 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 ||  || 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
|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 ||  || eeObj.SetPC(<PC>) ||eeObj.SetPC(0x266B80)
|SetPc || eeObj.SetPC(<PC>) ||eeObj.SetPC(0x266B80)
|-
|-
|GetCPR0 ||  || eeObj.GetCPR0(<COP0 register>) ||  
|GetCPR0 || eeObj.GetCPR0(<COP0 register>) ||  
|-
|-
|SetCPR0 ||  || eeObj.SetCPR0(<COP0 register>) ||  
|SetCPR0 || eeObj.SetCPR0(<COP0 register>) ||  
|-style="background-color:#c6ecd9"
|-style="background-color:#c6ecd9"
|  ||  || Hooks ||
|  || Hooks ||
|-
|-
| AddHook ||  {{Universal}} || eeObj.AddHook(<ee offset>, <original opcode>, <definied hook name>) || example: <div align="left"><pre>local W1 =  
| 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 ||  || eeObj.AddHookJT(Offset, offset opcode, function) || Seems be a hook related to the jit  
| AddHookJT || eeObj.AddHookJT(Offset, offset opcode, function) || Seems be a hook related to the jit  
|-
|-
|-style="background-color:#ffb3b3"
|-style="background-color:#ffb3b3"
|  ||  || Dma ||  
|  || Dma ||  
|-
|-
| SetVifDataCycleScalar || {{Exclusive}} ||  || Used in Jak3 = eeObj.SetVifDataCycleScalar(1, 1.80)
| SetVifDataCycleScalar ||  || Used in Jak3 = eeObj.SetVifDataCycleScalar(1, 1.80)
|-
|-
|DmaAddHook || {{Universal}} || <pre>eeobj.DmaAddHook(channel=%d key=%x)</pre> || Possible Dma channel numbers (?)
|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 || {{Universal}} || ||
|DmaRemoveHook || ||
|-
|-
|-style="background-color:#b3f0ff"
|-style="background-color:#b3f0ff"
|  ||  || Speedhacks ||  
|  || Speedhacks ||  
|-
|-
|FastForwardClock || {{Universal}} || eeObj.FastForwardClock() || Skip Emotion Engine cycles?
|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 ||  {{Universal}} || 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)
|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 ||  {{Exclusive}} || eeObj.GetClock() || Returns the value of how many cycles the EE is ahead of normal clock (?)
| GetClock || eeObj.GetClock() || Returns the value of how many cycles the EE is ahead of normal clock (?)
|-
|-
|Vu1MpgCycles ||  {{Exclusive}} || eeObj.Vu1MpgCycles(<cycles>) || Works just like the cli command --vu1-mpg-cycles=
|Vu1MpgCycles || eeObj.Vu1MpgCycles(<cycles>) || Works just like the cli command --vu1-mpg-cycles=
|-style="background-color:#FEA15C"
|-style="background-color:#FEA15C"
|  || ||  Other ||  
|  || Other ||  
|-
|-
| CallPredicate ||  {{Exclusive}} ||  ||
| CallPredicate
|-
|-
|SchedulerDelayEvent || {{Universal}} || 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 adds a delay for certain DMA channels by cycles. It can be added inside a vsynchook or an ee hook. It is not a one-time application. Rather, a cyclical one.
|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 ||  {{exclusive}} || eeObj.WaitVu1() || Likely to be the lua equivalent of "--vu1=jit-sync".
|WaitVu1 || eeObj.WaitVu1() || Likely to be the lua equivalent of "--vu1=jit-sync".
|-
|-
|GetPcRingBuffer || {{exclusive}}|| ||
|GetPcRingBuffer || ||
|-
|-
|Precompile || {{universal}} || || Requires unknown values
|Precompile || || Requires unknown values
|-
|-
|CalcInsnHash || {{exclusive}} || ||
|CalcInsnHash || ||
|-
|-
| getOverlayObject || {{exclusive}} || eeObj.getOverlayObject() || local eeOverlay = eeObj.getOverlayObject()
|getOverlayObject || eeObj.getOverlayObject() || local eeOverlay = eeObj.getOverlayObject()
|-
|-
| GetVif1Cycles || {{exclusive}} || eeObj.GetVif1Cycles() || local vif1_cycles = eeObj.GetVif1Cycles() create vif_cycles value that can be used later. You can rename it as you wish.
| 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, or manually setting the flag values using LUA patches. || For VU1 or VU0, this may crash games or create sps. As for COP2, this could possibly mess with physics or also crash games.
| 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.
|-
| Xgkick is 1 cycle behind || Auto Modelista, Galactic Wrestling, others. || Set --vu-xgkick-delay to 0. || Causes missing textures.
|-
|-
| 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, Digimon World 4, 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.
| 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. ||
|-
| Clamping is not PS2-perfect  || Surf's Up (VU1), Tiger Woods PGA Tour, Castlevania COD, others. || Manually clamp values using LUA. ||
|-
| IOP-CDVD desync || Genji - Dawn of the Samurai, Wild Arms 4, Wild Arms 5, Official Releases such as War of the Monsters and Kinetica, unofficial releases such as every Ratchet game, God of War, as well as others.  || LUA patches as seen in official releases. Setting iopcyclescalar to 0.38 yielded the best results, but still wrong. ||  The least significant effect would be a restarting music track. The most significant would be a game freezing at a single image with looping audio.
|-
| IPU runs slower than the EE, causing a freeze or a crash on an FMV || Bee Movie, Tomb Raider Angel of Darkness ||  ||
|-
|-
|}
|}
Line 4,090: Line 4,066:
end
end
</pre>
</pre>
= Digital Manuals =
See [[PS2 Classics Manuals]].


= 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/]
* [https://www.psx-place.com/threads/few-notes-about-ps2-emulator-on-ps4.14907/ Remarks by kozarovv to wikify]


{{Reverse Engineering}}
{{Reverse Engineering}}
You have switched to source editingClose

You can switch back to visual editing at any time by clicking on this icon.

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)