From 991ed996ef4d5fe868728a342046a7c41f87ea06 Mon Sep 17 00:00:00 2001 From: Patrick Mackinlay Date: Sat, 27 May 2023 15:55:28 +0700 Subject: mips1: fix address translation --- src/devices/cpu/mips/mips1.cpp | 18 +++++------------- src/devices/cpu/mips/mips1.h | 16 +++++++--------- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/src/devices/cpu/mips/mips1.cpp b/src/devices/cpu/mips/mips1.cpp index 9f22e5665c7..f96daccfc85 100644 --- a/src/devices/cpu/mips/mips1.cpp +++ b/src/devices/cpu/mips/mips1.cpp @@ -644,7 +644,7 @@ device_memory_interface::space_config_vector mips1core_device_base::memory_space bool mips1core_device_base::memory_translate(int spacenum, int intention, offs_t &address, address_space *&target_space) { target_space = &space(spacenum); - if(spacenum != AS_PROGRAM) + if (spacenum != AS_PROGRAM) return true; return memory_translate(intention, address, true); } @@ -886,7 +886,7 @@ void mips1core_device_base::address_error(int intention, u32 const address) m_cop0[COP0_BadVAddr] = address; - generate_exception((intention & TR_WRITE) ? EXCEPTION_ADDRSTORE : EXCEPTION_ADDRLOAD); + generate_exception((intention == TR_WRITE) ? EXCEPTION_ADDRSTORE : EXCEPTION_ADDRLOAD); // address errors shouldn't typically occur, so a breakpoint is handy machine().debug_break(); @@ -1952,14 +1952,6 @@ template void mips1_device_base::set_cop1_reg(unsigned const reg, T m_f[reg] = data; } -bool mips1_device_base::memory_translate(int spacenum, int intention, offs_t &address, address_space *&target_space) -{ - target_space = &space(spacenum); - if(spacenum != AS_PROGRAM) - return true; - return memory_translate(intention, address, true); -} - bool mips1_device_base::memory_translate(int intention, offs_t &address, bool debug) { // check for kernel memory address @@ -2014,7 +2006,7 @@ bool mips1_device_base::memory_translate(int intention, offs_t &address, bool de } // test dirty - if ((intention & TR_WRITE) && !(entry[1] & EL_D)) + if ((intention == TR_WRITE) && !(entry[1] & EL_D)) { refill = false; modify = true; @@ -2041,7 +2033,7 @@ bool mips1_device_base::memory_translate(int intention, offs_t &address, bool de (m_cop0[COP0_EntryHi] & EH_ASID) >> 6, address, machine().describe_context()); else LOGMASKED(LOG_TLB, "asid %2d tlb miss %c address 0x%08x (%s)\n", - (m_cop0[COP0_EntryHi] & EH_ASID) >> 6, (intention & TR_WRITE) ? 'w' : 'r', address, machine().describe_context()); + (m_cop0[COP0_EntryHi] & EH_ASID) >> 6, (intention == TR_WRITE) ? 'w' : 'r', address, machine().describe_context()); } // load tlb exception registers @@ -2049,7 +2041,7 @@ bool mips1_device_base::memory_translate(int intention, offs_t &address, bool de m_cop0[COP0_EntryHi] = key; m_cop0[COP0_Context] = (m_cop0[COP0_Context] & PTE_BASE) | ((address >> 10) & BAD_VPN); - generate_exception(modify ? EXCEPTION_TLBMOD : (intention & TR_WRITE) ? EXCEPTION_TLBSTORE : EXCEPTION_TLBLOAD, refill); + generate_exception(modify ? EXCEPTION_TLBMOD : (intention == TR_WRITE) ? EXCEPTION_TLBSTORE : EXCEPTION_TLBLOAD, refill); } return false; diff --git a/src/devices/cpu/mips/mips1.h b/src/devices/cpu/mips/mips1.h index 78e9b3808e2..64b65d7d056 100644 --- a/src/devices/cpu/mips/mips1.h +++ b/src/devices/cpu/mips/mips1.h @@ -150,24 +150,24 @@ protected: BAD_VPN = 0x001ffffc, // virtual address bits 30..12 }; - // device_t overrides + // device_t implementation virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - // device_execute_interface overrides + // device_execute_interface implementation virtual u32 execute_min_cycles() const noexcept override { return 1; } virtual u32 execute_max_cycles() const noexcept override { return 40; } virtual u32 execute_input_lines() const noexcept override { return 6; } virtual void execute_run() override; virtual void execute_set_input(int inputnum, int state) override; - // device_memory_interface overrides + // device_memory_interface implementation virtual space_config_vector memory_space_config() const override; virtual bool memory_translate(int spacenum, int intention, offs_t &address, address_space *&target_space) override; - bool memory_translate(int intention, offs_t &address, bool debug); + virtual bool memory_translate(int intention, offs_t &address, bool debug); - // device_disasm_interface overrides + // device_disasm_interface implementation virtual std::unique_ptr create_disassembler() override; void icache_map(address_map &map); @@ -294,13 +294,11 @@ protected: FCR31_CM = 0x0001f000, // cause mask (except unimplemented) }; - // device_t overrides + // device_t implementation virtual void device_start() override; virtual void device_reset() override; - // device_memory_interface overrides - virtual bool memory_translate(int spacenum, int intention, offs_t &address, address_space *&target_space) override; - bool memory_translate(int intention, offs_t &address, bool debug); + virtual bool memory_translate(int intention, offs_t &address, bool debug) override; virtual void handle_cop0(u32 const op) override; virtual u32 get_cop0_reg(unsigned const reg) override; -- cgit v1.2.3