recognize the MED ssf2 header
[picodrive.git] / pico / memory.c
index 4f38e5e..83fe181 100644 (file)
@@ -63,6 +63,17 @@ void cpu68k_map_set(uptr *map, int start_addr, int end_addr,
     const void *func_or_mh, int is_func)\r
 {\r
   xmap_set(map, M68K_MEM_SHIFT, start_addr, end_addr, func_or_mh, is_func);\r
+#ifdef EMU_F68K\r
+  // setup FAME fetchmap\r
+  if (!is_func)\r
+  {\r
+    int shiftout = 24 - FAMEC_FETCHBITS;\r
+    int i = start_addr >> shiftout;\r
+    uptr base = (uptr)func_or_mh - (i << shiftout);\r
+    for (; i <= (end_addr >> shiftout); i++)\r
+      PicoCpuFM68k.Fetch[i] = base;\r
+  }\r
+#endif\r
 }\r
 \r
 // more specialized/optimized function (does same as above)\r
@@ -89,6 +100,17 @@ void cpu68k_map_all_ram(int start_addr, int end_addr, void *ptr, int is_sub)
   addr >>= 1;\r
   for (i = start_addr >> shift; i <= end_addr >> shift; i++)\r
     r8map[i] = r16map[i] = w8map[i] = w16map[i] = addr;\r
+#ifdef EMU_F68K\r
+  // setup FAME fetchmap\r
+  {\r
+    M68K_CONTEXT *ctx = is_sub ? &PicoCpuFS68k : &PicoCpuFM68k;\r
+    int shiftout = 24 - FAMEC_FETCHBITS;\r
+    i = start_addr >> shiftout;\r
+    addr = (uptr)ptr - (i << shiftout);\r
+    for (; i <= (end_addr >> shiftout); i++)\r
+      ctx->Fetch[i] = addr;\r
+  }\r
+#endif\r
 }\r
 \r
 static u32 m68k_unmapped_read8(u32 a)\r
@@ -448,11 +470,14 @@ static void PicoWrite16_sram(u32 a, u32 d)
     EEPROM_write16(d);\r
   }\r
   else {\r
-    // XXX: hardware could easily use MSB too..\r
     u8 *pm = (u8 *)(SRam.data - SRam.start + a);\r
-    if (*pm != (u8)d) {\r
+    if (pm[0] != (u8)(d >> 8)) {\r
       SRam.changed = 1;\r
-      *pm = (u8)d;\r
+      pm[0] = (u8)(d >> 8);\r
+    }\r
+    if (pm[1] != (u8)d) {\r
+      SRam.changed = 1;\r
+      pm[1] = (u8)d;\r
     }\r
   }\r
 }\r
@@ -796,14 +821,12 @@ PICO_INTERNAL void PicoMemSetup(void)
   {\r
     int i;\r
     // by default, point everything to first 64k of ROM\r
-    for (i = 0; i < M68K_FETCHBANK1; i++)\r
+    for (i = 0; i < M68K_FETCHBANK1 * 0xe0 / 0x100; i++)\r
       PicoCpuFM68k.Fetch[i] = (unsigned long)Pico.rom - (i<<(24-FAMEC_FETCHBITS));\r
     // now real ROM\r
     for (i = 0; i < M68K_FETCHBANK1 && (i<<(24-FAMEC_FETCHBITS)) < Pico.romsize; i++)\r
       PicoCpuFM68k.Fetch[i] = (unsigned long)Pico.rom;\r
-    // .. and RAM\r
-    for (i = M68K_FETCHBANK1*14/16; i < M68K_FETCHBANK1; i++)\r
-      PicoCpuFM68k.Fetch[i] = (unsigned long)Pico.ram - (i<<(24-FAMEC_FETCHBITS));\r
+    // RAM already set\r
   }\r
 #endif\r
 #ifdef EMU_M68K\r