try to emulate borders properly
[pcsx_rearmed.git] / frontend / menu.c
index 9ca87c6..fb71224 100644 (file)
@@ -87,6 +87,7 @@ typedef enum
        MA_OPT_VOUT_MODE,
        MA_OPT_SCANLINES,
        MA_OPT_SCANLINE_LEVEL,
+       MA_OPT_CENTERING,
 } menu_id;
 
 static int last_vout_w, last_vout_h, last_vout_bpp;
@@ -398,6 +399,7 @@ static const struct {
        CE_CONFIG_VAL(DisableStalls),
        CE_CONFIG_VAL(Cpu),
        CE_CONFIG_VAL(GpuListWalking),
+       CE_CONFIG_VAL(PreciseExceptions),
        CE_INTVAL(region),
        CE_INTVAL_V(g_scaler, 3),
        CE_INTVAL(g_gamma),
@@ -449,6 +451,9 @@ static const struct {
        CE_INTVAL_P(gpu_peopsgl.iVRamSize),
        CE_INTVAL_P(gpu_peopsgl.iTexGarbageCollection),
        CE_INTVAL_P(gpu_peopsgl.dwActFixes),
+       CE_INTVAL_P(screen_centering_type),
+       CE_INTVAL_P(screen_centering_x),
+       CE_INTVAL_P(screen_centering_y),
        CE_INTVAL(spu_config.iUseReverb),
        CE_INTVAL(spu_config.iXAPitch),
        CE_INTVAL(spu_config.iUseInterpolation),
@@ -1251,6 +1256,7 @@ static const char *men_soft_filter[] = { "None",
 #endif
        NULL };
 static const char *men_dummy[] = { NULL };
+static const char *men_centering[] = { "Auto", "Ingame", "Force", NULL };
 static const char h_scaler[]    = "int. 2x  - scales w. or h. 2x if it fits on screen\n"
                                  "int. 4:3 - uses integer if possible, else fractional";
 static const char h_cscaler[]   = "Displays the scaler layer, you can resize it\n"
@@ -1315,6 +1321,7 @@ static int menu_loop_cscaler(int id, int keys)
 
 static menu_entry e_menu_gfx_options[] =
 {
+       mee_enum      ("Screen centering",         MA_OPT_CENTERING, pl_rearmed_cbs.screen_centering_type, men_centering),
        mee_enum_h    ("Scaler",                   MA_OPT_VARSCALER, g_scaler, men_scaler, h_scaler),
        mee_enum      ("Video output mode",        MA_OPT_VOUT_MODE, plat_target.vout_method, men_dummy),
        mee_onoff     ("Software Scaling",         MA_OPT_SCALER2, soft_scaling, 1),
@@ -1355,7 +1362,7 @@ static const char *men_gpu_interlace[] = { "Off", "On", "Auto", NULL };
 static menu_entry e_menu_plugin_gpu_neon[] =
 {
        mee_enum      ("Enable interlace mode",      0, pl_rearmed_cbs.gpu_neon.allow_interlace, men_gpu_interlace),
-       mee_onoff_h   ("Enhanced resolution (slow)", 0, pl_rearmed_cbs.gpu_neon.enhancement_enable, 1, h_gpu_neon_enhanced),
+       mee_onoff_h   ("Enhanced resolution",        0, pl_rearmed_cbs.gpu_neon.enhancement_enable, 1, h_gpu_neon_enhanced),
        mee_onoff_h   ("Enhanced res. speed hack",   0, pl_rearmed_cbs.gpu_neon.enhancement_no_main, 1, h_gpu_neon_enhanced_hack),
        mee_end,
 };
@@ -1594,12 +1601,14 @@ static const char h_cfg_nodrc[]  = "Disable dynamic recompiler and use interpret
 #endif
 static const char h_cfg_shacks[] = "Breaks games but may give better performance";
 static const char h_cfg_icache[] = "Support F1 games (only when dynarec is off)";
-static const char h_cfg_gpul[]   = "Try enabling this if the game is missing some graphics\n"
+static const char h_cfg_exc[]    = "Emulate some PSX's debug hw like breakpoints\n"
+                                  "and exceptions (slow, interpreter only, keep off)";
+static const char h_cfg_gpul[]   = "Try enabling this if the game misses some graphics\n"
                                   "causes a performance hit";
 static const char h_cfg_psxclk[]  = "Over/under-clock the PSX, default is " DEFAULT_PSX_CLOCK_S "\n"
                                    "(adjust this if the game is too slow/too fast/hangs)";
 
-enum { AMO_XA, AMO_CDDA, AMO_IC, AMO_CPU, AMO_GPUL };
+enum { AMO_XA, AMO_CDDA, AMO_IC, AMO_BP, AMO_CPU, AMO_GPUL };
 
 static menu_entry e_menu_adv_options[] =
 {
@@ -1609,6 +1618,7 @@ static menu_entry e_menu_adv_options[] =
        mee_onoff_h   ("Disable XA Decoding",    0, menu_iopts[AMO_XA],   1, h_cfg_xa),
        mee_onoff_h   ("Disable CD Audio",       0, menu_iopts[AMO_CDDA], 1, h_cfg_cdda),
        mee_onoff_h   ("ICache emulation",       0, menu_iopts[AMO_IC],   1, h_cfg_icache),
+       mee_onoff_h   ("BP exception emulation", 0, menu_iopts[AMO_BP],   1, h_cfg_exc),
        mee_enum_h    ("GPU l-list slow walking",0, menu_iopts[AMO_GPUL], men_gpul, h_cfg_gpul),
 #if !defined(DRC_DISABLE) || defined(LIGHTREC)
        mee_onoff_h   ("Disable dynarec (slow!)",0, menu_iopts[AMO_CPU],  1, h_cfg_nodrc),
@@ -1628,6 +1638,7 @@ static int menu_loop_adv_options(int id, int keys)
                { &Config.Xa,      &menu_iopts[AMO_XA] },
                { &Config.Cdda,    &menu_iopts[AMO_CDDA] },
                { &Config.icache_emulation, &menu_iopts[AMO_IC] },
+               { &Config.PreciseExceptions, &menu_iopts[AMO_BP] },
                { &Config.Cpu,     &menu_iopts[AMO_CPU] },
        };
        int i;
@@ -2011,8 +2022,9 @@ static int reset_game(void)
        ClosePlugins();
        OpenPlugins();
        SysReset();
-       if (CheckCdrom() != -1) {
-               LoadCdrom();
+       if (Config.HLE) {
+               if (LoadCdrom() == -1)
+                       return -1;
        }
        return 0;
 }
@@ -2042,13 +2054,17 @@ static int reload_plugins(const char *cdimg)
 
 static int run_bios(void)
 {
+       boolean origSlowBoot = Config.SlowBoot;
+
        if (bios_sel == 0)
                return -1;
 
        ready_to_go = 0;
        if (reload_plugins(NULL) != 0)
                return -1;
+       Config.SlowBoot = 1;
        SysReset();
+       Config.SlowBoot = origSlowBoot;
 
        ready_to_go = 1;
        return 0;
@@ -2571,7 +2587,7 @@ void menu_init(void)
 
        i = plat_target.cpu_clock_set != NULL
                && plat_target.cpu_clock_get != NULL && cpu_clock_st > 0;
-       me_enable(e_menu_gfx_options, MA_OPT_CPU_CLOCKS, i);
+       me_enable(e_menu_options, MA_OPT_CPU_CLOCKS, i);
 
        i = me_id2offset(e_menu_gfx_options, MA_OPT_VOUT_MODE);
        e_menu_gfx_options[i].data = plat_target.vout_methods;