diff options
Diffstat (limited to 'src/devices/machine/upd71071.cpp')
-rw-r--r-- | src/devices/machine/upd71071.cpp | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/src/devices/machine/upd71071.cpp b/src/devices/machine/upd71071.cpp index 0a928be5361..a23b859e3c7 100644 --- a/src/devices/machine/upd71071.cpp +++ b/src/devices/machine/upd71071.cpp @@ -88,7 +88,7 @@ */ #include "emu.h" -#include "machine/upd71071.h" +#include "upd71071.h" DEFINE_DEVICE_TYPE(UPD71071, upd71071_device, "upd71071", "NEC uPD71071 DMA Controller") @@ -98,7 +98,7 @@ upd71071_device::upd71071_device(const machine_config &mconfig, const char *tag, , m_upd_clock(0) , m_out_hreq_cb(*this) , m_out_eop_cb(*this) - , m_dma_read_cb(*this) + , m_dma_read_cb(*this, 0) , m_dma_write_cb(*this) , m_out_dack_cb(*this) , m_cpu(*this, finder_base::DUMMY_TAG) @@ -111,19 +111,16 @@ upd71071_device::upd71071_device(const machine_config &mconfig, const char *tag, void upd71071_device::device_start() { - m_out_hreq_cb.resolve_safe(); - m_out_eop_cb.resolve_safe(); - m_dma_read_cb.resolve_all_safe(0); - m_dma_write_cb.resolve_all_safe(); - m_out_dack_cb.resolve_all_safe(); for (auto &elem : m_timer) elem = timer_alloc(FUNC(upd71071_device::dma_transfer_timer), this); m_selected_channel = 0; m_reg.device_control = 0; m_reg.mask = 0x0f; // mask all channels - for (int x = 0; x < 4; x++) - m_reg.mode_control[x] = 0; + + std::fill(std::begin(m_reg.address_current), std::end(m_reg.address_current), 0); + std::fill(std::begin(m_reg.count_current), std::end(m_reg.count_current), 0); + std::fill(std::begin(m_reg.mode_control), std::end(m_reg.mode_control), 0); save_item(NAME(m_reg.initialise)); save_item(NAME(m_reg.channel)); @@ -166,7 +163,7 @@ TIMER_CALLBACK_MEMBER(upd71071_device::dma_transfer_timer) case 1: case 2: case 3: - if (!m_dma_read_cb[channel].isnull()) + if (!m_dma_read_cb[channel].isunset()) data = m_dma_read_cb[channel](0); break; } @@ -221,8 +218,7 @@ TIMER_CALLBACK_MEMBER(upd71071_device::dma_transfer_timer) case 1: case 2: case 3: - if (!m_dma_write_cb[channel].isnull()) - m_dma_write_cb[channel](offs_t(0), data); + m_dma_write_cb[channel](offs_t(0), data); break; } if (m_reg.mode_control[channel] & 0x20) // Address direction @@ -472,7 +468,7 @@ void upd71071_device::write(offs_t offset, uint8_t data) } } -WRITE_LINE_MEMBER(upd71071_device::set_hreq) +void upd71071_device::set_hreq(int state) { if (m_hreq != state) { @@ -481,7 +477,7 @@ WRITE_LINE_MEMBER(upd71071_device::set_hreq) } } -WRITE_LINE_MEMBER(upd71071_device::set_eop) +void upd71071_device::set_eop(int state) { if (m_eop != state) { |