drc: try to make gte stall handling less bloaty
[pcsx_rearmed.git] / frontend / menu.c
index 05dde46..1d21dac 100644 (file)
@@ -1256,10 +1256,11 @@ static const char h_scaler[]    = "int. 2x  - scales w. or h. 2x if it fits on s
                                  "int. 4:3 - uses integer if possible, else fractional";
 static const char h_cscaler[]   = "Displays the scaler layer, you can resize it\n"
                                  "using d-pad or move it using R+d-pad";
-static const char h_overlay[]   = "Overlay provides hardware accelerated scaling";
 static const char h_soft_filter[] = "Works only if game uses low resolution modes";
-static const char h_scanline_l[]  = "Scanline brightness, 0-100%";
 static const char h_gamma[]     = "Gamma/brightness adjustment (default 100)";
+#ifdef __ARM_NEON__
+static const char h_scanline_l[]  = "Scanline brightness, 0-100%";
+#endif
 
 static int menu_loop_cscaler(int id, int keys)
 {
@@ -1555,6 +1556,7 @@ static const char h_cfg_psxclk[]  = "Over/under-clock the PSX, default is " DEFA
 static const char h_cfg_nosmc[]   = "Will cause crashes when loading, break memcards";
 static const char h_cfg_gteunn[]  = "May cause graphical glitches";
 static const char h_cfg_gteflgs[] = "Will cause graphical glitches";
+static const char h_cfg_gtestll[] = "Some games will run too fast";
 
 static menu_entry e_menu_speed_hacks[] =
 {
@@ -1562,6 +1564,7 @@ static menu_entry e_menu_speed_hacks[] =
        mee_onoff_h   ("Disable SMC checks",       0, new_dynarec_hacks, NDHACK_NO_SMC_CHECK, h_cfg_nosmc),
        mee_onoff_h   ("Assume GTE regs unneeded", 0, new_dynarec_hacks, NDHACK_GTE_UNNEEDED, h_cfg_gteunn),
        mee_onoff_h   ("Disable GTE flags",        0, new_dynarec_hacks, NDHACK_GTE_NO_FLAGS, h_cfg_gteflgs),
+       mee_onoff_h   ("Disable GTE stalls",       0, new_dynarec_hacks, NDHACK_GTE_NO_STALL, h_cfg_gtestll),
        mee_end,
 };
 
@@ -1579,18 +1582,20 @@ static const char h_cfg_fl[]     = "Frame Limiter keeps the game from running to
 static const char h_cfg_xa[]     = "Disables XA sound, which can sometimes improve performance";
 static const char h_cfg_cdda[]   = "Disable CD Audio for a performance boost\n"
                                   "(proper .cue/.bin dump is needed otherwise)";
-static const char h_cfg_sio[]    = "You should not need this, breaks games";
+//static const char h_cfg_sio[]    = "You should not need this, breaks games";
 static const char h_cfg_spuirq[] = "Compatibility tweak; should be left off";
-static const char h_cfg_rcnt1[]  = "Parasite Eve 2, Vandal Hearts 1/2 Fix\n"
-                                  "(timing hack, breaks other games)";
+//static const char h_cfg_rcnt1[]  = "Parasite Eve 2, Vandal Hearts 1/2 Fix\n"
+//                                "(timing hack, breaks other games)";
 static const char h_cfg_rcnt2[]  = "InuYasha Sengoku Battle Fix\n"
                                   "(timing hack, breaks other games)";
 static const char h_cfg_nodrc[]  = "Disable dynamic recompiler and use interpreter\n"
                                   "Might be useful to overcome some dynarec bugs";
 static const char h_cfg_shacks[] = "Breaks games but may give better performance\n"
                                   "must reload game for any change to take effect";
+#ifdef ICACHE_EMULATION
 static const char h_cfg_icache[] = "Allows you to play the F1 games.\n"
                                   "Note: This breaks the PAL version of Spyro 2.";
+#endif
                                   
 static menu_entry e_menu_adv_options[] =
 {
@@ -2326,8 +2331,11 @@ static void menu_leave_emu(void);
 
 void menu_loop(void)
 {
+       int cycle_multiplier_old = cycle_multiplier;
+       int ndrc_hacks_old = new_dynarec_hacks;
        static int warned_about_bios = 0;
        static int sel = 0;
+       int ndrc_changed;
 
        menu_leave_emu();
 
@@ -2362,7 +2370,9 @@ void menu_loop(void)
 
        in_set_config_int(0, IN_CFG_BLOCKING, 0);
 
-       menu_prepare_emu();
+       ndrc_changed = cycle_multiplier_old != cycle_multiplier
+               || ndrc_hacks_old != new_dynarec_hacks;
+       menu_prepare_emu(ndrc_changed);
 }
 
 static int qsort_strcmp(const void *p1, const void *p2)
@@ -2614,7 +2624,7 @@ static void menu_leave_emu(void)
                cpu_clock = plat_target_cpu_clock_get();
 }
 
-void menu_prepare_emu(void)
+void menu_prepare_emu(int ndrc_config_changed)
 {
        R3000Acpu *prev_cpu = psxCpu;
 
@@ -2631,6 +2641,8 @@ void menu_prepare_emu(void)
                // note that this does not really reset, just clears drc caches
                psxCpu->Reset();
        }
+       else if (ndrc_config_changed)
+               new_dynarec_clear_full();
 
        // core doesn't care about Config.Cdda changes,
        // so handle them manually here