mirror of
https://github.com/RaySollium99/libpicofe.git
synced 2025-09-05 06:47:45 -04:00
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:
parent
d6c1b65bce
commit
6c026031a8
2 changed files with 23 additions and 17 deletions
39
common/emu.c
39
common/emu.c
|
@ -41,9 +41,11 @@ int pico_pen_x = 320/2, pico_pen_y = 240/2;
|
||||||
int pico_inp_mode = 0;
|
int pico_inp_mode = 0;
|
||||||
int engineState = PGS_Menu;
|
int engineState = PGS_Menu;
|
||||||
|
|
||||||
|
/* tmp buff to reduce stack usage for plats with small stack */
|
||||||
|
static char static_buff[512];
|
||||||
/* TODO: len checking */
|
/* TODO: len checking */
|
||||||
char rom_fname_reload[512] = { 0, };
|
char rom_fname_reload[512];
|
||||||
char rom_fname_loaded[512] = { 0, };
|
char rom_fname_loaded[512];
|
||||||
int rom_loaded = 0;
|
int rom_loaded = 0;
|
||||||
int reset_timing = 0;
|
int reset_timing = 0;
|
||||||
static unsigned int notice_msg_time; /* when started showing */
|
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 int find_bios(int region, char **bios_file)
|
||||||
{
|
{
|
||||||
static char bios_path[1024];
|
|
||||||
int i, count;
|
int i, count;
|
||||||
const char * const *files;
|
const char * const *files;
|
||||||
FILE *f = NULL;
|
FILE *f = NULL;
|
||||||
|
@ -133,26 +134,27 @@ static int find_bios(int region, char **bios_file)
|
||||||
|
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
emu_make_path(bios_path, files[i], sizeof(bios_path) - 4);
|
emu_make_path(static_buff, files[i], sizeof(static_buff) - 4);
|
||||||
strcat(bios_path, ".bin");
|
strcat(static_buff, ".bin");
|
||||||
f = fopen(bios_path, "rb");
|
f = fopen(static_buff, "rb");
|
||||||
if (f) break;
|
if (f) break;
|
||||||
|
|
||||||
bios_path[strlen(bios_path) - 4] = 0;
|
static_buff[strlen(static_buff) - 4] = 0;
|
||||||
strcat(bios_path, ".zip");
|
strcat(static_buff, ".zip");
|
||||||
f = fopen(bios_path, "rb");
|
f = fopen(static_buff, "rb");
|
||||||
if (f) break;
|
if (f) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (f) {
|
if (f) {
|
||||||
lprintf("using bios: %s\n", bios_path);
|
lprintf("using bios: %s\n", static_buff);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
if (bios_file) *bios_file = bios_path;
|
if (bios_file)
|
||||||
|
*bios_file = static_buff;
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} 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");
|
region != 4 ? (region == 8 ? "EU" : "JAP") : "USA");
|
||||||
me_update_msg(bios_path);
|
me_update_msg(static_buff);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -560,6 +562,7 @@ int emu_reload_rom(char *rom_fname)
|
||||||
}
|
}
|
||||||
|
|
||||||
menu_romload_prepare(used_rom_name); // also CD load
|
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);
|
ret = PicoCartLoad(rom, &rom_data, &rom_size, (PicoAHW & PAHW_SMS) ? 1 : 0);
|
||||||
pm_close(rom);
|
pm_close(rom);
|
||||||
|
@ -594,7 +597,8 @@ int emu_reload_rom(char *rom_fname)
|
||||||
if (!ret) emu_read_config(0, 0);
|
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.");
|
me_update_msg("Failed to load ROM.");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
@ -700,6 +704,7 @@ static void romfname_ext(char *dst, const char *prefix, const char *ext)
|
||||||
if (ext) strcat(dst, ext);
|
if (ext) strcat(dst, ext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// <base dir><end>
|
||||||
void emu_make_path(char *buff, const char *end, int size)
|
void emu_make_path(char *buff, const char *end, int size)
|
||||||
{
|
{
|
||||||
int pos, end_len;
|
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)
|
char *emu_get_save_fname(int load, int is_sram, int slot)
|
||||||
{
|
{
|
||||||
static char saveFname[512];
|
char *saveFname = static_buff;
|
||||||
char ext[16];
|
char ext[16];
|
||||||
|
|
||||||
if (is_sram)
|
if (is_sram)
|
||||||
|
@ -1482,7 +1487,7 @@ void emu_loop(void)
|
||||||
pframes_done++; frames_done++;
|
pframes_done++; frames_done++;
|
||||||
diff_lim += target_frametime;
|
diff_lim += target_frametime;
|
||||||
|
|
||||||
if (!(currentConfig.EmuOpt & EOPT_NO_FRMLIMIT)) {
|
if (!(currentConfig.EmuOpt & (EOPT_NO_FRMLIMIT|EOPT_EXT_FRMLIMIT))) {
|
||||||
timestamp = get_ticks();
|
timestamp = get_ticks();
|
||||||
diff = timestamp - timestamp_base;
|
diff = timestamp - timestamp_base;
|
||||||
if (!reset_timing && diff < diff_lim) // we are too fast
|
if (!reset_timing && diff < diff_lim) // we are too fast
|
||||||
|
@ -1508,7 +1513,7 @@ void emu_loop(void)
|
||||||
PicoFrame();
|
PicoFrame();
|
||||||
|
|
||||||
/* frame limiter */
|
/* frame limiter */
|
||||||
if (!reset_timing && !(currentConfig.EmuOpt & EOPT_NO_FRMLIMIT))
|
if (!reset_timing && !(currentConfig.EmuOpt & (EOPT_NO_FRMLIMIT|EOPT_EXT_FRMLIMIT)))
|
||||||
{
|
{
|
||||||
timestamp = get_ticks();
|
timestamp = get_ticks();
|
||||||
diff = timestamp - timestamp_base;
|
diff = timestamp - timestamp_base;
|
||||||
|
|
|
@ -41,6 +41,7 @@ extern int g_screen_height;
|
||||||
#define EOPT_SHOW_RTC (1<<17)
|
#define EOPT_SHOW_RTC (1<<17)
|
||||||
#define EOPT_NO_FRMLIMIT (1<<18)
|
#define EOPT_NO_FRMLIMIT (1<<18)
|
||||||
#define EOPT_WIZ_TEAR_FIX (1<<19)
|
#define EOPT_WIZ_TEAR_FIX (1<<19)
|
||||||
|
#define EOPT_EXT_FRMLIMIT (1<<20) // no internal frame limiter (limited by snd, etc)
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
EOPT_SCALE_NONE = 0,
|
EOPT_SCALE_NONE = 0,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue