* This work is licensed under the terms of MAME license.
* See COPYING file in the top-level directory.
*/
+#include <stdio.h>
#include <string.h>
#include "emu.h"
#include <pico/pico.h>
#include <pico/patch.h>
+#ifdef PANDORA
+#define MENU_X2 1
+#else
+#define MENU_X2 0
+#endif
+
// FIXME
#define REVISION "0"
#include "../libpicofe/menu.c"
+static const char *men_dummy[] = { NULL };
+
/* platform specific options and handlers */
#if defined(__GP2X__)
#include "../gp2x/menu.c"
#define menu_main_plat_draw NULL
#endif
+static void make_bg(int no_scale)
+{
+ unsigned short *src = (void *)g_menubg_src_ptr;
+ int w = g_screen_width, h = g_screen_height;
+ short *dst;
+ int x, y;
+
+ if (!no_scale && g_menuscreen_w / w >= 2 && g_menuscreen_h / h >= 2)
+ {
+ unsigned int t, *d = g_menubg_ptr;
+ d += (g_menuscreen_h / 2 - h * 2 / 2)
+ * g_menuscreen_w / 2;
+ d += (g_menuscreen_w / 2 - w * 2 / 2) / 2;
+ for (y = 0; y < h; y++, src += w, d += g_menuscreen_w*2/2) {
+ for (x = 0; x < w; x++) {
+ t = src[x];
+ t = ((t & 0xf79e)>>1) - ((t & 0xc618)>>3);
+ t |= t << 16;
+ d[x] = d[x + g_menuscreen_w / 2] = t;
+ }
+ }
+ return;
+ }
+
+ if (w > g_menuscreen_w)
+ w = g_menuscreen_w;
+ if (h > g_menuscreen_h)
+ h = g_menuscreen_h;
+ dst = (short *)g_menubg_ptr +
+ (g_menuscreen_h / 2 - h / 2) * g_menuscreen_w +
+ (g_menuscreen_w / 2 - w / 2);
+
+ // darken the active framebuffer
+ for (; h > 0; dst += g_menuscreen_w, src += g_screen_width, h--)
+ menu_darken_bg(dst, src, w, 1);
+}
+
static void menu_enter(int is_rom_loaded)
{
if (is_rom_loaded)
{
- int w = g_screen_width, h = g_screen_height;
- short *src, *dst;
-
- if (w > g_menuscreen_w)
- w = g_menuscreen_w;
- if (h > g_menuscreen_h)
- h = g_menuscreen_h;
- src = (short *)g_menubg_src_ptr;
- dst = (short *)g_menubg_ptr +
- (g_menuscreen_h / 2 - h / 2) * g_menuscreen_w +
- (g_menuscreen_w / 2 - w / 2);
-
- // darken the active framebuffer
- for (; h > 0; dst += g_menuscreen_w, src += g_screen_width, h--)
- menu_darken_bg(dst, src, w, 1);
+ make_bg(0);
}
else
{
/* do a frame and fetch menu bg */
pemu_forced_frame(0, 0);
- menu_darken_bg(g_menubg_ptr, g_menubg_src_ptr, g_menuscreen_w * g_menuscreen_h, 1);
+ make_bg(0);
PicoTmpStateRestore(tmp_state);
}
{
static int sel = 0;
- me_enable(e_menu_keyconfig, MA_OPT_SAVECFG_GAME, rom_loaded);
+ me_enable(e_menu_keyconfig, MA_OPT_SAVECFG_GAME, PicoGameLoaded);
me_loop(e_menu_keyconfig, &sel);
return 0;
}
// ------------ gfx options menu ------------
-static const char *men_dummy[] = { NULL };
+static const char h_gamma[] = "Gamma/brightness adjustment (default 100)";
static menu_entry e_menu_gfx_options[] =
{
- mee_enum("Video output mode", MA_OPT_VOUT_MODE, plat_target.vout_method, men_dummy),
- mee_enum("Renderer", MA_OPT_RENDERER, currentConfig.renderer, renderer_names),
+ mee_enum ("Video output mode", MA_OPT_VOUT_MODE, plat_target.vout_method, men_dummy),
+ mee_enum ("Renderer", MA_OPT_RENDERER, currentConfig.renderer, renderer_names),
+ mee_enum ("Filter", MA_OPT3_FILTERING, currentConfig.filter, men_dummy),
+ mee_range_h("Gamma adjustment", MA_OPT3_GAMMA, currentConfig.gamma, 1, 200, h_gamma),
MENU_OPTIONS_GFX
mee_end,
};
i = me_id2offset(e_menu_options, MA_OPT_CPU_CLOCKS);
e_menu_options[i].enabled = e_menu_options[i].name[0] ? 1 : 0;
- me_enable(e_menu_options, MA_OPT_SAVECFG_GAME, rom_loaded);
+ me_enable(e_menu_options, MA_OPT_SAVECFG_GAME, PicoGameLoaded);
me_enable(e_menu_options, MA_OPT_LOADCFG, config_slot != config_slot_current);
me_loop(e_menu_options, &sel);
if (PicoDrawMask & PDRAW_32X_ON) memcpy(layer_str + 26, "32x", 4);
pemu_forced_frame(1, 0);
- memcpy(g_menuscreen_ptr, g_menubg_src_ptr, g_menuscreen_w * g_menuscreen_h * 2);
+ make_bg(1);
+
smalltext_out16(4, 1, "build: r" REVISION " "__DATE__ " " __TIME__ " " COMPILER, 0xffff);
smalltext_out16(4, g_menuscreen_h - me_sfont_h, layer_str, 0xffff);
}
case 1: draw_frame_debug();
break;
case 2: pemu_forced_frame(1, 0);
- menu_darken_bg(g_menuscreen_ptr, g_menubg_src_ptr, g_menuscreen_w * g_menuscreen_h, 0);
+ make_bg(1);
PDebugShowSpriteStats((unsigned short *)g_menuscreen_ptr + (g_menuscreen_h/2 - 240/2)*g_menuscreen_w +
g_menuscreen_w/2 - 320/2, g_menuscreen_w);
break;
switch (id)
{
case MA_MAIN_RESUME_GAME:
- if (rom_loaded)
+ if (PicoGameLoaded)
return 1;
break;
case MA_MAIN_SAVE_STATE:
- if (rom_loaded)
+ if (PicoGameLoaded)
return menu_loop_savestate(0);
break;
case MA_MAIN_LOAD_STATE:
- if (rom_loaded)
+ if (PicoGameLoaded)
return menu_loop_savestate(1);
break;
case MA_MAIN_RESET_GAME:
- if (rom_loaded) {
+ if (PicoGameLoaded) {
emu_reset_game();
return 1;
}
engineState = PGS_Quit;
return 1;
case MA_MAIN_PATCHES:
- if (rom_loaded && PicoPatches) {
+ if (PicoGameLoaded && PicoPatches) {
menu_loop_patches();
PicoPatchApply();
menu_update_msg("Patches applied");
{
static int sel = 0;
- me_enable(e_menu_main, MA_MAIN_RESUME_GAME, rom_loaded);
- me_enable(e_menu_main, MA_MAIN_SAVE_STATE, rom_loaded);
- me_enable(e_menu_main, MA_MAIN_LOAD_STATE, rom_loaded);
- me_enable(e_menu_main, MA_MAIN_RESET_GAME, rom_loaded);
+ me_enable(e_menu_main, MA_MAIN_RESUME_GAME, PicoGameLoaded);
+ me_enable(e_menu_main, MA_MAIN_SAVE_STATE, PicoGameLoaded);
+ me_enable(e_menu_main, MA_MAIN_LOAD_STATE, PicoGameLoaded);
+ me_enable(e_menu_main, MA_MAIN_RESET_GAME, PicoGameLoaded);
me_enable(e_menu_main, MA_MAIN_PATCHES, PicoPatches != NULL);
- menu_enter(rom_loaded);
+ menu_enter(PicoGameLoaded);
in_set_config_int(0, IN_CFG_BLOCKING, 1);
me_loop_d(e_menu_main, &sel, NULL, menu_main_plat_draw);
- if (rom_loaded) {
+ if (PicoGameLoaded) {
if (engineState == PGS_Menu)
engineState = PGS_Running;
/* wait until menu, ok, back is released */
{
int ret = 1, sel = 0;
- menu_enter(rom_loaded);
+ menu_enter(PicoGameLoaded);
in_set_config_int(0, IN_CFG_BLOCKING, 1);
me_loop(e_menu_tray, &sel);
e_menu_gfx_options[i].data = plat_target.vout_methods;
me_enable(e_menu_gfx_options, MA_OPT_VOUT_MODE,
plat_target.vout_methods != NULL);
+
+ i = me_id2offset(e_menu_gfx_options, MA_OPT3_FILTERING);
+ e_menu_gfx_options[i].data = plat_target.hwfilters;
+ me_enable(e_menu_gfx_options, MA_OPT3_FILTERING,
+ plat_target.hwfilters != NULL);
+
+ me_enable(e_menu_gfx_options, MA_OPT3_GAMMA,
+ plat_target.gamma_set != NULL);
}