From 8b41330539d5d425708d97cd96d0133a87516075 Mon Sep 17 00:00:00 2001 From: Fabio Priuli Date: Sat, 12 Apr 2014 08:36:53 +0000 Subject: [PATCH] i8257: updated to devcb2. nw. --- src/emu/machine/8257dma.c | 185 ++++++++++++++++++++--------------- src/emu/machine/8257dma.h | 111 ++++++++++++++------- src/mame/drivers/dkong.c | 32 ++---- src/mess/drivers/apogee.c | 6 +- src/mess/drivers/fanucspmg.c | 15 +-- src/mess/drivers/mikrosha.c | 6 +- src/mess/drivers/partner.c | 8 +- src/mess/drivers/pc8001.c | 38 ++++--- src/mess/drivers/radio86.c | 6 +- src/mess/drivers/unior.c | 18 ++-- src/mess/includes/partner.h | 1 - src/mess/includes/radio86.h | 3 - src/mess/machine/partner.c | 13 +-- src/mess/machine/radio86.c | 11 --- 14 files changed, 249 insertions(+), 204 deletions(-) diff --git a/src/emu/machine/8257dma.c b/src/emu/machine/8257dma.c index 0a7ccaa6e8f..784d2cfde8d 100644 --- a/src/emu/machine/8257dma.c +++ b/src/emu/machine/8257dma.c @@ -60,6 +60,19 @@ const device_type I8257 = &device_creator; i8257_device::i8257_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, I8257, "DMA8257", tag, owner, clock, "i8257", __FILE__), + m_out_hrq_cb(*this), + m_out_tc_cb(*this), + m_out_mark_cb(*this), + m_in_memr_cb(*this), + m_out_memw_cb(*this), + m_in_ior_0_cb(*this), + m_in_ior_1_cb(*this), + m_in_ior_2_cb(*this), + m_in_ior_3_cb(*this), + m_out_iow_0_cb(*this), + m_out_iow_1_cb(*this), + m_out_iow_2_cb(*this), + m_out_iow_3_cb(*this), m_mode(0), m_rr(0), m_msb(0), @@ -72,42 +85,6 @@ i8257_device::i8257_device(const machine_config &mconfig, const char *tag, devic memset(m_rwmode, 0, sizeof(m_rwmode)); } - -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void i8257_device::device_config_complete() -{ - // inherit a copy of the static data - const i8257_interface *intf = reinterpret_cast(static_config()); - if (intf != NULL) - { - *static_cast(this) = *intf; - } - - // or initialize to defaults if none provided - else - { - memset(&m_out_hrq_cb, 0, sizeof(m_out_hrq_cb)); - memset(&m_out_tc_cb, 0, sizeof(m_out_tc_cb)); - memset(&m_out_mark_cb, 0, sizeof(m_out_mark_cb)); - memset(&m_in_memr_cb, 0, sizeof(m_in_memr_cb)); - memset(&m_out_memw_cb, 0, sizeof(m_out_memw_cb)); - memset(&m_in_ior_cb[0], 0, sizeof(m_in_ior_cb[0])); - memset(&m_in_ior_cb[1], 0, sizeof(m_in_ior_cb[1])); - memset(&m_in_ior_cb[2], 0, sizeof(m_in_ior_cb[2])); - memset(&m_in_ior_cb[3], 0, sizeof(m_in_ior_cb[3])); - memset(&m_out_iow_cb[0], 0, sizeof(m_out_iow_cb[0])); - memset(&m_out_iow_cb[1], 0, sizeof(m_out_iow_cb[1])); - memset(&m_out_iow_cb[2], 0, sizeof(m_out_iow_cb[2])); - memset(&m_out_iow_cb[3], 0, sizeof(m_out_iow_cb[3])); - } -} - - //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- @@ -118,18 +95,20 @@ void i8257_device::device_start() assert(this != NULL); /* resolve callbacks */ - m_out_hrq_func.resolve(m_out_hrq_cb, *this); - m_out_tc_func.resolve(m_out_tc_cb, *this); - m_out_mark_func.resolve(m_out_mark_cb, *this); - m_in_memr_func.resolve(m_in_memr_cb, *this); - m_out_memw_func.resolve(m_out_memw_cb, *this); - - for (int i = 0; i < I8257_NUM_CHANNELS; i++) - { - m_in_ior_func[i].resolve(m_in_ior_cb[i], *this); - m_out_iow_func[i].resolve(m_out_iow_cb[i], *this); - } - + m_out_hrq_cb.resolve_safe(); + m_out_tc_cb.resolve_safe(); + m_out_mark_cb.resolve_safe(); + m_in_memr_cb.resolve(); + m_out_memw_cb.resolve(); + m_in_ior_0_cb.resolve(); + m_in_ior_1_cb.resolve(); + m_in_ior_2_cb.resolve(); + m_in_ior_3_cb.resolve(); + m_out_iow_0_cb.resolve(); + m_out_iow_1_cb.resolve(); + m_out_iow_2_cb.resolve(); + m_out_iow_3_cb.resolve(); + /* set initial values */ m_timer = timer_alloc(TIMER_OPERATION); m_msbflip_timer = timer_alloc(TIMER_MSBFLIP); @@ -162,33 +141,53 @@ void i8257_device::device_reset() int i8257_device::i8257_do_operation(int channel) { int done; - UINT8 data; + UINT8 data = 0; UINT8 mode = m_rwmode[channel]; if (m_count[channel] == 0x0000) { m_status |= (0x01 << channel); - m_out_tc_func(ASSERT_LINE); + m_out_tc_cb(ASSERT_LINE); } - switch(mode) { + + switch(mode) + { case 1: - if (!m_in_memr_func.isnull()) - { - data = m_in_memr_func(m_address[channel]); - } + if (!m_in_memr_cb.isnull()) + data = m_in_memr_cb(m_address[channel]); else { data = 0; logerror("8257: No memory read function defined.\n"); } - if (!m_out_iow_func[channel].isnull()) + + switch (channel) { - m_out_iow_func[channel](m_address[channel], data); - } - else - { - logerror("8257: No channel write function for channel %d defined.\n",channel); + case 0: + if (!m_out_iow_0_cb.isnull()) + m_out_iow_0_cb((offs_t)m_address[channel], data); + else + logerror("8257: No channel write function for channel %d defined.\n", channel); + break; + case 1: + if (!m_out_iow_1_cb.isnull()) + m_out_iow_1_cb((offs_t)m_address[channel], data); + else + logerror("8257: No channel write function for channel %d defined.\n", channel); + break; + case 2: + if (!m_out_iow_2_cb.isnull()) + m_out_iow_2_cb((offs_t)m_address[channel], data); + else + logerror("8257: No channel write function for channel %d defined.\n", channel); + break; + case 3: + if (!m_out_iow_3_cb.isnull()) + m_out_iow_3_cb((offs_t)m_address[channel], data); + else + logerror("8257: No channel write function for channel %d defined.\n", channel); + break; } m_address[channel]++; @@ -197,37 +196,67 @@ int i8257_device::i8257_do_operation(int channel) break; case 2: - if (!m_in_ior_func[channel].isnull()) + switch (channel) { - data = m_in_ior_func[channel](m_address[channel]); - } - else - { - data = 0; - logerror("8257: No channel read function for channel %d defined.\n",channel); + case 0: + if (!m_in_ior_0_cb.isnull()) + data = m_in_ior_0_cb((offs_t)m_address[channel]); + else + { + data = 0; + logerror("8257: No channel read function for channel %d defined.\n", channel); + } + break; + case 1: + if (!m_in_ior_1_cb.isnull()) + data = m_in_ior_1_cb((offs_t)m_address[channel]); + else + { + data = 0; + logerror("8257: No channel read function for channel %d defined.\n", channel); + } + break; + case 2: + if (!m_in_ior_2_cb.isnull()) + data = m_in_ior_2_cb((offs_t)m_address[channel]); + else + { + data = 0; + logerror("8257: No channel read function for channel %d defined.\n", channel); + } + break; + case 3: + if (!m_in_ior_3_cb.isnull()) + data = m_in_ior_3_cb((offs_t)m_address[channel]); + else + { + data = 0; + logerror("8257: No channel read function for channel %d defined.\n", channel); + } + break; } - if (!m_out_memw_func.isnull()) - { - m_out_memw_func(m_address[channel], data); - } + if (!m_out_memw_cb.isnull()) + m_out_memw_cb((offs_t)m_address[channel], data); else - { logerror("8257: No memory write function defined.\n"); - } + m_address[channel]++; m_count[channel]--; - done = (m_count[channel] == 0xFFFF); + done = (m_count[channel] == 0xffff); break; + case 0: /* verify */ m_address[channel]++; m_count[channel]--; - done = (m_count[channel] == 0xFFFF); + done = (m_count[channel] == 0xffff); break; + default: fatalerror("i8257_do_operation: invalid mode!\n"); break; } + if (done) { if ((channel==2) && DMA_MODE_AUTOLOAD(m_mode)) @@ -238,7 +267,7 @@ int i8257_device::i8257_do_operation(int channel) m_registers[5] = m_registers[7]; } - m_out_tc_func(CLEAR_LINE); + m_out_tc_cb(CLEAR_LINE); } return done; } @@ -337,7 +366,7 @@ void i8257_device::i8257_update_status() } /* set the halt line */ - m_out_hrq_func(pending_transfer ? ASSERT_LINE : CLEAR_LINE); + m_out_hrq_cb(pending_transfer ? ASSERT_LINE : CLEAR_LINE); } diff --git a/src/emu/machine/8257dma.h b/src/emu/machine/8257dma.h index 42b8cb6480d..7f524b21b58 100644 --- a/src/emu/machine/8257dma.h +++ b/src/emu/machine/8257dma.h @@ -40,19 +40,54 @@ #include "emu.h" +#define I8257_NUM_CHANNELS (4) + /*************************************************************************** DEVICE CONFIGURATION MACROS ***************************************************************************/ -#define MCFG_I8257_ADD(_tag, _clock, _config) \ - MCFG_DEVICE_ADD(_tag, I8257, _clock) \ - MCFG_DEVICE_CONFIG(_config) +#define MCFG_I8257_OUT_HRQ_CB(_devcb) \ + devcb = &i8257_device::set_out_hrq_callback(*device, DEVCB2_##_devcb); -#define I8257_INTERFACE(_name) \ - const i8257_interface (_name) = +#define MCFG_I8257_OUT_TC_CB(_devcb) \ + devcb = &i8257_device::set_out_tc_callback(*device, DEVCB2_##_devcb); -#define I8257_NUM_CHANNELS (4) +#define MCFG_I8257_OUT_MARK_CB(_devcb) \ + devcb = &i8257_device::set_out_mark_callback(*device, DEVCB2_##_devcb); + + +#define MCFG_I8257_IN_MEMR_CB(_devcb) \ + devcb = &i8257_device::set_in_memr_callback(*device, DEVCB2_##_devcb); + +#define MCFG_I8257_OUT_MEMW_CB(_devcb) \ + devcb = &i8257_device::set_out_memw_callback(*device, DEVCB2_##_devcb); + + +#define MCFG_I8257_IN_IOR_0_CB(_devcb) \ + devcb = &i8257_device::set_in_ior_0_callback(*device, DEVCB2_##_devcb); + +#define MCFG_I8257_IN_IOR_1_CB(_devcb) \ + devcb = &i8257_device::set_in_ior_1_callback(*device, DEVCB2_##_devcb); + +#define MCFG_I8257_IN_IOR_2_CB(_devcb) \ + devcb = &i8257_device::set_in_ior_2_callback(*device, DEVCB2_##_devcb); + +#define MCFG_I8257_IN_IOR_3_CB(_devcb) \ + devcb = &i8257_device::set_in_ior_3_callback(*device, DEVCB2_##_devcb); + + +#define MCFG_I8257_OUT_IOW_0_CB(_devcb) \ + devcb = &i8257_device::set_out_iow_0_callback(*device, DEVCB2_##_devcb); + +#define MCFG_I8257_OUT_IOW_1_CB(_devcb) \ + devcb = &i8257_device::set_out_iow_1_callback(*device, DEVCB2_##_devcb); + +#define MCFG_I8257_OUT_IOW_2_CB(_devcb) \ + devcb = &i8257_device::set_out_iow_2_callback(*device, DEVCB2_##_devcb); + +#define MCFG_I8257_OUT_IOW_3_CB(_devcb) \ + devcb = &i8257_device::set_out_iow_3_callback(*device, DEVCB2_##_devcb); /*************************************************************************** @@ -60,34 +95,31 @@ ***************************************************************************/ -// ======================> i8257_interface - -struct i8257_interface -{ - devcb_write_line m_out_hrq_cb; - devcb_write_line m_out_tc_cb; - devcb_write_line m_out_mark_cb; - - /* accessors to main memory */ - devcb_read8 m_in_memr_cb; // TODO m_in_memr_cb[I8257_NUM_CHANNELS]; - devcb_write8 m_out_memw_cb; // TODO m_out_memw_cb[I8257_NUM_CHANNELS]; - - /* channel accesors */ - devcb_read8 m_in_ior_cb[I8257_NUM_CHANNELS]; - devcb_write8 m_out_iow_cb[I8257_NUM_CHANNELS]; -}; - - - // ======================> i8257_device -class i8257_device : public device_t, - public i8257_interface +class i8257_device : public device_t { public: // construction/destruction i8257_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + template static devcb2_base &set_out_hrq_callback(device_t &device, _Object object) { return downcast(device).m_out_hrq_cb.set_callback(object); } + template static devcb2_base &set_out_tc_callback(device_t &device, _Object object) { return downcast(device).m_out_tc_cb.set_callback(object); } + template static devcb2_base &set_out_mark_callback(device_t &device, _Object object) { return downcast(device).m_out_mark_cb.set_callback(object); } + + template static devcb2_base &set_in_memr_callback(device_t &device, _Object object) { return downcast(device).m_in_memr_cb.set_callback(object); } + template static devcb2_base &set_out_memw_callback(device_t &device, _Object object) { return downcast(device).m_out_memw_cb.set_callback(object); } + + template static devcb2_base &set_in_ior_0_callback(device_t &device, _Object object) { return downcast(device).m_in_ior_0_cb.set_callback(object); } + template static devcb2_base &set_in_ior_1_callback(device_t &device, _Object object) { return downcast(device).m_in_ior_1_cb.set_callback(object); } + template static devcb2_base &set_in_ior_2_callback(device_t &device, _Object object) { return downcast(device).m_in_ior_2_cb.set_callback(object); } + template static devcb2_base &set_in_ior_3_callback(device_t &device, _Object object) { return downcast(device).m_in_ior_3_cb.set_callback(object); } + + template static devcb2_base &set_out_iow_0_callback(device_t &device, _Object object) { return downcast(device).m_out_iow_0_cb.set_callback(object); } + template static devcb2_base &set_out_iow_1_callback(device_t &device, _Object object) { return downcast(device).m_out_iow_1_cb.set_callback(object); } + template static devcb2_base &set_out_iow_2_callback(device_t &device, _Object object) { return downcast(device).m_out_iow_2_cb.set_callback(object); } + template static devcb2_base &set_out_iow_3_callback(device_t &device, _Object object) { return downcast(device).m_out_iow_3_cb.set_callback(object); } + /* register access */ DECLARE_READ8_MEMBER( i8257_r ); DECLARE_WRITE8_MEMBER( i8257_w ); @@ -107,7 +139,6 @@ public: protected: // device-level overrides - virtual void device_config_complete(); virtual void device_start(); virtual void device_reset(); virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); @@ -121,13 +152,23 @@ private: void i8257_update_status(); void i8257_prepare_msb_flip(); - devcb_resolved_write_line m_out_hrq_func; - devcb_resolved_write_line m_out_tc_func; - devcb_resolved_write_line m_out_mark_func; - devcb_resolved_read8 m_in_memr_func; - devcb_resolved_write8 m_out_memw_func; - devcb_resolved_read8 m_in_ior_func[I8257_NUM_CHANNELS]; - devcb_resolved_write8 m_out_iow_func[I8257_NUM_CHANNELS]; + devcb2_write_line m_out_hrq_cb; + devcb2_write_line m_out_tc_cb; + devcb2_write_line m_out_mark_cb; + + /* accessors to main memory */ + devcb2_read8 m_in_memr_cb; + devcb2_write8 m_out_memw_cb; + + /* channel accesors */ + devcb2_read8 m_in_ior_0_cb; + devcb2_read8 m_in_ior_1_cb; + devcb2_read8 m_in_ior_2_cb; + devcb2_read8 m_in_ior_3_cb; + devcb2_write8 m_out_iow_0_cb; + devcb2_write8 m_out_iow_1_cb; + devcb2_write8 m_out_iow_2_cb; + devcb2_write8 m_out_iow_3_cb; emu_timer *m_timer; emu_timer *m_msbflip_timer; diff --git a/src/mame/drivers/dkong.c b/src/mame/drivers/dkong.c index 74057de0e6a..515c1f6bba0 100644 --- a/src/mame/drivers/dkong.c +++ b/src/mame/drivers/dkong.c @@ -370,28 +370,6 @@ static Z80DMA_INTERFACE( dk3_dma ) DEVCB_NULL }; -static I8257_INTERFACE( dk_dma ) -{ - DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_HALT), - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(dkong_state, memory_read_byte), - DEVCB_DRIVER_MEMBER(dkong_state, memory_write_byte), - { DEVCB_NULL, DEVCB_DRIVER_MEMBER(dkong_state,p8257_ctl_r), DEVCB_NULL, DEVCB_NULL }, - { DEVCB_DRIVER_MEMBER(dkong_state,p8257_ctl_w), DEVCB_NULL, DEVCB_NULL, DEVCB_NULL } -}; - -static I8257_INTERFACE( hb_dma ) -{ - DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_HALT), - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(dkong_state, hb_dma_read_byte), - DEVCB_DRIVER_MEMBER(dkong_state, hb_dma_write_byte), - { DEVCB_NULL, DEVCB_DRIVER_MEMBER(dkong_state,p8257_ctl_r), DEVCB_NULL, DEVCB_NULL }, - { DEVCB_DRIVER_MEMBER(dkong_state,p8257_ctl_w), DEVCB_NULL, DEVCB_NULL, DEVCB_NULL } -}; - /************************************* * * VBLANK and IRQ generation @@ -1657,7 +1635,12 @@ static MACHINE_CONFIG_START( dkong_base, dkong_state ) MCFG_MACHINE_START_OVERRIDE(dkong_state,dkong2b) MCFG_MACHINE_RESET_OVERRIDE(dkong_state,dkong) - MCFG_I8257_ADD("dma8257", CLOCK_1H, dk_dma) + MCFG_DEVICE_ADD("dma8257", I8257, CLOCK_1H) + MCFG_I8257_OUT_HRQ_CB(INPUTLINE("maincpu", INPUT_LINE_HALT)) + MCFG_I8257_IN_MEMR_CB(READ8(dkong_state, memory_read_byte)) + MCFG_I8257_OUT_MEMW_CB(WRITE8(dkong_state, memory_write_byte)) + MCFG_I8257_IN_IOR_1_CB(READ8(dkong_state, p8257_ctl_r)) + MCFG_I8257_OUT_IOW_0_CB(WRITE8(dkong_state, p8257_ctl_w)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -1784,7 +1767,8 @@ static MACHINE_CONFIG_DERIVED( s2650, dkong2b ) MCFG_CPU_VBLANK_INT_DRIVER("screen", dkong_state, s2650_interrupt) MCFG_DEVICE_MODIFY("dma8257") - MCFG_DEVICE_CONFIG(hb_dma) + MCFG_I8257_IN_MEMR_CB(READ8(dkong_state, hb_dma_read_byte)) + MCFG_I8257_OUT_MEMW_CB(WRITE8(dkong_state, hb_dma_write_byte)) MCFG_MACHINE_START_OVERRIDE(dkong_state,s2650) MACHINE_CONFIG_END diff --git a/src/mess/drivers/apogee.c b/src/mess/drivers/apogee.c index f4ca10519a5..0327c493e18 100644 --- a/src/mess/drivers/apogee.c +++ b/src/mess/drivers/apogee.c @@ -237,7 +237,11 @@ static MACHINE_CONFIG_START( apogee, apogee_state ) MCFG_SOUND_CONFIG(apogee_speaker_interface) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) - MCFG_I8257_ADD("dma8257", XTAL_16MHz / 9, radio86_dma) + MCFG_DEVICE_ADD("dma8257", I8257, XTAL_16MHz / 9) + MCFG_I8257_OUT_HRQ_CB(WRITELINE(radio86_state, hrq_w)) + MCFG_I8257_IN_MEMR_CB(READ8(radio86_state, memory_read_byte)) + MCFG_I8257_OUT_MEMW_CB(WRITE8(radio86_state, memory_write_byte)) + MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275_device, dack_w)) MCFG_CASSETTE_ADD( "cassette", apogee_cassette_interface ) MCFG_SOFTWARE_LIST_ADD("cass_list","apogee") diff --git a/src/mess/drivers/fanucspmg.c b/src/mess/drivers/fanucspmg.c index 8192f1f5455..6dbffdbc998 100644 --- a/src/mess/drivers/fanucspmg.c +++ b/src/mess/drivers/fanucspmg.c @@ -710,17 +710,6 @@ WRITE8_MEMBER(fanucspmg_state::memory_write_byte) return prog_space.write_byte(offset, data); } -I8257_INTERFACE( fanucspmg_dma ) -{ - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(fanucspmg_state, memory_read_byte), - DEVCB_DRIVER_MEMBER(fanucspmg_state, memory_write_byte), - { DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL }, - { DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL } -}; - static MC6845_UPDATE_ROW( fanuc_update_row ) { fanucspmg_state *state = downcast(device->owner()); @@ -819,7 +808,9 @@ static MACHINE_CONFIG_START( fanucspmg, fanucspmg_state ) MCFG_PIT8253_CLK1(XTAL_15MHz/12) MCFG_PIT8253_CLK2(XTAL_15MHz/12) - MCFG_I8257_ADD(DMAC_TAG, XTAL_15MHz / 5, fanucspmg_dma) + MCFG_DEVICE_ADD(DMAC_TAG, I8257, XTAL_15MHz / 5) + MCFG_I8257_IN_MEMR_CB(READ8(fanucspmg_state, memory_read_byte)) + MCFG_I8257_OUT_MEMW_CB(WRITE8(fanucspmg_state, memory_write_byte)) MCFG_PIC8259_ADD(PIC0_TAG, INPUTLINE("maincpu", 0), VCC, NULL) MCFG_PIC8259_ADD(PIC1_TAG, INPUTLINE("maincpu", 0), VCC, NULL) diff --git a/src/mess/drivers/mikrosha.c b/src/mess/drivers/mikrosha.c index 8c4d3857813..f28550e679a 100644 --- a/src/mess/drivers/mikrosha.c +++ b/src/mess/drivers/mikrosha.c @@ -209,7 +209,11 @@ static MACHINE_CONFIG_START( mikrosha, mikrosha_state ) MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette") MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) - MCFG_I8257_ADD("dma8257", XTAL_16MHz / 9, radio86_dma) + MCFG_DEVICE_ADD("dma8257", I8257, XTAL_16MHz / 9) + MCFG_I8257_OUT_HRQ_CB(WRITELINE(radio86_state, hrq_w)) + MCFG_I8257_IN_MEMR_CB(READ8(radio86_state, memory_read_byte)) + MCFG_I8257_OUT_MEMW_CB(WRITE8(radio86_state, memory_write_byte)) + MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275_device, dack_w)) MCFG_CASSETTE_ADD( "cassette", mikrosha_cassette_interface ) MCFG_SOFTWARE_LIST_ADD("cass_list","mikrosha") diff --git a/src/mess/drivers/partner.c b/src/mess/drivers/partner.c index b69af591e30..2fbeedc7fde 100644 --- a/src/mess/drivers/partner.c +++ b/src/mess/drivers/partner.c @@ -215,7 +215,13 @@ static MACHINE_CONFIG_START( partner, partner_state ) MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette") MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) - MCFG_I8257_ADD("dma8257", XTAL_16MHz / 9, partner_dma) + MCFG_DEVICE_ADD("dma8257", I8257, XTAL_16MHz / 9) + MCFG_I8257_OUT_HRQ_CB(WRITELINE(partner_state, hrq_w)) + MCFG_I8257_IN_MEMR_CB(READ8(radio86_state, memory_read_byte)) + MCFG_I8257_OUT_MEMW_CB(WRITE8(radio86_state, memory_write_byte)) + MCFG_I8257_IN_IOR_0_CB(READ8(partner_state, partner_fdc_r)) + MCFG_I8257_OUT_IOW_0_CB(WRITE8(partner_state, partner_fdc_w)) + MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275_device, dack_w)) MCFG_CASSETTE_ADD( "cassette", partner_cassette_interface ) MCFG_SOFTWARE_LIST_ADD("cass_list","partner_cass") diff --git a/src/mess/drivers/pc8001.c b/src/mess/drivers/pc8001.c index 287b824de84..56f1422dca5 100644 --- a/src/mess/drivers/pc8001.c +++ b/src/mess/drivers/pc8001.c @@ -444,16 +444,6 @@ WRITE8_MEMBER( pc8001_state::dma_io_w ) program.write_byte(offset, data); } -static I8257_INTERFACE( dmac_intf ) -{ - DEVCB_DRIVER_LINE_MEMBER(pc8001_state, hrq_w), - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(pc8001_state, dma_mem_w), - { DEVCB_DRIVER_MEMBER(pc8001_state, dma_io_r), DEVCB_DRIVER_MEMBER(pc8001_state, dma_io_r), DEVCB_DRIVER_MEMBER(pc8001_state, dma_io_r), DEVCB_DRIVER_MEMBER(pc8001_state, dma_io_r) }, - { DEVCB_DRIVER_MEMBER(pc8001_state, dma_io_w), DEVCB_DRIVER_MEMBER(pc8001_state, dma_io_w), DEVCB_DRIVER_MEMBER(pc8001_state, dma_io_w), DEVCB_DRIVER_MEMBER(pc8001_state, dma_io_w) }, -}; /* Machine Initialization */ @@ -545,7 +535,19 @@ static MACHINE_CONFIG_START( pc8001, pc8001_state ) MCFG_DEVICE_ADD(I8251_TAG, I8251, 0) MCFG_I8255A_ADD(I8255A_TAG, ppi_intf) - MCFG_I8257_ADD(I8257_TAG, 4000000, dmac_intf) + + MCFG_DEVICE_ADD(I8257_TAG, I8257, 4000000) + MCFG_I8257_OUT_HRQ_CB(WRITELINE(pc8001_state, hrq_w)) + MCFG_I8257_OUT_MEMW_CB(WRITE8(pc8001_state, dma_mem_w)) + MCFG_I8257_IN_IOR_0_CB(READ8(pc8001_state, dma_io_r)) + MCFG_I8257_IN_IOR_1_CB(READ8(pc8001_state, dma_io_r)) + MCFG_I8257_IN_IOR_2_CB(READ8(pc8001_state, dma_io_r)) + MCFG_I8257_IN_IOR_3_CB(READ8(pc8001_state, dma_io_r)) + MCFG_I8257_OUT_IOW_0_CB(WRITE8(pc8001_state, dma_io_w)) + MCFG_I8257_OUT_IOW_1_CB(WRITE8(pc8001_state, dma_io_w)) + MCFG_I8257_OUT_IOW_2_CB(WRITE8(pc8001_state, dma_io_w)) + MCFG_I8257_OUT_IOW_3_CB(WRITE8(pc8001_state, dma_io_w)) + MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, NULL, NULL) MCFG_DEVICE_ADD(UPD3301_TAG, UPD3301, 14318180) @@ -589,7 +591,19 @@ static MACHINE_CONFIG_START( pc8001mk2, pc8001mk2_state ) MCFG_DEVICE_ADD(I8251_TAG, I8251, 0) MCFG_I8255A_ADD(I8255A_TAG, ppi_intf) - MCFG_I8257_ADD(I8257_TAG, 4000000, dmac_intf) + + MCFG_DEVICE_ADD(I8257_TAG, I8257, 4000000) + MCFG_I8257_OUT_HRQ_CB(WRITELINE(pc8001_state, hrq_w)) + MCFG_I8257_OUT_MEMW_CB(WRITE8(pc8001_state, dma_mem_w)) + MCFG_I8257_IN_IOR_0_CB(READ8(pc8001_state, dma_io_r)) + MCFG_I8257_IN_IOR_1_CB(READ8(pc8001_state, dma_io_r)) + MCFG_I8257_IN_IOR_2_CB(READ8(pc8001_state, dma_io_r)) + MCFG_I8257_IN_IOR_3_CB(READ8(pc8001_state, dma_io_r)) + MCFG_I8257_OUT_IOW_0_CB(WRITE8(pc8001_state, dma_io_w)) + MCFG_I8257_OUT_IOW_1_CB(WRITE8(pc8001_state, dma_io_w)) + MCFG_I8257_OUT_IOW_2_CB(WRITE8(pc8001_state, dma_io_w)) + MCFG_I8257_OUT_IOW_3_CB(WRITE8(pc8001_state, dma_io_w)) + MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, NULL, NULL) MCFG_DEVICE_ADD(UPD3301_TAG, UPD3301, 14318180) diff --git a/src/mess/drivers/radio86.c b/src/mess/drivers/radio86.c index a658efccb6a..b6d95e8736c 100644 --- a/src/mess/drivers/radio86.c +++ b/src/mess/drivers/radio86.c @@ -372,7 +372,11 @@ static MACHINE_CONFIG_START( radio86, radio86_state ) MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette") MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) - MCFG_I8257_ADD("dma8257", XTAL_16MHz / 9, radio86_dma) + MCFG_DEVICE_ADD("dma8257", I8257, XTAL_16MHz / 9) + MCFG_I8257_OUT_HRQ_CB(WRITELINE(radio86_state, hrq_w)) + MCFG_I8257_IN_MEMR_CB(READ8(radio86_state, memory_read_byte)) + MCFG_I8257_OUT_MEMW_CB(WRITE8(radio86_state, memory_write_byte)) + MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275_device, dack_w)) MCFG_CASSETTE_ADD( "cassette", radio86_cassette_interface ) MCFG_SOFTWARE_LIST_ADD("cass_list","radio86") diff --git a/src/mess/drivers/unior.c b/src/mess/drivers/unior.c index 61a80ba1217..d66f3579d3a 100644 --- a/src/mess/drivers/unior.c +++ b/src/mess/drivers/unior.c @@ -393,17 +393,6 @@ READ8_MEMBER(unior_state::dma_r) return m_p_vram[offset & 0x7ff]; } -static I8257_INTERFACE( dma_intf ) -{ - DEVCB_CPU_INPUT_LINE("maincpu", I8085_HALT), - DEVCB_NULL, - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DEVICE_MEMBER("crtc", i8275_device, dack_w), - { DEVCB_NULL, DEVCB_NULL, DEVCB_DRIVER_MEMBER(unior_state, dma_r), DEVCB_NULL }, - { DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL }, -}; - WRITE8_MEMBER( unior_state::cpu_status_callback ) { m_dma->i8257_hlda_w(BIT(data, 3)); @@ -462,7 +451,12 @@ static MACHINE_CONFIG_START( unior, unior_state ) MCFG_I8255_ADD( "ppi0", ppi0_intf ) MCFG_I8255_ADD( "ppi1", ppi1_intf ) - MCFG_I8257_ADD("dma", XTAL_20MHz / 9, dma_intf) // unknown clock + + MCFG_DEVICE_ADD("dma", I8257, XTAL_20MHz / 9) // unknown clock + MCFG_I8257_OUT_HRQ_CB(INPUTLINE("maincpu", I8085_HALT)) + MCFG_I8257_OUT_MEMW_CB(DEVWRITE8("crtc", i8275_device, dack_w)) + MCFG_I8257_IN_IOR_2_CB(READ8(unior_state, dma_r)) + MCFG_I8275_ADD("crtc", crtc_intf) MACHINE_CONFIG_END diff --git a/src/mess/includes/partner.h b/src/mess/includes/partner.h index 9d34642b0b0..2efc3c67b57 100644 --- a/src/mess/includes/partner.h +++ b/src/mess/includes/partner.h @@ -47,7 +47,6 @@ public: /*----------- defined in machine/partner.c -----------*/ -extern const i8257_interface partner_dma; extern const wd17xx_interface partner_wd17xx_interface; #endif /* partner_H_ */ diff --git a/src/mess/includes/radio86.h b/src/mess/includes/radio86.h index 429f5991189..b233c730c24 100644 --- a/src/mess/includes/radio86.h +++ b/src/mess/includes/radio86.h @@ -133,9 +133,6 @@ extern const i8275_interface partner_i8275_interface; extern const i8275_interface mikrosha_i8275_interface; extern const i8275_interface apogee_i8275_interface; -extern const i8257_interface radio86_dma; - - extern void radio86_init_keyboard(running_machine &machine); diff --git a/src/mess/machine/partner.c b/src/mess/machine/partner.c index 9f07f149d23..6f896573bf0 100644 --- a/src/mess/machine/partner.c +++ b/src/mess/machine/partner.c @@ -362,23 +362,12 @@ READ8_MEMBER(partner_state::partner_fdc_r) { return m_fdc->data_r(space,offset); } + WRITE8_MEMBER(partner_state::partner_fdc_w) { m_fdc->data_w(space,offset,data); } -I8257_INTERFACE( partner_dma ) -{ - DEVCB_DRIVER_LINE_MEMBER(partner_state,hrq_w), - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(radio86_state, memory_read_byte), - DEVCB_DRIVER_MEMBER(radio86_state, memory_write_byte), - { DEVCB_DRIVER_MEMBER(partner_state, partner_fdc_r), DEVCB_NULL, DEVCB_NULL, DEVCB_NULL }, - { DEVCB_DRIVER_MEMBER(partner_state, partner_fdc_w), DEVCB_NULL, DEVCB_DEVICE_MEMBER("i8275", i8275_device, dack_w), DEVCB_NULL } -}; - - MACHINE_RESET_MEMBER(partner_state,partner) { m_mem_page = 0; diff --git a/src/mess/machine/radio86.c b/src/mess/machine/radio86.c index 448b4f1322b..52e34f19f04 100644 --- a/src/mess/machine/radio86.c +++ b/src/mess/machine/radio86.c @@ -146,17 +146,6 @@ WRITE8_MEMBER(radio86_state::memory_write_byte) return prog_space.write_byte(offset, data); } -I8257_INTERFACE( radio86_dma ) -{ - DEVCB_DRIVER_LINE_MEMBER(radio86_state,hrq_w), - DEVCB_NULL, - DEVCB_NULL, - DEVCB_DRIVER_MEMBER(radio86_state, memory_read_byte), - DEVCB_DRIVER_MEMBER(radio86_state, memory_write_byte), - { DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL }, - { DEVCB_NULL, DEVCB_NULL, DEVCB_DEVICE_MEMBER("i8275", i8275_device, dack_w), DEVCB_NULL } -}; - void radio86_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { switch (id)