/*
- * (C) Gražvydas "notaz" Ignotas, 2010
+ * (C) Gražvydas "notaz" Ignotas, 2010-2011
*
* This work is licensed under the terms of any of these licenses
* (at your option):
#include "menu.h"
#include "config.h"
+#include "plugin.h"
#include "plugin_lib.h"
#include "omap.h"
#include "common/plat.h"
extern int ready_to_go;
static int last_psx_w, last_psx_h, last_psx_bpp;
-static int scaling, filter, state_slot, cpu_clock;
+static int scaling, filter, state_slot, cpu_clock, cpu_clock_st;
static char rom_fname_reload[MAXPATHLEN];
static char last_selected_fname[MAXPATHLEN];
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;
Config.SpuIrq = Config.RCntFix = Config.VSyncWA = 0;
iUseDither = UseFrameSkip = 0;
+ UseFrameLimit = 1;
dwActFixes = 1<<7;
iUseReverb = 2;
CE_INTVAL(g_opts),
CE_INTVAL(iUseDither),
CE_INTVAL(UseFrameSkip),
+ CE_INTVAL(UseFrameLimit),
CE_INTVAL(dwActFixes),
CE_INTVAL(iUseReverb),
CE_INTVAL(iUseInterpolation),
char buff[64], *p;
DIR *dir;
- cpu_clock = get_cpu_clock();
+ cpu_clock_st = cpu_clock = get_cpu_clock();
dir = opendir("/etc/pandora/conf/dss_fir");
if (dir == NULL) {
pnd_filter_list = mfilters;
}
+void menu_finish(void)
+{
+ cpu_clock = cpu_clock_st;
+ apply_cpu_clock();
+}
+
// -------------- key config --------------
me_bind_action me_ctrl_actions[] =
scaling = SCALE_CUSTOM;
omap_enable_layer(1);
- //pnd_restore_layer_data();
for (;;)
{
menu_draw_begin(0);
- memset(g_menuscreen_ptr, 0, g_menuscreen_w * g_menuscreen_h * 2);
- text_out16(2, 480 - 18, "%dx%d | d-pad to resize, R+d-pad to move", g_layer_w, g_layer_h);
+ memset(g_menuscreen_ptr, 4, g_menuscreen_w * g_menuscreen_h * 2);
+ text_out16(2, 2, "%d,%d", g_layer_x, g_layer_y);
+ text_out16(2, 480 - 18, "%dx%d | d-pad: resize, R+d-pad: move", g_layer_w, g_layer_h);
menu_draw_end();
inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_R|PBTN_MOK|PBTN_MBACK, 40);
// ------------ 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)";
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),
" and the P.E.Op.S. team\n"
"ARM recompiler (C) 2009-2010 Ari64\n\n"
"integration, optimization and\n"
- " frontend (C) 2010 notaz\n";
+ " frontend (C) 2010-2011 notaz\n";
}
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;
me_update_msg("failed to open plugins");
return -1;
}
+ plugin_call_rearmed_cbs();
if (CheckCdrom() == -1) {
// Only check the CD if we are starting the console with a CD
break;
case MA_MAIN_RESET_GAME:
if (ready_to_go) {
+ ClosePlugins();
OpenPlugins();
SysReset();
if (CheckCdrom() != -1) {
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();
}
}
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);
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);
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);