summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/altos8600.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/altos8600.cpp')
-rw-r--r--src/mame/drivers/altos8600.cpp72
1 files changed, 34 insertions, 38 deletions
diff --git a/src/mame/drivers/altos8600.cpp b/src/mame/drivers/altos8600.cpp
index 2aab3feb743..c72cb58c2de 100644
--- a/src/mame/drivers/altos8600.cpp
+++ b/src/mame/drivers/altos8600.cpp
@@ -22,9 +22,7 @@ public:
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_dmac(*this, "dmac"),
- m_pic1(*this, "pic8259_1"),
- m_pic2(*this, "pic8259_2"),
- m_pic3(*this, "pic8259_3"),
+ m_pic(*this, "pic8259%u", 1U),
m_uart8274(*this, "uart8274"),
m_fdc(*this, "fd1797"),
m_ram(*this, RAM_TAG),
@@ -91,9 +89,7 @@ private:
void format_sector();
required_device<i8086_cpu_device> m_maincpu;
required_device<i8089_device> m_dmac;
- required_device<pic8259_device> m_pic1;
- required_device<pic8259_device> m_pic2;
- required_device<pic8259_device> m_pic3;
+ required_device_array<pic8259_device, 3> m_pic;
required_device<i8274_new_device> m_uart8274;
required_device<fd1797_device> m_fdc;
required_device<ram_device> m_ram;
@@ -205,7 +201,7 @@ u8 altos8600_state::read_sector()
if(secoff >= 511)
{
m_dmac->drq1_w(CLEAR_LINE);
- m_pic2->ir0_w(ASSERT_LINE);
+ m_pic[1]->ir0_w(ASSERT_LINE);
m_stat &= ~1;
m_stat |= 2;
}
@@ -225,7 +221,7 @@ bool altos8600_state::write_sector(u8 data)
m_stat |= 2;
hard_disk_write(m_hdd->get_hard_disk_file(), m_lba, m_sector);
m_dmac->drq1_w(CLEAR_LINE);
- m_pic2->ir0_w(ASSERT_LINE);
+ m_pic[1]->ir0_w(ASSERT_LINE);
return true;
}
return false;
@@ -240,7 +236,7 @@ READ8_MEMBER(altos8600_state::hd_r)
return read_sector();
break;
case 3:
- m_pic2->ir0_w(CLEAR_LINE);
+ m_pic[1]->ir0_w(CLEAR_LINE);
return m_stat;
}
return 0;
@@ -332,7 +328,7 @@ WRITE8_MEMBER(altos8600_state::hd_w)
m_dmac->drq1_w(ASSERT_LINE);
break;
}
- m_pic2->ir0_w(ASSERT_LINE);
+ m_pic[1]->ir0_w(ASSERT_LINE);
break;
}
}
@@ -360,13 +356,13 @@ WRITE_LINE_MEMBER(altos8600_state::sintr1_w)
if(state)
{
m_dmac->drq1_w(CLEAR_LINE);
- m_pic2->ir0_w(ASSERT_LINE);
- m_pic2->ir3_w(ASSERT_LINE);
+ m_pic[1]->ir0_w(ASSERT_LINE);
+ m_pic[1]->ir3_w(ASSERT_LINE);
m_stat &= ~1;
m_stat |= 2;
}
else
- m_pic2->ir3_w(CLEAR_LINE);
+ m_pic[1]->ir3_w(CLEAR_LINE);
}
READ16_MEMBER(altos8600_state::fault_r)
@@ -480,7 +476,7 @@ WRITE8_MEMBER(altos8600_state::romport_w)
WRITE8_MEMBER(altos8600_state::clrsys_w)
{
- m_pic1->ir0_w(CLEAR_LINE);
+ m_pic[0]->ir0_w(CLEAR_LINE);
}
WRITE8_MEMBER(altos8600_state::ics_attn_w)
@@ -502,9 +498,9 @@ WRITE16_MEMBER(altos8600_state::mode_w)
READ8_MEMBER(altos8600_state::get_slave_ack)
{
if(offset == 2)
- return m_pic2->acknowledge();
+ return m_pic[1]->acknowledge();
else if(offset == 3)
- return m_pic3->acknowledge();
+ return m_pic[2]->acknowledge();
return 0x00;
}
@@ -605,7 +601,7 @@ READ16_MEMBER(altos8600_state::cpuio_r)
{
if(m_user && !machine().side_effects_disabled())
{
- m_pic1->ir0_w(ASSERT_LINE);
+ m_pic[0]->ir0_w(ASSERT_LINE);
return 0;
}
return m_dmac->space(AS_IO).read_word_unaligned(offset << 1, mem_mask);
@@ -615,7 +611,7 @@ WRITE16_MEMBER(altos8600_state::cpuio_w)
{
if(m_user && !machine().side_effects_disabled())
{
- m_pic1->ir0_w(ASSERT_LINE);
+ m_pic[0]->ir0_w(ASSERT_LINE);
return;
}
m_dmac->space(AS_IO).write_word_unaligned(offset << 1, data, mem_mask);
@@ -661,7 +657,7 @@ IRQ_CALLBACK_MEMBER(altos8600_state::inta)
{
m_user = false;
m_mode &= ~1;
- return m_pic1->acknowledge();
+ return m_pic[0]->acknowledge();
}
void altos8600_state::cpu_mem(address_map &map)
@@ -709,10 +705,10 @@ void altos8600_state::dmac_io(address_map &map)
map(0x0048, 0x004f).rw(m_uart8274, FUNC(i8274_new_device::cd_ba_r), FUNC(i8274_new_device::cd_ba_w)).umask16(0x00ff);
map(0x0048, 0x004f).rw("pit", FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask16(0xff00);
map(0x0050, 0x0057).rw(FUNC(altos8600_state::romport_r), FUNC(altos8600_state::romport_w));
- map(0x0058, 0x005f).rw(m_pic1, FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff);
+ map(0x0058, 0x005f).rw(m_pic[0], FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff);
map(0x0058, 0x005f).w(FUNC(altos8600_state::clrsys_w)).umask16(0xff00);
- map(0x0060, 0x0067).rw(m_pic2, FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff);
- map(0x0068, 0x006f).rw(m_pic3, FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff);
+ map(0x0060, 0x0067).rw(m_pic[1], FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff);
+ map(0x0068, 0x006f).rw(m_pic[2], FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff);
map(0x0070, 0x0077).noprw();
map(0x0078, 0x0079).w(FUNC(altos8600_state::ics_attn_w));
map(0x0200, 0x03ff).rw(FUNC(altos8600_state::mmuflags_r), FUNC(altos8600_state::mmuflags_w));
@@ -740,20 +736,20 @@ MACHINE_CONFIG_START(altos8600_state::altos8600)
MCFG_DEVICE_IO_MAP(dmac_io)
MCFG_I8089_DATA_WIDTH(16)
MCFG_I8089_SINTR1(WRITELINE(*this, altos8600_state, sintr1_w))
- MCFG_I8089_SINTR2(WRITELINE(m_pic2, pic8259_device, ir4_w))
+ MCFG_I8089_SINTR2(WRITELINE(m_pic[1], pic8259_device, ir4_w))
- PIC8259(config, m_pic1, 0);
- m_pic1->out_int_callback().set_inputline(m_maincpu, 0);
- m_pic1->in_sp_callback().set_constant(1);
- m_pic1->read_slave_ack_callback().set(FUNC(altos8600_state::get_slave_ack));
+ PIC8259(config, m_pic[0], 0);
+ m_pic[0]->out_int_callback().set_inputline(m_maincpu, 0);
+ m_pic[0]->in_sp_callback().set_constant(1);
+ m_pic[0]->read_slave_ack_callback().set(FUNC(altos8600_state::get_slave_ack));
- PIC8259(config, m_pic2, 0);
- m_pic2->out_int_callback().set(m_pic1, FUNC(pic8259_device::ir2_w));
- m_pic2->in_sp_callback().set_constant(0);
+ PIC8259(config, m_pic[1], 0);
+ m_pic[1]->out_int_callback().set(m_pic[0], FUNC(pic8259_device::ir2_w));
+ m_pic[1]->in_sp_callback().set_constant(0);
- PIC8259(config, m_pic3, 0);
- m_pic3->out_int_callback().set(m_pic1, FUNC(pic8259_device::ir3_w));
- m_pic3->in_sp_callback().set_constant(0);
+ PIC8259(config, m_pic[2], 0);
+ m_pic[2]->out_int_callback().set(m_pic[0], FUNC(pic8259_device::ir3_w));
+ m_pic[2]->in_sp_callback().set_constant(0);
RAM(config, RAM_TAG).set_default_size("1M");//.set_extra_options("512K");
@@ -764,7 +760,7 @@ MACHINE_CONFIG_START(altos8600_state::altos8600)
m_uart8274->out_txdb_callback().set("rs232b", FUNC(rs232_port_device::write_txd));
m_uart8274->out_dtrb_callback().set("rs232b", FUNC(rs232_port_device::write_dtr));
m_uart8274->out_rtsb_callback().set("rs232b", FUNC(rs232_port_device::write_rts));
- m_uart8274->out_int_callback().set("pic8259_1", FUNC(pic8259_device::ir7_w));
+ m_uart8274->out_int_callback().set(m_pic[0], FUNC(pic8259_device::ir7_w));
rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, nullptr));
rs232a.rxd_handler().set(m_uart8274, FUNC(i8274_new_device::rxa_w));
@@ -785,10 +781,10 @@ MACHINE_CONFIG_START(altos8600_state::altos8600)
pit.set_clk<1>(1228800);
pit.out_handler<1>().set(m_uart8274, FUNC(i8274_new_device::rxtxcb_w));
pit.set_clk<2>(1228800);
- pit.out_handler<1>().set(m_pic1, FUNC(pic8259_device::ir1_w));
+ pit.out_handler<1>().set(m_pic[0], FUNC(pic8259_device::ir1_w));
FD1797(config, m_fdc, 2000000);
- m_fdc->intrq_wr_callback().set(m_pic2, FUNC(pic8259_device::ir1_w));
+ m_fdc->intrq_wr_callback().set(m_pic[1], FUNC(pic8259_device::ir1_w));
m_fdc->drq_wr_callback().set(FUNC(altos8600_state::fddrq_w));
MCFG_FLOPPY_DRIVE_ADD("fd1797:0", altos8600_floppies, "8dd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fd1797:1", altos8600_floppies, "8dd", floppy_image_device::default_floppy_formats)
@@ -797,8 +793,8 @@ MACHINE_CONFIG_START(altos8600_state::altos8600)
ACS8600_ICS(config, m_ics, 0);
m_ics->set_host_space(m_dmac, AS_PROGRAM); // TODO: fixme
- m_ics->irq1_callback().set(m_pic1, FUNC(pic8259_device::ir5_w));
- m_ics->irq2_callback().set(m_pic1, FUNC(pic8259_device::ir6_w));
+ m_ics->irq1_callback().set(m_pic[0], FUNC(pic8259_device::ir5_w));
+ m_ics->irq2_callback().set(m_pic[0], FUNC(pic8259_device::ir6_w));
MCFG_HARDDISK_ADD("hdd")
MACHINE_CONFIG_END