diff --git a/core/hw/sh4/modules/fastmmu.cpp b/core/hw/sh4/modules/fastmmu.cpp index a2723ea96..59d4cfac5 100644 --- a/core/hw/sh4/modules/fastmmu.cpp +++ b/core/hw/sh4/modules/fastmmu.cpp @@ -254,6 +254,23 @@ u32 mmu_full_lookup(u32 va, const TLB_Entry** tlb_entry_ret, u32& rv) } template u32 mmu_full_lookup(u32 va, const TLB_Entry** tlb_entry_ret, u32& rv); +template +u32 mmu_full_SQ(u32 va, u32& rv) +{ + //Address=Dest&0xFFFFFFE0; + + const TLB_Entry *entry; + u32 lookup = mmu_full_lookup(va, &entry, rv); + + if (lookup != MMU_ERROR_NONE) + return lookup; + + rv &= ~31;//lower 5 bits are forced to 0 + + return MMU_ERROR_NONE; +} +template u32 mmu_full_SQ(u32 va, u32& rv); + template u32 mmu_data_translation(u32 va, u32& rv) { diff --git a/core/hw/sh4/modules/mmu.cpp b/core/hw/sh4/modules/mmu.cpp index b8a416c53..db65ae1d2 100644 --- a/core/hw/sh4/modules/mmu.cpp +++ b/core/hw/sh4/modules/mmu.cpp @@ -263,7 +263,7 @@ void mmu_raise_exception(u32 mmu_error, u32 address, u32 am) void DoMMUException(u32 address, u32 mmu_error, u32 access_type) { - printf_mmu("DoMMUException -> pc = 0x%X : ", next_pc); + printf_mmu("DoMMUException -> pc = 0x%X : %d ", next_pc, access_type); CCN_TEA = address; CCN_PTEH.VPN = address >> 10; @@ -431,6 +431,7 @@ u32 mmu_QACR_SQ(u32 va) return QACR + va; } +#ifndef FAST_MMU template u32 mmu_full_SQ(u32 va, u32& rv) { @@ -476,9 +477,8 @@ u32 mmu_full_SQ(u32 va, u32& rv) } return MMU_ERROR_NONE; } -template u32 mmu_full_SQ(u32 va, u32& rv); +template u32 mmu_full_SQ(u32 va, u32& rv); -#ifndef FAST_MMU template u32 mmu_data_translation(u32 va, u32& rv) {