Work around Brothers in Arms speed issue via compat hack (#18513)

Co-authored-by: Henrik Rydgård <hrydgard@gmail.com>
This commit is contained in:
LunaMoo 2024-09-18 11:51:07 +02:00 committed by GitHub
parent 0bce42cc33
commit 864a4b38aa
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 10 additions and 0 deletions

View File

@ -136,6 +136,7 @@ void Compatibility::CheckSettings(IniFile &iniFile, const std::string &gameID) {
CheckSetting(iniFile, gameID, "LoadCLUTFromCurrentFrameOnly", &flags_.LoadCLUTFromCurrentFrameOnly); CheckSetting(iniFile, gameID, "LoadCLUTFromCurrentFrameOnly", &flags_.LoadCLUTFromCurrentFrameOnly);
CheckSetting(iniFile, gameID, "ForceUMDReadSpeed", &flags_.ForceUMDReadSpeed); CheckSetting(iniFile, gameID, "ForceUMDReadSpeed", &flags_.ForceUMDReadSpeed);
CheckSetting(iniFile, gameID, "AllowDelayedReadbacks", &flags_.AllowDelayedReadbacks); CheckSetting(iniFile, gameID, "AllowDelayedReadbacks", &flags_.AllowDelayedReadbacks);
CheckSetting(iniFile, gameID, "KernelGetSystemTimeLowEatMoreCycles", &flags_.KernelGetSystemTimeLowEatMoreCycles);
CheckSetting(iniFile, gameID, "TacticsOgreEliminateDebugReadback", &flags_.TacticsOgreEliminateDebugReadback); CheckSetting(iniFile, gameID, "TacticsOgreEliminateDebugReadback", &flags_.TacticsOgreEliminateDebugReadback);
CheckSetting(iniFile, gameID, "FramebufferAllowLargeVerticalOffset", &flags_.FramebufferAllowLargeVerticalOffset); CheckSetting(iniFile, gameID, "FramebufferAllowLargeVerticalOffset", &flags_.FramebufferAllowLargeVerticalOffset);
CheckSetting(iniFile, gameID, "DisableMemcpySlicing", &flags_.DisableMemcpySlicing); CheckSetting(iniFile, gameID, "DisableMemcpySlicing", &flags_.DisableMemcpySlicing);

View File

@ -106,6 +106,7 @@ struct CompatFlags {
bool LoadCLUTFromCurrentFrameOnly; bool LoadCLUTFromCurrentFrameOnly;
bool ForceUMDReadSpeed; bool ForceUMDReadSpeed;
bool AllowDelayedReadbacks; bool AllowDelayedReadbacks;
bool KernelGetSystemTimeLowEatMoreCycles;
bool TacticsOgreEliminateDebugReadback; bool TacticsOgreEliminateDebugReadback;
bool FramebufferAllowLargeVerticalOffset; bool FramebufferAllowLargeVerticalOffset;
bool DisableMemcpySlicing; bool DisableMemcpySlicing;

View File

@ -83,6 +83,8 @@ u32 sceKernelGetSystemTimeLow()
u64 t = CoreTiming::GetGlobalTimeUs(); u64 t = CoreTiming::GetGlobalTimeUs();
VERBOSE_LOG(Log::sceKernel,"%08x=sceKernelGetSystemTimeLow()",(u32)t); VERBOSE_LOG(Log::sceKernel,"%08x=sceKernelGetSystemTimeLow()",(u32)t);
hleEatCycles(165); hleEatCycles(165);
if (PSP_CoreParameter().compat.flags().KernelGetSystemTimeLowEatMoreCycles)
hleEatCycles(70000);
hleReSchedule("system time"); hleReSchedule("system time");
return (u32)t; return (u32)t;
} }

View File

@ -264,6 +264,12 @@ ULJM06365 = true
# ULJM05036 = true # ULJM05036 = true
# ULUS10044 = true # ULUS10044 = true
[KernelGetSystemTimeLowEatMoreCycles]
# Brothers in Arms: D-Day works around weird FPS(falling under 100% even on powerful hardware) as well as it's animation speed #18509
# recommend to OC PSP CPU to at least twice as much as real PSP to get constant 60 fps
ULES00608 = true
ULUS10193 = true
[DrawSyncInstant] [DrawSyncInstant]
# Bizarre timing issue in Sakura-sou no Pet na Kanojo, see issue #15224. Note that an instant DrawSync is not logical. # Bizarre timing issue in Sakura-sou no Pet na Kanojo, see issue #15224. Note that an instant DrawSync is not logical.
NPJH50745 = true NPJH50745 = true