summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/cmi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/cmi.cpp')
-rw-r--r--src/mame/drivers/cmi.cpp52
1 files changed, 24 insertions, 28 deletions
diff --git a/src/mame/drivers/cmi.cpp b/src/mame/drivers/cmi.cpp
index 4f197fcdfff..32ec546c762 100644
--- a/src/mame/drivers/cmi.cpp
+++ b/src/mame/drivers/cmi.cpp
@@ -220,9 +220,7 @@ public:
, m_midicpu(*this, "smptemidi")
, m_cmi07cpu(*this, "cmi07cpu")
, m_msm5832(*this, "msm5832")
- , m_i8214_0(*this, "i8214_1")
- , m_i8214_1(*this, "i8214_2")
- , m_i8214_2(*this, "i8214_3")
+ , m_i8214(*this, "i8214_%u", 1U)
, m_q133_pia(*this, "q133_pia_%u", 1U)
, m_q133_ptm(*this, "q133_ptm")
, m_q133_acia(*this, "q133_acia_%u", 0U)
@@ -377,9 +375,7 @@ protected:
required_device<mc6809e_device> m_cmi07cpu;
required_device<msm5832_device> m_msm5832;
- required_device<i8214_device> m_i8214_0;
- required_device<i8214_device> m_i8214_1;
- required_device<i8214_device> m_i8214_2;
+ required_device_array<i8214_device, 3> m_i8214;
required_device_array<pia6821_device, 2> m_q133_pia;
required_device<ptm6840_device> m_q133_ptm;
required_device_array<mos6551_device, 4> m_q133_acia;
@@ -1585,8 +1581,8 @@ WRITE8_MEMBER( cmi_state::cmi02_w )
case 0x30:
m_maincpu1->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
data ^= 0xff;
- m_i8214_2->sgs_w((data >> 3) & 1);
- m_i8214_2->b_w(data & 0x7);
+ m_i8214[2]->sgs_w((data >> 3) & 1);
+ m_i8214[2]->b_w(data & 0x7);
break;
case 0x31: case 0x32:
@@ -1625,8 +1621,8 @@ WRITE8_MEMBER( cmi_state::i8214_cpu1_w )
//printf("i8214_cpu1_w: %02x\n", data);
m_maincpu1->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
data ^= 0xff;
- m_i8214_0->sgs_w((data >> 3) & 1);
- m_i8214_0->b_w(data & 0x7);
+ m_i8214[0]->sgs_w((data >> 3) & 1);
+ m_i8214[0]->b_w(data & 0x7);
}
@@ -1635,8 +1631,8 @@ WRITE8_MEMBER( cmi_state::i8214_cpu2_w )
//printf("i8214_cpu2_w: %02x\n", data);
m_maincpu2->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
data ^= 0xff;
- m_i8214_1->sgs_w((data >> 3) & 1);
- m_i8214_1->b_w(data & 0x7);
+ m_i8214[1]->sgs_w((data >> 3) & 1);
+ m_i8214[1]->b_w(data & 0x7);
}
// TODO: replace with AM_SHARE
@@ -1732,7 +1728,7 @@ IRQ_CALLBACK_MEMBER( cmi_state::cpu1_interrupt_callback )
if (irqline == INPUT_LINE_IRQ0)
{
int vector = (m_hp_int ? 0xffe0 : 0xffd0);
- int level = (m_hp_int ? m_i8214_2->a_r() : m_i8214_0->a_r()) ^ 7;
+ int level = (m_hp_int ? m_i8214[2]->a_r() : m_i8214[0]->a_r()) ^ 7;
m_irq_address[CPU_1][0] = m_cpu1space->read_byte(vector + level*2);
m_irq_address[CPU_1][1] = m_cpu1space->read_byte(vector + level*2 + 1);
@@ -1753,7 +1749,7 @@ IRQ_CALLBACK_MEMBER( cmi_state::cpu2_interrupt_callback )
if (irqline == INPUT_LINE_IRQ0)
{
- int level = m_i8214_1->a_r() ^ 0x7;
+ int level = m_i8214[1]->a_r() ^ 0x7;
m_irq_address[CPU_2][0] = m_cpu2space->read_byte(0xffe0 + level*2);
m_irq_address[CPU_2][1] = m_cpu2space->read_byte(0xffe0 + level*2 + 1);
@@ -1769,7 +1765,7 @@ void cmi_state::set_interrupt(int cpunum, int level, int state)
{
//printf("CPU%d Int: %x State: %x\n", cpunum + 1, level, state);
- i8214_device *i8214 = ((cpunum == CPU_2) ? m_i8214_1 : (level < 8 ? m_i8214_2 : m_i8214_0));
+ i8214_device *i8214 = ((cpunum == CPU_2) ? m_i8214[1] : (level < 8 ? m_i8214[2] : m_i8214[0]));
i8214->r_w(level & 7, state ? 0 : 1);
}
@@ -2063,12 +2059,12 @@ void cmi_state::machine_reset()
m_qfc9_region_ptr = (uint8_t *)m_qfc9_region->base();
/* Set 8214 interrupt lines */
- m_i8214_0->etlg_w(1);
- m_i8214_0->inte_w(1);
- m_i8214_1->etlg_w(1);
- m_i8214_1->inte_w(1);
- m_i8214_2->etlg_w(1);
- m_i8214_2->inte_w(1);
+ m_i8214[0]->etlg_w(1);
+ m_i8214[0]->inte_w(1);
+ m_i8214[1]->etlg_w(1);
+ m_i8214[1]->inte_w(1);
+ m_i8214[2]->etlg_w(1);
+ m_i8214[2]->inte_w(1);
m_hblank_timer->adjust(m_screen->time_until_pos(0, HBLANK_START));
@@ -2203,13 +2199,13 @@ MACHINE_CONFIG_START(cmi_state::cmi2x)
MCFG_DEVICE_ADD("msm5832", MSM5832, 32.768_kHz_XTAL)
- MCFG_DEVICE_ADD("i8214_1", I8214, 1000000) // cmi_8214_intf_1
- MCFG_I8214_INT_CALLBACK(WRITELINE(*this, cmi_state, i8214_1_int_w))
- MCFG_DEVICE_ADD("i8214_2", I8214, 1000000) // cmi_8214_intf_2
- MCFG_I8214_INT_CALLBACK(WRITELINE(*this, cmi_state, i8214_2_int_w))
- MCFG_DEVICE_ADD("i8214_3", I8214, 1000000) // cmi_8214_intf_3
- MCFG_I8214_INT_CALLBACK(WRITELINE(*this, cmi_state, i8214_3_int_w))
- MCFG_I8214_ENLG_CALLBACK(WRITELINE(*this, cmi_state, i8214_3_enlg))
+ I8214(config, m_i8214[0], 1000000); // cmi_8214_intf_1
+ m_i8214[0]->int_wr_callback().set(FUNC(cmi_state::i8214_1_int_w));
+ I8214(config, m_i8214[1], 1000000); // cmi_8214_intf_2
+ m_i8214[1]->int_wr_callback().set(FUNC(cmi_state::i8214_2_int_w));
+ I8214(config, m_i8214[2], 1000000); // cmi_8214_intf_3
+ m_i8214[2]->int_wr_callback().set(FUNC(cmi_state::i8214_3_int_w));
+ m_i8214[2]->enlg_wr_callback().set(FUNC(cmi_state::i8214_3_enlg));
PIA6821(config, m_q133_pia[0], 0); // pia_q133_1_config
m_q133_pia[0]->readpa_handler().set(FUNC(cmi_state::q133_1_porta_r));