improved game vidmode change detection; some iface changes

git-svn-id: file:///home/notaz/opt/svn/PicoDrive/platform@803 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
notaz 2009-10-05 15:59:08 +00:00
parent d6c1b65bce
commit 6c026031a8
2 changed files with 23 additions and 17 deletions

View file

@ -41,9 +41,11 @@ int pico_pen_x = 320/2, pico_pen_y = 240/2;
int pico_inp_mode = 0;
int engineState = PGS_Menu;
/* tmp buff to reduce stack usage for plats with small stack */
static char static_buff[512];
/* TODO: len checking */
char rom_fname_reload[512] = { 0, };
char rom_fname_loaded[512] = { 0, };
char rom_fname_reload[512];
char rom_fname_loaded[512];
int rom_loaded = 0;
int reset_timing = 0;
static unsigned int notice_msg_time; /* when started showing */
@ -113,7 +115,6 @@ static const char * const biosfiles_jp[] = { "jp_mcd1_9112", "jp_mcd1_9111" };
static int find_bios(int region, char **bios_file)
{
static char bios_path[1024];
int i, count;
const char * const *files;
FILE *f = NULL;
@ -133,26 +134,27 @@ static int find_bios(int region, char **bios_file)
for (i = 0; i < count; i++)
{
emu_make_path(bios_path, files[i], sizeof(bios_path) - 4);
strcat(bios_path, ".bin");
f = fopen(bios_path, "rb");
emu_make_path(static_buff, files[i], sizeof(static_buff) - 4);
strcat(static_buff, ".bin");
f = fopen(static_buff, "rb");
if (f) break;
bios_path[strlen(bios_path) - 4] = 0;
strcat(bios_path, ".zip");
f = fopen(bios_path, "rb");
static_buff[strlen(static_buff) - 4] = 0;
strcat(static_buff, ".zip");
f = fopen(static_buff, "rb");
if (f) break;
}
if (f) {
lprintf("using bios: %s\n", bios_path);
lprintf("using bios: %s\n", static_buff);
fclose(f);
if (bios_file) *bios_file = bios_path;
if (bios_file)
*bios_file = static_buff;
return 1;
} else {
sprintf(bios_path, "no %s BIOS files found, read docs",
sprintf(static_buff, "no %s BIOS files found, read docs",
region != 4 ? (region == 8 ? "EU" : "JAP") : "USA");
me_update_msg(bios_path);
me_update_msg(static_buff);
return 0;
}
}
@ -560,6 +562,7 @@ int emu_reload_rom(char *rom_fname)
}
menu_romload_prepare(used_rom_name); // also CD load
used_rom_name = NULL; // uses static_buff
ret = PicoCartLoad(rom, &rom_data, &rom_size, (PicoAHW & PAHW_SMS) ? 1 : 0);
pm_close(rom);
@ -594,7 +597,8 @@ int emu_reload_rom(char *rom_fname)
if (!ret) emu_read_config(0, 0);
}
if (PicoCartInsert(rom_data, rom_size)) {
emu_make_path(static_buff, "carthw.cfg", sizeof(static_buff));
if (PicoCartInsert(rom_data, rom_size, static_buff)) {
me_update_msg("Failed to load ROM.");
goto fail;
}
@ -700,6 +704,7 @@ static void romfname_ext(char *dst, const char *prefix, const char *ext)
if (ext) strcat(dst, ext);
}
// <base dir><end>
void emu_make_path(char *buff, const char *end, int size)
{
int pos, end_len;
@ -907,7 +912,7 @@ static int try_ropen_file(const char *fname)
char *emu_get_save_fname(int load, int is_sram, int slot)
{
static char saveFname[512];
char *saveFname = static_buff;
char ext[16];
if (is_sram)
@ -1482,7 +1487,7 @@ void emu_loop(void)
pframes_done++; frames_done++;
diff_lim += target_frametime;
if (!(currentConfig.EmuOpt & EOPT_NO_FRMLIMIT)) {
if (!(currentConfig.EmuOpt & (EOPT_NO_FRMLIMIT|EOPT_EXT_FRMLIMIT))) {
timestamp = get_ticks();
diff = timestamp - timestamp_base;
if (!reset_timing && diff < diff_lim) // we are too fast
@ -1508,7 +1513,7 @@ void emu_loop(void)
PicoFrame();
/* frame limiter */
if (!reset_timing && !(currentConfig.EmuOpt & EOPT_NO_FRMLIMIT))
if (!reset_timing && !(currentConfig.EmuOpt & (EOPT_NO_FRMLIMIT|EOPT_EXT_FRMLIMIT)))
{
timestamp = get_ticks();
diff = timestamp - timestamp_base;

View file

@ -41,6 +41,7 @@ extern int g_screen_height;
#define EOPT_SHOW_RTC (1<<17)
#define EOPT_NO_FRMLIMIT (1<<18)
#define EOPT_WIZ_TEAR_FIX (1<<19)
#define EOPT_EXT_FRMLIMIT (1<<20) // no internal frame limiter (limited by snd, etc)
enum {
EOPT_SCALE_NONE = 0,