frame limiter opt, menu btn on cfg load fix
authornotaz <notasas@gmail.com>
Sun, 2 Aug 2009 21:10:35 +0000 (21:10 +0000)
committernotaz <notasas@gmail.com>
Sun, 2 Aug 2009 21:10:35 +0000 (21:10 +0000)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive/platform@727 be3aeb3a-fb24-0410-a615-afba39da0efa

common/config.c
common/emu.c
common/menu.c
gp2x/in_gp2x.c

index e47a401..9d973fe 100644 (file)
@@ -490,6 +490,8 @@ static int custom_read(menu_entry *me, const char *var, const char *val)
                        PsndRate = strtoul(val, &tmp, 10);
                        if (PsndRate < 8000 || PsndRate > 44100)
                                PsndRate = 22050;
+                       if (*tmp == 'H' || *tmp == 'h') tmp++;
+                       if (*tmp == 'Z' || *tmp == 'z') tmp++;
                        while (*tmp == ' ') tmp++;
                        if        (strcasecmp(tmp, "stereo") == 0) {
                                PicoOpt |=  POPT_EN_STEREO;
@@ -551,17 +553,6 @@ static int custom_read(menu_entry *me, const char *var, const char *val)
                                return 0;
                        return 1;
 
-#if 0 // TODO rm?
-               case MA_OPT_CPU_CLOCKS:
-#ifdef __GP2X__
-                       if (strcasecmp(var, "GP2X CPU clocks") != 0) return 0;
-#elif defined(PSP)
-                       if (strcasecmp(var, "PSP CPU clock") != 0) return 0;
-#endif
-                       currentConfig.CPUclock = atoi(val);
-                       return 1;
-#endif
-
                case MA_OPT2_GAMMA:
                        if (strcasecmp(var, "Gamma correction") != 0) return 0;
                        currentConfig.gamma = (int) (atof(val) * 100.0);
index 5bd34e8..7c406b5 100644 (file)
@@ -1325,10 +1325,14 @@ void emu_loop(void)
 \r
                if (timestamp - timestamp_base >= ms_to_ticks(1000))\r
                {\r
-                       if (PsndOut == 0 && currentConfig.Frameskip >= 0)\r
+                       if ((currentConfig.EmuOpt & EOPT_NO_FRMLIMIT) && currentConfig.Frameskip >= 0)\r
                                pframes_done = 0;\r
-                       else\r
+                       else {\r
                                pframes_done -= target_fps;\r
+                               /* don't allow it to drift during heavy slowdowns */\r
+                               if (pframes_done < -2)\r
+                                       pframes_done = -2;\r
+                       }\r
                        timestamp_base += ms_to_ticks(1000);\r
                }\r
 \r
@@ -1343,7 +1347,7 @@ void emu_loop(void)
                                pframes_done++; frames_done++;\r
                                diff_lim += target_frametime;\r
 \r
-                               if (PsndOut && !reset_timing) { // do framelimitting if sound is enabled\r
+                               if (!(currentConfig.EmuOpt & EOPT_NO_FRMLIMIT)) {\r
                                        timestamp = get_ticks();\r
                                        diff = timestamp - timestamp_base;\r
                                        if (diff < diff_lim) // we are too fast\r
@@ -1369,7 +1373,7 @@ void emu_loop(void)
                PicoFrame();\r
 \r
                /* frame limiter */\r
-               if (!reset_timing && (PsndOut != NULL || currentConfig.Frameskip < 0))\r
+               if (!reset_timing && !(currentConfig.EmuOpt & EOPT_NO_FRMLIMIT))\r
                {\r
                        timestamp = get_ticks();\r
                        diff = timestamp - timestamp_base;\r
index 97c22e3..4a01896 100644 (file)
@@ -1450,6 +1450,7 @@ static menu_entry e_menu_adv_options[] =
        mee_onoff     ("gzip savestates",          MA_OPT2_GZIP_STATES,   currentConfig.EmuOpt, EOPT_GZIP_SAVES),\r
        mee_onoff     ("Don't save last used ROM", MA_OPT2_NO_LAST_ROM,   currentConfig.EmuOpt, EOPT_NO_AUTOSVCFG),\r
        mee_onoff     ("Disable idle loop patching",MA_OPT2_NO_IDLE_LOOPS,PicoOpt, POPT_DIS_IDLE_DET),\r
+       mee_onoff     ("Disable frame limiter",    MA_OPT2_NO_FRAME_LIMIT,currentConfig.EmuOpt, EOPT_NO_FRMLIMIT),\r
        MENU_GP2X_OPTIONS_ADV\r
        mee_end,\r
 };\r
index ec50a36..818aead 100644 (file)
@@ -104,7 +104,6 @@ static void in_gp2x_probe(void)
                        return;
                }
                in_gp2x_get_bits = in_gp2x_get_wiz_bits;
-               in_gp2x_keys[BTN_START] = "MENU";
                break;
        default:
 #ifdef FAKE_IN_GP2X
@@ -318,7 +317,12 @@ static int in_gp2x_clean_binds(void *drv_data, int *binds, int *def_binds)
 void in_gp2x_init(void *vdrv)
 {
        in_drv_t *drv = vdrv;
+       gp2x_soc_t soc;
 
+       soc = soc_detect();
+       if (soc == SOCID_POLLUX)
+               in_gp2x_keys[BTN_START] = "MENU";
+       
        in_gp2x_combo_keys = in_gp2x_combo_acts = 0;
 
        drv->prefix = in_gp2x_prefix;