diff --git a/Core/ConfigValues.h b/Core/ConfigValues.h index e7a6957e5c..7d02b5c960 100644 --- a/Core/ConfigValues.h +++ b/Core/ConfigValues.h @@ -128,6 +128,7 @@ enum IOTimingMethods { IOTIMING_FAST = 0, IOTIMING_HOST = 1, IOTIMING_REALISTIC = 2, + IOTIMING_UMDSLOWREALISTIC = 3, }; enum class AutoLoadSaveState { diff --git a/Core/HLE/sceIo.cpp b/Core/HLE/sceIo.cpp index f04c8175bd..4fa5826a6d 100644 --- a/Core/HLE/sceIo.cpp +++ b/Core/HLE/sceIo.cpp @@ -341,7 +341,7 @@ static void IoAsyncCleanupThread(int fd) { } static int GetIOTimingMethod() { - if (PSP_CoreParameter().compat.flags().ForceUMDDelay) { + if (PSP_CoreParameter().compat.flags().ForceUMDDelay || PSP_CoreParameter().compat.flags().ForceUMDReadSpeed || g_Config.iIOTimingMethod == IOTIMING_UMDSLOWREALISTIC) { return IOTIMING_REALISTIC; } else { return g_Config.iIOTimingMethod; @@ -1586,7 +1586,7 @@ static u32 sceIoOpen(const char *filename, int flags, int mode) { // UMD: Speed varies from 1-6ms. // Card: Path depth matters, but typically between 10-13ms on a standard Pro Duo. int delay; - if (PSP_CoreParameter().compat.flags().ForceUMDReadSpeed || g_Config.iIOTimingMethod == 3) { + if (PSP_CoreParameter().compat.flags().ForceUMDReadSpeed || g_Config.iIOTimingMethod == IOTIMING_UMDSLOWREALISTIC) { delay = 500000; } else { diff --git a/libretro/libretro.cpp b/libretro/libretro.cpp index c5b4807750..de6792012f 100644 --- a/libretro/libretro.cpp +++ b/libretro/libretro.cpp @@ -523,6 +523,8 @@ static void check_variables(CoreParameter &coreParam) g_Config.iIOTimingMethod = IOTIMING_HOST; else if (!strcmp(var.value, "Simulate UMD delays")) g_Config.iIOTimingMethod = IOTIMING_REALISTIC; + else if (!strcmp(var.value, "Simulate UMD slow reading speed")) + g_Config.iIOTimingMethod = IOTIMING_UMDSLOWREALISTIC; } var.key = "ppsspp_force_lag_sync";