From 1539249cfd0f44e3f659a30df6bf65b3a23ce5bb Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 1 Dec 2024 00:37:45 +0100 Subject: s2650: correct interrupt cycles --- src/devices/cpu/s2650/s2650.cpp | 5 ++++- src/devices/cpu/s2650/s2650.h | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/devices/cpu/s2650/s2650.cpp b/src/devices/cpu/s2650/s2650.cpp index 55ce44e7321..fbcd2d07afc 100644 --- a/src/devices/cpu/s2650/s2650.cpp +++ b/src/devices/cpu/s2650/s2650.cpp @@ -73,7 +73,8 @@ device_memory_interface::space_config_vector s2650_device::memory_space_config() // condition code changes for a byte -static const uint8_t ccc[0x100] = { +static const uint8_t ccc[0x100] = +{ 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, @@ -196,6 +197,7 @@ inline int s2650_device::check_irq_line() int vector = m_intack_handler(); // build effective address within first 8K page + cycles += 9; // ZBSR m_ea = util::sext(vector, 7) & PMSK; if (vector & 0x80) // indirect bit set ? { @@ -215,6 +217,7 @@ inline int s2650_device::check_irq_line() m_iar = m_ea & PMSK; } } + return cycles; } diff --git a/src/devices/cpu/s2650/s2650.h b/src/devices/cpu/s2650/s2650.h index 2f03b3db284..fec4760c4b6 100644 --- a/src/devices/cpu/s2650/s2650.h +++ b/src/devices/cpu/s2650/s2650.h @@ -42,8 +42,8 @@ protected: virtual void device_reset() override ATTR_COLD; // device_execute_interface overrides - virtual uint32_t execute_min_cycles() const noexcept override { return 5; } - virtual uint32_t execute_max_cycles() const noexcept override { return 13; } + virtual uint32_t execute_min_cycles() const noexcept override { return 6; } + virtual uint32_t execute_max_cycles() const noexcept override { return 18+15; } // includes interrupt virtual uint32_t execute_default_irq_vector(int inputnum) const noexcept override { return 0; } virtual void execute_run() override; virtual void execute_set_input(int inputnum, int state) override; -- cgit v1.2.3