]> git.sesse.net Git - pistorm/commitdiff
Add OVL handling to write-through cache RAM
authorbeeanyew <beeanyew@gmail.com>
Tue, 22 Jun 2021 12:00:36 +0000 (14:00 +0200)
committerbeeanyew <beeanyew@gmail.com>
Tue, 22 Jun 2021 12:00:36 +0000 (14:00 +0200)
memory_mapped.c

index 372485d46eb4cb66939b77bea9168bb571dd2999..8c399b5f8d3590d145fecac15d65472e32ab6436 100644 (file)
@@ -25,7 +25,7 @@ inline int handle_mapped_read(struct emulator_config *cfg, unsigned int addr, un
   for (int i = 0; i < MAX_NUM_MAPPED_ITEMS; i++) {
     if (cfg->map_type[i] == MAPTYPE_NONE)
       continue;
-    else if (ovl && cfg->map_type[i] == MAPTYPE_ROM) {
+    else if (ovl && (cfg->map_type[i] == MAPTYPE_ROM || cfg->map_type[i] == MAPTYPE_RAM_WTC)) {
       if (cfg->map_mirror[i] != ((unsigned int)-1) && CHKRANGE(addr, cfg->map_mirror[i], cfg->map_size[i])) {
         read_addr = cfg->map_data[i] + ((addr - cfg->map_mirror[i]) % cfg->rom_size[i]);
         goto read_value;
@@ -87,6 +87,13 @@ inline int handle_mapped_write(struct emulator_config *cfg, unsigned int addr, u
   for (int i = 0; i < MAX_NUM_MAPPED_ITEMS; i++) {
     if (cfg->map_type[i] == MAPTYPE_NONE)
       continue;
+    else if (ovl && cfg->map_type[i] == MAPTYPE_RAM_WTC) {
+      if (cfg->map_mirror[i] != ((unsigned int)-1) && CHKRANGE(addr, cfg->map_mirror[i], cfg->map_size[i])) {
+        write_addr = cfg->map_data[i] + ((addr - cfg->map_mirror[i]) % cfg->rom_size[i]);
+        res = -1;
+        goto write_value;
+      }
+    }
     else if (CHKRANGE_ABS(addr, cfg->map_offset[i], cfg->map_high[i])) {
       switch(cfg->map_type[i]) {
         case MAPTYPE_ROM:
@@ -99,6 +106,7 @@ inline int handle_mapped_write(struct emulator_config *cfg, unsigned int addr, u
           goto write_value;
           break;
         case MAPTYPE_RAM_WTC:
+          //printf("Some write to WTC RAM.\n");
           write_addr = cfg->map_data[i] + (addr - cfg->map_offset[i]);
           res = -1;
           goto write_value;