From 31d9cc35365770eac015b4b62b3e7dd5c9b0c5cf Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sun, 25 Jul 2021 22:38:31 +0300 Subject: [PATCH] MMU setup update. --- cpummu.cpp | 25 +++++++++---------------- newcpu.cpp | 17 +++++++++++------ 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/cpummu.cpp b/cpummu.cpp index 59a56eff..5c316c98 100644 --- a/cpummu.cpp +++ b/cpummu.cpp @@ -1456,6 +1456,15 @@ void REGPARAM2 mmu_set_funcs(void) { if (currprefs.mmu_model != 68040 && currprefs.mmu_model != 68060) return; + + x_phys_get_iword = phys_get_word; + x_phys_get_ilong = phys_get_long; + x_phys_get_byte = phys_get_byte; + x_phys_get_word = phys_get_word; + x_phys_get_long = phys_get_long; + x_phys_put_byte = phys_put_byte; + x_phys_put_word = phys_put_word; + x_phys_put_long = phys_put_long; if (currprefs.cpu_memory_cycle_exact || currprefs.cpu_compatible) { x_phys_get_iword = get_word_icache040; x_phys_get_ilong = get_long_icache040; @@ -1473,23 +1482,7 @@ void REGPARAM2 mmu_set_funcs(void) x_phys_put_byte = mem_access_delay_byte_write_c040; x_phys_put_word = mem_access_delay_word_write_c040; x_phys_put_long = mem_access_delay_long_write_c040; - } else { - x_phys_get_byte = phys_get_byte; - x_phys_get_word = phys_get_word; - x_phys_get_long = phys_get_long; - x_phys_put_byte = phys_put_byte; - x_phys_put_word = phys_put_word; - x_phys_put_long = phys_put_long; } - } else { - x_phys_get_iword = phys_get_word; - x_phys_get_ilong = phys_get_long; - x_phys_get_byte = phys_get_byte; - x_phys_get_word = phys_get_word; - x_phys_get_long = phys_get_long; - x_phys_put_byte = phys_put_byte; - x_phys_put_word = phys_put_word; - x_phys_put_long = phys_put_long; } } diff --git a/newcpu.cpp b/newcpu.cpp index 61d94096..6f6e1cf9 100644 --- a/newcpu.cpp +++ b/newcpu.cpp @@ -984,11 +984,16 @@ static void set_x_funcs (void) x_get_word = get_word_dc030; x_get_byte = get_byte_dc030; } - } - x_do_cycles = do_cycles; - x_do_cycles_pre = do_cycles; - x_do_cycles_post = do_cycles_post; + if (currprefs.cpu_cycle_exact) { + x_do_cycles = do_cycles_ce020; + x_do_cycles_pre = do_cycles_ce020; + x_do_cycles_post = do_cycles_ce020_post; + } else { + x_do_cycles = do_cycles; + x_do_cycles_pre = do_cycles; + x_do_cycles_post = do_cycles_post; + } } else if (currprefs.cpu_model < 68020) { // 68000/010 if (currprefs.cpu_cycle_exact) { @@ -9125,7 +9130,7 @@ void mem_access_delay_long_write_c040 (uaecptr addr, uae_u32 v) wait_cpu_cycle_write_ce020 (addr + 2, 1, (v >> 0) & 0xffff); break; case CE_MEMBANK_CHIP32: - if ((addr & 3) == 3) { + if ((addr & 3) != 0) { wait_cpu_cycle_write_ce020 (addr + 0, 1, (v >> 16) & 0xffff); wait_cpu_cycle_write_ce020 (addr + 2, 1, (v >> 0) & 0xffff); } else { @@ -9134,7 +9139,7 @@ void mem_access_delay_long_write_c040 (uaecptr addr, uae_u32 v) break; case CE_MEMBANK_FAST16: put_long (addr, v); - do_cycles_ce020_mem (2 * CPU020_MEM_CYCLE, v); + do_cycles_c040_mem(1, v); break; case CE_MEMBANK_FAST32: put_long (addr, v); -- 2.47.3