diff --git a/output/dll/picodrive.wbx.gz b/output/dll/picodrive.wbx.gz
index 3c179174fe..163bc98cdd 100644
Binary files a/output/dll/picodrive.wbx.gz and b/output/dll/picodrive.wbx.gz differ
diff --git a/waterbox/picodrive/pico/cart.c b/waterbox/picodrive/pico/cart.c
index 6288823af4..7f1d71a802 100644
--- a/waterbox/picodrive/pico/cart.c
+++ b/waterbox/picodrive/pico/cart.c
@@ -184,6 +184,11 @@ static unsigned char *PicoCartAlloc(int filesize, int is_sms)
     // align to 512K for memhandlers
     rom_alloc_size = (filesize + 0x7ffff) & ~0x7ffff;
   }
+  if (rom_alloc_size < 0x400000) {
+	// sh2 memory mapping assumes that there's at least this much readable memory
+	// The comment in that code is `0x3fffff; // FIXME`, but I guess it was never fixed
+    rom_alloc_size = 0x400000;
+  }
 
   if (rom_alloc_size - filesize < 4)
     rom_alloc_size += 4; // padding for out-of-bound exec protection