aboutsummaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
Diffstat (limited to 'frontend')
-rw-r--r--frontend/common/plat.h1
-rw-r--r--frontend/menu.c27
-rw-r--r--frontend/plat_omap.c19
3 files changed, 43 insertions, 4 deletions
diff --git a/frontend/common/plat.h b/frontend/common/plat.h
index c16f888..0357040 100644
--- a/frontend/common/plat.h
+++ b/frontend/common/plat.h
@@ -33,6 +33,7 @@ void plat_status_msg_clear(void);
void plat_video_menu_enter(int is_rom_loaded);
void plat_video_menu_begin(void);
void plat_video_menu_end(void);
+void plat_video_menu_leave(void);
void plat_video_flip(void);
void plat_video_wait_vsync(void);
diff --git a/frontend/menu.c b/frontend/menu.c
index 592eb78..0469868 100644
--- a/frontend/menu.c
+++ b/frontend/menu.c
@@ -66,7 +66,10 @@ int g_opts;
// from softgpu plugin
extern int iUseDither;
extern int UseFrameSkip;
+extern int UseFrameLimit;
extern uint32_t dwActFixes;
+extern float fFrameRateHz;
+extern int dwFrameRateTicks;
// sound plugin
extern int iUseReverb;
@@ -139,6 +142,7 @@ static void menu_set_defconfig(void)
Config.SpuIrq = Config.RCntFix = Config.VSyncWA = 0;
iUseDither = UseFrameSkip = 0;
+ UseFrameLimit = 1;
dwActFixes = 1<<7;
iUseReverb = 2;
@@ -191,6 +195,7 @@ static const struct {
CE_INTVAL(g_opts),
CE_INTVAL(iUseDither),
CE_INTVAL(UseFrameSkip),
+ CE_INTVAL(UseFrameLimit),
CE_INTVAL(dwActFixes),
CE_INTVAL(iUseReverb),
CE_INTVAL(iUseInterpolation),
@@ -775,6 +780,8 @@ static int menu_loop_plugin_options(int id, int keys)
// ------------ adv options menu ------------
+static const char h_cfg_cpul[] = "Shows CPU usage in %%";
+static const char h_cfg_fl[] = "Keeps the game from running too fast";
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)";
@@ -785,7 +792,8 @@ static const char h_cfg_rcnt2[] = "InuYasha Sengoku Battle Fix";
static menu_entry e_menu_adv_options[] =
{
- mee_onoff ("Show CPU load", 0, g_opts, OPT_SHOWCPU),
+ mee_onoff_h ("Show CPU load", 0, g_opts, OPT_SHOWCPU, h_cfg_cpul),
+ mee_onoff_h ("Frame Limiter", 0, UseFrameLimit, 1, h_cfg_fl),
mee_onoff_h ("Disable XA Decoding", 0, Config.Xa, 1, h_cfg_xa),
mee_onoff_h ("Disable CD Audio", 0, Config.Cdda, 1, h_cfg_cdda),
mee_onoff_h ("SIO IRQ Always Enabled", 0, Config.Sio, 1, h_cfg_sio),
@@ -896,7 +904,9 @@ static int run_cd_image(const char *fname)
{
extern void set_cd_image(const char *fname);
ready_to_go = 0;
+ pl_fbdev_buf = NULL;
+ ClosePlugins();
set_cd_image(fname);
LoadPlugins();
NetOpened = 0;
@@ -974,6 +984,7 @@ static int main_menu_handler(int id, int keys)
break;
case MA_MAIN_RESET_GAME:
if (ready_to_go) {
+ ClosePlugins();
OpenPlugins();
SysReset();
if (CheckCdrom() != -1) {
@@ -1045,8 +1056,6 @@ void menu_loop(void)
in_set_config_int(0, IN_CFG_BLOCKING, 0);
- memset(g_menuscreen_ptr, 0, g_menuscreen_w * g_menuscreen_h * 2);
- menu_draw_end();
menu_prepare_emu();
}
@@ -1158,7 +1167,7 @@ static void menu_leave_emu(void)
}
memcpy(g_menubg_ptr, g_menubg_src_ptr, g_menuscreen_w * g_menuscreen_h * 2);
- if (ready_to_go && last_psx_bpp == 16) {
+ if (pl_fbdev_buf != NULL && ready_to_go && last_psx_bpp == 16) {
int x = max(0, g_menuscreen_w - last_psx_w);
int y = max(0, g_menuscreen_h / 2 - last_psx_h / 2);
int w = min(g_menuscreen_w, last_psx_w);
@@ -1169,10 +1178,14 @@ static void menu_leave_emu(void)
for (; h > 0; h--, d += g_menuscreen_w, s += last_psx_w)
menu_darken_bg(d, s, w, 0);
}
+
+ plat_video_menu_enter(ready_to_go);
}
void menu_prepare_emu(void)
{
+ plat_video_menu_leave();
+
switch (scaling) {
case SCALE_1_1:
menu_notify_mode_change(last_psx_w, last_psx_h, last_psx_bpp);
@@ -1197,6 +1210,12 @@ void menu_prepare_emu(void)
if (Config.Cdda)
CDR_stop();
+ // HACK to set up the frame limiter if softgpu is not used..
+ if (gpu_plugsel != 0) {
+ fFrameRateHz = Config.PsxType ? 50.0f : 59.94f;
+ dwFrameRateTicks = (100000*100 / (unsigned long)(fFrameRateHz*100));
+ }
+
if (GPU_open != NULL) {
extern unsigned long gpuDisp;
int ret = GPU_open(&gpuDisp, "PCSX", NULL);
diff --git a/frontend/plat_omap.c b/frontend/plat_omap.c
index ec483a0..e6a1105 100644
--- a/frontend/plat_omap.c
+++ b/frontend/plat_omap.c
@@ -120,6 +120,14 @@ int omap_enable_layer(int enabled)
g_layer_x, g_layer_y, g_layer_w, g_layer_h, 0);
}
+void plat_video_menu_enter(int is_rom_loaded)
+{
+ g_menuscreen_ptr = vout_fbdev_resize(main_fb,
+ g_menuscreen_w, g_menuscreen_h, 16, 0, 0, 0, 0, 3);
+ if (g_menuscreen_ptr == NULL)
+ fprintf(stderr, "warning: vout_fbdev_resize failed\n");
+}
+
void plat_video_menu_begin(void)
{
}
@@ -129,6 +137,17 @@ void plat_video_menu_end(void)
g_menuscreen_ptr = vout_fbdev_flip(main_fb);
}
+void plat_video_menu_leave(void)
+{
+ /* have to get rid of panning so that plugins that
+ * use fb0 and don't ever pan can work. */
+ vout_fbdev_clear(main_fb);
+ g_menuscreen_ptr = vout_fbdev_resize(main_fb,
+ g_menuscreen_w, g_menuscreen_h, 16, 0, 0, 0, 0, 1);
+ if (g_menuscreen_ptr == NULL)
+ fprintf(stderr, "warning: vout_fbdev_resize failed\n");
+}
+
void plat_init(void)
{
const char *main_fb_name, *layer_fb_name;