start new makefile, migrate to libpicofe
[picodrive.git] / pico / cart.c
index 8d30a93..b060079 100644 (file)
@@ -9,6 +9,7 @@
 \r
 #include "pico_int.h"\r
 #include "../zlib/zlib.h"\r
+#include "../cpu/debug.h"\r
 #include "../unzip/unzip.h"\r
 #include "../unzip/unzip_stream.h"\r
 \r
@@ -438,6 +439,9 @@ static unsigned char *PicoCartAlloc(int filesize, int is_sms)
     if (filesize > (1 << s))\r
       s++;\r
     rom_alloc_size = 1 << s;\r
+    // be sure we can cover all address space\r
+    if (rom_alloc_size < 0x10000)\r
+      rom_alloc_size = 0x10000;\r
   }\r
   else {\r
     // make alloc size at least sizeof(mcd_state),\r
@@ -454,7 +458,7 @@ static unsigned char *PicoCartAlloc(int filesize, int is_sms)
 \r
   // Allocate space for the rom plus padding\r
   // use special address for 32x dynarec\r
-  rom = plat_mmap(0x02000000, rom_alloc_size);\r
+  rom = plat_mmap(0x02000000, rom_alloc_size, 0, 0);\r
   return rom;\r
 }\r
 \r
@@ -555,6 +559,7 @@ int PicoCartInsert(unsigned char *rom, unsigned int romsize, const char *carthw_
     PicoCartUnloadHook();\r
     PicoCartUnloadHook = NULL;\r
   }\r
+  pdb_cleanup();\r
 \r
   PicoAHW &= PAHW_MCD|PAHW_SMS;\r
 \r
@@ -590,6 +595,17 @@ int PicoCartInsert(unsigned char *rom, unsigned int romsize, const char *carthw_
   return 0;\r
 }\r
 \r
+int PicoCartResize(int newsize)\r
+{\r
+  void *tmp = plat_mremap(Pico.rom, rom_alloc_size, newsize);\r
+  if (tmp == NULL)\r
+    return -1;\r
+\r
+  Pico.rom = tmp;\r
+  rom_alloc_size = newsize;\r
+  return 0;\r
+}\r
+\r
 void PicoCartUnload(void)\r
 {\r
   if (PicoCartUnloadHook != NULL) {\r