bugfix/improvement
authornotaz <notasas@gmail.com>
Thu, 1 Nov 2007 23:07:56 +0000 (23:07 +0000)
committernotaz <notasas@gmail.com>
Thu, 1 Nov 2007 23:07:56 +0000 (23:07 +0000)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@290 be3aeb3a-fb24-0410-a615-afba39da0efa

Pico/Cart.c
platform/gizmondo/emu.c
platform/gp2x/emu.c
platform/psp/emu.c
platform/psp/menu.c

index cf16951..a9fe6ec 100644 (file)
@@ -331,16 +331,21 @@ int PicoUnloadCart(unsigned char* romdata)
   return 0;\r
 }\r
 \r
-static int name_cmp(const char *name)\r
+static int rom_strcmp(int rom_offset, const char *s1)\r
 {\r
-  int i, len = strlen(name);\r
-  const char *name_rom = (const char *)Pico.rom+0x150;\r
+  int i, len = strlen(s1);\r
+  const char *s_rom = (const char *)Pico.rom + rom_offset;\r
   for (i = 0; i < len; i++)\r
-    if (name[i] != name_rom[i^1])\r
+    if (s1[i] != s_rom[i^1])\r
       return 1;\r
   return 0;\r
 }\r
 \r
+static int name_cmp(const char *name)\r
+{\r
+  return rom_strcmp(0x150, name);\r
+}\r
+\r
 /* various cart-specific things, which can't be handled by generic code */\r
 void PicoCartDetect(void)\r
 {\r
@@ -441,5 +446,9 @@ void PicoCartDetect(void)
   if (name_cmp("DINO DINI'S SOCCER") == 0 ||\r
       name_cmp("MICRO MACHINES II") == 0)\r
     memset(SRam.data, 0xff, sram_size);\r
+\r
+  // Unusual region 'code'\r
+  if (rom_strcmp(0x1f0, "EUROPE") == 0)\r
+    *(int *) (Pico.rom+0x1f0) = 0x20204520;\r
 }\r
 \r
index 73c01dc..152c648 100644 (file)
@@ -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)
                {
index 41187c5..701bcd8 100644 (file)
@@ -104,11 +104,22 @@ static void find_combos(void)
        combo_keys = combo_acts = 0;\r
        for (act = 0; act < 32; act++)\r
        {\r
-               int keyc = 0;\r
+               int keyc = 0, keyc2 = 0;\r
                if (act == 16 || act == 17) continue; // player2 flag\r
-               for (u = 0; u < 32; u++)\r
+               if (act > 17)\r
                {\r
-                       if (currentConfig.KeyBinds[u] & (1 << act)) keyc++;\r
+                       for (u = 0; u < 32; u++)\r
+                               if (currentConfig.KeyBinds[u] & (1 << act)) keyc++;\r
+               }\r
+               else\r
+               {\r
+                       for (u = 0; u < 32; u++)\r
+                               if ((currentConfig.KeyBinds[u] & 0x30000) == 0 && // pl. 1\r
+                                       (currentConfig.KeyBinds[u] & (1 << act))) keyc++;\r
+                       for (u = 0; u < 32; u++)\r
+                               if ((currentConfig.KeyBinds[u] & 0x30000) == 1 && // pl. 2\r
+                                       (currentConfig.KeyBinds[u] & (1 << act))) keyc2++;\r
+                       if (keyc2 > keyc) keyc = keyc2;\r
                }\r
                if (keyc > 1)\r
                {\r
@@ -122,6 +133,7 @@ static void find_combos(void)
                        }\r
                }\r
        }\r
+\r
        // printf("combo keys/acts: %08x %08x\n", combo_keys, combo_acts);\r
 }\r
 \r
index 3f645ed..e72ea7d 100644 (file)
@@ -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)
        {
index 2231d95..cdcf1e6 100644 (file)
@@ -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;