+/*
+ * PicoDrive
+ * (C) notaz, 2010,2011
+ *
+ * This work is licensed under the terms of MAME license.
+ * See COPYING file in the top-level directory.
+ */
+#include <string.h>
+
#include "emu.h"
+#include "menu_pico.h"
+#include "input_pico.h"
#include <version.h>
-#include <revision.h>
#include <pico/pico.h>
#include <pico/patch.h>
+// FIXME
+#define REVISION "0"
+
+static const char *rom_exts[] = {
+ "zip", "bin", "smd", "gen",
+ "iso", "cso", "cue", NULL
+};
+
// 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++)
+ for (i = 0; rom_exts[i] != NULL; 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;
}
-#include "menu.c"
+#include "../libpicofe/menu.c"
/* platform specific options and handlers */
#if defined(__GP2X__)
if (len > g_menuscreen_w)
len = g_menuscreen_w;
- menu_draw_begin(0);
+ menu_draw_begin(0, 1);
dst = (unsigned short *)g_menuscreen_ptr + g_menuscreen_w * me_sfont_h * 2;
for (ln = me_sfont_h - 2; ln > 0; ln--, dst += g_menuscreen_w)
memset(dst, 0xff, len * 2);
int ln, len = percent * g_menuscreen_w / 100;
unsigned short *dst;
- menu_draw_begin(0);
+ menu_draw_begin(0, 1);
dst = (unsigned short *)g_menuscreen_ptr + g_menuscreen_w * me_sfont_h * 2;
memset(dst, 0xff, g_menuscreen_w * (me_sfont_h - 2) * 2);
/* fill all buffers, callbacks won't update in full */
for (i = 0; i < 3; i++) {
- menu_draw_begin(1);
+ menu_draw_begin(1, 1);
smalltext_out16(1, 1, "Loading", 0xffff);
smalltext_out16(1, me_sfont_h, p, 0xffff);
menu_draw_end();
PicoCartLoadProgressCB = NULL;
PicoCDLoadProgressCB = NULL;
- menu_draw_begin(0);
+ menu_draw_begin(0, 1);
smalltext_out16(1, (cdload_called ? 6 : 3) * me_sfont_h,
"Starting emulation...", 0xffff);
menu_draw_end();
max_cnt = g_menuscreen_h / me_sfont_h;
start = max_cnt / 2 - sel;
- menu_draw_begin(1);
+ menu_draw_begin(1, 0);
for (i = 0; i < PicoPatchCount; i++) {
pos = start + i;
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;
}
case MA_OPT_SAVECFG:
case MA_OPT_SAVECFG_GAME:
if (emu_write_config(id == MA_OPT_SAVECFG_GAME ? 1 : 0))
- me_update_msg("config saved");
+ menu_update_msg("config saved");
else
- me_update_msg("failed to write config");
+ menu_update_msg("failed to write config");
break;
case MA_OPT_LOADCFG:
ret = emu_read_config(rom_fname_loaded, 1);
if (!ret) ret = emu_read_config(NULL, 1);
- if (ret) me_update_msg("config loaded");
- else me_update_msg("failed to load config");
+ if (ret) menu_update_msg("config loaded");
+ else menu_update_msg("failed to load config");
break;
default:
return 0;
static int mh_restore_defaults(int id, int keys)
{
emu_set_defconfig();
- me_update_msg("defaults restored");
+ menu_update_msg("defaults restored");
return 1;
}
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();
}
while (1)
{
- menu_draw_begin(1);
+ menu_draw_begin(1, 0);
switch (mode)
{
case 0: tmp = PDebugMain();
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 char *romsel_run(void)
+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 const char *romsel_run(void)
{
- char *ret, *sel_name;
+ const char *ret;
+ char *sel_name;
sel_name = malloc(sizeof(rom_fname_loaded));
if (sel_name == NULL)
return NULL;
strcpy(sel_name, rom_fname_loaded);
- ret = menu_loop_romsel(sel_name, sizeof(rom_fname_loaded));
+ ret = menu_loop_romsel(sel_name, sizeof(rom_fname_loaded), rom_exts, NULL);
free(sel_name);
return ret;
}
static int main_menu_handler(int id, int keys)
{
- char *ret_name;
+ const char *ret_name;
switch (id)
{
}
break;
case MA_MAIN_CREDITS:
- draw_menu_message(, NULL);
- 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;
if (rom_loaded && PicoPatches) {
menu_loop_patches();
PicoPatchApply();
- me_update_msg("Patches applied");
+ menu_update_msg("Patches applied");
}
break;
default:
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))
;
}
static int mh_tray_load_cd(int id, int keys)
{
- char *ret_name;
+ const char *ret_name;
ret_name = romsel_run();
if (ret_name == NULL)
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;
}
-void me_update_msg(const char *msg)
+void menu_update_msg(const char *msg)
{
strncpy(menu_error_msg, msg, sizeof(menu_error_msg));
menu_error_msg[sizeof(menu_error_msg) - 1] = 0;
return me_list_i;
}
+void menu_init(void)
+{
+ menu_init_base();
+}