From 533320c8407c5219cfbdbac605a1a30c18f9db03 Mon Sep 17 00:00:00 2001 From: Patrick Mackinlay Date: Thu, 18 Jul 2019 13:20:00 +0700 Subject: mips1: add bus error line (nw) --- src/devices/cpu/mips/mips1.cpp | 26 +++++++++++++++++++++----- src/devices/cpu/mips/mips1.h | 2 ++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/devices/cpu/mips/mips1.cpp b/src/devices/cpu/mips/mips1.cpp index a5f99fcc993..eb379a225d0 100644 --- a/src/devices/cpu/mips/mips1.cpp +++ b/src/devices/cpu/mips/mips1.cpp @@ -207,6 +207,7 @@ void mips1core_device_base::device_reset() m_cop0[COP0_Status] = SR_BEV | SR_TS; m_data_spacenum = 0; + m_bus_error = false; } void mips1core_device_base::execute_run() @@ -1069,12 +1070,18 @@ template std::enable_if_t &&apply) { if (memory_translate(0, TRANSLATE_FETCH, address)) { - apply(space(0).read_dword(address)); + u32 const data = space(0).read_dword(address); + + if (m_bus_error) + { + m_bus_error = false; + generate_exception(EXCEPTION_BUSINST); + + return false; + } + apply(data); return true; } else diff --git a/src/devices/cpu/mips/mips1.h b/src/devices/cpu/mips/mips1.h index 3a442fa914c..1e56394ede6 100644 --- a/src/devices/cpu/mips/mips1.h +++ b/src/devices/cpu/mips/mips1.h @@ -14,6 +14,7 @@ public: // input lines template auto in_brcond() { return m_in_brcond[Coprocessor].bind(); } + void berr_w(int state) { m_bus_error = bool(state); } protected: mips1core_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u32 cpurev, size_t icache_size, size_t dcache_size); @@ -235,6 +236,7 @@ protected: // I/O devcb_read_line m_in_brcond[4]; + bool m_bus_error; }; class mips1_device_base : public mips1core_device_base -- cgit v1.2.3