allow to add symbols for host_dasm
[picodrive.git] / pico / 32x / memory.c
index 4417a48..eaf1e3a 100644 (file)
@@ -1016,6 +1016,10 @@ static u32 sh2_read16_da(u32 a, int id)
   return ((u16 *)Pico32xMem->data_array[id])[(a & 0xfff) / 2];
 }
 
+static void sh2_write_ignore(u32 a, u32 d, int id)
+{
+}
+
 // write8
 static void sh2_write8_unmapped(u32 a, u32 d, int id)
 {
@@ -1174,7 +1178,7 @@ u32 REGPARM(2) p32x_sh2_read8(u32 a, SH2 *sh2)
 
   sh2_map += SH2MAP_ADDR2OFFS(a);
   p = sh2_map->addr;
-  if (p & (1 << 31))
+  if (map_flag_set(p))
     return ((sh2_read_handler *)(p << 1))(a, sh2->is_slave);
   else
     return *(u8 *)((p << 1) + ((a & sh2_map->mask) ^ 1));
@@ -1187,7 +1191,7 @@ u32 REGPARM(2) p32x_sh2_read16(u32 a, SH2 *sh2)
 
   sh2_map += SH2MAP_ADDR2OFFS(a);
   p = sh2_map->addr;
-  if (p & (1 << 31))
+  if (map_flag_set(p))
     return ((sh2_read_handler *)(p << 1))(a, sh2->is_slave);
   else
     return *(u16 *)((p << 1) + ((a & sh2_map->mask) & ~1));
@@ -1203,7 +1207,7 @@ u32 REGPARM(2) p32x_sh2_read32(u32 a, SH2 *sh2)
   offs = SH2MAP_ADDR2OFFS(a);
   sh2_map += offs;
   p = sh2_map->addr;
-  if (!(p & (1 << 31))) {
+  if (!map_flag_set(p)) {
     // XXX: maybe 32bit access instead with ror?
     u16 *pd = (u16 *)((p << 1) + ((a & sh2_map->mask) & ~1));
     return (pd[0] << 16) | pd[1];
@@ -1372,7 +1376,7 @@ static void get_bios(void)
 }
 
 #define MAP_MEMORY(m) ((uptr)(m) >> 1)
-#define MAP_HANDLER(h) (((uptr)(h) >> 1) | (1 << 31))
+#define MAP_HANDLER(h) ( ((uptr)(h) >> 1) | ((uptr)1 << (sizeof(uptr) * 8 - 1)) )
 
 static sh2_memmap sh2_read8_map[0x20], sh2_read16_map[0x20];
 // for writes we are using handlers only
@@ -1451,6 +1455,12 @@ void PicoMemSetup32x(void)
     sh2_write16_map[i]      = sh2_write16_unmapped;
   }
 
+  // "purge area"
+  for (i = 0x08; i <= 0x0b; i++) {
+    sh2_write8_map[i]       =
+    sh2_write16_map[i]      = sh2_write_ignore;
+  }
+
   // CS0
   sh2_read8_map[0].addr   = sh2_read8_map[4].addr   = MAP_HANDLER(sh2_read8_cs0);
   sh2_read16_map[0].addr  = sh2_read16_map[4].addr  = MAP_HANDLER(sh2_read16_cs0);