]> git.sesse.net Git - pistorm/blobdiff - m68kcpu.c
Add some more Mac68k handling stuff
[pistorm] / m68kcpu.c
index 1068f264440ef2ca82bdc6c2d8935cc7b5c05c3a..b384e2b0730d6ac4f6616994cd118cf1a3247651 100644 (file)
--- a/m68kcpu.c
+++ b/m68kcpu.c
@@ -1316,8 +1316,12 @@ void m68k_add_ram_range(uint32_t addr, uint32_t upper, unsigned char *ptr)
                return;
 
        for (int i = 0; i < m68ki_cpu.write_ranges; i++) {
-               if (m68ki_cpu.write_addr[i] == addr) {
+               if (m68ki_cpu.write_addr[i] == addr || m68ki_cpu.write_data[i] == ptr) {
                        uint8_t changed = 0;
+                       if (m68ki_cpu.write_addr[i] != addr) {
+                               m68ki_cpu.write_addr[i] = addr;
+                               changed = 1;
+                       }
                        if (m68ki_cpu.write_upper[i] != upper) {
                                m68ki_cpu.write_upper[i] = upper;
                                changed = 1;
@@ -1363,8 +1367,12 @@ void m68k_add_rom_range(uint32_t addr, uint32_t upper, unsigned char *ptr)
                return;
 
        for (int i = 0; i < m68ki_cpu.read_ranges; i++) {
-               if (m68ki_cpu.read_addr[i] == addr) {
+               if (m68ki_cpu.read_addr[i] == addr  || m68ki_cpu.read_data[i] == ptr) {
                        uint8_t changed = 0;
+                       if (m68ki_cpu.read_addr[i] != addr) {
+                               m68ki_cpu.read_addr[i] = addr;
+                               changed = 1;
+                       }
                        if (m68ki_cpu.read_upper[i] != upper) {
                                m68ki_cpu.read_upper[i] = upper;
                                changed = 1;
@@ -1392,6 +1400,28 @@ void m68k_add_rom_range(uint32_t addr, uint32_t upper, unsigned char *ptr)
        }
 }
 
+void m68k_remove_range(unsigned char *ptr) {
+       if (!ptr) {
+               return;
+       }
+
+       // FIXME: Replace the 8 with a #define, such as MAX_MUSASHI_RANGES
+       for (int i = 0; i < 8; i++) {
+               if (m68ki_cpu.read_data[i] == ptr) {
+                       m68ki_cpu.read_data[i] = NULL;
+                       m68ki_cpu.read_addr[i] = 0;
+                       m68ki_cpu.read_upper[i] = 0;
+                       printf("[MUSASHI] Unmapped read range %d.\n", i);
+               }
+               if (m68ki_cpu.write_data[i] == ptr) {
+                       m68ki_cpu.write_data[i] = NULL;
+                       m68ki_cpu.write_addr[i] = 0;
+                       m68ki_cpu.write_upper[i] = 0;
+                       printf("[MUSASHI] Unmapped write range %d.\n", i);
+               }
+       }
+}
+
 void m68k_clear_ranges()
 {
        printf("[MUSASHI] Clearing all reads/write memory ranges.\n");