+ { NULL, MB_NONE, MA_OPT_RENDERER, NULL, 0, 0, 0, 1, 1 },\r
+ { NULL, MB_RANGE, MA_OPT_SCALING, ¤tConfig.scaling, 0, 0, 3, 1, 1 },\r
+ { "Accurate sprites", MB_ONOFF, MA_OPT_ACC_SPRITES, &PicoOpt, 0x080, 0, 0, 0, 1 },\r
+ { "Show FPS", MB_ONOFF, MA_OPT_SHOW_FPS, ¤tConfig.EmuOpt, 0x002, 0, 0, 1, 1 },\r
+ { NULL, MB_RANGE, MA_OPT_FRAMESKIP, ¤tConfig.Frameskip, 0, -1, 16, 1, 1 },\r
+ { "Enable sound", MB_ONOFF, MA_OPT_ENABLE_SOUND, ¤tConfig.EmuOpt, 0x004, 0, 0, 1, 1 },\r
+ { NULL, MB_NONE, MA_OPT_SOUND_QUALITY, NULL, 0, 0, 0, 1, 1 },\r
+ { "Use ARM940 core for sound", MB_ONOFF, MA_OPT_ARM940_SOUND, &PicoOpt, 0x200, 0, 0, 1, 1 },\r
+ { "6 button pad", MB_ONOFF, MA_OPT_6BUTTON_PAD, &PicoOpt, 0x020, 0, 0, 1, 1 },\r
+ { NULL, MB_NONE, MA_OPT_REGION, NULL, 0, 0, 0, 1, 1 },\r
+ { "Use SRAM/BRAM savestates", MB_ONOFF, MA_OPT_SRAM_STATES, ¤tConfig.EmuOpt, 0x001, 0, 0, 1, 1 },\r
+ { NULL, MB_NONE, MA_OPT_CONFIRM_STATES,NULL, 0, 0, 0, 1, 1 },\r
+ { "Save slot", MB_RANGE, MA_OPT_SAVE_SLOT, &state_slot, 0, 0, 9, 1, 1 },\r
+ { NULL, MB_NONE, MA_OPT_CPU_CLOCKS, NULL, 0, 0, 0, 1, 1 },\r
+ { "[Sega/Mega CD options]", MB_NONE, MA_OPT_SCD_OPTS, NULL, 0, 0, 0, 1, 0 },\r
+ { "[advanced options]", MB_NONE, MA_OPT_ADV_OPTS, NULL, 0, 0, 0, 1, 0 },\r
+ { NULL, MB_NONE, MA_OPT_SAVECFG, NULL, 0, 0, 0, 1, 0 },\r
+ { "Save cfg for current game only",MB_NONE,MA_OPT_SAVECFG_GAME,NULL, 0, 0, 0, 1, 0 },\r
+ { NULL, MB_NONE, MA_OPT_LOADCFG, NULL, 0, 0, 0, 1, 0 },\r
+};\r
+\r
+#define OPT_ENTRY_COUNT (sizeof(opt_entries) / sizeof(opt_entries[0]))\r
+const int opt_entry_count = OPT_ENTRY_COUNT;\r
+\r
+\r
+static void menu_opt_cust_draw(const menu_entry *entry, int x, int y, void *param)\r
+{\r
+ char *str, str24[24];\r
+\r
+ switch (entry->id)\r
+ {\r
+ case MA_OPT_RENDERER:\r
+ if (PicoOpt & POPT_ALT_RENDERER)\r
+ str = " 8bit fast";\r
+ else if (currentConfig.EmuOpt&0x80)\r
+ str = "16bit accurate";\r
+ else\r
+ str = " 8bit accurate";\r
+ text_out16(x, y, "Renderer: %s", str);\r
+ break;\r
+ case MA_OPT_SCALING:\r
+ switch (currentConfig.scaling) {\r
+ default: str = " OFF"; break;\r
+ case 1: str = "hw horizontal"; break;\r
+ case 2: str = "hw horiz. + vert."; break;\r
+ case 3: str = "sw horizontal"; break;\r
+ }\r
+ text_out16(x, y, "Scaling: %s", str);\r
+ break;\r
+ case MA_OPT_FRAMESKIP:\r
+ if (currentConfig.Frameskip < 0)\r
+ strcpy(str24, "Auto");\r
+ else sprintf(str24, "%i", currentConfig.Frameskip);\r
+ text_out16(x, y, "Frameskip %s", str24);\r
+ break;\r
+ case MA_OPT_SOUND_QUALITY:\r
+ str = (PicoOpt & POPT_EN_STEREO) ? "stereo" : "mono";\r
+ text_out16(x, y, "Sound Quality: %5iHz %s", PsndRate, str);\r
+ break;\r
+ case MA_OPT_REGION:\r
+ text_out16(x, y, "Region: %s", me_region_name(PicoRegionOverride, PicoAutoRgnOrder));\r
+ break;\r
+ case MA_OPT_CONFIRM_STATES:\r
+ switch ((currentConfig.EmuOpt >> 9) & 5) {\r
+ default: str = "OFF"; break;\r
+ case 1: str = "writes"; break;\r
+ case 4: str = "loads"; break;\r
+ case 5: str = "both"; break;\r
+ }\r
+ text_out16(x, y, "Confirm savestate %s", str);\r
+ break;\r
+ case MA_OPT_CPU_CLOCKS:\r
+ text_out16(x, y, "GP2X CPU clocks %iMhz", currentConfig.CPUclock);\r
+ break;\r
+ case MA_OPT_SAVECFG:\r
+ str24[0] = 0;\r
+ if (config_slot != 0) sprintf(str24, " (profile: %i)", config_slot);\r
+ text_out16(x, y, "Save cfg as default%s", str24);\r
+ break;\r
+ case MA_OPT_LOADCFG:\r
+ text_out16(x, y, "Load cfg from profile %i", config_slot);\r
+ break;\r
+ default:\r
+ printf("%s: unimplemented (%i)\n", __FUNCTION__, entry->id);\r
+ break;\r