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 3: | Line 3: | ||
<pre>PlayStation 2 emulation on the PlayStation 4 is handled with little difference to the PlayStation 3, | <pre>PlayStation 2 emulation on the PlayStation 4 is handled with little difference to the PlayStation 3, | ||
as some issues on the PlayStation 3 were not fixed on the PlayStation 4's emulator. | as some issues on the PlayStation 3 were not fixed on the PlayStation 4's emulator. Additionally, some issues exist on the PS4 that never occurred on the PS3. | ||
This is because the PS4 is too weak for emulation, which likely led Sony to trade accuracy in exchange for performance. | |||
Each PS2ONPS4 package file (.pkg) includes the emulator itself. The ps4 does not have a native built-in emulator in its firmware, but it does a few PS2 emulator specific features, like the functions sceLncUtilIsPs2Emu, sceShellCoreUtilGetImposeMenuFlagForPs2Emu, sceSystemServiceAddLocalProcessForPs2Emu, and sceSystemServiceShowImposeMenuForPs2Emu. | Each PS2ONPS4 package file (.pkg) includes the emulator itself. The ps4 does not have a native built-in emulator in its firmware, but it does a few PS2 emulator specific features, like the functions sceLncUtilIsPs2Emu, sceShellCoreUtilGetImposeMenuFlagForPs2Emu, sceSystemServiceAddLocalProcessForPs2Emu, and sceSystemServiceShowImposeMenuForPs2Emu. | ||
Line 185: | Line 185: | ||
| --ee-cycle-scalar || Accelerate EE cycles: (0.99 => 0.1)<br>Decelerate EE cycles: (1.1 => 5.0) || Accelerating can help improve EE-DMA sync at the cost of performance, whereas decelerating can help ensure EE is in sync with VU0-VU1 while improving performance (too much deceleration can cause stuttery fmvs.) The default value is 1.0 || --ee-cycle-scalar=1.0 | | --ee-cycle-scalar || Accelerate EE cycles: (0.99 => 0.1)<br>Decelerate EE cycles: (1.1 => 5.0) || Accelerating can help improve EE-DMA sync at the cost of performance, whereas decelerating can help ensure EE is in sync with VU0-VU1 while improving performance (too much deceleration can cause stuttery fmvs.) The default value is 1.0 || --ee-cycle-scalar=1.0 | ||
|- | |- | ||
| --ee-context-switch-cycles || | | --ee-context-switch-cycles || [Overclocking] (0.99 => 0.1) <br>[Underclocking] (1.1 => ∞ ) || Similar effect to eecyclescalar, but it is still unknown what it does, may affect the speed of COP0. Does not work on Jak emulators. Default value is 360, and its type is 4 bytes. || --ee-context-switch-cycles=2700? | ||
|- | |- | ||
| [[--ee-hook|--ee-hook]] || AdvanceClock<br>FastForwardClock<br>Mfifodrain || Set a function to be applied every time the PC register reaches the selected offset in the EE memory. FastForwardClock stalls the EE for | | [[--ee-hook|--ee-hook]] || AdvanceClock<br>FastForwardClock<br>Mfifodrain || Set a function to be applied every time the PC register reaches the selected offset in the EE memory. FastForwardClock stalls the EE for a non-changeable number of cycles, while AdvanceClock stalls the EE for an allocated number of cycles to either improve sync or performance if ee was bottlenecking it. Mfifodrain is still unknown. [[--ee-hook|For more examples]] ||--ee-hook=0x0025A9F2,AdvanceClock,,500 <br>--ee-hook=0x0019F0AD,FastForwardClock | ||
|- | |- | ||
|-style="background-color:#D7EF54" | |-style="background-color:#D7EF54" | ||
Line 298: | Line 298: | ||
| || Speedhacks || || | | || Speedhacks || || | ||
|- | |- | ||
| --fpu-rsqrt-fast-estimate || 0, 1 || Decreases RSQRT's accuracy. | | --fpu-rsqrt-fast-estimate || 0, 1 || Decreases RSQRT's accuracy. Enabled by default. Disabling it is required for full FPU accuracy || --fpu-rsqrt-fast-estimate=1 | ||
|- | |- | ||
| --fpu-accurate-mul-fast || 0, 1 || A command that prevents muldiv commands from | | --fpu-accurate-mul-fast || 0, 1 || A command that prevents muldiv commands from causing slowdowns. || --fpu-accurate-mul-fast=1 | ||
|-style="background-color:#FFAA00" | |-style="background-color:#FFAA00" | ||
| || Other || || | | || Other || || | ||
Line 421: | Line 421: | ||
| || Speedhacks || || | | || Speedhacks || || | ||
|- | |- | ||
| --vu1-mpg-cycles || 0 - 400000 || Set initial speed for VU1 Micro-programs. 100 is the default value. If VU1 requirements were a bottleneck, increasing it will result in better performance while decreasing it will result in the opposite. Increasing it can be beneficial for MTVU sensitive | | --vu1-mpg-cycles || 0 - 400000 || Set initial speed for VU1 Micro-programs. 100 is the default value. If VU1 requirements were a bottleneck, increasing it will result in better performance while decreasing it will result in the opposite. Increasing it can be beneficial for games that are MTVU sensitive.|| --vu1-mpg-cycles=1000 | ||
|- | |- | ||
| --vu1-di-bits || 0, 1 || 0 Skips setting invalid, and Divides by zero flags in status register. Can be used as a speedhack as it can skip costly calculations. But at the same time, it can cause issues such as broken geometry. || --vu1-di-bits=0 | | --vu1-di-bits || 0, 1 || 0 Skips setting invalid, and Divides by zero flags in status register. Can be used as a speedhack as it can skip costly calculations. But at the same time, it can cause issues such as broken geometry. || --vu1-di-bits=0 | ||
Line 467: | Line 467: | ||
| --vu1-inst-q || 0, 1 || instant Q, no stalling on WAITQ, or instances of Q. || --vu1-inst-q=1 | | --vu1-inst-q || 0, 1 || instant Q, no stalling on WAITQ, or instances of Q. || --vu1-inst-q=1 | ||
|- | |- | ||
| --assert-path1-ad || 0, 1 || Path 1 is how the GIF takes data from VU1 via XGKICK instruction. It's unknown what this command does but it's related to VU1 | | --assert-path1-ad || 0, 1 || Path 1 is how the GIF takes data from VU1 via XGKICK instruction. It's unknown what this command does but it's related to VU1 || --assert-path1-ad=1 | ||
|- | |- | ||
|} | |} | ||
Line 540: | Line 540: | ||
| --vif1-ignore-cmd-ints || 0, 1 || 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 || 0, 1 || 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 || 1 = Instant VIF1<br>0 = Delayed VIF1 || Changes VIF1 timing. 0 | | --vif1-instant-xfer || 1 = Instant VIF1<br>0 = Delayed VIF1 || Changes VIF1 timing. 0 is the accurate option. It can be used to fix graphical glitches or to potentially prevent games from freezing. || --vif1-instant-xfer=0 | ||
|} | |} | ||
Line 573: | Line 573: | ||
| --gs-adaptive-frameskip || 0, 1 || Speedhack. Skips frames when the gs demands more resources than there are available. doesn't work on all emulators. It does however, work on jak emulators || --gs-adaptive-frameskip=1 | | --gs-adaptive-frameskip || 0, 1 || Speedhack. Skips frames when the gs demands more resources than there are available. doesn't work on all emulators. It does however, work on jak emulators || --gs-adaptive-frameskip=1 | ||
|- | |- | ||
|-style="background-color:#D7EF54" | |||
| || Gs settings / Behaviour || || | |||
|-style="background-color:# | |||
| || | |||
|- | |- | ||
| --gs-use-deferred-l2h || 0, 1 || Delay option for L2H (local to host, GS to EE). || --gs-use-deferred-l2h=1 | | --gs-use-deferred-l2h || 0, 1 || Delay option for L2H (local to host, GS to EE). || --gs-use-deferred-l2h=1 | ||
|- | |- | ||
| --gs-uprender || none,2x2 || Internal resolution upscaler. || --gs-uprender=2x2 | | --gs-uprender || none,2x2 || Internal resolution upscaler. || --gs-uprender=2x2 | ||
Line 593: | Line 582: | ||
| --gs-upscale || none, gpu, edgesmooth, smooth, motion, motionvec, motionvector, point || Upscaling type Selector || --gs-upscale=EdgeSmooth | | --gs-upscale || none, gpu, edgesmooth, smooth, motion, motionvec, motionvector, point || Upscaling type Selector || --gs-upscale=EdgeSmooth | ||
|- | |- | ||
| --gs-kernel-cl-up || "DarkCloud2" "fantavision" "h2lpool2x2", "OptRightTri", "clutmerge2x2", "mipmap2x2", "up2x2simple", "up2x2skipinterp", "up2x2tc", "up2x2", default || Kernel Variant Color lookup Upscaler (?), mipmap and clutmerge and h2l | | --gs-kernel-cl-up || "DarkCloud2" "fantavision" "h2lpool2x2", "OptRightTri", "clutmerge2x2", "mipmap2x2", "up2x2simple", "up2x2skipinterp", "up2x2tc", "up2x2", default || Kernel Variant Color lookup Upscaler (?), mipmap and clutmerge and h2l will have to be enabled first before using their options|| --gs-kernel-cl-up="clutmerge2x2" | ||
|- | |- | ||
| --gs-override-small-tri-area || 0, 1 || Small triangle rejection. Could potentially restore missing text in some games. || --gs-override-small-tri-area=1 | | --gs-override-small-tri-area || 0, 1 || Small triangle rejection. Could potentially restore missing text in some games. || --gs-override-small-tri-area=1 | ||
Line 601: | Line 590: | ||
| --gs-ignore-dirty-page-border || 0, 1 || ? ||--gs-ignore-dirty-page-border=1 | | --gs-ignore-dirty-page-border || 0, 1 || ? ||--gs-ignore-dirty-page-border=1 | ||
|- | |- | ||
| --gs-ignore-rect-correction || 0, 1 || Setting it to 1 is known to fix graphical glitches | | --gs-ignore-rect-correction || 0, 1 || Setting it to 1 is known to fix graphical glitches in distant locations. || --gs-ignore-rect-correction=1 | ||
|- | |- | ||
| --gs-opt-frbuff-switch || 0, 1 || || --gs-opt-frbuff-switch=0 | | --gs-opt-frbuff-switch || 0, 1 || || --gs-opt-frbuff-switch=0 | ||
|- | |- | ||
| --gs-kernel-cl || h2lpool, clutmerge, mipmap, DarkCloud2, fantavision, Mipmap and clutmerge and h2l | | --gs-kernel-cl || h2lpool, clutmerge, mipmap, DarkCloud2, fantavision, Mipmap and clutmerge and h2l will have to be enabled first before using their options ||Kernel Variant Color lookup(?). Options included here can be upscaling if --gs-kernel-cl-up were to be used along with it || --gs-kernel-cl="clutmerge" | ||
|- | |- | ||
| --force-frame-blend || 0, 1 || Enables blend (Deinterlacing?). Should be used to fix games with shaking screens. || --force-frame-blend=1 | | --force-frame-blend || 0, 1 || Enables blend (Deinterlacing?). Should be used to fix games with shaking screens. || --force-frame-blend=1 | ||
Line 611: | Line 600: | ||
| --force-pal-60hz || 0, 1 || Enables 60hz PAL mode. || --force-pal-60hz=1 | | --force-pal-60hz || 0, 1 || Enables 60hz PAL mode. || --force-pal-60hz=1 | ||
|- | |- | ||
| --gs-use-clut-merge || 0, 1 ||Color lookup table(?). It could possibly solve graphical issues or improve the quality of the colors. || --gs-use-clut-merge=1 | |||
|- | |||
| --gs-use-mipmap || 0, 1 || Enables mipmapping support. Can be used to fix graphics. || --gs-use-mipmap=1 | |||
|- | |||
| --gs-progressive || 0, 1 || Enables progressive scan. It's used to fix graphical glitches/double screen issues. || | | --gs-progressive || 0, 1 || Enables progressive scan. It's used to fix graphical glitches/double screen issues. || | ||
|- | |- | ||
Line 636: | Line 629: | ||
|- | |- | ||
| --gs-scanout-delay || 0, 200 || || --gs-scanout-delay=200 | | --gs-scanout-delay || 0, 200 || || --gs-scanout-delay=200 | ||
|- | |||
| --gs-flush-ad-xyz || always, safe, safeZwrite, off, 0 || 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-check-trans-rejection || 0, 1 || Check transfer rejection ? || --gs-check-trans-rejection=1 | | --gs-check-trans-rejection || 0, 1 || Check transfer rejection ? || --gs-check-trans-rejection=1 | ||
Line 644: | Line 639: | ||
|- | |- | ||
| --gs-h2l-accurate-hash || 0, 1 || ||--gs-h2l-accurate-hash=1 | | --gs-h2l-accurate-hash || 0, 1 || ||--gs-h2l-accurate-hash=1 | ||
|- | |||
| --gs-h2l-list-opt || 0, 1 || ||--gs-h2l-list-opt=1 | |||
|- | |- | ||
|-style="background-color:#9042f5" | |-style="background-color:#9042f5" | ||
Line 791: | Line 788: | ||
| 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 | | Resident Evil – Code: Veronica || Fixes games like '''Jackie chan Adventures, Pac-man World 3, Yu-Gi-Oh: Capsule monsters, SpongeBob's Atlantis SquarePantis''' freezing at the splash screen. Often referred to as "RECVX" || 1.7 || '''Fatal Fury,''' '''Redfaction,''' '''AOFA.''' | ||
|- | |- | ||
| Fatal Fury Battle Archives: Volume 2 || The emulator with the closest VU0-EE sync on the PS4; setting eecyclescalar to 5 on this emulator will enable some VU0 sync demanding games to run on the PS4. || || | | Fatal Fury Battle Archives: Volume 2 || The emulator with the closest VU0-EE sync on the PS4; setting eecyclescalar to 5 on this emulator will enable some VU0 sync demanding games to run on the PS4. || || | ||
Line 2,393: | Line 2,390: | ||
| Wrong disc read speed for some games || Shadowman(Textures), God of war (Music), Ratchet and clank size matters (Music), every game that's listed to require CDVD_READ_DELAY. [https://github.com/PCSX2/pcsx2/pull/3877 and many other affected games] || Try your luck with IOP and CDVD CLI commands. || Also known in sony's bios as CDVD_READ_DELAY | | Wrong disc read speed for some games || Shadowman(Textures), God of war (Music), Ratchet and clank size matters (Music), every game that's listed to require CDVD_READ_DELAY. [https://github.com/PCSX2/pcsx2/pull/3877 and many other affected games] || Try your luck with IOP and CDVD CLI commands. || Also known in sony's bios as CDVD_READ_DELAY | ||
|- | |- | ||
| | | In-accurate VU0/VU1/COP2 emulation || Sly cooper games, Crash twinsanity, Crazy frog racer, Rayman 3, Klonoa 2, others. || Choosing a VU accurate emulator such as Roguev1 or Kof2000 with the right clamping commands || The issue leads to SPS and graphical issues and sometimes freezing. | ||
|- | |- | ||
| Multitap doesn't support all games || Urban reign, 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, 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. | ||
Line 2,405: | Line 2,402: | ||
|VIF command interrupts handled before VIFn_CODE is updated. || Onimusha Blade Warriors || Fixed by patch in intr handler. || This is very specific case because Onimusha check VIFn_CODE register in interrupt handler and do nothing if code is not 0x80 (NOP with I). But VIFn_CODE seems to be updated after interrupt is handled. This practically makes everything out of sync later as interrupts are happening, but handler does nothing about them. | |VIF command interrupts handled before VIFn_CODE is updated. || Onimusha Blade Warriors || Fixed by patch in intr handler. || This is very specific case because Onimusha check VIFn_CODE register in interrupt handler and do nothing if code is not 0x80 (NOP with I). But VIFn_CODE seems to be updated after interrupt is handled. This practically makes everything out of sync later as interrupts are happening, but handler does nothing about them. | ||
|- | |- | ||
| IPU emulation inaccuracy || Burnout 3 | | IPU emulation inaccuracy || Burnout 3 || None yet || | ||
|- | |- | ||
| CDVD register 0x1F402038 (KeysValid) return wrong result. || Every "SCCS" game || Patches in lua. || Likely specific to NTSC-C releases, because that region uses special SDK. This issue makes cdvdman become stuck on any request because it thinks that the cdvd key is invalid. | | CDVD register 0x1F402038 (KeysValid) return wrong result. || Every "SCCS" game || Patches in lua. || Likely specific to NTSC-C releases, because that region uses special SDK. This issue makes cdvdman become stuck on any request because it thinks that the cdvd key is invalid. | ||
|- | |- | ||
| Lack of CDVD error handling || Demon Chaos, Spyro A new Beginning, Silent Hill 2 Black Ribbon, games from pcsx2 #5174 PR. || Patches in lua if needed. || One correctly supported error is SCECdErABRT, rest is just not handled or what's worst trigger emu panic on purpose like SCECdErILI (but not for 0 sector request - Spyro). Some affected games can still work if error is just accidental and not checked by game code. | | Lack of CDVD error handling || Demon Chaos, Spyro A new Beginning, Silent Hill 2 Black Ribbon, games from pcsx2 #5174 PR. || Patches in lua if needed. || One correctly supported error is SCECdErABRT, rest is just not handled or what's worst trigger emu panic on purpose like SCECdErILI (but not for 0 sector request - Spyro). Some affected games can still work if error is just accidental and not checked by game code. | ||
|} | |} | ||