summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/pc9801.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/pc9801.cpp')
-rw-r--r--src/mame/drivers/pc9801.cpp72
1 files changed, 35 insertions, 37 deletions
diff --git a/src/mame/drivers/pc9801.cpp b/src/mame/drivers/pc9801.cpp
index fc849cd28fa..a4757661e0d 100644
--- a/src/mame/drivers/pc9801.cpp
+++ b/src/mame/drivers/pc9801.cpp
@@ -2277,9 +2277,8 @@ MACHINE_CONFIG_START(pc9801_state::pc9801_sasi)
MCFG_DEVICE_ADD("sasi_data_in", INPUT_BUFFER, 0)
MCFG_DEVICE_ADD("sasi_ctrl_in", INPUT_BUFFER, 0)
- MCFG_DEVICE_MODIFY("i8237")
- MCFG_I8237_IN_IOR_0_CB(READ8(*this, pc9801_state, sasi_data_r))
- MCFG_I8237_OUT_IOW_0_CB(WRITE8(*this, pc9801_state, sasi_data_w))
+ m_dmac->in_ior_callback<0>().set(FUNC(pc9801_state::sasi_data_r));
+ m_dmac->out_iow_callback<0>().set(FUNC(pc9801_state::sasi_data_w));
MACHINE_CONFIG_END
void pc9801_state::cdrom_headphones(device_t *device)
@@ -2314,42 +2313,42 @@ MACHINE_CONFIG_START(pc9801_state::pc9801_common)
m_pit8253->out_handler<2>().set(m_sio, FUNC(i8251_device::write_txc));
m_pit8253->out_handler<2>().append(m_sio, FUNC(i8251_device::write_rxc));
- MCFG_DEVICE_ADD("i8237", AM9517A, 5000000) // unknown clock, TODO: check channels 0 - 1
- MCFG_I8237_OUT_HREQ_CB(WRITELINE(*this, pc9801_state, dma_hrq_changed))
- MCFG_I8237_OUT_EOP_CB(WRITELINE(*this, pc9801_state, tc_w))
- MCFG_I8237_IN_MEMR_CB(READ8(*this, pc9801_state, dma_read_byte))
- MCFG_I8237_OUT_MEMW_CB(WRITE8(*this, pc9801_state, dma_write_byte))
- MCFG_I8237_IN_IOR_2_CB(READ8("upd765_2hd", upd765a_device, mdma_r))
- MCFG_I8237_OUT_IOW_2_CB(WRITE8("upd765_2hd", upd765a_device, mdma_w))
- MCFG_I8237_OUT_DACK_0_CB(WRITELINE(*this, pc9801_state, dack0_w))
- MCFG_I8237_OUT_DACK_1_CB(WRITELINE(*this, pc9801_state, dack1_w))
- MCFG_I8237_OUT_DACK_2_CB(WRITELINE(*this, pc9801_state, dack2_w))
- MCFG_I8237_OUT_DACK_3_CB(WRITELINE(*this, pc9801_state, dack3_w))
-
- MCFG_DEVICE_ADD("pic8259_master", PIC8259, 0)
- MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0))
- MCFG_PIC8259_IN_SP_CB(CONSTANT(1))
- MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, pc9801_state, get_slave_ack))
-
- MCFG_DEVICE_ADD("pic8259_slave", PIC8259, 0)
- MCFG_PIC8259_OUT_INT_CB(WRITELINE("pic8259_master", pic8259_device, ir7_w)) // TODO: Check ir7_w
- MCFG_PIC8259_IN_SP_CB(CONSTANT(0))
-
- MCFG_DEVICE_ADD("ppi8255_sys", I8255, 0)
- MCFG_I8255_IN_PORTA_CB(IOPORT("DSW2"))
- MCFG_I8255_IN_PORTB_CB(IOPORT("DSW1"))
- MCFG_I8255_IN_PORTC_CB(CONSTANT(0xa0)) // 0x80 cpu triple fault reset flag?
- MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, pc9801_state, ppi_sys_portc_w))
-
- MCFG_DEVICE_ADD("ppi8255_prn", I8255, 0)
- /* TODO: check this one */
- MCFG_I8255_IN_PORTB_CB(IOPORT("DSW5"))
+ AM9517A(config, m_dmac, 5000000); // unknown clock, TODO: check channels 0 - 1
+ m_dmac->out_hreq_callback().set(FUNC(pc9801_state::dma_hrq_changed));
+ m_dmac->out_eop_callback().set(FUNC(pc9801_state::tc_w));
+ m_dmac->in_memr_callback().set(FUNC(pc9801_state::dma_read_byte));
+ m_dmac->out_memw_callback().set(FUNC(pc9801_state::dma_write_byte));
+ m_dmac->in_ior_callback<2>().set(m_fdc_2hd, FUNC(upd765a_device::mdma_r));
+ m_dmac->out_iow_callback<2>().set(m_fdc_2hd, FUNC(upd765a_device::mdma_w));
+ m_dmac->out_dack_callback<0>().set(FUNC(pc9801_state::dack0_w));
+ m_dmac->out_dack_callback<1>().set(FUNC(pc9801_state::dack1_w));
+ m_dmac->out_dack_callback<2>().set(FUNC(pc9801_state::dack2_w));
+ m_dmac->out_dack_callback<3>().set(FUNC(pc9801_state::dack3_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(pc9801_state::get_slave_ack));
+
+ PIC8259(config, m_pic2, 0);
+ m_pic2->out_int_callback().set(m_pic1, FUNC(pic8259_device::ir7_w)); // TODO: Check ir7_w
+ m_pic2->in_sp_callback().set_constant(0);
+
+ I8255(config, m_ppi_sys, 0);
+ m_ppi_sys->in_pa_callback().set_ioport("DSW2");
+ m_ppi_sys->in_pb_callback().set_ioport("DSW1");
+ m_ppi_sys->in_pc_callback().set_constant(0xa0); // 0x80 cpu triple fault reset flag?
+ m_ppi_sys->out_pc_callback().set(FUNC(pc9801_state::ppi_sys_portc_w));
+
+ I8255(config, m_ppi_prn, 0);
+ // TODO: check this one
+ m_ppi_prn->in_pb_callback().set_ioport("DSW5");
pc9801_keyboard(config);
pc9801_mouse(config);
pc9801_cbus(config);
- MCFG_DEVICE_ADD(UPD8251_TAG, I8251, 0)
+ I8251(config, m_sio, 0);
UPD765A(config, m_fdc_2hd, true, true);
m_fdc_2hd->intrq_wr_callback().set(m_pic2, FUNC(pic8259_device::ir3_w));
@@ -2412,9 +2411,8 @@ MACHINE_CONFIG_START(pc9801_state::pc9801)
pc9801_sasi(config);
MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL(32'768), NOOP, NOOP)
- MCFG_DEVICE_MODIFY("i8237")
- MCFG_I8237_IN_IOR_3_CB(READ8("upd765_2dd", upd765a_device, mdma_r))
- MCFG_I8237_OUT_IOW_3_CB(WRITE8("upd765_2dd", upd765a_device, mdma_w))
+ m_dmac->in_ior_callback<3>().set(m_fdc_2dd, FUNC(upd765a_device::mdma_r));
+ m_dmac->out_iow_callback<3>().set(m_fdc_2dd, FUNC(upd765a_device::mdma_w));
MCFG_PALETTE_ADD("palette", 16)
MCFG_PALETTE_INIT_OWNER(pc9801_state,pc9801)