X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=common%2Femu.c;h=7aac10b8463819f44e34da9f432111c22d90b098;hb=049a6b3e80151f6a5af726e25478ed15e111dfcc;hp=7dbac5045b16871e603b5a5489971e4993716037;hpb=36f6fd5afec3bd982c715f6d39d5712dacb237cd;p=libpicofe.git diff --git a/common/emu.c b/common/emu.c index 7dbac50..7aac10b 100644 --- a/common/emu.c +++ b/common/emu.c @@ -16,37 +16,38 @@ #include "lprintf.h" #include "config.h" #include "common.h" +#include "plat.h" -#include -#include -#include +#include +#include +#include #include char *PicoConfigFile = "config.cfg"; currentConfig_t currentConfig, defaultConfig; -int rom_loaded = 0; char noticeMsg[64] = { 0, }; int state_slot = 0; int config_slot = 0, config_slot_current = 0; -char loadedRomFName[512] = { 0, }; int kb_combo_keys = 0, kb_combo_acts = 0; // keys and actions which need button combos int pico_inp_mode = 0; +int engineState = PGS_Menu; + +/* TODO: len checking */ +char rom_fname_reload[512] = { 0, }; +char rom_fname_loaded[512] = { 0, }; +int rom_loaded = 0; unsigned char *movie_data = NULL; static int movie_size = 0; -// provided by platform code: -extern void emu_noticeMsgUpdated(void); -extern int emu_getMainDir(char *dst, int len); -extern void menu_romload_prepare(const char *rom_name); -extern void menu_romload_end(void); - // utilities -static void strlwr_(char* string) +static void strlwr_(char *string) { - while ( (*string++ = (char)tolower(*string)) ); + char *p; + for (p = string; *p; p++) + *p = (char)tolower(*p); } static int try_rfn_cut(char *fname) @@ -345,6 +346,7 @@ int emu_ReloadRom(char *rom_fname) return 0; } get_ext(rom_fname, ext); + lprintf("gmv loaded for %s\n", rom_fname); } else if (!strcmp(ext, ".pat")) { @@ -407,7 +409,9 @@ int emu_ReloadRom(char *rom_fname) rom_loaded = 0; if ( (ret = PicoCartLoad(rom, &rom_data, &rom_size)) ) { - sprintf(menuErrorMsg, "PicoCartLoad() failed."); + if (ret == 2) sprintf(menuErrorMsg, "Out of memory"); + else if (ret == 3) sprintf(menuErrorMsg, "Read failed"); + else sprintf(menuErrorMsg, "PicoCartLoad() failed."); lprintf("%s\n", menuErrorMsg); goto fail2; } @@ -487,8 +491,8 @@ int emu_ReloadRom(char *rom_fname) if (currentConfig.EmuOpt & EOPT_USE_SRAM) emu_SaveLoadGame(1, 1); - strncpy(loadedRomFName, rom_fname, sizeof(loadedRomFName)-1); - loadedRomFName[sizeof(loadedRomFName)-1] = 0; + strncpy(rom_fname_loaded, rom_fname, sizeof(rom_fname_loaded)-1); + rom_fname_loaded[sizeof(rom_fname_loaded)-1] = 0; rom_loaded = 1; return 1; @@ -513,8 +517,8 @@ static void romfname_ext(char *dst, const char *prefix, const char *ext) int prefix_len = 0; // make save filename - p = loadedRomFName+strlen(loadedRomFName)-1; - for (; p >= loadedRomFName && *p != PATH_SEP_C; p--); p++; + p = rom_fname_loaded + strlen(rom_fname_loaded) - 1; + for (; p >= rom_fname_loaded && *p != PATH_SEP_C; p--); p++; *dst = 0; if (prefix) { int len = emu_getMainDir(dst, 512); @@ -522,7 +526,7 @@ static void romfname_ext(char *dst, const char *prefix, const char *ext) prefix_len = len + strlen(prefix); } #ifdef UIQ3 - else p = loadedRomFName; // backward compatibility + else p = rom_fname_loaded; // backward compatibility #endif strncpy(dst + prefix_len, p, 511-prefix_len); dst[511-8] = 0; @@ -665,6 +669,16 @@ int emu_WriteConfig(int is_game) } +void emu_writelrom(void) +{ + char cfg[512]; + make_config_cfg(cfg); + config_writelrom(cfg); +#ifndef NO_SYNC + sync(); +#endif +} + #ifndef UIQ3 void emu_textOut8(int x, int y, const char *text) { @@ -774,13 +788,13 @@ void emu_updateMovie(void) } else { // MXYZ SACB RLDU PicoPad[0] = ~movie_data[offs] & 0x8f; // ! SCBA RLDU - if(!(movie_data[offs] & 0x10)) PicoPad[0] |= 0x40; // A - if(!(movie_data[offs] & 0x20)) PicoPad[0] |= 0x10; // B - if(!(movie_data[offs] & 0x40)) PicoPad[0] |= 0x20; // A + if(!(movie_data[offs] & 0x10)) PicoPad[0] |= 0x40; // C + if(!(movie_data[offs] & 0x20)) PicoPad[0] |= 0x10; // A + if(!(movie_data[offs] & 0x40)) PicoPad[0] |= 0x20; // B PicoPad[1] = ~movie_data[offs+1] & 0x8f; // ! SCBA RLDU - if(!(movie_data[offs+1] & 0x10)) PicoPad[1] |= 0x40; // A - if(!(movie_data[offs+1] & 0x20)) PicoPad[1] |= 0x10; // B - if(!(movie_data[offs+1] & 0x40)) PicoPad[1] |= 0x20; // A + if(!(movie_data[offs+1] & 0x10)) PicoPad[1] |= 0x40; // C + if(!(movie_data[offs+1] & 0x20)) PicoPad[1] |= 0x10; // A + if(!(movie_data[offs+1] & 0x40)) PicoPad[1] |= 0x20; // B PicoPad[0] |= (~movie_data[offs+2] & 0x0A) << 8; // ! MZYX if(!(movie_data[offs+2] & 0x01)) PicoPad[0] |= 0x0400; // X if(!(movie_data[offs+2] & 0x04)) PicoPad[0] |= 0x0100; // Z