32x, improved auto frame skip, plus new config option for max auto skip
authorkub <derkub@gmail.com>
Thu, 10 Oct 2019 22:06:50 +0000 (00:06 +0200)
committerkub <derkub@gmail.com>
Thu, 10 Oct 2019 22:56:33 +0000 (00:56 +0200)
platform/common/config_file.c
platform/common/emu.c
platform/common/emu.h
platform/common/menu_pico.c
platform/common/menu_pico.h

index 1b5c517..7248d23 100644 (file)
@@ -322,6 +322,10 @@ static int custom_read(menu_entry *me, const char *var, const char *val)
                        currentConfig.gamma = atoi(val);
                        return 1;
 
+               case MA_OPT2_MAX_FRAMESKIP:
+                       currentConfig.max_skip = atoi(val);
+                       return 1;
+
                /* PSP */
                case MA_OPT3_SCALE:
                        if (strcasecmp(var, "Scale factor") != 0) return 0;
index da03bff..15aa539 100644 (file)
@@ -596,6 +596,7 @@ void emu_prep_defconfig(void)
        defaultConfig.turbo_rate = 15;\r
        defaultConfig.msh2_khz = PICO_MSH2_HZ / 1000;\r
        defaultConfig.ssh2_khz = PICO_SSH2_HZ / 1000;\r
+       defaultConfig.max_skip = 4;\r
 \r
        // platform specific overrides\r
        pemu_prep_defconfig();\r
@@ -1463,10 +1464,16 @@ void emu_loop(void)
                else if (diff < -target_frametime_x3)\r
                {\r
                        /* no time left for this frame - skip */\r
-                       /* limit auto frameskip to 8 */\r
-                       if (frames_done / 8 <= frames_shown)\r
+                       /* limit auto frameskip to max_skip */\r
+                       if (fskip_cnt < currentConfig.max_skip) {\r
+                               fskip_cnt++;\r
                                skip = 1;\r
-               }\r
+                       }\r
+                       else {\r
+                               fskip_cnt = 0;\r
+                       }\r
+               } else\r
+                       fskip_cnt = 0;\r
 \r
                // don't go in debt too much\r
                while (diff < -target_frametime_x3 * 3) {\r
index 1e751f8..26e2159 100644 (file)
@@ -76,6 +76,7 @@ typedef struct _currentConfig_t {
        int msh2_khz;
        int ssh2_khz;
        int overclock_68k;
+       int max_skip;
 } currentConfig_t;
 
 extern currentConfig_t currentConfig, defaultConfig;
index 9fb3142..dc7ceda 100644 (file)
@@ -506,6 +506,7 @@ static menu_entry e_menu_adv_options[] =
        mee_onoff     ("Disable frame limiter",    MA_OPT2_NO_FRAME_LIMIT,currentConfig.EmuOpt, EOPT_NO_FRMLIMIT),
        mee_onoff     ("Enable dynarecs",          MA_OPT2_DYNARECS,      PicoIn.opt, POPT_EN_DRC),
        mee_onoff     ("Status line in main menu", MA_OPT2_STATUS_LINE,   currentConfig.EmuOpt, EOPT_SHOW_RTC),
+       mee_range     ("Max auto frameskip",       MA_OPT2_MAX_FRAMESKIP, currentConfig.max_skip, 1, 10),
        mee_onoff     ("PWM IRQ optimization",     MA_OPT2_PWM_IRQ_OPT,   PicoIn.opt, POPT_PWM_IRQ_OPT),
        MENU_OPTIONS_ADV
        mee_end,
index c626c77..4c0bbdd 100644 (file)
@@ -58,6 +58,7 @@ typedef enum
        MA_OPT2_NO_SPRITE_LIM,
        MA_OPT2_NO_IDLE_LOOPS,
        MA_OPT2_OVERCLOCK_M68K,
+       MA_OPT2_MAX_FRAMESKIP,
        MA_OPT2_PWM_IRQ_OPT,
        MA_OPT2_DONE,
        MA_OPT3_SCALE,          /* psp (all OPT3) */