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;
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;
}
}
+void m68k_remove_range(unsigned char *ptr) {
+ if (!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) {
+ 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);
+ 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--;
+ }
+ }
+}
+
void m68k_clear_ranges()
{
printf("[MUSASHI] Clearing all reads/write memory ranges.\n");