From 99eef2b4f6f083db9c9b96e0e62287db15c74abf Mon Sep 17 00:00:00 2001 From: LunaMoo Date: Fri, 1 Jul 2022 07:24:42 +0200 Subject: [PATCH 1/7] Disable ForceMax60FPS for GOW:GOS to avoid softlock --- assets/compat.ini | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/assets/compat.ini b/assets/compat.ini index 1318ba6dcf..f4b6692f23 100644 --- a/assets/compat.ini +++ b/assets/compat.ini @@ -805,18 +805,19 @@ NPJH50017 = true [ForceMax60FPS] # The GOW games are very heavy and render as fast as they can. They benefit greatly from # capping the framerate at 60fps. +# Unfortunately causes softlock in GOW:GOS , see #8299 # GOW : Ghost of Sparta -UCUS98737 = true -UCAS40323 = true -NPHG00092 = true -NPEG00044 = true -NPEG00045 = true -NPJG00120 = true -NPUG80508 = true -UCJS10114 = true -UCES01401 = true -UCES01473 = true +# UCUS98737 = true +# UCAS40323 = true +# NPHG00092 = true +# NPEG00044 = true +# NPEG00045 = true +# NPJG00120 = true +# NPUG80508 = true +# UCJS10114 = true +# UCES01401 = true +# UCES01473 = true # GOW : Ghost of Sparta Demo NPEG90035 = true NPUG70125 = true From 0dcf8242f52ccf559edaf304d51e337ee61fd18d Mon Sep 17 00:00:00 2001 From: LunaMoo Date: Sat, 2 Jul 2022 19:14:05 +0200 Subject: [PATCH 2/7] Add Fixed60FPShack for GOW, should work smoother than the ForceMax60FPS. Also more stable than it's CWCheat version, unfortunately because of that, still causes softlock in GOW:GOS vortex stage. --- Core/Compatibility.cpp | 1 + Core/Compatibility.h | 1 + Core/HLE/ReplaceTables.cpp | 10 ++++++++++ Core/HLE/sceDisplay.cpp | 4 ++++ Core/HLE/sceDisplay.h | 1 + Core/MIPS/MIPSAnalyst.cpp | 1 + assets/compat.ini | 12 +++++++----- 7 files changed, 25 insertions(+), 5 deletions(-) diff --git a/Core/Compatibility.cpp b/Core/Compatibility.cpp index db48c4f4c9..c38251e9d3 100644 --- a/Core/Compatibility.cpp +++ b/Core/Compatibility.cpp @@ -66,6 +66,7 @@ void Compatibility::CheckSettings(IniFile &iniFile, const std::string &gameID) { CheckSetting(iniFile, gameID, "YugiohSaveFix", &flags_.YugiohSaveFix); CheckSetting(iniFile, gameID, "ForceUMDDelay", &flags_.ForceUMDDelay); CheckSetting(iniFile, gameID, "ForceMax60FPS", &flags_.ForceMax60FPS); + CheckSetting(iniFile, gameID, "Fixed60FPShack", &flags_.Fixed60FPShack); CheckSetting(iniFile, gameID, "JitInvalidationHack", &flags_.JitInvalidationHack); CheckSetting(iniFile, gameID, "HideISOFiles", &flags_.HideISOFiles); CheckSetting(iniFile, gameID, "MoreAccurateVMMUL", &flags_.MoreAccurateVMMUL); diff --git a/Core/Compatibility.h b/Core/Compatibility.h index 9340c36411..058bd19b39 100644 --- a/Core/Compatibility.h +++ b/Core/Compatibility.h @@ -65,6 +65,7 @@ struct CompatFlags { bool YugiohSaveFix; bool ForceUMDDelay; bool ForceMax60FPS; + bool Fixed60FPShack; bool JitInvalidationHack; bool HideISOFiles; bool MoreAccurateVMMUL; diff --git a/Core/HLE/ReplaceTables.cpp b/Core/HLE/ReplaceTables.cpp index 039c26ecc4..61a0bdbe52 100644 --- a/Core/HLE/ReplaceTables.cpp +++ b/Core/HLE/ReplaceTables.cpp @@ -25,6 +25,7 @@ #include "Common/Log.h" #include "Common/Swap.h" #include "Core/Config.h" +#include "Core/System.h" #include "Core/Debugger/Breakpoints.h" #include "Core/Debugger/MemBlockInfo.h" #include "Core/Debugger/SymbolMap.h" @@ -34,6 +35,7 @@ #include "Core/MIPS/MIPSAnalyst.h" #include "Core/HLE/ReplaceTables.h" #include "Core/HLE/FunctionWrappers.h" +#include "Core/HLE/sceDisplay.h" #include "GPU/Math3D.h" #include "GPU/GPU.h" @@ -1338,6 +1340,13 @@ static int Hook_soltrigger_render_ucschar() { return 0; } +static int Hook_gow_fps_hack() { + if (PSP_CoreParameter().compat.flags().Fixed60FPShack) { + __DisplayWaitForVblanks("vblank start waited", 1); + } + return 0; +} + #define JITFUNC(f) (&MIPSComp::MIPSFrontendInterface::f) // Can either replace with C functions or functions emitted in Asm/ArmAsm. @@ -1454,6 +1463,7 @@ static const ReplacementTableEntry entries[] = { { "worms_copy_normalize_alpha", &Hook_worms_copy_normalize_alpha, 0, REPFLAG_HOOKENTER, 0x0CC }, { "openseason_data_decode", &Hook_openseason_data_decode, 0, REPFLAG_HOOKENTER, 0x2F0 }, { "soltrigger_render_ucschar", &Hook_soltrigger_render_ucschar, 0, REPFLAG_HOOKENTER, 0 }, + { "gow_fps_hack", &Hook_gow_fps_hack, 0, REPFLAG_HOOKEXIT , 0 }, {} }; diff --git a/Core/HLE/sceDisplay.cpp b/Core/HLE/sceDisplay.cpp index 3ebd210469..8cc22e65a2 100644 --- a/Core/HLE/sceDisplay.cpp +++ b/Core/HLE/sceDisplay.cpp @@ -730,6 +730,10 @@ static int DisplayWaitForVblanks(const char *reason, int vblanks, bool callbacks return hleLogSuccessVerboseI(SCEDISPLAY, 0, "waiting for %d vblanks", vblanks); } +void __DisplayWaitForVblanks(const char* reason, int vblanks, bool callbacks) { + DisplayWaitForVblanks(reason, vblanks, callbacks); +} + static u32 sceDisplaySetMode(int displayMode, int displayWidth, int displayHeight) { if (displayMode != PSP_DISPLAY_MODE_LCD || displayWidth != 480 || displayHeight != 272) { WARN_LOG_REPORT(SCEDISPLAY, "Video out requested, not supported: mode=%d size=%d,%d", displayMode, displayWidth, displayHeight); diff --git a/Core/HLE/sceDisplay.h b/Core/HLE/sceDisplay.h index f1911a49ec..bb134af815 100644 --- a/Core/HLE/sceDisplay.h +++ b/Core/HLE/sceDisplay.h @@ -33,3 +33,4 @@ void __DisplaySetFramebuf(u32 topaddr, int linesize, int pixelformat, int sync); void __DisplaySetWasPaused(); void Register_sceDisplay_driver(); +void __DisplayWaitForVblanks(const char* reason, int vblanks, bool callbacks = false); diff --git a/Core/MIPS/MIPSAnalyst.cpp b/Core/MIPS/MIPSAnalyst.cpp index 6cc740246a..2822f54847 100644 --- a/Core/MIPS/MIPSAnalyst.cpp +++ b/Core/MIPS/MIPSAnalyst.cpp @@ -507,6 +507,7 @@ static const HardHashTableEntry hardcodedHashes[] = { { 0xfe5dd338ab862291, 216, "memset", }, // Metal Gear Solid: Peace Walker demo { 0xffc8f5f8f946152c, 192, "dl_write_light_color", }, { 0x249a3c5981c73480, 1472, "openseason_data_decode", }, // Open Season + { 0x795d940ad0a605f8, 40, "gow_fps_hack", }, // God of War (all) }; namespace MIPSAnalyst { diff --git a/assets/compat.ini b/assets/compat.ini index f4b6692f23..580d281454 100644 --- a/assets/compat.ini +++ b/assets/compat.ini @@ -802,11 +802,9 @@ ULJS00119 = true ULKS46167 = true NPJH50017 = true -[ForceMax60FPS] -# The GOW games are very heavy and render as fast as they can. They benefit greatly from -# capping the framerate at 60fps. -# Unfortunately causes softlock in GOW:GOS , see #8299 - +[Fixed60FPShack] +# Replaces ForceMax60FPS for GOW games, should provide smoother experience +# Unfortunately just like the latter still causes softlock in GOW:GOS , see #8299 # GOW : Ghost of Sparta # UCUS98737 = true # UCAS40323 = true @@ -840,6 +838,10 @@ UCUS98705 = true UCED00971 = true UCUS98713 = true +[ForceMax60FPS] +# Some games are very heavy and render as fast as they can. They benefit greatly from +# capping the framerate at 60fps. + # F1 2006 has extremely long loading times if we don't limit the framerate. UCES00238 = true UCJS10045 = true From 85fa15179adea33d670fc32da3f275f5c2a2a5f5 Mon Sep 17 00:00:00 2001 From: LunaMoo Date: Sat, 2 Jul 2022 19:47:51 +0200 Subject: [PATCH 3/7] Add 30 fps version as an option, doesn't suffer from softlock --- Core/Compatibility.cpp | 1 + Core/Compatibility.h | 1 + Core/HLE/ReplaceTables.cpp | 8 ++++++-- assets/compat.ini | 37 +++++++++++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 2 deletions(-) diff --git a/Core/Compatibility.cpp b/Core/Compatibility.cpp index c38251e9d3..8edbf89514 100644 --- a/Core/Compatibility.cpp +++ b/Core/Compatibility.cpp @@ -67,6 +67,7 @@ void Compatibility::CheckSettings(IniFile &iniFile, const std::string &gameID) { CheckSetting(iniFile, gameID, "ForceUMDDelay", &flags_.ForceUMDDelay); CheckSetting(iniFile, gameID, "ForceMax60FPS", &flags_.ForceMax60FPS); CheckSetting(iniFile, gameID, "Fixed60FPShack", &flags_.Fixed60FPShack); + CheckSetting(iniFile, gameID, "Fixed30FPShack", &flags_.Fixed30FPShack); CheckSetting(iniFile, gameID, "JitInvalidationHack", &flags_.JitInvalidationHack); CheckSetting(iniFile, gameID, "HideISOFiles", &flags_.HideISOFiles); CheckSetting(iniFile, gameID, "MoreAccurateVMMUL", &flags_.MoreAccurateVMMUL); diff --git a/Core/Compatibility.h b/Core/Compatibility.h index 058bd19b39..fb2078e585 100644 --- a/Core/Compatibility.h +++ b/Core/Compatibility.h @@ -66,6 +66,7 @@ struct CompatFlags { bool ForceUMDDelay; bool ForceMax60FPS; bool Fixed60FPShack; + bool Fixed30FPShack; bool JitInvalidationHack; bool HideISOFiles; bool MoreAccurateVMMUL; diff --git a/Core/HLE/ReplaceTables.cpp b/Core/HLE/ReplaceTables.cpp index 61a0bdbe52..34215cd8d2 100644 --- a/Core/HLE/ReplaceTables.cpp +++ b/Core/HLE/ReplaceTables.cpp @@ -1341,8 +1341,12 @@ static int Hook_soltrigger_render_ucschar() { } static int Hook_gow_fps_hack() { - if (PSP_CoreParameter().compat.flags().Fixed60FPShack) { - __DisplayWaitForVblanks("vblank start waited", 1); + if (PSP_CoreParameter().compat.flags().Fixed60FPShack || PSP_CoreParameter().compat.flags().Fixed30FPShack) { + if (PSP_CoreParameter().compat.flags().Fixed30FPShack) { + __DisplayWaitForVblanks("vblank start waited", 2); + } else { + __DisplayWaitForVblanks("vblank start waited", 1); + } } return 0; } diff --git a/assets/compat.ini b/assets/compat.ini index 580d281454..ea4d0e6f27 100644 --- a/assets/compat.ini +++ b/assets/compat.ini @@ -838,6 +838,43 @@ UCUS98705 = true UCED00971 = true UCUS98713 = true +[Fixed30FPShack] +# As the 60 fps version, but makes the GOW run on a potato, +# Doesn't suffer from softlock #8299 +# disabled by default since most people wouldn't need it +# GOW : Ghost of Sparta +# UCUS98737 = true +# UCAS40323 = true +# NPHG00092 = true +# NPEG00044 = true +# NPEG00045 = true +# NPJG00120 = true +# NPUG80508 = true +# UCJS10114 = true +# UCES01401 = true +# UCES01473 = true +# GOW : Ghost of Sparta Demo +# NPEG90035 = true +# NPUG70125 = true +# NPJG90095 = true +# GOW : Chains Of Olympus +# UCAS40198 = true +# UCUS98653 = true +# UCES00842 = true +# ULJM05438 = true +# ULJM05348 = true +# UCKS45084 = true +# NPUG80325 = true +# NPEG00023 = true +# NPHG00027 = true +# NPHG00028 = true +# NPJH50170 = true +# UCET00844 = true +# GOW: Chains of Olympus Demo +# UCUS98705 = true +# UCED00971 = true +# UCUS98713 = true + [ForceMax60FPS] # Some games are very heavy and render as fast as they can. They benefit greatly from # capping the framerate at 60fps. From 1da9cd933b00a85851405f5b0bdac1f62383c534 Mon Sep 17 00:00:00 2001 From: LunaMoo Date: Sun, 3 Jul 2022 04:23:26 +0200 Subject: [PATCH 4/7] Test hack that breaks the vortex timer, it's still wrong --- Core/HLE/ReplaceTables.cpp | 10 ++++++++++ Core/MIPS/MIPSAnalyst.cpp | 1 + assets/compat.ini | 21 +++++++++++---------- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/Core/HLE/ReplaceTables.cpp b/Core/HLE/ReplaceTables.cpp index 34215cd8d2..de6ae4671b 100644 --- a/Core/HLE/ReplaceTables.cpp +++ b/Core/HLE/ReplaceTables.cpp @@ -1351,6 +1351,15 @@ static int Hook_gow_fps_hack() { return 0; } +static int Hook_gow_vortex_hack() { + if (PSP_CoreParameter().compat.flags().Fixed60FPShack) { + if (currentMIPS->r[MIPS_REG_S1] == 0) { + currentMIPS->r[MIPS_REG_S1] = 1; + } + } + return 0; +} + #define JITFUNC(f) (&MIPSComp::MIPSFrontendInterface::f) // Can either replace with C functions or functions emitted in Asm/ArmAsm. @@ -1468,6 +1477,7 @@ static const ReplacementTableEntry entries[] = { { "openseason_data_decode", &Hook_openseason_data_decode, 0, REPFLAG_HOOKENTER, 0x2F0 }, { "soltrigger_render_ucschar", &Hook_soltrigger_render_ucschar, 0, REPFLAG_HOOKENTER, 0 }, { "gow_fps_hack", &Hook_gow_fps_hack, 0, REPFLAG_HOOKEXIT , 0 }, + { "gow_vortex_hack", &Hook_gow_vortex_hack, 0, REPFLAG_HOOKENTER, 0x60 }, {} }; diff --git a/Core/MIPS/MIPSAnalyst.cpp b/Core/MIPS/MIPSAnalyst.cpp index 2822f54847..0630a91fee 100644 --- a/Core/MIPS/MIPSAnalyst.cpp +++ b/Core/MIPS/MIPSAnalyst.cpp @@ -508,6 +508,7 @@ static const HardHashTableEntry hardcodedHashes[] = { { 0xffc8f5f8f946152c, 192, "dl_write_light_color", }, { 0x249a3c5981c73480, 1472, "openseason_data_decode", }, // Open Season { 0x795d940ad0a605f8, 40, "gow_fps_hack", }, // God of War (all) + { 0x4c75043b7b0c643b, 512, "gow_vortex_hack", } // God of War: Ghost of Sparta vortex timer hack, still wrong, but it's a start }; namespace MIPSAnalyst { diff --git a/assets/compat.ini b/assets/compat.ini index ea4d0e6f27..94b4e495c8 100644 --- a/assets/compat.ini +++ b/assets/compat.ini @@ -805,17 +805,18 @@ NPJH50017 = true [Fixed60FPShack] # Replaces ForceMax60FPS for GOW games, should provide smoother experience # Unfortunately just like the latter still causes softlock in GOW:GOS , see #8299 +# Worked around by another hack, but still have to work on that # GOW : Ghost of Sparta -# UCUS98737 = true -# UCAS40323 = true -# NPHG00092 = true -# NPEG00044 = true -# NPEG00045 = true -# NPJG00120 = true -# NPUG80508 = true -# UCJS10114 = true -# UCES01401 = true -# UCES01473 = true +UCUS98737 = true +UCAS40323 = true +NPHG00092 = true +NPEG00044 = true +NPEG00045 = true +NPJG00120 = true +NPUG80508 = true +UCJS10114 = true +UCES01401 = true +UCES01473 = true # GOW : Ghost of Sparta Demo NPEG90035 = true NPUG70125 = true From 53baa89d3f43278249effce726ee2f128417af87 Mon Sep 17 00:00:00 2001 From: LunaMoo Date: Sun, 3 Jul 2022 22:18:44 +0200 Subject: [PATCH 5/7] Improve the vortex hack to make it safe and slow it down --- Core/HLE/ReplaceTables.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Core/HLE/ReplaceTables.cpp b/Core/HLE/ReplaceTables.cpp index de6ae4671b..e634a1e581 100644 --- a/Core/HLE/ReplaceTables.cpp +++ b/Core/HLE/ReplaceTables.cpp @@ -1353,7 +1353,8 @@ static int Hook_gow_fps_hack() { static int Hook_gow_vortex_hack() { if (PSP_CoreParameter().compat.flags().Fixed60FPShack) { - if (currentMIPS->r[MIPS_REG_S1] == 0) { + //from my tests ==0x3F800000 takes around 1:50s, when != it's roughtly 2:50s and that seems more correct + if (currentMIPS->r[MIPS_REG_S1] == 0 && currentMIPS->r[MIPS_REG_A0] == 0xC0 && currentMIPS->r[MIPS_REG_T4] != 0x3F800000) { currentMIPS->r[MIPS_REG_S1] = 1; } } From 5a067769999eccb8d4abe83eecad4314d5fa7406 Mon Sep 17 00:00:00 2001 From: LunaMoo Date: Mon, 4 Jul 2022 00:58:48 +0200 Subject: [PATCH 6/7] Change hack names and edit comments based on feedback. --- Core/Compatibility.cpp | 4 ++-- Core/Compatibility.h | 4 ++-- Core/HLE/ReplaceTables.cpp | 6 +++--- Core/MIPS/MIPSAnalyst.cpp | 2 +- assets/compat.ini | 9 ++++----- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/Core/Compatibility.cpp b/Core/Compatibility.cpp index 8edbf89514..352bb4a5e5 100644 --- a/Core/Compatibility.cpp +++ b/Core/Compatibility.cpp @@ -66,8 +66,8 @@ void Compatibility::CheckSettings(IniFile &iniFile, const std::string &gameID) { CheckSetting(iniFile, gameID, "YugiohSaveFix", &flags_.YugiohSaveFix); CheckSetting(iniFile, gameID, "ForceUMDDelay", &flags_.ForceUMDDelay); CheckSetting(iniFile, gameID, "ForceMax60FPS", &flags_.ForceMax60FPS); - CheckSetting(iniFile, gameID, "Fixed60FPShack", &flags_.Fixed60FPShack); - CheckSetting(iniFile, gameID, "Fixed30FPShack", &flags_.Fixed30FPShack); + CheckSetting(iniFile, gameID, "GoWFramerateHack60", &flags_.GoWFramerateHack60); + CheckSetting(iniFile, gameID, "GoWFramerateHack30", &flags_.GoWFramerateHack30); CheckSetting(iniFile, gameID, "JitInvalidationHack", &flags_.JitInvalidationHack); CheckSetting(iniFile, gameID, "HideISOFiles", &flags_.HideISOFiles); CheckSetting(iniFile, gameID, "MoreAccurateVMMUL", &flags_.MoreAccurateVMMUL); diff --git a/Core/Compatibility.h b/Core/Compatibility.h index fb2078e585..eefc870442 100644 --- a/Core/Compatibility.h +++ b/Core/Compatibility.h @@ -65,8 +65,8 @@ struct CompatFlags { bool YugiohSaveFix; bool ForceUMDDelay; bool ForceMax60FPS; - bool Fixed60FPShack; - bool Fixed30FPShack; + bool GoWFramerateHack60; + bool GoWFramerateHack30; bool JitInvalidationHack; bool HideISOFiles; bool MoreAccurateVMMUL; diff --git a/Core/HLE/ReplaceTables.cpp b/Core/HLE/ReplaceTables.cpp index e634a1e581..88e98c9a78 100644 --- a/Core/HLE/ReplaceTables.cpp +++ b/Core/HLE/ReplaceTables.cpp @@ -1341,8 +1341,8 @@ static int Hook_soltrigger_render_ucschar() { } static int Hook_gow_fps_hack() { - if (PSP_CoreParameter().compat.flags().Fixed60FPShack || PSP_CoreParameter().compat.flags().Fixed30FPShack) { - if (PSP_CoreParameter().compat.flags().Fixed30FPShack) { + if (PSP_CoreParameter().compat.flags().GoWFramerateHack60 || PSP_CoreParameter().compat.flags().GoWFramerateHack30) { + if (PSP_CoreParameter().compat.flags().GoWFramerateHack30) { __DisplayWaitForVblanks("vblank start waited", 2); } else { __DisplayWaitForVblanks("vblank start waited", 1); @@ -1352,7 +1352,7 @@ static int Hook_gow_fps_hack() { } static int Hook_gow_vortex_hack() { - if (PSP_CoreParameter().compat.flags().Fixed60FPShack) { + if (PSP_CoreParameter().compat.flags().GoWFramerateHack60) { //from my tests ==0x3F800000 takes around 1:50s, when != it's roughtly 2:50s and that seems more correct if (currentMIPS->r[MIPS_REG_S1] == 0 && currentMIPS->r[MIPS_REG_A0] == 0xC0 && currentMIPS->r[MIPS_REG_T4] != 0x3F800000) { currentMIPS->r[MIPS_REG_S1] = 1; diff --git a/Core/MIPS/MIPSAnalyst.cpp b/Core/MIPS/MIPSAnalyst.cpp index 0630a91fee..63599a758c 100644 --- a/Core/MIPS/MIPSAnalyst.cpp +++ b/Core/MIPS/MIPSAnalyst.cpp @@ -508,7 +508,7 @@ static const HardHashTableEntry hardcodedHashes[] = { { 0xffc8f5f8f946152c, 192, "dl_write_light_color", }, { 0x249a3c5981c73480, 1472, "openseason_data_decode", }, // Open Season { 0x795d940ad0a605f8, 40, "gow_fps_hack", }, // God of War (all) - { 0x4c75043b7b0c643b, 512, "gow_vortex_hack", } // God of War: Ghost of Sparta vortex timer hack, still wrong, but it's a start + { 0x4c75043b7b0c643b, 512, "gow_vortex_hack", } // God of War: Ghost of Sparta vortex timer hack, avoids softlock #8299 }; namespace MIPSAnalyst { diff --git a/assets/compat.ini b/assets/compat.ini index 94b4e495c8..2dfca6243d 100644 --- a/assets/compat.ini +++ b/assets/compat.ini @@ -802,10 +802,9 @@ ULJS00119 = true ULKS46167 = true NPJH50017 = true -[Fixed60FPShack] +[GoWFramerateHack60] # Replaces ForceMax60FPS for GOW games, should provide smoother experience -# Unfortunately just like the latter still causes softlock in GOW:GOS , see #8299 -# Worked around by another hack, but still have to work on that +# Also works around softlock in GOW:GOS , see #8299 # GOW : Ghost of Sparta UCUS98737 = true UCAS40323 = true @@ -839,8 +838,8 @@ UCUS98705 = true UCED00971 = true UCUS98713 = true -[Fixed30FPShack] -# As the 60 fps version, but makes the GOW run on a potato, +[GoWFramerateHack30] +# As the 60 fps version, but makes GOW games run on a potato, # Doesn't suffer from softlock #8299 # disabled by default since most people wouldn't need it # GOW : Ghost of Sparta From d67085c4aeffb98578fabce3681e4c2b7528d0af Mon Sep 17 00:00:00 2001 From: LunaMoo Date: Tue, 5 Jul 2022 04:51:58 +0200 Subject: [PATCH 7/7] Change comment based on new findings. --- Core/HLE/ReplaceTables.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/HLE/ReplaceTables.cpp b/Core/HLE/ReplaceTables.cpp index 88e98c9a78..915ab466f9 100644 --- a/Core/HLE/ReplaceTables.cpp +++ b/Core/HLE/ReplaceTables.cpp @@ -1353,7 +1353,7 @@ static int Hook_gow_fps_hack() { static int Hook_gow_vortex_hack() { if (PSP_CoreParameter().compat.flags().GoWFramerateHack60) { - //from my tests ==0x3F800000 takes around 1:50s, when != it's roughtly 2:50s and that seems more correct + // from my tests both ==0x3F800000 and !=0x3F800000 takes around 1:40-1:50, that seems to match correct behaviour if (currentMIPS->r[MIPS_REG_S1] == 0 && currentMIPS->r[MIPS_REG_A0] == 0xC0 && currentMIPS->r[MIPS_REG_T4] != 0x3F800000) { currentMIPS->r[MIPS_REG_S1] = 1; }