mirror of
https://github.com/holub/mame
synced 2025-07-05 01:48:29 +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()
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1081,19 +1107,19 @@ void z8536_device::write(offs_t offset, u8 data)
|
|||||||
{
|
{
|
||||||
switch (offset & 0x03)
|
switch (offset & 0x03)
|
||||||
{
|
{
|
||||||
case PORT_C:
|
case 0:
|
||||||
write_register(PORT_C_DATA, data);
|
write_register(PORT_C_DATA, data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PORT_B:
|
case 1:
|
||||||
write_register(PORT_B_DATA, data);
|
write_register(PORT_B_DATA, data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PORT_A:
|
case 2:
|
||||||
write_register(PORT_A_DATA, data);
|
write_register(PORT_A_DATA, data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONTROL:
|
case 3:
|
||||||
if (m_state0)
|
if (m_state0)
|
||||||
{
|
{
|
||||||
// state 0: write pointer
|
// state 0: write pointer
|
||||||
|
@ -381,7 +381,6 @@ protected:
|
|||||||
void match_pattern(int port);
|
void match_pattern(int port);
|
||||||
void external_port_w(int port, int bit, int state);
|
void external_port_w(int port, int bit, int state);
|
||||||
|
|
||||||
private:
|
|
||||||
devcb_write_line m_write_irq;
|
devcb_write_line m_write_irq;
|
||||||
|
|
||||||
devcb_read8 m_read_pa;
|
devcb_read8 m_read_pa;
|
||||||
|
Loading…
Reference in New Issue
Block a user