s2650: correct interrupt cycles

This commit is contained in:
hap 2024-12-01 00:37:45 +01:00
parent c6fea74bd8
commit 1539249cfd
2 changed files with 6 additions and 3 deletions

View File

@ -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;
}

View File

@ -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;