#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"
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;
switch (in_type_sel1) {
case 1: in_type[0] = PSE_PAD_TYPE_ANALOGPAD; break;
- case 2: in_type[0] = PSE_PAD_TYPE_NEGCON; break;
- case 3: in_type[0] = PSE_PAD_TYPE_NONE; break;
+ case 2: in_type[0] = PSE_PAD_TYPE_GUNCON; break;
+ case 3: in_type[0] = PSE_PAD_TYPE_GUN; break;
+ case 4: in_type[0] = PSE_PAD_TYPE_NONE; break;
default: in_type[0] = PSE_PAD_TYPE_STANDARD;
}
switch (in_type_sel2) {
case 1: in_type[1] = PSE_PAD_TYPE_ANALOGPAD; break;
- case 2: in_type[1] = PSE_PAD_TYPE_NEGCON; break;
- case 3: in_type[1] = PSE_PAD_TYPE_NONE; break;
+ case 2: in_type[1] = PSE_PAD_TYPE_GUNCON; break;
+ case 3: in_type[1] = PSE_PAD_TYPE_GUN; break;
+ case 4: in_type[1] = PSE_PAD_TYPE_NONE; break;
default: in_type[1] = PSE_PAD_TYPE_STANDARD;
}
if (in_evdev_allow_abs_only != allow_abs_only_old) {
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),
CE_INTVAL_P(gpu_neon.allow_interlace),
CE_INTVAL_P(gpu_neon.enhancement_enable),
CE_INTVAL_P(gpu_neon.enhancement_no_main),
+ CE_INTVAL_P(gpu_neon.enhancement_tex_adj),
CE_INTVAL_P(gpu_peopsgl.bDrawDither),
CE_INTVAL_P(gpu_peopsgl.iFilterType),
CE_INTVAL_P(gpu_peopsgl.iFrameTexType),
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),
#ifdef HAVE_CHD
"chd",
#endif
- "bz", "znx", "pbp", "cbn", NULL
+ "bz", "znx", "pbp", "cbn", "ppf", NULL
};
// rrrr rggg gggb bbbb
{ "Volume Up ", 1 << SACTION_VOLUME_UP },
{ "Volume Down ", 1 << SACTION_VOLUME_DOWN },
#endif
+ { "Analog toggle ", 1 << SACTION_ANALOG_TOGGLE },
{ NULL, 0 }
};
"Standard (SCPH-1080)",
"Analog (SCPH-1150)",
"GunCon",
+ "Konami Gun",
"None",
NULL
};
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"
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);
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),
mee_enum ("Enable interlace mode", 0, pl_rearmed_cbs.gpu_neon.allow_interlace, men_gpu_interlace),
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_onoff ("Enh. res. texture adjust", 0, pl_rearmed_cbs.gpu_neon.enhancement_tex_adj, 1),
mee_end,
};
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"
"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[] =
{
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
{ &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;
}
static const char h_restore_def[] = "Switches back to default / recommended\n"
"configuration";
static const char h_frameskip[] = "Warning: frameskip sometimes causes glitches\n";
+static const char h_sputhr[] = "Warning: has some known bugs\n";
static menu_entry e_menu_options[] =
{
mee_enum ("Region", 0, region, men_region),
mee_range ("CPU clock", MA_OPT_CPU_CLOCKS, cpu_clock, 20, 5000),
#ifdef C64X_DSP
- mee_onoff ("Use C64x DSP for sound", MA_OPT_SPU_THREAD, spu_config.iUseThread, 1),
+ mee_onoff_h ("Use C64x DSP for sound", MA_OPT_SPU_THREAD, spu_config.iUseThread, 1, h_sputhr),
#else
- mee_onoff ("Threaded SPU", MA_OPT_SPU_THREAD, spu_config.iUseThread, 1),
+ mee_onoff_h ("Threaded SPU", MA_OPT_SPU_THREAD, spu_config.iUseThread, 1, h_sputhr),
#endif
mee_handler_id("[Display]", MA_OPT_DISP_OPTS, menu_loop_gfx_options),
mee_handler ("[BIOS/Plugins]", menu_loop_plugin_options),
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);
menu_update_msg("unsupported/invalid CD image");
return -1;
}
+ if (ppfname)
+ BuildPPFCache(ppfname);
SysReset();
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)) {