memory: allow SRAM word writes
[picodrive.git] / pico / memory.c
index 24e5f21..5be66f5 100644 (file)
@@ -49,7 +49,7 @@ static void xmap_set(uptr *map, int shift, int start_addr, int end_addr,
   for (i = start_addr >> shift; i <= end_addr >> shift; i++) {\r
     map[i] = addr >> 1;\r
     if (is_func)\r
-      map[i] |= (uptr)1 << (sizeof(addr) * 8 - 1);\r
+      map[i] |= MAP_FLAG;\r
   }\r
 }\r
 \r
@@ -126,19 +126,19 @@ void m68k_map_unmap(int start_addr, int end_addr)
 \r
   addr = (uptr)m68k_unmapped_read8;\r
   for (i = start_addr >> shift; i <= end_addr >> shift; i++)\r
-    m68k_read8_map[i] = (addr >> 1) | (1 << 31);\r
+    m68k_read8_map[i] = (addr >> 1) | MAP_FLAG;\r
 \r
   addr = (uptr)m68k_unmapped_read16;\r
   for (i = start_addr >> shift; i <= end_addr >> shift; i++)\r
-    m68k_read16_map[i] = (addr >> 1) | (1 << 31);\r
+    m68k_read16_map[i] = (addr >> 1) | MAP_FLAG;\r
 \r
   addr = (uptr)m68k_unmapped_write8;\r
   for (i = start_addr >> shift; i <= end_addr >> shift; i++)\r
-    m68k_write8_map[i] = (addr >> 1) | (1 << 31);\r
+    m68k_write8_map[i] = (addr >> 1) | MAP_FLAG;\r
 \r
   addr = (uptr)m68k_unmapped_write16;\r
   for (i = start_addr >> shift; i <= end_addr >> shift; i++)\r
-    m68k_write16_map[i] = (addr >> 1) | (1 << 31);\r
+    m68k_write16_map[i] = (addr >> 1) | MAP_FLAG;\r
 }\r
 \r
 MAKE_68K_READ8(m68k_read8, m68k_read8_map)\r
@@ -448,11 +448,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