68307, mc68681, tmp68301: Disable side effects for interrupt acknowledgment (nw)

This commit is contained in:
AJR 2019-04-04 21:21:40 -04:00
parent 3826322efb
commit a4742d0129
4 changed files with 19 additions and 7 deletions

View File

@ -225,7 +225,8 @@ void m68307_cpu_device::licr2_interrupt()
uint8_t m68307_cpu_device::int_ack(offs_t offset)
{
uint8_t type = m_m68307SIM->get_int_type(this, offset);
logerror("Interrupt acknowledged: level %d, type %01X\n", offset, type);
if (!machine().side_effects_disabled())
logerror("Interrupt acknowledged: level %d, type %01X\n", offset, type);
// UART provides its own vector
if (type == 0x0c)

View File

@ -357,6 +357,14 @@ void mc68681_device::update_interrupts()
m_read_vector = false; // clear IACK too
}
uint8_t mc68681_device::get_irq_vector()
{
if (!machine().side_effects_disabled())
m_read_vector = true;
return IVR;
}
double duart_base_device::get_ct_rate()
{
double rate = 0.0f;

View File

@ -197,7 +197,7 @@ public:
virtual uint8_t read(offs_t offset) override;
virtual void write(offs_t offset, uint8_t data) override;
uint8_t get_irq_vector() { m_read_vector = true; return IVR; }
uint8_t get_irq_vector();
protected:
virtual void device_start() override;

View File

@ -217,12 +217,15 @@ uint8_t tmp68301_device::irq_callback(offs_t offset)
u16 mask = (src > 2 ? 2 : 1) << src;
if ((m_ipr & mask) != 0 && (m_imr & mask) == 0)
{
// add cause to interrupt in-service register
m_iisr |= mask;
if (!machine().side_effects_disabled())
{
// add cause to interrupt in-service register
m_iisr |= mask;
// no longer pending
m_ipr &= ~mask;
update_ipl();
// no longer pending
m_ipr &= ~mask;
update_ipl();
}
// vary vector number by type
if (src > 6)