+#include <string.h>
+
#include "emu.h"
+#include "menu_pico.h"
#include <version.h>
#include <revision.h>
#include <pico/pico.h>
#include <pico/patch.h>
+// rrrr rggg gggb bbbb
+static unsigned short fname2color(const char *fname)
+{
+ const char *ext = fname + strlen(fname) - 3;
+ static const char *rom_exts[] = { "zip", "bin", "smd", "gen", "iso", "cso", "cue" };
+ static const char *other_exts[] = { "gmv", "pat" };
+ int i;
+
+ if (ext < fname) ext = fname;
+ for (i = 0; i < array_size(rom_exts); i++)
+ if (strcasecmp(ext, rom_exts[i]) == 0) return 0xbdff; // FIXME: mk defines
+ for (i = 0; i < array_size(other_exts); i++)
+ if (strcasecmp(ext, other_exts[i]) == 0) return 0xaff5;
+ return 0xffff;
+}
+
+static const char *filter_exts[] = {
+ ".mp3", ".MP3", ".srm", ".brm", "s.gz", ".mds", "bcfg", ".txt", ".htm", "html",
+ ".jpg", ".gpe"
+};
+
#include "menu.c"
/* platform specific options and handlers */
#define menu_main_plat_draw NULL
#endif
+static void menu_enter(int is_rom_loaded)
+{
+ if (is_rom_loaded)
+ {
+ // darken the active framebuffer
+ menu_darken_bg(g_menubg_ptr, g_menubg_src_ptr, g_menuscreen_w * g_menuscreen_h, 1);
+ }
+ else
+ {
+ char buff[256];
+
+ // should really only happen once, on startup..
+ emu_make_path(buff, "skin/background.png", sizeof(buff));
+ if (readpng(g_menubg_ptr, buff, READPNG_BG, g_menuscreen_w, g_menuscreen_h) < 0)
+ memset(g_menubg_ptr, 0, g_menuscreen_w * g_menuscreen_h * 2);
+ }
+
+ plat_video_menu_enter(is_rom_loaded);
+}
+
static void draw_savestate_bg(int slot)
{
const char *fname;
for (;;)
{
draw_patchlist(menu_sel);
- inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_L|PBTN_R|PBTN_MOK|PBTN_MBACK, 33);
+ inp = in_menu_wait(PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT|PBTN_L|PBTN_R
+ |PBTN_MOK|PBTN_MBACK, NULL, 33);
if (inp & PBTN_UP ) { menu_sel--; if (menu_sel < 0) menu_sel = PicoPatchCount; }
if (inp & PBTN_DOWN) { menu_sel++; if (menu_sel > PicoPatchCount) menu_sel = 0; }
if (inp &(PBTN_LEFT|PBTN_L)) { menu_sel-=10; if (menu_sel < 0) menu_sel = 0; }
static int sel = 0;
me_enable(e_menu_keyconfig, MA_OPT_SAVECFG_GAME, rom_loaded);
- me_loop(e_menu_keyconfig, &sel, NULL);
+ me_loop(e_menu_keyconfig, &sel);
return 0;
}
static int menu_loop_cd_options(int id, int keys)
{
static int sel = 0;
- me_loop(e_menu_cd_options, &sel, NULL);
+ me_loop(e_menu_cd_options, &sel);
return 0;
}
static const char h_32x_enable[] = "Enable emulation of the 32X addon";
static const char h_pwm[] = "Disabling may improve performance, but break sound";
static const char h_sh2cycles[] = "Cycles/millisecond (similar to DOSBox)\n"
- "lower values speed up emulation but break games\n"
- "at least 11000 recommended for compatibility";
+ "lower values speed up emulation but break games\n"
+ "at least 11000 recommended for compatibility";
static menu_entry e_menu_32x_options[] =
{
static int sel = 0;
me_enable(e_menu_32x_options, MA_32XOPT_RENDERER, renderer_names32x[0] != NULL);
- me_loop(e_menu_32x_options, &sel, NULL);
+ me_loop(e_menu_32x_options, &sel);
return 0;
}
static int menu_loop_adv_options(int id, int keys)
{
static int sel = 0;
- me_loop(e_menu_adv_options, &sel, NULL);
+ me_loop(e_menu_adv_options, &sel);
return 0;
}
static int sel = 0;
me_enable(e_menu_gfx_options, MA_OPT_RENDERER, renderer_names[0] != NULL);
- me_loop(e_menu_gfx_options, &sel, NULL);
+ me_loop(e_menu_gfx_options, &sel);
return 0;
}
me_enable(e_menu_options, MA_OPT_SAVECFG_GAME, rom_loaded);
me_enable(e_menu_options, MA_OPT_LOADCFG, config_slot != config_slot_current);
- me_loop(e_menu_options, &sel, NULL);
+ me_loop(e_menu_options, &sel);
return 0;
}
while (1)
{
PDebugZ80Frame();
- if (in_menu_wait_any(0) & PBTN_MA3)
+ if (in_menu_wait_any(NULL, 0) & PBTN_MA3)
break;
pemu_sound_wait();
}
menu_draw_end();
inp = in_menu_wait(PBTN_MOK|PBTN_MBACK|PBTN_MA2|PBTN_MA3|PBTN_L|PBTN_R |
- PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT, 70);
+ PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT, NULL, 70);
if (inp & PBTN_MBACK) return;
if (inp & PBTN_L) { mode--; if (mode < 0) mode = 4; }
if (inp & PBTN_R) { mode++; if (mode > 4) mode = 0; }
PDebugCPUStep();
if (inp & PBTN_MA3) {
while (inp & PBTN_MA3)
- inp = in_menu_wait_any(-1);
+ inp = in_menu_wait_any(NULL, -1);
mplayer_loop();
}
if ((inp & (PBTN_MA2|PBTN_LEFT)) == (PBTN_MA2|PBTN_LEFT)) {
mkdir("dumps", 0777);
PDebugDumpMem();
- while (inp & PBTN_MA2) inp = in_menu_wait_any(-1);
+ while (inp & PBTN_MA2) inp = in_menu_wait_any(NULL, -1);
dumped = 1;
}
break;
PicoSkipFrame = 1;
PicoFrame();
PicoSkipFrame = 0;
- while (inp & PBTN_MOK) inp = in_menu_wait_any(-1);
+ while (inp & PBTN_MOK) inp = in_menu_wait_any(NULL, -1);
}
break;
case 3:
// ------------ main menu ------------
+static const char credits[] =
+ "PicoDrive v" VERSION " (c) notaz, 2006-2011\n\n\n"
+ "Credits:\n"
+ "fDave: Cyclone 68000 core,\n"
+ " base code of PicoDrive\n"
+ "Reesy & FluBBa: DrZ80 core\n"
+ "MAME devs: YM2612 and SN76496 cores\n"
+ "Inder, ketchupgun: graphics\n"
+#ifdef __GP2X__
+ "rlyeh and others: minimal SDK\n"
+ "Squidge: mmuhack\n"
+ "Dzz: ARM940 sample\n"
+#endif
+ "\n"
+ "special thanks (for docs, ideas):\n"
+ " Charles MacDonald, Haze,\n"
+ " Stephane Dallongeville,\n"
+ " Lordus, Exophase, Rokas,\n"
+ " Nemesis, Tasco Deluxe";
+
static char *romsel_run(void)
{
char *ret, *sel_name;
}
break;
case MA_MAIN_CREDITS:
- draw_menu_credits();
- in_menu_wait(PBTN_MOK|PBTN_MBACK, 70);
+ draw_menu_message(credits, NULL);
+ in_menu_wait(PBTN_MOK|PBTN_MBACK, NULL, 70);
break;
case MA_MAIN_EXIT:
engineState = PGS_Quit;
menu_enter(rom_loaded);
in_set_config_int(0, IN_CFG_BLOCKING, 1);
- me_loop(e_menu_main, &sel, menu_main_plat_draw);
+ me_loop_d(e_menu_main, &sel, NULL, menu_main_plat_draw);
if (rom_loaded) {
if (engineState == PGS_Menu)
engineState = PGS_Running;
/* wait until menu, ok, back is released */
- while (in_menu_wait_any(50) & (PBTN_MENU|PBTN_MOK|PBTN_MBACK))
+ while (in_menu_wait_any(NULL, 50) & (PBTN_MENU|PBTN_MOK|PBTN_MBACK))
;
}
menu_enter(rom_loaded);
in_set_config_int(0, IN_CFG_BLOCKING, 1);
- me_loop(e_menu_tray, &sel, NULL);
+ me_loop(e_menu_tray, &sel);
if (engineState != PGS_RestartRun) {
engineState = PGS_RestartRun;
ret = 0; /* no CD inserted */
}
- while (in_menu_wait_any(50) & (PBTN_MENU|PBTN_MOK|PBTN_MBACK));
+ while (in_menu_wait_any(NULL, 50) & (PBTN_MENU|PBTN_MOK|PBTN_MBACK));
in_set_config_int(0, IN_CFG_BLOCKING, 0);
return ret;