X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=m68kcpu.c;fp=m68kcpu.c;h=b384e2b0730d6ac4f6616994cd118cf1a3247651;hb=16a902fad26ea3f63550af1e4cccd2dac7d7cce3;hp=1068f264440ef2ca82bdc6c2d8935cc7b5c05c3a;hpb=d485267523c5fe4331e00528d23f14711e59327c;p=pistorm diff --git a/m68kcpu.c b/m68kcpu.c index 1068f26..b384e2b 100644 --- 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");