X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=frontend%2Fmenu.c;h=ec3c5a221fb5941f467b4d158d15e24ddca2bcd2;hp=301a10de48935d65f476266fed59e240c0b12f31;hb=dde7da71ec95f2d83a9427bd381448438aa9201c;hpb=4df9f5f8e575c499371f28e86eff265e8dd96291 diff --git a/frontend/menu.c b/frontend/menu.c index 301a10de..ec3c5a22 100644 --- a/frontend/menu.c +++ b/frontend/menu.c @@ -24,9 +24,10 @@ #include "plugin_lib.h" #include "plat.h" #include "pcnt.h" -#include "common/plat.h" -#include "common/input.h" -#include "linux/in_evdev.h" +#include "libpicofe/plat.h" +#include "libpicofe/input.h" +#include "libpicofe/linux/in_evdev.h" +#include "libpicofe/plat.h" #include "../libpcsxcore/misc.h" #include "../libpcsxcore/cdrom.h" #include "../libpcsxcore/cdriso.h" @@ -72,30 +73,24 @@ typedef enum MA_OPT_SAVECFG_GAME, MA_OPT_CPU_CLOCKS, MA_OPT_DISP_OPTS, - MA_OPT_SCALER, + MA_OPT_VARSCALER, + MA_OPT_VARSCALER_C, MA_OPT_SCALER2, - MA_OPT_FILTERING, - MA_OPT_SCALER_C, + MA_OPT_HWFILTER, + MA_OPT_SWFILTER, + MA_OPT_GAMMA, } menu_id; -enum { - SCALE_1_1, - SCALE_4_3, - SCALE_4_3v2, - SCALE_FULLSCREEN, - SCALE_CUSTOM, -}; - -static int last_psx_w, last_psx_h, last_psx_bpp; -static int scaling, cpu_clock, cpu_clock_st, volume_boost, frameskip; +static int last_vout_w, last_vout_h, last_vout_bpp; +static int cpu_clock, cpu_clock_st, volume_boost, frameskip; static char rom_fname_reload[MAXPATHLEN]; static char last_selected_fname[MAXPATHLEN]; -static int warned_about_bios, region, in_type_sel1, in_type_sel2; +static int config_save_counter, region, in_type_sel1, in_type_sel2; static int psx_clock; static int memcard1_sel, memcard2_sel; -int g_opts; +int g_opts, g_scaler, g_gamma = 100; int soft_scaling, analog_deadzone; // for Caanoo -int filter; +int filter, soft_filter; #ifdef __ARM_ARCH_7A__ #define DEFAULT_PSX_CLOCK 57 @@ -117,6 +112,16 @@ static const char *spu_plugins[16]; static const char *memcards[32]; static int bios_sel, gpu_plugsel, spu_plugsel; +#ifndef UI_FEATURES_H +#define MENU_BIOS_PATH "bios/" +#define MENU_SHOW_VARSCALER 0 +#define MENU_SHOW_SCALER2 0 +#define MENU_SHOW_NUBS_BTNS 0 +#define MENU_SHOW_VIBRATION 0 +#define MENU_SHOW_DEADZONE 0 +#define MENU_SHOW_MINIMIZE 0 +#define MENU_SHOW_VOLUME 0 +#endif static int min(int x, int y) { return x < y ? x : y; } static int max(int x, int y) { return x > y ? x : y; } @@ -216,11 +221,12 @@ static void menu_set_defconfig(void) emu_set_default_config(); g_opts = 0; - scaling = SCALE_4_3; + g_scaler = SCALE_4_3; volume_boost = 0; frameskip = 0; analog_deadzone = 50; soft_scaling = 1; + soft_filter = 0; psx_clock = DEFAULT_PSX_CLOCK; region = 0; @@ -242,6 +248,9 @@ static void menu_set_defconfig(void) #define CE_INTVAL(val) \ { #val, sizeof(val), &val } +#define CE_INTVAL_N(name, val) \ + { name, sizeof(val), &val } + #define CE_INTVAL_P(val) \ { #val, sizeof(pl_rearmed_cbs.val), &pl_rearmed_cbs.val } @@ -261,7 +270,7 @@ static const struct { void *val; } config_data[] = { CE_CONFIG_STR(Bios), - CE_CONFIG_STR_V(Gpu, 2), + CE_CONFIG_STR_V(Gpu, 3), CE_CONFIG_STR(Spu), // CE_CONFIG_STR(Cdr), CE_CONFIG_VAL(Xa), @@ -276,18 +285,21 @@ static const struct { CE_CONFIG_VAL(Cpu), CE_CONFIG_VAL(CdrReschedule), CE_INTVAL(region), - CE_INTVAL_V(scaling, 2), + CE_INTVAL_V(g_scaler, 2), CE_INTVAL(g_layer_x), CE_INTVAL(g_layer_y), CE_INTVAL(g_layer_w), CE_INTVAL(g_layer_h), CE_INTVAL(filter), + CE_INTVAL(soft_filter), CE_INTVAL(state_slot), CE_INTVAL(cpu_clock), CE_INTVAL(g_opts), CE_INTVAL(in_type_sel1), CE_INTVAL(in_type_sel2), CE_INTVAL(analog_deadzone), + CE_INTVAL_N("adev0_is_nublike", in_adev_is_nublike[0]), + CE_INTVAL_N("adev1_is_nublike", in_adev_is_nublike[1]), CE_INTVAL_V(frameskip, 3), CE_INTVAL_P(gpu_peops.iUseDither), CE_INTVAL_P(gpu_peops.dwActFixes), @@ -296,6 +308,8 @@ static const struct { CE_INTVAL_P(gpu_unai.no_light), CE_INTVAL_P(gpu_unai.no_blend), CE_INTVAL_P(gpu_neon.allow_interlace), + CE_INTVAL_P(gpu_neon.enhancement_enable), + CE_INTVAL_P(gpu_neon.enhancement_no_main), CE_INTVAL_P(gpu_peopsgl.bDrawDither), CE_INTVAL_P(gpu_peopsgl.iFilterType), CE_INTVAL_P(gpu_peopsgl.iFrameTexType), @@ -309,7 +323,7 @@ static const struct { CE_INTVAL_V(iUseReverb, 3), CE_INTVAL_V(iXAPitch, 3), CE_INTVAL_V(iUseInterpolation, 3), - CE_INTVAL(warned_about_bios), + CE_INTVAL(config_save_counter), CE_INTVAL(in_evdev_allow_abs_only), CE_INTVAL(volume_boost), CE_INTVAL(psx_clock), @@ -340,6 +354,7 @@ static void make_cfg_fname(char *buf, size_t size, int is_game) } static void keys_write_all(FILE *f); +static char *mystrip(char *str); static int menu_write_config(int is_game) { @@ -347,6 +362,8 @@ static int menu_write_config(int is_game) FILE *f; int i; + config_save_counter++; + make_cfg_fname(cfgfile, sizeof(cfgfile), is_game); f = fopen(cfgfile, "w"); if (f == NULL) { @@ -371,7 +388,7 @@ static int menu_write_config(int is_game) break; default: printf("menu_write_config: unhandled len %d for %s\n", - config_data[i].len, config_data[i].name); + (int)config_data[i].len, config_data[i].name); break; } } @@ -386,14 +403,18 @@ static int menu_do_last_cd_img(int is_get) { char path[256]; FILE *f; + int ret; snprintf(path, sizeof(path), "." PCSX_DOT_DIR "lastcdimg.txt"); f = fopen(path, is_get ? "r" : "w"); if (f == NULL) return -1; - if (is_get) - fscanf(f, "%255s", last_selected_fname); + if (is_get) { + ret = fread(last_selected_fname, 1, sizeof(last_selected_fname) - 1, f); + last_selected_fname[ret] = 0; + mystrip(last_selected_fname); + } else fprintf(f, "%s\n", last_selected_fname); fclose(f); @@ -482,7 +503,7 @@ static int menu_load_config(int is_game) break; default: printf("menu_load_config: unhandled len %d for %s\n", - config_data[i].len, config_data[i].name); + (int)config_data[i].len, config_data[i].name); break; } } @@ -505,10 +526,6 @@ fail: menu_sync_config(); - // caanoo old config compat hack - if (strcmp(Config.Gpu, "gpuPCSX4ALL.so") == 0) - strcpy(Config.Gpu, "gpu_unai.so"); - // sync plugins for (i = bios_sel = 0; bioses[i] != NULL; i++) if (strcmp(Config.Bios, bioses[i]) == 0) @@ -559,9 +576,7 @@ static const char *filter_exts[] = { #define MENU_X2 0 #endif -#define menu_init menu_init_common -#include "common/menu.c" -#undef menu_init +#include "libpicofe/menu.c" // a bit of black magic here static void draw_savestate_bg(int slot) @@ -668,15 +683,20 @@ me_bind_action emuctrl_actions[] = { "Next Save Slot ", 1 << SACTION_NEXT_SSLOT }, { "Toggle Frameskip ", 1 << SACTION_TOGGLE_FSKIP }, { "Take Screenshot ", 1 << SACTION_SCREENSHOT }, - { "Enter Menu ", 1 << SACTION_ENTER_MENU }, -#ifdef __ARM_ARCH_7A__ /* XXX */ + { "Show/Hide FPS ", 1 << SACTION_TOGGLE_FPS }, +#ifdef __ARM_ARCH_7A__ + { "Switch Renderer ", 1 << SACTION_SWITCH_DISPMODE }, +#endif + { "Fast Forward ", 1 << SACTION_FAST_FORWARD }, +#if MENU_SHOW_MINIMIZE { "Minimize ", 1 << SACTION_MINIMIZE }, #endif + { "Enter Menu ", 1 << SACTION_ENTER_MENU }, { "Gun Trigger ", 1 << SACTION_GUN_TRIGGER }, { "Gun A button ", 1 << SACTION_GUN_A }, { "Gun B button ", 1 << SACTION_GUN_B }, { "Gun Offscreen Trigger", 1 << SACTION_GUN_TRIGGER2 }, -#ifndef __ARM_ARCH_7A__ /* XXX */ +#if MENU_SHOW_VOLUME { "Volume Up ", 1 << SACTION_VOLUME_UP }, { "Volume Down ", 1 << SACTION_VOLUME_DOWN }, #endif @@ -694,7 +714,7 @@ static char *mystrip(char *str) len = strlen(str); for (i = len - 1; i >= 0; i--) - if (str[i] != ' ') break; + if (str[i] != ' ' && str[i] != '\r' && str[i] != '\n') break; str[i+1] = 0; return str; @@ -894,17 +914,21 @@ static int key_config_loop_wrap(int id, int keys) return 0; } +static const char h_nubmode[] = "Maps nub-like analog controls to PSX ones better\n" + "Might cause problems with real analog sticks"; static const char *adevnames[IN_MAX_DEVS + 2]; static int stick_sel[2]; static menu_entry e_menu_keyconfig_analog[] = { - mee_enum ("Left stick (L3)", 0, stick_sel[0], adevnames), - mee_range(" X axis", 0, in_adev_axis[0][0], 0, 7), - mee_range(" Y axis", 0, in_adev_axis[0][1], 0, 7), - mee_enum ("Right stick (R3)", 0, stick_sel[1], adevnames), - mee_range(" X axis", 0, in_adev_axis[1][0], 0, 7), - mee_range(" Y axis", 0, in_adev_axis[1][1], 0, 7), + mee_enum ("Left stick (L3)", 0, stick_sel[0], adevnames), + mee_range (" X axis", 0, in_adev_axis[0][0], 0, 7), + mee_range (" Y axis", 0, in_adev_axis[0][1], 0, 7), + mee_onoff_h(" nub mode", 0, in_adev_is_nublike[0], 1, h_nubmode), + mee_enum ("Right stick (R3)", 0, stick_sel[1], adevnames), + mee_range (" X axis", 0, in_adev_axis[1][0], 0, 7), + mee_range (" Y axis", 0, in_adev_axis[1][1], 0, 7), + mee_onoff_h(" nub mode", 0, in_adev_is_nublike[1], 1, h_nubmode), mee_end, }; @@ -971,9 +995,9 @@ static const char *mgn_saveloadcfg(int id, int *offs) static int mh_savecfg(int id, int keys) { if (menu_write_config(id == MA_OPT_SAVECFG_GAME ? 1 : 0) == 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"); return 1; } @@ -982,7 +1006,7 @@ static int mh_input_rescan(int id, int keys) { //menu_sync_config(); in_probe(); - me_update_msg("rescan complete."); + menu_update_msg("rescan complete."); return 0; } @@ -1036,21 +1060,28 @@ static int menu_loop_keyconfig(int id, int keys) // ------------ gfx options menu ------------ static const char *men_scaler[] = { "1x1", "scaled 4:3", "integer scaled 4:3", "fullscreen", "custom", NULL }; +static const char *men_soft_filter[] = { "None", +#ifdef __ARM_NEON__ + "scale2x", "eagle2x", +#endif + NULL }; +static const char *men_dummy[] = { NULL }; static const char h_cscaler[] = "Displays the scaler layer, you can resize it\n" "using d-pad or move it using R+d-pad"; -static const char *men_dummy[] = { NULL }; +static const char h_soft_filter[] = "Works only if game uses low resolution modes"; +static const char h_gamma[] = "Gamma/brightness adjustment (default 100)"; static int menu_loop_cscaler(int id, int keys) { unsigned int inp; - scaling = SCALE_CUSTOM; + g_scaler = SCALE_CUSTOM; plat_gvideo_open(Config.PsxType); for (;;) { - menu_draw_begin(0); + menu_draw_begin(0, 1); memset(g_menuscreen_ptr, 4, g_menuscreen_w * g_menuscreen_h * 2); text_out16(2, 2, "%d,%d", g_layer_x, g_layer_y); text_out16(2, 480 - 18, "%dx%d | d-pad: resize, R+d-pad: move", g_layer_w, g_layer_h); @@ -1094,11 +1125,13 @@ static int menu_loop_cscaler(int id, int keys) static menu_entry e_menu_gfx_options[] = { - mee_enum ("Scaler", MA_OPT_SCALER, scaling, men_scaler), + mee_enum ("Scaler", MA_OPT_VARSCALER, g_scaler, men_scaler), mee_onoff ("Software Scaling", MA_OPT_SCALER2, soft_scaling, 1), - mee_enum ("Filter", MA_OPT_FILTERING, filter, men_dummy), + mee_enum ("Hardware Filter", MA_OPT_HWFILTER, filter, men_dummy), + mee_enum_h ("Software Filter", MA_OPT_SWFILTER, soft_filter, men_soft_filter, h_soft_filter), + mee_range_h ("Gamma adjustment", MA_OPT_GAMMA, g_gamma, 1, 200, h_gamma), // mee_onoff ("Vsync", 0, vsync, 1), - mee_cust_h ("Setup custom scaler", MA_OPT_SCALER_C, menu_loop_cscaler, NULL, h_cscaler), + mee_cust_h ("Setup custom scaler", MA_OPT_VARSCALER_C, menu_loop_cscaler, NULL, h_cscaler), mee_end, }; @@ -1111,32 +1144,30 @@ static int menu_loop_gfx_options(int id, int keys) return 0; } -// XXX -void menu_set_filter_list(void *filters) -{ - int i; - - i = me_id2offset(e_menu_gfx_options, MA_OPT_FILTERING); - e_menu_gfx_options[i].data = filters; - me_enable(e_menu_gfx_options, MA_OPT_FILTERING, filters != NULL); -} - // ------------ bios/plugins ------------ #ifdef __ARM_NEON__ -static const char h_gpu_neon[] = "Configure built-in NEON GPU plugin"; +static const char h_gpu_neon[] = + "Configure built-in NEON GPU plugin"; +static const char h_gpu_neon_enhanced[] = + "Renders in double resolution at the cost of lower performance\n" + "(not available for high resolution games)"; +static const char h_gpu_neon_enhanced_hack[] = + "Speed hack for above option (glitches some games)"; static const char *men_gpu_interlace[] = { "Off", "On", "Auto", NULL }; static menu_entry e_menu_plugin_gpu_neon[] = { mee_enum ("Enable interlace mode", 0, pl_rearmed_cbs.gpu_neon.allow_interlace, men_gpu_interlace), + mee_onoff_h ("Enhanced resolution (slow)", 0, pl_rearmed_cbs.gpu_neon.enhancement_enable, 1, h_gpu_neon_enhanced), + mee_onoff_h ("Enhanced res. speed hack", 0, pl_rearmed_cbs.gpu_neon.enhancement_no_main, 1, h_gpu_neon_enhanced_hack), mee_end, }; static int menu_loop_plugin_gpu_neon(int id, int keys) { - int sel = 0; + static int sel = 0; me_loop(e_menu_plugin_gpu_neon, &sel); return 0; } @@ -1254,13 +1285,10 @@ static const char h_bios[] = "HLE is simulated BIOS. BIOS selection is sav static const char h_plugin_gpu[] = #ifdef __ARM_NEON__ "builtin_gpu is the NEON GPU, very fast and accurate\n" - "gpuPEOPS " -#else - "builtin_gpu " #endif - "is Pete's soft GPU, slow but accurate\n" - "gpuPCSX4ALL is GPU from PCSX4ALL, fast but glitchy\n" - "gpuGLES Pete's hw GPU, uses 3D chip but is glitchy\n" + "gpu_peops is Pete's soft GPU, slow but accurate\n" + "gpu_unai is GPU from PCSX4ALL, fast but glitchy\n" + "gpu_gles Pete's hw GPU, uses 3D chip but is glitchy\n" "must save config and reload the game if changed"; static const char h_plugin_spu[] = "spunull effectively disables sound\n" "must save config and reload the game if changed"; @@ -1278,8 +1306,8 @@ static menu_entry e_menu_plugin_options[] = mee_handler_h ("Configure built-in GPU plugin", menu_loop_plugin_gpu_neon, h_gpu_neon), #endif mee_handler_h ("Configure gpu_peops plugin", menu_loop_plugin_gpu_peops, h_gpu_peops), - mee_handler_h ("Configure PCSX4ALL GPU plugin", menu_loop_plugin_gpu_unai, h_gpu_unai), - mee_handler_h ("Configure GLES GPU plugin", menu_loop_plugin_gpu_peopsgl, h_gpu_peopsgl), + mee_handler_h ("Configure gpu_unai GPU plugin", menu_loop_plugin_gpu_unai, h_gpu_unai), + mee_handler_h ("Configure gpu_gles GPU plugin", menu_loop_plugin_gpu_peopsgl, h_gpu_peopsgl), mee_handler_h ("Configure built-in SPU plugin", menu_loop_plugin_spu, h_spu), mee_end, }; @@ -1373,7 +1401,7 @@ static int menu_loop_adv_options(int id, int keys) static int mh_restore_defaults(int id, int keys) { menu_set_defconfig(); - me_update_msg("defaults restored"); + menu_update_msg("defaults restored"); return 1; } @@ -1455,7 +1483,7 @@ static void debug_menu_loop(void) while (1) { - menu_draw_begin(0); + menu_draw_begin(0, 1); draw_frame_debug(gpuf, df_x, df_y); menu_draw_end(); @@ -1507,7 +1535,7 @@ static void draw_mc_bg(void) GetMcdBlockInfo(2, i + 1, &blocks2[i]); } - menu_draw_begin(1); + menu_draw_begin(1, 1); memcpy(g_menuscreen_ptr, g_menubg_src_ptr, g_menuscreen_w * g_menuscreen_h * 2); @@ -1588,7 +1616,7 @@ static void draw_cheatlist(int sel) max_cnt = g_menuscreen_h / me_sfont_h; start = max_cnt / 2 - sel; - menu_draw_begin(1); + menu_draw_begin(1, 1); for (i = 0; i < NumCheats; i++) { pos = start + i; @@ -1640,11 +1668,8 @@ static void menu_bios_warn(void) static const char msg[] = "You don't seem to have copied any BIOS\n" "files to\n" -#ifdef __ARM_ARCH_7A__ // XXX - "/pandora/appdata/pcsx_rearmed/bios/\n\n" -#else - "pcsx_rearmed/bios/\n\n" -#endif + MENU_BIOS_PATH "\n\n" + "While many games work fine with fake\n" "(HLE) BIOS, others (like MGS and FF8)\n" "require BIOS to work.\n" @@ -1691,7 +1716,7 @@ static void draw_frame_main(void) } if (ready_to_go) { - capacity = plat_get_bat_capacity(); + capacity = plat_target_bat_capacity_get(); ltime = time(NULL); tmp = localtime(<ime); strftime(ltime_s, sizeof(ltime_s), "%H:%M", tmp); @@ -1752,7 +1777,7 @@ static int reload_plugins(const char *cdimg) pcnt_hook_plugins(); NetOpened = 0; if (OpenPlugins() == -1) { - me_update_msg("failed to open plugins"); + menu_update_msg("failed to open plugins"); return -1; } plugin_call_rearmed_cbs(); @@ -1792,7 +1817,7 @@ static int run_exe(void) SysReset(); if (Load(fname) != 0) { - me_update_msg("exe load failed, bad file?"); + menu_update_msg("exe load failed, bad file?"); printf("meh\n"); return -1; } @@ -1812,7 +1837,7 @@ static int run_cd_image(const char *fname) if (CheckCdrom() == -1) { // Only check the CD if we are starting the console with a CD ClosePlugins(); - me_update_msg("unsupported/invalid CD image"); + menu_update_msg("unsupported/invalid CD image"); return -1; } @@ -1821,11 +1846,11 @@ static int run_cd_image(const char *fname) // Read main executable directly from CDRom and start it if (LoadCdrom() == -1) { ClosePlugins(); - me_update_msg("failed to load CD image"); + menu_update_msg("failed to load CD image"); return -1; } - emu_on_new_cd(); + emu_on_new_cd(1); ready_to_go = 1; return 0; @@ -1861,6 +1886,7 @@ static int romsel_run(void) } strcpy(last_selected_fname, rom_fname_reload); + menu_do_last_cd_img(0); return 0; } @@ -1879,11 +1905,11 @@ static int swap_cd_image(void) set_cd_image(fname); if (ReloadCdromPlugin() < 0) { - me_update_msg("failed to load cdr plugin"); + menu_update_msg("failed to load cdr plugin"); return -1; } if (CDR_open() < 0) { - me_update_msg("failed to open cdr plugin"); + menu_update_msg("failed to open cdr plugin"); return -1; } @@ -1902,7 +1928,7 @@ static int swap_cd_multidisk(void) CDR_close(); if (CDR_open() < 0) { - me_update_msg("failed to open cdr plugin"); + menu_update_msg("failed to open cdr plugin"); return -1; } @@ -1926,10 +1952,10 @@ static void load_pcsx_cht(void) LoadCheats(fname); if (NumCheats == 0 && NumCodes == 0) - me_update_msg("failed to load cheats"); + menu_update_msg("failed to load cheats"); else { snprintf(path, sizeof(path), "%d cheat(s) loaded", NumCheats + NumCodes); - me_update_msg(path); + menu_update_msg(path); } me_enable(e_menu_main, MA_MAIN_CHEATS, ready_to_go && NumCheats); } @@ -2044,13 +2070,22 @@ static void menu_leave_emu(void); void menu_loop(void) { + static int warned_about_bios = 0; static int sel = 0; menu_leave_emu(); - if (bioses[1] == NULL && !warned_about_bios) { - menu_bios_warn(); - warned_about_bios = 1; + if (config_save_counter == 0) { + // assume first run + if (bioses[1] != NULL) { + // autoselect BIOS to make user's life easier + snprintf(Config.Bios, sizeof(Config.Bios), "%s", bioses[1]); + bios_sel = 1; + } + else if (!warned_about_bios) { + menu_bios_warn(); + warned_about_bios = 1; + } } me_enable(e_menu_main, MA_MAIN_RESUME_GAME, ready_to_go); @@ -2228,20 +2263,21 @@ do_memcards: void menu_init(void) { char buff[MAXPATHLEN]; + int i; strcpy(last_selected_fname, "/media"); - cpu_clock_st = cpu_clock = plat_cpu_clock_get(); + cpu_clock_st = cpu_clock = plat_target_cpu_clock_get(); scan_bios_plugins(); - menu_init_common(); + menu_init_base(); menu_set_defconfig(); menu_load_config(0); menu_do_last_cd_img(1); - last_psx_w = 320; - last_psx_h = 240; - last_psx_bpp = 16; + last_vout_w = 320; + last_vout_h = 240; + last_vout_bpp = 16; g_menubg_src_ptr = calloc(g_menuscreen_w * g_menuscreen_h * 2, 1); g_menubg_ptr = calloc(g_menuscreen_w * g_menuscreen_h * 2, 1); @@ -2253,72 +2289,34 @@ void menu_init(void) emu_make_path(buff, "skin/background.png", sizeof(buff)); readpng(g_menubg_src_ptr, buff, READPNG_BG, g_menuscreen_w, g_menuscreen_h); -#ifndef __ARM_ARCH_7A__ /* XXX */ - me_enable(e_menu_gfx_options, MA_OPT_SCALER, 0); - me_enable(e_menu_gfx_options, MA_OPT_FILTERING, 0); - me_enable(e_menu_gfx_options, MA_OPT_SCALER_C, 0); - me_enable(e_menu_keyconfig, MA_CTRL_NUBS_BTNS, 0); -#else - me_enable(e_menu_gfx_options, MA_OPT_SCALER2, 0); - me_enable(e_menu_keyconfig, MA_CTRL_VIBRATION, 0); - me_enable(e_menu_keyconfig, MA_CTRL_DEADZONE, 0); + i = plat_target.cpu_clock_set != NULL + && plat_target.cpu_clock_get != NULL && cpu_clock_st > 0; + me_enable(e_menu_gfx_options, MA_OPT_CPU_CLOCKS, i); + + i = me_id2offset(e_menu_gfx_options, MA_OPT_HWFILTER); + e_menu_gfx_options[i].data = plat_target.hwfilters; + me_enable(e_menu_gfx_options, MA_OPT_HWFILTER, + plat_target.hwfilters != NULL); + + me_enable(e_menu_gfx_options, MA_OPT_GAMMA, + plat_target.gamma_set != NULL); + +#ifndef __ARM_ARCH_7A__ + me_enable(e_menu_gfx_options, MA_OPT_SWFILTER, 0); #endif + me_enable(e_menu_gfx_options, MA_OPT_VARSCALER, MENU_SHOW_VARSCALER); + me_enable(e_menu_gfx_options, MA_OPT_VARSCALER_C, MENU_SHOW_VARSCALER); + me_enable(e_menu_gfx_options, MA_OPT_SCALER2, MENU_SHOW_SCALER2); + me_enable(e_menu_keyconfig, MA_CTRL_NUBS_BTNS, MENU_SHOW_NUBS_BTNS); + me_enable(e_menu_keyconfig, MA_CTRL_VIBRATION, MENU_SHOW_VIBRATION); + me_enable(e_menu_keyconfig, MA_CTRL_DEADZONE, MENU_SHOW_DEADZONE); } void menu_notify_mode_change(int w, int h, int bpp) { - float mult; - int imult; - - last_psx_w = w; - last_psx_h = h; - last_psx_bpp = bpp; - - // XXX: should really menu code cotrol the layer size? - switch (scaling) { - case SCALE_1_1: - g_layer_w = w; g_layer_h = h; - break; - - case SCALE_4_3v2: - if (h > g_menuscreen_h || (240 < h && h <= 360)) - goto fractional_4_3; - - // 4:3 that prefers integer scaling - imult = g_menuscreen_h / h; - g_layer_w = w * imult; - g_layer_h = h * imult; - mult = (float)g_layer_w / (float)g_layer_h; - if (mult < 1.25f || mult > 1.666f) - g_layer_w = 4.0f/3.0f * (float)g_layer_h; - printf(" -> %dx%d %.1f\n", g_layer_w, g_layer_h, mult); - break; - - fractional_4_3: - case SCALE_4_3: - mult = 240.0f / (float)h * 4.0f / 3.0f; - if (h > 256) - mult *= 2.0f; - g_layer_w = mult * (float)g_menuscreen_h; - g_layer_h = g_menuscreen_h; - printf(" -> %dx%d %.1f\n", g_layer_w, g_layer_h, mult); - break; - - case SCALE_FULLSCREEN: - g_layer_w = g_menuscreen_w; - g_layer_h = g_menuscreen_h; - break; - - default: - break; - } - - g_layer_x = g_menuscreen_w / 2 - g_layer_w / 2; - g_layer_y = g_menuscreen_h / 2 - g_layer_h / 2; - if (g_layer_x < 0) g_layer_x = 0; - if (g_layer_y < 0) g_layer_y = 0; - if (g_layer_w > g_menuscreen_w) g_layer_w = g_menuscreen_w; - if (g_layer_h > g_menuscreen_h) g_layer_w = g_menuscreen_h; + last_vout_w = w; + last_vout_h = h; + last_vout_bpp = bpp; } static void menu_leave_emu(void) @@ -2333,19 +2331,19 @@ static void menu_leave_emu(void) memcpy(g_menubg_ptr, g_menubg_src_ptr, g_menuscreen_w * g_menuscreen_h * 2); if (pl_vout_buf != NULL && ready_to_go) { - int x = max(0, g_menuscreen_w - last_psx_w); - int y = max(0, g_menuscreen_h / 2 - last_psx_h / 2); - int w = min(g_menuscreen_w, last_psx_w); - int h = min(g_menuscreen_h, last_psx_h); + int x = max(0, g_menuscreen_w - last_vout_w); + int y = max(0, g_menuscreen_h / 2 - last_vout_h / 2); + int w = min(g_menuscreen_w, last_vout_w); + int h = min(g_menuscreen_h, last_vout_h); u16 *d = (u16 *)g_menubg_ptr + g_menuscreen_w * y + x; char *s = pl_vout_buf; - if (last_psx_bpp == 16) { - for (; h > 0; h--, d += g_menuscreen_w, s += last_psx_w * 2) + if (last_vout_bpp == 16) { + for (; h > 0; h--, d += g_menuscreen_w, s += last_vout_w * 2) menu_darken_bg(d, s, w, 0); } else { - for (; h > 0; h--, d += g_menuscreen_w, s += last_psx_w * 3) { + for (; h > 0; h--, d += g_menuscreen_w, s += last_vout_w * 3) { rgb888_to_rgb565(d, s, w * 3); menu_darken_bg(d, d, w, 0); } @@ -2353,7 +2351,7 @@ static void menu_leave_emu(void) } if (ready_to_go) - cpu_clock = plat_cpu_clock_get(); + cpu_clock = plat_target_cpu_clock_get(); } void menu_prepare_emu(void) @@ -2362,8 +2360,6 @@ void menu_prepare_emu(void) plat_video_menu_leave(); - menu_notify_mode_change(last_psx_w, last_psx_h, last_psx_bpp); - psxCpu = (Config.Cpu == CPU_INTERPRETER) ? &psxInt : &psxRec; if (psxCpu != prev_cpu) // note that this does not really reset, just clears drc caches @@ -2376,7 +2372,7 @@ void menu_prepare_emu(void) menu_sync_config(); if (cpu_clock > 0) - plat_cpu_clock_apply(cpu_clock); + plat_target_cpu_clock_set(cpu_clock); // push config to GPU plugin plugin_call_rearmed_cbs(); @@ -2390,7 +2386,7 @@ void menu_prepare_emu(void) dfinput_activate(); } -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; @@ -2401,6 +2397,6 @@ void me_update_msg(const char *msg) void menu_finish(void) { - menu_do_last_cd_img(0); - plat_cpu_clock_apply(cpu_clock_st); + if (cpu_clock_st > 0) + plat_target_cpu_clock_set(cpu_clock_st); }