From: notaz Date: Mon, 2 Apr 2007 07:31:38 +0000 (+0000) Subject: bugfix, fd leak X-Git-Tag: v1.85~725 X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4696954094ca11200b8b08e8a9bfb231cf21fb86;p=picodrive.git bugfix, fd leak git-svn-id: file:///home/notaz/opt/svn/PicoDrive@86 be3aeb3a-fb24-0410-a615-afba39da0efa --- diff --git a/Pico/cd/Pico.c b/Pico/cd/Pico.c index d29469b..b1d7c5d 100644 --- a/Pico/cd/Pico.c +++ b/Pico/cd/Pico.c @@ -216,13 +216,15 @@ static __inline void update_chips(void) // delayed setting of DMNA bit (needed for Silpheed) if (Pico_mcd->m.state_flags & 2) { Pico_mcd->m.state_flags &= ~2; - Pico_mcd->s68k_regs[3] |= 2; - Pico_mcd->s68k_regs[3] &= ~1; + if (!(Pico_mcd->s68k_regs[3] & 4)) { + Pico_mcd->s68k_regs[3] |= 2; + Pico_mcd->s68k_regs[3] &= ~1; #ifdef USE_POLL_DETECT - if ((s68k_poll_adclk&0xfe) == 2) { - SekSetStopS68k(0); s68k_poll_adclk = 0; - } + if ((s68k_poll_adclk&0xfe) == 2) { + SekSetStopS68k(0); s68k_poll_adclk = 0; + } #endif + } } } diff --git a/platform/gp2x/emu.c b/platform/gp2x/emu.c index c16b658..f3b4c02 100644 --- a/platform/gp2x/emu.c +++ b/platform/gp2x/emu.c @@ -272,6 +272,9 @@ int emu_ReloadRom(void) get_ext(romFileName, ext); } + if ((PicoMCD & 1) && Pico_mcd != NULL) + Stop_CD(); + // check for MegaCD image cd_state = emu_cd_check(&used_rom_name); if (cd_state > 0) { @@ -837,9 +840,11 @@ static void RunEvents(unsigned int which) { if(which & 0x1800) { // save or load (but not both) int do_it = 1; - if (!(which & 0x1000) && (currentConfig.EmuOpt & 0x200) && emu_check_save_file(state_slot)) { + if ( emu_check_save_file(state_slot) && + (( (which & 0x1000) && (currentConfig.EmuOpt & 0x800)) || // load + (!(which & 0x1000) && (currentConfig.EmuOpt & 0x200))) ) { // save unsigned long keys; - blit("", "OVERWRITE SAVE? (Y=yes, X=no)"); + blit("", (which & 0x1000) ? "LOAD STATE? (Y=yes, X=no)" : "OVERWRITE SAVE? (Y=yes, X=no)"); while( !((keys = gp2x_joystick_read(1)) & (GP2X_X|GP2X_Y)) ) usleep(50*1024); if (keys & GP2X_X) do_it = 0; diff --git a/platform/gp2x/emu.h b/platform/gp2x/emu.h index 627c226..986a77d 100644 --- a/platform/gp2x/emu.h +++ b/platform/gp2x/emu.h @@ -20,7 +20,7 @@ typedef struct { char lastRomFile[512]; int EmuOpt; // LSb->MSb: use_sram, show_fps, enable_sound, gzip_saves, // squidgehack, no_save_cfg_on_exit, , 16_bit_mode - // craigix_ram, confirm_save, show_cd_leds + // craigix_ram, confirm_save, show_cd_leds, confirm_load // int PicoOpt; // used for config saving only, see Pico.h int PsndRate; // ditto diff --git a/platform/gp2x/menu.c b/platform/gp2x/menu.c index 881ea98..ce3f72f 100644 --- a/platform/gp2x/menu.c +++ b/platform/gp2x/menu.c @@ -956,7 +956,7 @@ static const char *region_name(unsigned int code) static void draw_menu_options(int menu_sel) { int tl_x = 25, tl_y = 32, y; - char monostereo[8], strframeskip[8], *strrend, *strscaling; + char monostereo[8], strframeskip[8], *strrend, *strscaling, *strssconfirm; strcpy(monostereo, (currentConfig.PicoOpt&0x08)?"stereo":"mono"); if (currentConfig.Frameskip < 0) @@ -975,6 +975,12 @@ static void draw_menu_options(int menu_sel) case 2: strscaling = "hw horiz. + vert."; break; case 3: strscaling = "sw horizontal"; break; } + switch ((currentConfig.EmuOpt >> 9) & 5) { + default: strssconfirm = "OFF"; break; + case 1: strssconfirm = "writes"; break; + case 4: strssconfirm = "loads"; break; + case 5: strssconfirm = "both"; break; + } y = tl_y; //memset(gp2x_screen, 0, 320*240); @@ -992,7 +998,7 @@ static void draw_menu_options(int menu_sel) gp2x_text_out8(tl_x, (y+=10), "6 button pad %s", (currentConfig.PicoOpt&0x020)?"ON":"OFF"); // 9 gp2x_text_out8(tl_x, (y+=10), "Genesis Region: %s", region_name(currentConfig.PicoRegion)); gp2x_text_out8(tl_x, (y+=10), "Use SRAM/BRAM savestates %s", (currentConfig.EmuOpt &0x001)?"ON":"OFF"); // 11 - gp2x_text_out8(tl_x, (y+=10), "Confirm save overwrites %s", (currentConfig.EmuOpt &0x200)?"ON":"OFF"); // 12 + gp2x_text_out8(tl_x, (y+=10), "Confirm savestate %s", strssconfirm); // 12 gp2x_text_out8(tl_x, (y+=10), "Save slot %i", state_slot); // 13 gp2x_text_out8(tl_x, (y+=10), "GP2X CPU clocks %iMhz", currentConfig.CPUclock); gp2x_text_out8(tl_x, (y+=10), "[Sega/Mega CD options]"); @@ -1083,7 +1089,6 @@ static int menu_loop_options(void) case 8: currentConfig.PicoOpt^=0x200; break; case 9: currentConfig.PicoOpt^=0x020; break; case 11: currentConfig.EmuOpt ^=0x001; break; - case 12: currentConfig.EmuOpt ^=0x200; break; case 15: cd_menu_loop_options(); if (engineState == PGS_ReloadRom) return 0; // test BIOS @@ -1138,6 +1143,15 @@ static int menu_loop_options(void) case 10: region_prevnext(inp & GP2X_RIGHT); break; + case 12: { + int n = ((currentConfig.EmuOpt>>9)&1) | ((currentConfig.EmuOpt>>10)&2); + n += (inp & GP2X_LEFT) ? -1 : 1; + if (n < 0) n = 0; else if (n > 3) n = 3; + n |= n << 1; n &= ~2; + currentConfig.EmuOpt &= ~0xa00; + currentConfig.EmuOpt |= n << 9; + break; + } case 13: if (inp & GP2X_RIGHT) { state_slot++; if (state_slot > 9) state_slot = 0; diff --git a/platform/linux/gp2x.c b/platform/linux/gp2x.c index 40cd7bc9..c8c9564 100644 --- a/platform/linux/gp2x.c +++ b/platform/linux/gp2x.c @@ -402,7 +402,7 @@ int mmuunhack(void) /* misc */ void spend_cycles(int c) { - usleep(c/*/200*/); + usleep(c/200); } diff --git a/platform/readme.txt b/platform/readme.txt index 1c5a379..a68fced 100644 --- a/platform/readme.txt +++ b/platform/readme.txt @@ -227,6 +227,9 @@ Changelog * Improved z80 timing, should fix some sound problems. * Fixed a bug with sram register (fixes Phantasy Star 4). * Added code for PRG ram write protection register (Dungeon Explorer). + * The memory mode register change in 1.31 was unsafe and caused some glitches in + AH-3 Thunderstrike. Fixed. + * Fixed a file descriptor leak. 1.31 * Changed the way memory mode register is read (fixes Lunar 2, broken in 1.30).