X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=frontend%2Fmenu.c;h=2823a230d3e07a14976cc2dae9a33b0134ec1c31;hp=8e182bf610a1ca1b4486a4f2dabcc04bcde81370;hb=271e11499d7e60e1bfb0ffeda8f8266906130b87;hpb=1f84e117ae9b49f6ed72c7243fd514dd1a9e581b diff --git a/frontend/menu.c b/frontend/menu.c index 8e182bf6..2823a230 100644 --- a/frontend/menu.c +++ b/frontend/menu.c @@ -8,7 +8,7 @@ * See the COPYING file in the top-level directory. */ -#define _GNU_SOURCE +#define _GNU_SOURCE 1 #include #include #include @@ -26,6 +26,7 @@ #include "plugin_lib.h" #include "plat.h" #include "pcnt.h" +#include "cspace.h" #include "libpicofe/plat.h" #include "libpicofe/input.h" #include "libpicofe/linux/in_evdev.h" @@ -36,7 +37,7 @@ #include "../libpcsxcore/cheat.h" #include "../libpcsxcore/new_dynarec/new_dynarec.h" #include "../plugins/dfinput/externals.h" -#include "../plugins/gpulib/cspace.h" +#include "../plugins/dfsound/spu_config.h" #include "psemu_plugin_defs.h" #include "revision.h" @@ -102,12 +103,6 @@ int soft_filter; #define DEFAULT_PSX_CLOCK_S "50" #endif -// sound plugin -extern int iUseReverb; -extern int iUseInterpolation; -extern int iXAPitch; -extern int iVolume; - static const char *bioses[24]; static const char *gpu_plugins[16]; static const char *spu_plugins[16]; @@ -211,9 +206,12 @@ static int optional_cdimg_filter(struct dirent **namelist, int count, const char *ext, *p; char buf[256], buf2[256]; int i, d, ret, good_cue; - struct stat statf; + struct stat64 statf; FILE *f; + if (count <= 1) + return count; + for (i = 1; i < count; i++) { if (namelist[i] == NULL || namelist[i]->d_type == DT_DIR) continue; @@ -251,11 +249,13 @@ static int optional_cdimg_filter(struct dirent **namelist, int count, p = strrchr(buf2, '/'); if (p == NULL) p = strrchr(buf2, '\\'); - if (p == NULL) + if (p != NULL) + p++; + else p = buf2; snprintf(buf, sizeof(buf), "%s/%s", basedir, p); - ret = stat(buf, &statf); + ret = stat64(buf, &statf); if (ret == 0) { rm_namelist_entry(namelist, count, p); good_cue = 1; @@ -316,7 +316,7 @@ static void menu_sync_config(void) allow_abs_only_old = in_evdev_allow_abs_only; } - iVolume = 768 + 128 * volume_boost; + spu_config.iVolume = 768 + 128 * volume_boost; pl_rearmed_cbs.frameskip = frameskip - 1; pl_timing_prepare(Config.PsxType); } @@ -327,6 +327,7 @@ static void menu_set_defconfig(void) g_opts = 0; g_scaler = SCALE_4_3; + g_gamma = 100; volume_boost = 0; frameskip = 0; analog_deadzone = 50; @@ -391,6 +392,7 @@ static const struct { CE_CONFIG_VAL(Cpu), CE_INTVAL(region), CE_INTVAL_V(g_scaler, 2), + CE_INTVAL(g_gamma), CE_INTVAL(g_layer_x), CE_INTVAL(g_layer_y), CE_INTVAL(g_layer_w), @@ -427,9 +429,10 @@ static const struct { CE_INTVAL_P(gpu_peopsgl.iVRamSize), CE_INTVAL_P(gpu_peopsgl.iTexGarbageCollection), CE_INTVAL_P(gpu_peopsgl.dwActFixes), - CE_INTVAL_V(iUseReverb, 3), - CE_INTVAL_V(iXAPitch, 3), - CE_INTVAL_V(iUseInterpolation, 3), + CE_INTVAL(spu_config.iUseReverb), + CE_INTVAL(spu_config.iXAPitch), + CE_INTVAL(spu_config.iUseInterpolation), + CE_INTVAL(spu_config.iTempo), CE_INTVAL(config_save_counter), CE_INTVAL(in_evdev_allow_abs_only), CE_INTVAL(volume_boost), @@ -510,7 +513,7 @@ static int menu_do_last_cd_img(int is_get) { static const char *defaults[] = { "/media", "/mnt/sd", "/mnt" }; char path[256]; - struct stat st; + struct stat64 st; FILE *f; int i, ret = -1; @@ -533,7 +536,7 @@ static int menu_do_last_cd_img(int is_get) out: if (is_get) { for (i = 0; last_selected_fname[0] == 0 - || stat(last_selected_fname, &st) != 0; i++) + || stat64(last_selected_fname, &st) != 0; i++) { if (i >= ARRAY_SIZE(defaults)) break; @@ -666,7 +669,7 @@ fail: static const char *filter_exts[] = { "bin", "img", "mdf", "iso", "cue", "z", - "bz", "znx", "pbp", "cbn" + "bz", "znx", "pbp", "cbn", NULL }; // rrrr rggg gggb bbbb @@ -681,7 +684,7 @@ static unsigned short fname2color(const char *fname) if (ext == NULL) return 0xffff; ext++; - for (i = 0; i < array_size(filter_exts); i++) + for (i = 0; filter_exts[i] != NULL; i++) if (strcasecmp(ext, filter_exts[i]) == 0) return 0x7bff; for (i = 0; i < array_size(other_exts); i++) @@ -721,8 +724,8 @@ static void draw_savestate_bg(int slot) if (f == NULL) return; - if (gzseek(f, 0x29933d, SEEK_SET) != 0x29933d) { - fprintf(stderr, "gzseek failed\n"); + if ((ret = (int)gzseek(f, 0x29933d, SEEK_SET)) != 0x29933d) { + fprintf(stderr, "gzseek failed: %d\n", ret); gzclose(f); return; } @@ -1396,13 +1399,16 @@ static int menu_loop_plugin_gpu_peopsgl(int id, int keys) static const char *men_spu_interp[] = { "None", "Simple", "Gaussian", "Cubic", NULL }; static const char h_spu_volboost[] = "Large values cause distortion"; +static const char h_spu_tempo[] = "Slows down audio if emu is too slow\n" + "This is inaccurate and breaks games"; static menu_entry e_menu_plugin_spu[] = { mee_range_h ("Volume boost", 0, volume_boost, -5, 30, h_spu_volboost), - mee_onoff ("Reverb", 0, iUseReverb, 2), - mee_enum ("Interpolation", 0, iUseInterpolation, men_spu_interp), - mee_onoff ("Adjust XA pitch", 0, iXAPitch, 1), + mee_onoff ("Reverb", 0, spu_config.iUseReverb, 1), + mee_enum ("Interpolation", 0, spu_config.iUseInterpolation, men_spu_interp), + mee_onoff ("Adjust XA pitch", 0, spu_config.iXAPitch, 1), + mee_onoff_h ("Adjust tempo", 0, spu_config.iTempo, 1, h_spu_tempo), mee_end, }; @@ -1696,10 +1702,10 @@ out: static void handle_memcard_sel(void) { - Config.Mcd1[0] = 0; + strcpy(Config.Mcd1, "none"); if (memcard1_sel != 0) snprintf(Config.Mcd1, sizeof(Config.Mcd1), ".%s%s", MEMCARD_DIR, memcards[memcard1_sel]); - Config.Mcd2[0] = 0; + strcpy(Config.Mcd2, "none"); if (memcard2_sel != 0) snprintf(Config.Mcd2, sizeof(Config.Mcd2), ".%s%s", MEMCARD_DIR, memcards[memcard2_sel]); LoadMcds(Config.Mcd1, Config.Mcd2); @@ -1828,7 +1834,6 @@ static void menu_bios_warn(void) // ------------ main menu ------------ static menu_entry e_menu_main[]; -void OnFile_Exit(); static void draw_frame_main(void) { @@ -1936,10 +1941,11 @@ static int run_bios(void) static int run_exe(void) { + const char *exts[] = { "exe", NULL }; const char *fname; fname = menu_loop_romsel(last_selected_fname, - sizeof(last_selected_fname), NULL); + sizeof(last_selected_fname), exts, NULL); if (fname == NULL) return -1; @@ -1994,7 +2000,8 @@ static int romsel_run(void) const char *fname; fname = menu_loop_romsel(last_selected_fname, - sizeof(last_selected_fname), optional_cdimg_filter); + sizeof(last_selected_fname), filter_exts, + optional_cdimg_filter); if (fname == NULL) return -1; @@ -2025,10 +2032,11 @@ static int romsel_run(void) static int swap_cd_image(void) { - char *fname; + const char *fname; fname = menu_loop_romsel(last_selected_fname, - sizeof(last_selected_fname), optional_cdimg_filter); + sizeof(last_selected_fname), filter_exts, + optional_cdimg_filter); if (fname == NULL) return -1; @@ -2074,11 +2082,12 @@ static int swap_cd_multidisk(void) static void load_pcsx_cht(void) { - char path[256]; - char *fname; + static const char *exts[] = { "cht", NULL }; + const char *fname; + char msg[64]; - path[0] = 0; - fname = menu_loop_romsel(path, sizeof(path), NULL); + fname = menu_loop_romsel(last_selected_fname, + sizeof(last_selected_fname), exts, NULL); if (fname == NULL) return; @@ -2088,8 +2097,8 @@ static void load_pcsx_cht(void) if (NumCheats == 0 && NumCodes == 0) menu_update_msg("failed to load cheats"); else { - snprintf(path, sizeof(path), "%d cheat(s) loaded", NumCheats + NumCodes); - menu_update_msg(path); + snprintf(msg, sizeof(msg), "%d cheat(s) loaded", NumCheats + NumCodes); + menu_update_msg(msg); } me_enable(e_menu_main, MA_MAIN_CHEATS, ready_to_go && NumCheats); } @@ -2145,8 +2154,8 @@ static int main_menu_handler(int id, int keys) in_menu_wait(PBTN_MOK|PBTN_MBACK, NULL, 70); break; case MA_MAIN_EXIT: - OnFile_Exit(); - break; + emu_core_ask_exit(); + return 1; default: lprintf("%s: something unknown selected\n", __FUNCTION__); break; @@ -2232,7 +2241,7 @@ void menu_loop(void) do { me_loop_d(e_menu_main, &sel, NULL, draw_frame_main); - } while (!ready_to_go); + } while (!ready_to_go && !g_emu_want_quit); /* wait until menu, ok, back is released */ while (in_menu_wait_any(NULL, 50) & (PBTN_MENU|PBTN_MOK|PBTN_MBACK)) @@ -2499,9 +2508,12 @@ void menu_prepare_emu(void) plat_video_menu_leave(); psxCpu = (Config.Cpu == CPU_INTERPRETER) ? &psxInt : &psxRec; - if (psxCpu != prev_cpu) + if (psxCpu != prev_cpu) { + prev_cpu->Shutdown(); + psxCpu->Init(); // note that this does not really reset, just clears drc caches psxCpu->Reset(); + } // core doesn't care about Config.Cdda changes, // so handle them manually here