From d6114368e1ee2cc4e6f0eb2785a1fce626987897 Mon Sep 17 00:00:00 2001 From: notaz Date: Thu, 27 Mar 2008 19:04:05 +0000 Subject: [PATCH] some fixes git-svn-id: file:///home/notaz/opt/svn/PicoDrive@398 be3aeb3a-fb24-0410-a615-afba39da0efa --- Pico/Cart.c | 15 +++++++++++---- Pico/PicoInt.h | 1 - Pico/cd/Pico.c | 12 ++++++++---- platform/base_readme.txt | 5 +++-- platform/common/config.c | 4 ++-- platform/gp2x/emu.c | 4 ---- platform/gp2x/main.c | 2 +- 7 files changed, 25 insertions(+), 18 deletions(-) diff --git a/Pico/Cart.c b/Pico/Cart.c index 25bb961..fadf558 100644 --- a/Pico/Cart.c +++ b/Pico/Cart.c @@ -20,6 +20,8 @@ void (*PicoCartUnloadHook)(void) = NULL; void (*PicoCartLoadProgressCB)(int percent) = NULL; void (*PicoCDLoadProgressCB)(int percent) = NULL; // handled in Pico/cd/cd_file.c +static void PicoCartDetect(void); + /* cso struct */ typedef struct _cso_struct { @@ -201,6 +203,7 @@ cso_failed: file->size = ftell(f); file->type = PMT_UNCOMPRESSED; fseek(f, 0, SEEK_SET); + return file; } @@ -489,12 +492,17 @@ int PicoCartInsert(unsigned char *rom,unsigned int romsize) // notaz: add a 68k "jump one op back" opcode to the end of ROM. // This will hang the emu, but will prevent nasty crashes. // note: 4 bytes are padded to every ROM - if(rom != NULL) + if (rom != NULL) *(unsigned long *)(rom+romsize) = 0xFFFE4EFA; // 4EFA FFFE byteswapped Pico.rom=rom; Pico.romsize=romsize; + if (SRam.data) { + free(SRam.data); + SRam.data = NULL; + } + if (PicoCartUnloadHook != NULL) { PicoCartUnloadHook(); PicoCartUnloadHook = NULL; @@ -550,10 +558,9 @@ static int name_cmp(const char *name) * various cart-specific things, which can't be handled by generic code * (maybe I should start using CRC for this stuff?) */ -void PicoCartDetect(void) +static void PicoCartDetect(void) { int sram_size = 0, csum; - if(SRam.data) free(SRam.data); SRam.data=0; Pico.m.sram_reg = 0; csum = PicoRead32(0x18c) & 0xffff; @@ -590,7 +597,7 @@ void PicoCartDetect(void) if (sram_size) { SRam.data = (unsigned char *) calloc(sram_size, 1); - if(!SRam.data) return; + if (SRam.data == NULL) return; } SRam.changed = 0; diff --git a/Pico/PicoInt.h b/Pico/PicoInt.h index c867c19..06a50a0 100644 --- a/Pico/PicoInt.h +++ b/Pico/PicoInt.h @@ -377,7 +377,6 @@ extern carthw_state_chunk *carthw_chunks; #define CHUNK_CARTHW 64 // Cart.c -PICO_INTERNAL void PicoCartDetect(void); extern void (*PicoCartUnloadHook)(void); // Debug.c diff --git a/Pico/cd/Pico.c b/Pico/cd/Pico.c index 0847f29..9d028b4 100644 --- a/Pico/cd/Pico.c +++ b/Pico/cd/Pico.c @@ -75,10 +75,14 @@ PICO_INTERNAL int PicoResetMCD(int hard) #endif // use SRam.data for RAM cart - if (SRam.data) free(SRam.data); - SRam.data = NULL; - if (PicoOpt&0x8000) - SRam.data = calloc(1, 0x12000); + if (PicoOpt&0x8000) { + if (SRam.data == NULL) + SRam.data = calloc(1, 0x12000); + } + else if (SRam.data != NULL) { + free(SRam.data); + SRam.data = NULL; + } SRam.start = SRam.end = 0; // unused return 0; diff --git a/platform/base_readme.txt b/platform/base_readme.txt index 1a13a4d..a50f80d 100644 --- a/platform/base_readme.txt +++ b/platform/base_readme.txt @@ -642,9 +642,10 @@ Changelog * Changed config file format, files are now human-readable. Game specific configs are now held in single file (but old game config files are still read). - * Fixed a bug where some key combos didn't work. - * Fixed a regression in renderer (rare graphic glitches). + * Fixed a bug where some key combos didn't work as expected. + * Fixed a regression in renderer (some graphic glitches in rare cases). * Adjusted fast rernderer to work with more games, including VR. + * Fixed a problem where SegaCD RAM cart data was getting lost on reset. 1.35b * PSP: mp3 code should no longer fail on 1.5 firmware. diff --git a/platform/common/config.c b/platform/common/config.c index a1808ee..e2a2395 100644 --- a/platform/common/config.c +++ b/platform/common/config.c @@ -353,7 +353,7 @@ int config_writelrom(const char *fname) int size; FILE *f; - if (strlen(lastRomFile) == 0) return 0; + if (strlen(lastRomFile) == 0) return -1; f = fopen(fname, "r"); if (f != NULL) @@ -694,7 +694,7 @@ int config_readsect(const char *fname, const char *section) FILE *f; f = fopen(fname, "r"); - if (f == NULL) return 0; + if (f == NULL) return -1; if (section != NULL) { diff --git a/platform/gp2x/emu.c b/platform/gp2x/emu.c index a3e7f83..3ee96f2 100644 --- a/platform/gp2x/emu.c +++ b/platform/gp2x/emu.c @@ -11,7 +11,6 @@ #include #include #include -#include #include @@ -653,9 +652,6 @@ static void simpleWait(int thissec, int lim_time) gettimeofday(&tval, 0); if (thissec != tval.tv_sec) tval.tv_usec+=1000000; - if (tval.tv_usec < lim_time) - sched_yield(); - while (tval.tv_usec < lim_time) { spend_cycles(1024); diff --git a/platform/gp2x/main.c b/platform/gp2x/main.c index f016411..ed2191c 100644 --- a/platform/gp2x/main.c +++ b/platform/gp2x/main.c @@ -66,7 +66,7 @@ void parse_cmd_line(int argc, char *argv[]) } if (unrecognized) { - printf("\n\n\nPicoDrive v" VERSION " (c) notaz, 2006-2007\n"); + printf("\n\n\nPicoDrive v" VERSION " (c) notaz, 2006-2008\n"); printf("usage: %s [options] [romfile]\n", argv[0]); printf( "options:\n" "-menu launch a custom program on exit instead of default gp2xmenu\n" -- 2.39.2