12-in-1 + realtec mapper
[picodrive.git] / Pico / Cart.c
index 6eb7fc7..52f5cf5 100644 (file)
@@ -521,9 +521,12 @@ int PicoCartInsert(unsigned char *rom,unsigned int romsize)
   return PicoReset(1);\r
 }\r
 \r
-int PicoUnloadCart(unsigned char* romdata)\r
+int PicoCartUnload(void)\r
 {\r
-  free(romdata);\r
+  if (Pico.rom != NULL) {\r
+    free(Pico.rom);\r
+    Pico.rom=NULL;\r
+  }\r
   return 0;\r
 }\r
 \r
@@ -542,7 +545,10 @@ static int name_cmp(const char *name)
   return rom_strcmp(0x150, name);\r
 }\r
 \r
-/* various cart-specific things, which can't be handled by generic code */\r
+/*\r
+ * various cart-specific things, which can't be handled by generic code\r
+ * (maybe I should start using CRC for this stuff?)\r
+ */\r
 void PicoCartDetect(void)\r
 {\r
   int sram_size = 0, csum;\r
@@ -647,13 +653,22 @@ void PicoCartDetect(void)
     PicoSVPStartup();\r
   }\r
 \r
-  // Detect 4-in-1 and 12-in-1\r
+  // Detect 12-in-1 mapper\r
   else if ((name_cmp("ROBOCOP 3") && Pico.romsize == 0x200000) ||\r
-    (rom_strcmp(0x160, "FLICKY") && Pico.romsize == 0x200000))\r
+    (rom_strcmp(0x160, "FLICKY") && Pico.romsize >= 0x200000))\r
   {\r
     carthw_12in1_startup();\r
   }\r
 \r
+  // Realtec mapper\r
+  else if (Pico.romsize == 512*1024 && (\r
+    rom_strcmp(0x94, "THE EARTH DEFEND") ||\r
+    rom_strcmp(0xfe, "WISEGAME 11-03-1993") || // Funny World\r
+    rom_strcmp(0x95, "MALLET LEGEND "))) // Whac-A-Critter\r
+  {\r
+    carthw_realtec_startup();\r
+  }\r
+\r
   // Some games malfunction if SRAM is not filled with 0xff\r
   if (name_cmp("DINO DINI'S SOCCER") == 0 ||\r
       name_cmp("MICRO MACHINES II") == 0)\r