X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=frontend%2Fmenu.c;h=7d360d58fc7b101dc0fde6566377e23a805692e3;hp=3fd5425e9fdb2eac181c9166c4e229eec7fe3f6b;hb=9e5ac38fda66536f2a9e6dd2a747ae37538c3638;hpb=9c27c2051287b235fe0dba18a74b3863a3062646 diff --git a/frontend/menu.c b/frontend/menu.c index 3fd5425e..7d360d58 100644 --- a/frontend/menu.c +++ b/frontend/menu.c @@ -78,22 +78,14 @@ typedef enum MA_OPT_SCALER_C, } 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 psx_clock; static int memcard1_sel, memcard2_sel; -int g_opts; +int g_opts, g_scaler; int soft_scaling, analog_deadzone; // for Caanoo int filter; @@ -216,7 +208,7 @@ 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; @@ -261,7 +253,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,7 +268,7 @@ 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), @@ -340,6 +332,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) { @@ -376,15 +369,35 @@ static int menu_write_config(int is_game) } } - if (!is_game) - fprintf(f, "lastcdimg = %s\n", last_selected_fname); - keys_write_all(f); fclose(f); return 0; } +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) { + 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); + + return 0; +} + static void parse_str_val(char *cval, const char *src) { char *tmp; @@ -489,10 +502,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) @@ -678,7 +687,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; @@ -1028,7 +1037,7 @@ static int menu_loop_cscaler(int id, int keys) { unsigned int inp; - scaling = SCALE_CUSTOM; + g_scaler = SCALE_CUSTOM; plat_gvideo_open(Config.PsxType); @@ -1078,7 +1087,7 @@ 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_SCALER, g_scaler, men_scaler), mee_onoff ("Software Scaling", MA_OPT_SCALER2, soft_scaling, 1), mee_enum ("Filter", MA_OPT_FILTERING, filter, men_dummy), // mee_onoff ("Vsync", 0, vsync, 1), @@ -1238,13 +1247,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"; @@ -1262,8 +1268,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, }; @@ -1845,6 +1851,7 @@ static int romsel_run(void) } strcpy(last_selected_fname, rom_fname_reload); + menu_do_last_cd_img(0); return 0; } @@ -2222,9 +2229,10 @@ void menu_init(void) menu_set_defconfig(); menu_load_config(0); - last_psx_w = 320; - last_psx_h = 240; - last_psx_bpp = 16; + menu_do_last_cd_img(1); + 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); @@ -2250,58 +2258,9 @@ void menu_init(void) 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) @@ -2316,19 +2275,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); } @@ -2345,8 +2304,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