mirror of
https://github.com/holub/mame
synced 2025-04-16 05:24:54 +03:00
z8536: Better daisy chain support, fix port assignment when writing data
This commit is contained in:
parent
57e4628edc
commit
68dbd42a24
@ -919,6 +919,32 @@ void cio_base_device::device_timer(emu_timer &timer, device_timer_id id, int par
|
||||
|
||||
int z8536_device::z80daisy_irq_state()
|
||||
{
|
||||
static const int prio[] =
|
||||
{
|
||||
COUNTER_TIMER_3_COMMAND_AND_STATUS,
|
||||
PORT_A_COMMAND_AND_STATUS,
|
||||
COUNTER_TIMER_2_COMMAND_AND_STATUS,
|
||||
PORT_B_COMMAND_AND_STATUS,
|
||||
COUNTER_TIMER_1_COMMAND_AND_STATUS
|
||||
};
|
||||
|
||||
if (m_register[MASTER_INTERRUPT_CONTROL] & MICR_MIE)
|
||||
{
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
if (m_register[prio[i]] & PCS_IUS)
|
||||
{
|
||||
// we are currently servicing an interrupt request
|
||||
return Z80_DAISY_IEO;
|
||||
}
|
||||
else if ((m_register[prio[i]] & PCS_IE) && (m_register[prio[i]] & PCS_IP))
|
||||
{
|
||||
// indicate that we have an interrupt request waiting
|
||||
return Z80_DAISY_INT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1081,19 +1107,19 @@ void z8536_device::write(offs_t offset, u8 data)
|
||||
{
|
||||
switch (offset & 0x03)
|
||||
{
|
||||
case PORT_C:
|
||||
case 0:
|
||||
write_register(PORT_C_DATA, data);
|
||||
break;
|
||||
|
||||
case PORT_B:
|
||||
case 1:
|
||||
write_register(PORT_B_DATA, data);
|
||||
break;
|
||||
|
||||
case PORT_A:
|
||||
case 2:
|
||||
write_register(PORT_A_DATA, data);
|
||||
break;
|
||||
|
||||
case CONTROL:
|
||||
case 3:
|
||||
if (m_state0)
|
||||
{
|
||||
// state 0: write pointer
|
||||
|
@ -381,7 +381,6 @@ protected:
|
||||
void match_pattern(int port);
|
||||
void external_port_w(int port, int bit, int state);
|
||||
|
||||
private:
|
||||
devcb_write_line m_write_irq;
|
||||
|
||||
devcb_read8 m_read_pa;
|
||||
|
Loading…
Reference in New Issue
Block a user