From 77a6ed07560273d6d5f55ae7805e2ab7fb64639d Mon Sep 17 00:00:00 2001 From: beeanyew Date: Wed, 23 Jun 2021 04:52:44 +0200 Subject: [PATCH] Actually remove the read/write ranges "properly" --- m68kcpu.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/m68kcpu.c b/m68kcpu.c index b384e2b..5b494ad 100644 --- a/m68kcpu.c +++ b/m68kcpu.c @@ -1405,6 +1405,9 @@ void m68k_remove_range(unsigned char *ptr) { return; } + m68ki_cpu.code_translation_cache.lower = 0; + m68ki_cpu.code_translation_cache.upper = 0; + // 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) { @@ -1412,12 +1415,30 @@ void m68k_remove_range(unsigned char *ptr) { m68ki_cpu.read_addr[i] = 0; m68ki_cpu.read_upper[i] = 0; printf("[MUSASHI] Unmapped read range %d.\n", i); + for (int j = i; j < 8 - 1; j++) { + m68ki_cpu.read_data[j] = m68ki_cpu.read_data[j + 1]; + m68ki_cpu.read_addr[j] = m68ki_cpu.read_addr[j + 1]; + m68ki_cpu.read_upper[j] = m68ki_cpu.read_upper[j + 1]; + } + m68ki_cpu.read_data[8 - 1] = NULL; + m68ki_cpu.read_addr[8 - 1] = 0; + m68ki_cpu.read_upper[8 - 1] = 0; + m68ki_cpu.read_ranges--; } 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); + for (int j = i; j < 8 - 1; j++) { + m68ki_cpu.write_data[j] = m68ki_cpu.write_data[j + 1]; + m68ki_cpu.write_addr[j] = m68ki_cpu.write_addr[j + 1]; + m68ki_cpu.write_upper[j] = m68ki_cpu.write_upper[j + 1]; + } + m68ki_cpu.write_data[8 - 1] = NULL; + m68ki_cpu.write_addr[8 - 1] = 0; + m68ki_cpu.write_upper[8 - 1] = 0; + m68ki_cpu.write_ranges--; } } } -- 2.39.2