Index: apps/plugins/rockboy/menu.c =================================================================== --- apps/plugins/rockboy/menu.c (Revision 28551) +++ apps/plugins/rockboy/menu.c (Arbeitskopie) @@ -11,7 +11,7 @@ #include "rtc-gb.h" #include "pcm.h" -#define MAX_SLOTS 5 +#define SLOT_COUNT 50 #define DESC_SIZE 20 /* load/save state function declarations */ @@ -169,7 +169,7 @@ * * Returns true on success and false on failure. * - * @desc is a brief user-provided description (<20 bytes) of the state. + * @desc is a brief user-provided description of the state. * If no description is provided, set @desc to NULL. * */ @@ -215,35 +215,11 @@ return true; } -/* - * do_slot - load or save game data in the given slot - * - * Returns true on success and false on failure. - */ -static bool do_slot(int slot_id, bool is_load) { - char path_buf[256], desc_buf[DESC_SIZE]; - - /* build slot filename, clear desc buf */ - build_slot_path(path_buf, sizeof(path_buf), slot_id); - memset(desc_buf, 0, sizeof(desc_buf)); - - /* if we're saving to a slot, then get a brief description */ - if (!is_load) - { - if ( rb->kbd_input(desc_buf, sizeof(desc_buf)) < 0 ) - return false; - if ( !strlen(desc_buf) ) - strlcpy(desc_buf, "Untitled", sizeof(desc_buf)); - } - - /* load/save file */ - return do_file(path_buf, desc_buf, is_load); -} - /* * get information on the given slot */ -static void slot_info(char *info_buf, size_t info_bufsiz, int slot_id) { +static void slot_info(char *info_buf, size_t info_bufsiz, int slot_id, + bool number) { char buf[256]; int fd; @@ -259,18 +235,44 @@ buf[DESC_SIZE] = '\0'; strlcpy(info_buf, buf, info_bufsiz); } - else + else if(number) strlcpy(info_buf, "ERROR", info_bufsiz); close(fd); } - else + else if(number) { /* if we couldn't open the file, then the slot is empty */ strlcpy(info_buf, "", info_bufsiz); } } +/* + * do_slot - load or save game data in the given slot + * + * Returns true on success and false on failure. + */ +static bool do_slot(int slot_id, bool is_load) { + char path_buf[256], desc_buf[DESC_SIZE]; + + /* build slot filename, clear desc buf */ + build_slot_path(path_buf, sizeof(path_buf), slot_id); + memset(desc_buf, 0, sizeof(desc_buf)); + + /* if we're saving to a slot, then get a brief description */ + if (!is_load) + { + slot_info(desc_buf, DESC_SIZE, slot_id, false); + if ( rb->kbd_input(desc_buf, sizeof(desc_buf)) < 0 ) + return false; + if ( !strlen(desc_buf) ) + strlcpy(desc_buf, "Untitled", sizeof(desc_buf)); + } + + /* load/save file */ + return do_file(path_buf, desc_buf, is_load); +} + /* * slot_get_name */ @@ -299,17 +301,16 @@ */ static void do_slot_menu(bool is_load) { bool done=false; - char items[MAX_SLOTS][DESC_SIZE]; + char items[SLOT_COUNT][DESC_SIZE]; int result; int i; - int num_items = sizeof(items) / sizeof(*items); struct simplelist_info info; /* create menu items */ - for (i = 0; i < num_items; i++) - slot_info(items[i], sizeof(*items), i); + for (i = 0; i < SLOT_COUNT; i++) + slot_info(items[i], sizeof(*items), i, true); - rb->simplelist_info_init(&info, NULL, num_items, (void *)items); + rb->simplelist_info_init(&info, NULL, SLOT_COUNT, (void *)items); info.get_name = slot_get_name; info.action_callback = list_action_callback; @@ -319,7 +320,7 @@ break; result = info.selection; - if (result= 0 ) + if (result= 0 ) done = do_slot(result, is_load); else done = true; @@ -384,7 +385,7 @@ #endif MENUITEM_STRINGLIST(menu, "Options", NULL, - "Max Frameskip", "Sound", "Stats", "Set Keys (Buggy)", + "Max Frameskip", "Sound", "Volume", "Stats", "Set Keys (Buggy)", #ifdef HAVE_LCD_COLOR "Screen Size", "Screen Rotate", "Set Palette", #endif @@ -392,6 +393,9 @@ options.dirty=1; /* Assume that the settings have been changed */ + struct viewport *parentvp = NULL; + const struct settings_list* vol = rb->find_setting(&rb->global_settings->volume, NULL); + while(!done) { result = rb->do_menu(&menu, &selected, NULL, false); @@ -407,24 +411,27 @@ rb->set_option("Sound", &options.sound, INT, onoff, 2, NULL ); if(options.sound) sound_dirty(); break; - case 2: /* Stats */ + case 2: /* Volume */ + rb->option_screen((struct settings_list*)vol, parentvp, false, "Volume"); + break; + case 3: /* Stats */ rb->set_option("Stats", &options.showstats, INT, onoff, 2, NULL ); break; - case 3: /* Keys */ + case 4: /* Keys */ setupkeys(); break; #ifdef HAVE_LCD_COLOR - case 4: /* Screen Size */ + case 5: /* Screen Size */ rb->set_option("Screen Size", &options.scaling, INT, scaling, sizeof(scaling)/sizeof(*scaling), NULL ); setvidmode(); break; - case 5: /* Screen rotate */ + case 6: /* Screen rotate */ rb->set_option("Screen Rotate", &options.rotate, INT, rotate, sizeof(rotate)/sizeof(*rotate), NULL ); setvidmode(); break; - case 6: /* Palette */ + case 7: /* Palette */ rb->set_option("Set Palette", &options.pal, INT, palette, 17, NULL ); set_pal(); break; Index: apps/plugins/rockboy/sys_rockbox.c =================================================================== --- apps/plugins/rockboy/sys_rockbox.c (Revision 28551) +++ apps/plugins/rockboy/sys_rockbox.c (Arbeitskopie) @@ -236,7 +236,7 @@ scanline-=16; else if (fb.mode==2) scanline-=8; - scanline_remapped = scanline / 16; + scanline_remapped = (scanline / 16 + 7) % 8; frameb = rb->lcd_framebuffer + scanline_remapped * LCD_WIDTH; while (cnt < 160) { balance += LCD_WIDTH; Index: apps/plugins/rockboy/rockboy.c =================================================================== --- apps/plugins/rockboy/rockboy.c (Revision 28551) +++ apps/plugins/rockboy/rockboy.c (Arbeitskopie) @@ -25,6 +25,7 @@ #include "emu.h" #include "hw.h" #include "pcm.h" +#include "lib/helper.h" int shut,cleanshut; char *errormsg; @@ -81,208 +82,208 @@ #endif #if CONFIG_KEYPAD == IRIVER_H100_PAD - options.UP=BUTTON_UP; - options.DOWN=BUTTON_DOWN; + options.UP= BUTTON_UP; + options.DOWN= BUTTON_DOWN; - options.A=BUTTON_ON; - options.B=BUTTON_OFF; - options.START=BUTTON_REC; - options.SELECT=BUTTON_SELECT; - options.MENU=BUTTON_MODE; + options.A= BUTTON_ON; + options.B= BUTTON_OFF; + options.START= BUTTON_REC; + options.SELECT= BUTTON_SELECT; + options.MENU= BUTTON_MODE; #elif CONFIG_KEYPAD == IRIVER_H300_PAD - options.UP=BUTTON_UP; - options.DOWN=BUTTON_DOWN; + options.UP= BUTTON_UP; + options.DOWN= BUTTON_DOWN; - options.A=BUTTON_REC; - options.B=BUTTON_MODE; - options.START=BUTTON_ON; - options.SELECT=BUTTON_SELECT; - options.MENU=BUTTON_OFF; + options.A= BUTTON_REC; + options.B= BUTTON_MODE; + options.START= BUTTON_ON; + options.SELECT= BUTTON_SELECT; + options.MENU= BUTTON_OFF; #elif CONFIG_KEYPAD == RECORDER_PAD - options.UP=BUTTON_UP; - options.DOWN=BUTTON_DOWN; + options.UP= BUTTON_UP; + options.DOWN= BUTTON_DOWN; - options.A=BUTTON_F1; - options.B=BUTTON_F2; - options.START=BUTTON_F3; - options.SELECT=BUTTON_PLAY; - options.MENU=BUTTON_OFF; + options.A= BUTTON_F1; + options.B= BUTTON_F2; + options.START= BUTTON_F3; + options.SELECT= BUTTON_PLAY; + options.MENU= BUTTON_OFF; #elif CONFIG_KEYPAD == IPOD_4G_PAD - options.UP=BUTTON_MENU; - options.DOWN=BUTTON_PLAY; + options.UP= BUTTON_MENU; + options.DOWN= BUTTON_PLAY; - options.A=BUTTON_NONE; - options.B=BUTTON_NONE; - options.START=BUTTON_SELECT; - options.SELECT=BUTTON_NONE; - options.MENU=(BUTTON_SELECT | BUTTON_REPEAT); + options.A= BUTTON_NONE; + options.B= BUTTON_NONE; + options.START= BUTTON_SELECT; + options.SELECT= BUTTON_NONE; + options.MENU= (BUTTON_SELECT | BUTTON_REPEAT); #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD - options.UP=BUTTON_UP; - options.DOWN=BUTTON_DOWN; + options.UP= BUTTON_UP; + options.DOWN= BUTTON_DOWN; - options.A=BUTTON_PLAY; - options.B=BUTTON_EQ; - options.START=BUTTON_MODE; - options.SELECT=(BUTTON_SELECT | BUTTON_REL); - options.MENU=(BUTTON_SELECT | BUTTON_REPEAT); + options.A= BUTTON_PLAY; + options.B= BUTTON_EQ; + options.START= BUTTON_MODE; + options.SELECT= (BUTTON_SELECT | BUTTON_REL); + options.MENU= (BUTTON_SELECT | BUTTON_REPEAT); #elif CONFIG_KEYPAD == GIGABEAT_PAD - options.UP=BUTTON_UP; - options.DOWN=BUTTON_DOWN; + options.UP= BUTTON_UP; + options.DOWN= BUTTON_DOWN; - options.A=BUTTON_VOL_UP; - options.B=BUTTON_VOL_DOWN; - options.START=BUTTON_A; - options.SELECT=BUTTON_SELECT; - options.MENU=BUTTON_MENU; + options.A= BUTTON_VOL_UP; + options.B= BUTTON_VOL_DOWN; + options.START= BUTTON_A; + options.SELECT= BUTTON_SELECT; + options.MENU= BUTTON_MENU; #elif CONFIG_KEYPAD == SANSA_E200_PAD - options.UP=BUTTON_UP; - options.DOWN=BUTTON_DOWN; + options.UP= BUTTON_UP; + options.DOWN= BUTTON_DOWN; - options.A=BUTTON_SELECT; - options.B=BUTTON_REC; - options.START=BUTTON_SCROLL_BACK; - options.SELECT=BUTTON_SCROLL_FWD; - options.MENU=BUTTON_POWER; + options.A= BUTTON_SELECT; + options.B= BUTTON_REC; + options.START= BUTTON_SCROLL_BACK; + options.SELECT= BUTTON_SCROLL_FWD; + options.MENU= BUTTON_POWER; #elif CONFIG_KEYPAD == SANSA_FUZE_PAD - options.UP=BUTTON_UP; - options.DOWN=BUTTON_DOWN; + options.UP= BUTTON_UP; + options.DOWN= BUTTON_DOWN; - options.A=BUTTON_SELECT; - options.B=BUTTON_HOME; - options.START=BUTTON_SCROLL_BACK; - options.SELECT=BUTTON_SCROLL_FWD; - options.MENU=BUTTON_POWER; + options.A= BUTTON_SELECT; + options.B= BUTTON_HOME; + options.START= BUTTON_SCROLL_BACK; + options.SELECT= BUTTON_SCROLL_FWD; + options.MENU= BUTTON_POWER; #elif CONFIG_KEYPAD == SANSA_C200_PAD - options.UP=BUTTON_UP; - options.DOWN=BUTTON_DOWN; + options.UP= BUTTON_UP; + options.DOWN= BUTTON_DOWN; - options.A=BUTTON_SELECT; - options.B=BUTTON_REC; - options.START=BUTTON_VOL_DOWN; - options.SELECT=BUTTON_VOL_UP; - options.MENU=BUTTON_POWER; + options.A= BUTTON_SELECT; + options.B= BUTTON_REC; + options.START= BUTTON_VOL_DOWN; + options.SELECT= BUTTON_VOL_UP; + options.MENU= BUTTON_POWER; #elif CONFIG_KEYPAD == SANSA_CLIP_PAD - options.UP=BUTTON_UP; - options.DOWN=BUTTON_DOWN; + options.UP= BUTTON_UP; + options.DOWN= BUTTON_DOWN; - options.A=BUTTON_SELECT; - options.B=BUTTON_HOME; - options.START=BUTTON_VOL_DOWN; - options.SELECT=BUTTON_VOL_UP; - options.MENU=BUTTON_POWER; + options.A= BUTTON_SELECT; + options.B= BUTTON_HOME; + options.START= BUTTON_VOL_DOWN; + options.SELECT= BUTTON_VOL_UP; + options.MENU= BUTTON_POWER; #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD - options.UP=BUTTON_UP; - options.DOWN=BUTTON_DOWN; + options.UP= BUTTON_UP; + options.DOWN= BUTTON_DOWN; - options.A=BUTTON_PLAY; - options.B=BUTTON_REC; - options.START=BUTTON_SELECT; - options.SELECT=BUTTON_NONE; - options.MENU=BUTTON_POWER; + options.A= BUTTON_PLAY; + options.B= BUTTON_REC; + options.START= BUTTON_SELECT; + options.SELECT= BUTTON_NONE; + options.MENU= BUTTON_POWER; #elif CONFIG_KEYPAD == IRIVER_H10_PAD - options.UP=BUTTON_SCROLL_UP; - options.DOWN=BUTTON_SCROLL_DOWN; + options.UP= BUTTON_SCROLL_UP; + options.DOWN= BUTTON_SCROLL_DOWN; - options.A=BUTTON_PLAY; - options.B=BUTTON_FF; - options.START=BUTTON_REW; - options.SELECT=BUTTON_NONE; - options.MENU=BUTTON_POWER; + options.A= BUTTON_PLAY; + options.B= BUTTON_FF; + options.START= BUTTON_REW; + options.SELECT= BUTTON_NONE; + options.MENU= BUTTON_POWER; #elif CONFIG_KEYPAD == MROBE500_PAD - options.MENU=BUTTON_POWER; + options.MENU= BUTTON_POWER; #elif CONFIG_KEYPAD == COWON_D2_PAD - options.A=BUTTON_PLUS; - options.B=BUTTON_MINUS; - options.MENU=BUTTON_MENU; + options.A= BUTTON_PLUS; + options.B= BUTTON_MINUS; + options.MENU= BUTTON_MENU; #elif CONFIG_KEYPAD == GIGABEAT_S_PAD - options.UP=BUTTON_UP; - options.DOWN=BUTTON_DOWN; + options.UP= BUTTON_UP; + options.DOWN= BUTTON_DOWN; - options.A=BUTTON_VOL_UP; - options.B=BUTTON_VOL_DOWN; - options.START=BUTTON_PLAY; - options.SELECT=BUTTON_SELECT; - options.MENU=BUTTON_MENU; + options.A= BUTTON_VOL_UP; + options.B= BUTTON_VOL_DOWN; + options.START= BUTTON_PLAY; + options.SELECT= BUTTON_SELECT; + options.MENU= BUTTON_MENU; #elif CONFIG_KEYPAD == CREATIVEZVM_PAD - options.UP=BUTTON_UP; - options.DOWN=BUTTON_DOWN; + options.UP= BUTTON_UP; + options.DOWN= BUTTON_DOWN; - options.A=BUTTON_CUSTOM; - options.B=BUTTON_PLAY; - options.START=BUTTON_BACK; - options.SELECT=BUTTON_SELECT; - options.MENU=BUTTON_MENU; + options.A= BUTTON_CUSTOM; + options.B= BUTTON_PLAY; + options.START= BUTTON_BACK; + options.SELECT= BUTTON_SELECT; + options.MENU= BUTTON_MENU; #elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD - options.UP=BUTTON_UP; - options.DOWN=BUTTON_DOWN; + options.UP= BUTTON_UP; + options.DOWN= BUTTON_DOWN; - options.A=BUTTON_VOL_UP; - options.B=BUTTON_VOL_DOWN; - options.START=BUTTON_VIEW; - options.SELECT=BUTTON_SELECT; - options.MENU=BUTTON_MENU; + options.A= BUTTON_VOL_UP; + options.B= BUTTON_VOL_DOWN; + options.START= BUTTON_VIEW; + options.SELECT= BUTTON_SELECT; + options.MENU= BUTTON_MENU; #elif CONFIG_KEYPAD == PHILIPS_HDD6330_PAD - options.UP=BUTTON_UP; - options.DOWN=BUTTON_DOWN; - options.A=BUTTON_VOL_UP; - options.B=BUTTON_VOL_DOWN; - options.START=BUTTON_NEXT; - options.SELECT=BUTTON_PLAY; - options.MENU=BUTTON_MENU; + options.UP= BUTTON_UP; + options.DOWN= BUTTON_DOWN; + options.A= BUTTON_VOL_UP; + options.B= BUTTON_VOL_DOWN; + options.START= BUTTON_NEXT; + options.SELECT= BUTTON_PLAY; + options.MENU= BUTTON_MENU; #elif CONFIG_KEYPAD == PHILIPS_SA9200_PAD - options.UP=BUTTON_UP; - options.DOWN=BUTTON_DOWN; + options.UP= BUTTON_UP; + options.DOWN= BUTTON_DOWN; - options.A=BUTTON_VOL_UP; - options.B=BUTTON_VOL_DOWN; - options.START=BUTTON_RIGHT; - options.SELECT=BUTTON_LEFT; - options.MENU=BUTTON_MENU; + options.A= BUTTON_VOL_UP; + options.B= BUTTON_VOL_DOWN; + options.START= BUTTON_RIGHT; + options.SELECT= BUTTON_LEFT; + options.MENU= BUTTON_MENU; #elif CONFIG_KEYPAD == ONDAVX747_PAD - options.A=BUTTON_VOL_UP; - options.B=BUTTON_VOL_DOWN; - options.MENU=BUTTON_MENU; + options.A= BUTTON_VOL_UP; + options.B= BUTTON_VOL_DOWN; + options.MENU= BUTTON_MENU; #elif CONFIG_KEYPAD == ONDAVX777_PAD - options.MENU=BUTTON_POWER; + options.MENU= BUTTON_POWER; #elif CONFIG_KEYPAD == IRIVER_H10_PAD - options.UP=BUTTON_UP; - options.DOWN=BUTTON_DOWN; + options.UP= BUTTON_UP; + options.DOWN= BUTTON_DOWN; - options.A=BUTTON_PLAY; - options.B=BUTTON_FFWD; - options.START=BUTTON_REW; - options.SELECT=BUTTON_RIGHT; - options.MENU=BUTTON_LEFT; + options.A= BUTTON_PLAY; + options.B= BUTTON_FFWD; + options.START= BUTTON_REW; + options.SELECT= BUTTON_RIGHT; + options.MENU= BUTTON_LEFT; #elif CONFIG_KEYPAD == SAMSUNG_YH_PAD - options.UP=BUTTON_UP; - options.DOWN=BUTTON_DOWN; + options.UP= BUTTON_UP; + options.DOWN= BUTTON_DOWN; - options.A=BUTTON_PLAY; - options.B=BUTTON_REW; - options.START=BUTTON_REC; - options.SELECT=BUTTON_FFWD; - options.MENU=BUTTON_NONE; + options.A= BUTTON_PLAY; + options.B= BUTTON_REW; + options.START= BUTTON_REC; + options.SELECT= BUTTON_FFWD; + options.MENU= BUTTON_NONE; #elif CONFIG_KEYPAD == PBELL_VIBE500_PAD options.UP= BUTTON_OK; @@ -301,17 +302,17 @@ #endif #ifdef HAVE_TOUCHSCREEN - options.UP=BUTTON_TOPMIDDLE; - options.DOWN=BUTTON_BOTTOMMIDDLE; - options.START=BUTTON_TOPRIGHT; - options.SELECT=BUTTON_CENTER; + options.UP= BUTTON_TOPMIDDLE; + options.DOWN= BUTTON_BOTTOMMIDDLE; + options.START= BUTTON_TOPRIGHT; + options.SELECT= BUTTON_CENTER; #if CONFIG_KEYPAD == MROBE500_PAD - options.A=BUTTON_BOTTOMLEFT; - options.B=BUTTON_BOTTOMRIGHT; + options.A= BUTTON_BOTTOMLEFT; + options.B= BUTTON_BOTTOMRIGHT; #elif CONFIG_KEYPAD != COWON_D2_PAD - options.A=BUTTON_BOTTOMLEFT; - options.B=BUTTON_BOTTOMRIGHT; - options.MENU=BUTTON_TOPLEFT; + options.A= BUTTON_BOTTOMLEFT; + options.B= BUTTON_BOTTOMRIGHT; + options.MENU= BUTTON_TOPLEFT; #endif #endif @@ -364,6 +365,7 @@ static int gnuboy_main(const char *rom) { + backlight_force_on(); rb->lcd_puts(0,0,"Init video"); vid_init(); rb->lcd_puts(0,1,"Init sound");