uint32_t pic8259_device::acknowledge() { for (int n = 0, irq = m_prio; n < 8; n++, irq = (irq + 1) & 7) { uint8_t mask = 1 << irq; /* is this IRQ pending and enabled? */ if ((m_irr & mask) && !(m_imr & mask)) { if (LOG_GENERAL) { logerror("pic8259_acknowledge() %s: PIC acknowledge IRQ #%d\n", tag(), irq); } if (!m_level_trig_mode) { m_irr &= ~mask; } if (!m_auto_eoi) { m_isr |= mask; } set_timer(); if ((m_cascade!=0) && (m_master!=0) && (mask & m_slave)) { // it's from slave device return m_read_slave_ack_func(irq); } else { if (m_is_x86) { /* For x86 mode*/ return irq + m_base; } else { /* in case of 8080/85) */ return 0xcd0000 + (m_vector_addr_high << 8) + m_vector_addr_low + (irq << (3-m_vector_size)); } } } } logerror("Spurious IRQ\n"); if(m_is_x86) return m_base + 7; return 0xcd0000 + (m_vector_addr_high << 8) + m_vector_addr_low + (7 << (3-m_vector_size)); }
UINT32 pic8259_device::acknowledge() { UINT8 mask; int irq; for (irq = 0; irq < IRQ_COUNT; irq++) { mask = 1 << irq; /* is this IRQ pending and enabled? */ if ((m_irr & mask) && !(m_imr & mask)) { if (LOG_GENERAL) { logerror("pic8259_acknowledge(): PIC acknowledge IRQ #%d\n", irq); } if (!m_level_trig_mode) { m_irr &= ~mask; } if (!m_auto_eoi) { m_isr |= mask; } set_timer(); if ((m_cascade!=0) && (m_master!=0) && (mask & m_slave)) { // it's from slave device return m_read_slave_ack_func(irq); } else { if (m_is_x86) { /* For x86 mode*/ return irq + m_base; } else { /* in case of 8080/85) */ return 0xcd0000 + (m_vector_addr_high << 8) + m_vector_addr_low + (irq << (3-m_vector_size)); } } } } return 0; }