try some overscan display option
[pcsx_rearmed.git] / frontend / menu.c
index 51cb377..9b9af7c 100644 (file)
@@ -40,6 +40,7 @@
 #include "../libpcsxcore/cdrom.h"
 #include "../libpcsxcore/cdriso.h"
 #include "../libpcsxcore/cheat.h"
+#include "../libpcsxcore/ppf.h"
 #include "../libpcsxcore/new_dynarec/new_dynarec.h"
 #include "../plugins/dfsound/spu_config.h"
 #include "psemu_plugin_defs.h"
@@ -92,6 +93,7 @@ typedef enum
        MA_OPT_SCANLINES,
        MA_OPT_SCANLINE_LEVEL,
        MA_OPT_CENTERING,
+       MA_OPT_OVERSCAN,
 } menu_id;
 
 static int last_vout_w, last_vout_h, last_vout_bpp;
@@ -408,7 +410,9 @@ static const struct {
        CE_CONFIG_VAL(DisableStalls),
        CE_CONFIG_VAL(Cpu),
        CE_CONFIG_VAL(GpuListWalking),
+       CE_CONFIG_VAL(FractionalFramerate),
        CE_CONFIG_VAL(PreciseExceptions),
+       CE_CONFIG_VAL(TurboCD),
        CE_INTVAL(region),
        CE_INTVAL_V(g_scaler, 3),
        CE_INTVAL(g_gamma),
@@ -464,6 +468,7 @@ static const struct {
        CE_INTVAL_P(screen_centering_type),
        CE_INTVAL_P(screen_centering_x),
        CE_INTVAL_P(screen_centering_y),
+       CE_INTVAL_P(show_overscan),
        CE_INTVAL(spu_config.iUseReverb),
        CE_INTVAL(spu_config.iXAPitch),
        CE_INTVAL(spu_config.iUseInterpolation),
@@ -738,7 +743,7 @@ static const char *filter_exts[] = {
        #ifdef HAVE_CHD
        "chd",
        #endif
-       "bz",  "znx", "pbp", "cbn", NULL
+       "bz",  "znx", "pbp", "cbn", "ppf", NULL
 };
 
 // rrrr rggg gggb bbbb
@@ -1277,6 +1282,7 @@ static const char *men_soft_filter[] = { "None",
        NULL };
 static const char *men_dummy[] = { NULL };
 static const char *men_centering[] = { "Auto", "Ingame", "Borderless", "Force", NULL };
+static const char *men_overscan[] = { "OFF", "Auto", "Hack", 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"
@@ -1313,7 +1319,7 @@ static int menu_loop_cscaler(int id, int keys)
        for (;;)
        {
                if (saved_layer && last_vout_bpp == 16) {
-                       int top_x = max(0, -g_layer_x * last_vout_h / 800) + 1;
+                       int top_x = max(0, -g_layer_x * last_vout_w / 800) + 1;
                        int top_y = max(0, -g_layer_y * last_vout_h / 480) + 1;
                        char text[128];
                        memcpy(pl_vout_buf, saved_layer, saved_layer_size);
@@ -1373,6 +1379,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      ("Show overscan",            MA_OPT_OVERSCAN, pl_rearmed_cbs.show_overscan, men_overscan),
        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),
@@ -1638,7 +1645,7 @@ static int menu_loop_speed_hacks(int id, int keys)
        return 0;
 }
 
-static const char *men_gpul[]    = { "Auto", "Off", "On", NULL };
+static const char *men_autooo[]  = { "Auto", "Off", "On", NULL };
 
 static const char h_cfg_cpul[]   = "Shows CPU usage in %";
 static const char h_cfg_spu[]    = "Shows active SPU channels\n"
@@ -1657,10 +1664,13 @@ static const char h_cfg_exc[]    = "Emulate some PSX's debug hw like breakpoints
                                   "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_ffps[]   = "Instead of 50/60fps for PAL/NTSC use ~49.75/59.81\n"
+                                  "Closer to real hw but doesn't match modern displays.";
+static const char h_cfg_tcd[]    = "Greatly reduce CD load times. Breaks some games.";
 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_BP, AMO_CPU, AMO_GPUL };
+enum { AMO_XA, AMO_CDDA, AMO_IC, AMO_BP, AMO_CPU, AMO_GPUL, AMO_FFPS, AMO_TCD };
 
 static menu_entry e_menu_adv_options[] =
 {
@@ -1671,7 +1681,9 @@ static menu_entry e_menu_adv_options[] =
        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),
+       mee_enum_h    ("GPU l-list slow walking",0, menu_iopts[AMO_GPUL], men_autooo, h_cfg_gpul),
+       mee_enum_h    ("Fractional framerate",   0, menu_iopts[AMO_FFPS], men_autooo, h_cfg_ffps),
+       mee_onoff_h   ("Turbo CD-ROM ",          0, menu_iopts[AMO_TCD], 1, h_cfg_tcd),
 #if !defined(DRC_DISABLE) || defined(LIGHTREC)
        mee_onoff_h   ("Disable dynarec (slow!)",0, menu_iopts[AMO_CPU],  1, h_cfg_nodrc),
 #endif
@@ -1692,17 +1704,20 @@ static int menu_loop_adv_options(int id, int keys)
                { &Config.icache_emulation, &menu_iopts[AMO_IC] },
                { &Config.PreciseExceptions, &menu_iopts[AMO_BP] },
                { &Config.Cpu,     &menu_iopts[AMO_CPU] },
+               { &Config.TurboCD, &menu_iopts[AMO_TCD] },
        };
        int i;
        for (i = 0; i < ARRAY_SIZE(opts); i++)
                *opts[i].mopt = *opts[i].opt;
        menu_iopts[AMO_GPUL] = Config.GpuListWalking + 1;
+       menu_iopts[AMO_FFPS] = Config.FractionalFramerate + 1;
 
        me_loop(e_menu_adv_options, &sel);
 
        for (i = 0; i < ARRAY_SIZE(opts); i++)
                *opts[i].opt = *opts[i].mopt;
        Config.GpuListWalking = menu_iopts[AMO_GPUL] - 1;
+       Config.FractionalFramerate = menu_iopts[AMO_FFPS] - 1;
 
        return 0;
 }
@@ -2147,6 +2162,18 @@ static int run_exe(void)
 static int run_cd_image(const char *fname)
 {
        int autoload_state = g_autostateld_opt;
+       size_t fname_len = strlen(fname);
+       const char *ppfname = NULL;
+       char fname2[256];
+
+       // simle ppf handling, like game.chd.ppf
+       if (4 < fname_len && fname_len < sizeof(fname2)
+           && strcasecmp(fname + fname_len - 4, ".ppf") == 0) {
+               memcpy(fname2, fname, fname_len - 4);
+               fname2[fname_len - 4] = 0;
+               ppfname = fname;
+               fname = fname2;
+       }
 
        ready_to_go = 0;
        reload_plugins(fname);
@@ -2160,6 +2187,8 @@ static int run_cd_image(const char *fname)
                menu_update_msg("unsupported/invalid CD image");
                return -1;
        }
+       if (ppfname)
+               BuildPPFCache(ppfname);
 
        SysReset();
 
@@ -2175,7 +2204,7 @@ static int run_cd_image(const char *fname)
 
        if (autoload_state) {
                unsigned int newest = 0;
-               int time, slot, newest_slot = -1;
+               int time = 0, slot, newest_slot = -1;
 
                for (slot = 0; slot < 10; slot++) {
                        if (emu_check_save_file(slot, &time)) {