From 1f4e9f147fc079f0efe4c4f95c0c9549d3b41553 Mon Sep 17 00:00:00 2001 From: notaz Date: Thu, 1 Nov 2007 23:07:56 +0000 Subject: [PATCH] bugfix/improvement git-svn-id: file:///home/notaz/opt/svn/PicoDrive@290 be3aeb3a-fb24-0410-a615-afba39da0efa --- Pico/Cart.c | 17 +++++++++++++---- platform/gizmondo/emu.c | 17 ++++++++++++++--- platform/gp2x/emu.c | 18 +++++++++++++++--- platform/psp/emu.c | 19 ++++++++++++++++--- platform/psp/menu.c | 4 ++-- 5 files changed, 60 insertions(+), 15 deletions(-) diff --git a/Pico/Cart.c b/Pico/Cart.c index cf16951..a9fe6ec 100644 --- a/Pico/Cart.c +++ b/Pico/Cart.c @@ -331,16 +331,21 @@ int PicoUnloadCart(unsigned char* romdata) return 0; } -static int name_cmp(const char *name) +static int rom_strcmp(int rom_offset, const char *s1) { - int i, len = strlen(name); - const char *name_rom = (const char *)Pico.rom+0x150; + int i, len = strlen(s1); + const char *s_rom = (const char *)Pico.rom + rom_offset; for (i = 0; i < len; i++) - if (name[i] != name_rom[i^1]) + if (s1[i] != s_rom[i^1]) return 1; return 0; } +static int name_cmp(const char *name) +{ + return rom_strcmp(0x150, name); +} + /* various cart-specific things, which can't be handled by generic code */ void PicoCartDetect(void) { @@ -441,5 +446,9 @@ void PicoCartDetect(void) if (name_cmp("DINO DINI'S SOCCER") == 0 || name_cmp("MICRO MACHINES II") == 0) memset(SRam.data, 0xff, sram_size); + + // Unusual region 'code' + if (rom_strcmp(0x1f0, "EUROPE") == 0) + *(int *) (Pico.rom+0x1f0) = 0x20204520; } diff --git a/platform/gizmondo/emu.c b/platform/gizmondo/emu.c index 73c01dc..152c648 100644 --- a/platform/gizmondo/emu.c +++ b/platform/gizmondo/emu.c @@ -523,11 +523,22 @@ static void find_combos(void) combo_keys = combo_acts = 0; for (act = 0; act < 32; act++) { - int keyc = 0; + int keyc = 0, keyc2 = 0; if (act == 16 || act == 17) continue; // player2 flag - for (u = 0; u < 32; u++) + if (act > 17) { - if (currentConfig.KeyBinds[u] & (1 << act)) keyc++; + for (u = 0; u < 32; u++) + if (currentConfig.KeyBinds[u] & (1 << act)) keyc++; + } + else + { + for (u = 0; u < 32; u++) + if ((currentConfig.KeyBinds[u] & 0x30000) == 0 && // pl. 1 + (currentConfig.KeyBinds[u] & (1 << act))) keyc++; + for (u = 0; u < 32; u++) + if ((currentConfig.KeyBinds[u] & 0x30000) == 1 && // pl. 2 + (currentConfig.KeyBinds[u] & (1 << act))) keyc2++; + if (keyc2 > keyc) keyc = keyc2; } if (keyc > 1) { diff --git a/platform/gp2x/emu.c b/platform/gp2x/emu.c index 41187c5..701bcd8 100644 --- a/platform/gp2x/emu.c +++ b/platform/gp2x/emu.c @@ -104,11 +104,22 @@ static void find_combos(void) combo_keys = combo_acts = 0; for (act = 0; act < 32; act++) { - int keyc = 0; + int keyc = 0, keyc2 = 0; if (act == 16 || act == 17) continue; // player2 flag - for (u = 0; u < 32; u++) + if (act > 17) { - if (currentConfig.KeyBinds[u] & (1 << act)) keyc++; + for (u = 0; u < 32; u++) + if (currentConfig.KeyBinds[u] & (1 << act)) keyc++; + } + else + { + for (u = 0; u < 32; u++) + if ((currentConfig.KeyBinds[u] & 0x30000) == 0 && // pl. 1 + (currentConfig.KeyBinds[u] & (1 << act))) keyc++; + for (u = 0; u < 32; u++) + if ((currentConfig.KeyBinds[u] & 0x30000) == 1 && // pl. 2 + (currentConfig.KeyBinds[u] & (1 << act))) keyc2++; + if (keyc2 > keyc) keyc = keyc2; } if (keyc > 1) { @@ -122,6 +133,7 @@ static void find_combos(void) } } } + // printf("combo keys/acts: %08x %08x\n", combo_keys, combo_acts); } diff --git a/platform/psp/emu.c b/platform/psp/emu.c index 3f645ed..e72ea7d 100644 --- a/platform/psp/emu.c +++ b/platform/psp/emu.c @@ -794,11 +794,22 @@ static void find_combos(void) combo_keys = combo_acts = 0; for (act = 0; act < 32; act++) { - int keyc = 0; + int keyc = 0, keyc2 = 0; if (act == 16 || act == 17) continue; // player2 flag - for (u = 0; u < 32; u++) + if (act > 17) { - if (currentConfig.KeyBinds[u] & (1 << act)) keyc++; + for (u = 0; u < 32; u++) + if (currentConfig.KeyBinds[u] & (1 << act)) keyc++; + } + else + { + for (u = 0; u < 32; u++) + if ((currentConfig.KeyBinds[u] & 0x30000) == 0 && // pl. 1 + (currentConfig.KeyBinds[u] & (1 << act))) keyc++; + for (u = 0; u < 32; u++) + if ((currentConfig.KeyBinds[u] & 0x30000) == 1 && // pl. 2 + (currentConfig.KeyBinds[u] & (1 << act))) keyc2++; + if (keyc2 > keyc) keyc = keyc2; } if (keyc > 1) { @@ -867,6 +878,8 @@ void emu_Loop(void) sound_prepare(); } + sceDisplayWaitVblankStart(); + // loop? while (engineState == PGS_Running) { diff --git a/platform/psp/menu.c b/platform/psp/menu.c index 2231d95..cdcf1e6 100644 --- a/platform/psp/menu.c +++ b/platform/psp/menu.c @@ -991,7 +991,7 @@ static void menu_opt3_cust_draw(const menu_entry *entry, int x, int y, void *par char *val = " never"; if (currentConfig.EmuOpt & 0x2000) val = (currentConfig.EmuOpt & 0x10000) ? "sometimes" : " always"; - text_out16(x, y, "Wait for vsync %s", val); + text_out16(x, y, "Wait for vsync (slow) %s", val); break; } default: break; @@ -1045,7 +1045,7 @@ static void draw_dispmenu_options(int menu_sel) static void dispmenu_loop_options(void) { static int menu_sel = 0; - int menu_sel_max, is_32col = 0; + int menu_sel_max, is_32col = (Pico.video.reg[12]&1)^1; unsigned long inp = 0; menu_id selected_id; -- 2.39.2