diff options
Diffstat (limited to 'src/mame/drivers/pc9801.cpp')
-rw-r--r-- | src/mame/drivers/pc9801.cpp | 72 |
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) |