X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=frontend%2Flibretro.c;h=10e9694dab4909ec17e3e49abb15aa61a375997c;hb=b629f6cc08ec0220c622ccee3382d86ab6e1650d;hp=08ef052fc3c33b9f9872d4ea807a8e722f2a9ce5;hpb=8342a30082638cc032c53e073f893e82f149fcb7;p=pcsx_rearmed.git diff --git a/frontend/libretro.c b/frontend/libretro.c index 08ef052f..10e9694d 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -39,6 +39,11 @@ #define PORTS_NUMBER 8 +#define ISHEXDEC ((buf[cursor]>='0') && (buf[cursor]<='9')) || ((buf[cursor]>='a') && (buf[cursor]<='f')) || ((buf[cursor]>='A') && (buf[cursor]<='F')) + +//hack to prevent retroarch freezing when reseting in the menu but not while running with the hot key +int rebootemu = 0; + static retro_video_refresh_t video_cb; static retro_input_poll_t input_poll_cb; static retro_input_state_t input_state_cb; @@ -52,6 +57,7 @@ static int vout_width, vout_height; static int vout_doffs_old, vout_fb_dirty; static bool vout_can_dupe; static bool duping_enable; +static bool found_bios; static int plugins_opened; static int is_pal_mode; @@ -455,6 +461,7 @@ void retro_set_environment(retro_environment_t cb) { "pcsx_rearmed_neon_enhancement_no_main", "Enhanced resolution speed hack; disabled|enabled" }, #endif { "pcsx_rearmed_duping_enable", "Frame duping; on|off" }, + { "pcsx_rearmed_show_bios_bootlogo", "Show Bios Bootlogo; on|off" }, { "pcsx_rearmed_spu_reverb", "Sound: Reverb; on|off" }, { "pcsx_rearmed_spu_interpolation", "Sound: Interpolation; simple|gaussian|cubic|off" }, { "pcsx_rearmed_pe2_fix", "Parasite Eve 2/Vandal Hearts 1/2 Fix; disabled|enabled" }, @@ -771,6 +778,21 @@ void retro_cheat_set(unsigned index, bool enabled, const char *code) // cheat funcs are destructive, need a copy.. strncpy(buf, code, sizeof(buf)); buf[sizeof(buf) - 1] = 0; + + //Prepare buffered cheat for PCSX's AddCheat fucntion. + int cursor=0; + int nonhexdec=0; + while (buf[cursor]){ + if (!(ISHEXDEC)){ + if (++nonhexdec%2){ + buf[cursor]=' '; + } else { + buf[cursor]='\n'; + } + } + cursor++; + } + if (index < NumCheats) ret = EditCheat(index, "", buf); @@ -1282,7 +1304,9 @@ size_t retro_get_memory_size(unsigned id) void retro_reset(void) { - SysReset(); + //hack to prevent retroarch freezing when reseting in the menu but not while running with the hot key + rebootemu = 1; + //SysReset(); } static const unsigned short retro_psx_map[] = { @@ -1465,6 +1489,20 @@ static void update_variables(bool in_flight) dfinput_activate(); } + else{ + //not yet running + + //bootlogo display hack + if (found_bios) { + var.value = "NULL"; + var.key = "pcsx_rearmed_show_bios_bootlogo"; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) + { + if (strcmp(var.value, "on") == 0) + rebootemu = 1; + } + } + } } static int min(int a, int b) @@ -1475,6 +1513,11 @@ static int min(int a, int b) void retro_run(void) { int i; + //SysReset must be run while core is running,Not in menu (Locks up Retroarch) + if(rebootemu != 0){ + rebootemu = 0; + SysReset(); + } input_poll_cb(); @@ -1578,7 +1621,8 @@ void retro_init(void) const char *dir; char path[256]; int i, ret; - bool found_bios = false; + + found_bios = false; #ifdef __MACH__ // magic sauce to make the dynarec work on iOS