mirror of
https://github.com/holub/mame
synced 2025-04-24 01:11:11 +03:00
x68k: Fix interrupt acknowledgment (nw)
This commit is contained in:
parent
335b6123e4
commit
a790d18587
@ -1067,36 +1067,48 @@ WRITE_LINE_MEMBER(x68k_state::mfp_irq_callback)
|
||||
m_mfp_prev = state;
|
||||
}
|
||||
|
||||
void x68k_state::cpu_space_map(address_map &map)
|
||||
template <int Line>
|
||||
uint8_t x68k_state::int_ack()
|
||||
{
|
||||
map(0xfffff2, 0xffffff).r(FUNC(x68k_state::int_ack));
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
m_maincpu->set_input_line(Line, CLEAR_LINE);
|
||||
if(Line == 1) // IOSC
|
||||
{
|
||||
m_ioc.irqstatus &= ~0xf0;
|
||||
}
|
||||
if(Line == 5) // SCC
|
||||
{
|
||||
m_mouse.irqactive = 0;
|
||||
}
|
||||
|
||||
LOGMASKED(LOG_IRQ, "SYS: IRQ acknowledged (vector=0x%02x, line = %i)\n",m_current_vector[Line],Line);
|
||||
}
|
||||
return m_current_vector[Line];
|
||||
}
|
||||
|
||||
u16 x68k_state::int_ack(offs_t offset)
|
||||
uint8_t x68k_state::mfp_ack()
|
||||
{
|
||||
int irqline = offset+1;
|
||||
if(irqline == 6) // MFP
|
||||
if (m_current_vector[6] != 0x4b && m_current_vector[6] != 0x4c)
|
||||
m_current_vector[6] = m_mfpdev->get_vector();
|
||||
else if (!machine().side_effects_disabled())
|
||||
{
|
||||
if(m_current_vector[6] != 0x4b && m_current_vector[6] != 0x4c)
|
||||
m_current_vector[6] = m_mfpdev->get_vector();
|
||||
else
|
||||
m_maincpu->set_input_line(irqline,CLEAR_LINE);
|
||||
LOGMASKED(LOG_IRQ, "SYS: IRQ acknowledged (vector=0x%02x, line = %i)\n",m_current_vector[6],irqline);
|
||||
return m_current_vector[6];
|
||||
m_maincpu->set_input_line(6,CLEAR_LINE);
|
||||
LOGMASKED(LOG_IRQ, "SYS: IRQ acknowledged (vector=0x%02x, line = %i)\n",m_current_vector[6],6);
|
||||
}
|
||||
return m_current_vector[6];
|
||||
}
|
||||
|
||||
m_maincpu->set_input_line(irqline,CLEAR_LINE);
|
||||
if(irqline == 1) // IOSC
|
||||
{
|
||||
m_ioc.irqstatus &= ~0xf0;
|
||||
}
|
||||
if(irqline == 5) // SCC
|
||||
{
|
||||
m_mouse.irqactive = 0;
|
||||
}
|
||||
|
||||
LOGMASKED(LOG_IRQ, "SYS: IRQ acknowledged (vector=0x%02x, line = %i)\n",m_current_vector[irqline],irqline);
|
||||
return m_current_vector[irqline];
|
||||
void x68k_state::cpu_space_map(address_map &map)
|
||||
{
|
||||
map.global_mask(0xffffff);
|
||||
map(0xfffff3, 0xfffff3).r(FUNC(x68k_state::int_ack<1>));
|
||||
map(0xfffff5, 0xfffff5).r(FUNC(x68k_state::int_ack<2>));
|
||||
map(0xfffff7, 0xfffff7).r(FUNC(x68k_state::int_ack<3>));
|
||||
map(0xfffff9, 0xfffff9).r(FUNC(x68k_state::int_ack<4>));
|
||||
map(0xfffffb, 0xfffffb).r(FUNC(x68k_state::int_ack<5>));
|
||||
map(0xfffffd, 0xfffffd).r(FUNC(x68k_state::mfp_ack));
|
||||
map(0xffffff, 0xffffff).r(FUNC(x68k_state::int_ack<7>));
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(x68ksupr_state::scsi_irq)
|
||||
|
@ -317,7 +317,9 @@ protected:
|
||||
DECLARE_WRITE16_MEMBER(tvram_write);
|
||||
DECLARE_READ16_MEMBER(gvram_read);
|
||||
DECLARE_WRITE16_MEMBER(gvram_write);
|
||||
u16 int_ack(offs_t offset);
|
||||
|
||||
template <int Line> uint8_t int_ack();
|
||||
uint8_t mfp_ack();
|
||||
|
||||
void x68k_base_map(address_map &map);
|
||||
void x68k_map(address_map &map);
|
||||
|
Loading…
Reference in New Issue
Block a user