From 9545f58030546ebd76cc4e39f2788850e9ee1052 Mon Sep 17 00:00:00 2001 From: AJR Date: Tue, 20 Feb 2018 19:30:29 -0500 Subject: devcb: Fix validation problem with chained callbacks (nw) --- src/emu/devcb.cpp | 16 ++++++++++------ src/emu/devcb.h | 4 ++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/emu/devcb.cpp b/src/emu/devcb.cpp index 96746823c96..f29d1ed439c 100644 --- a/src/emu/devcb.cpp +++ b/src/emu/devcb.cpp @@ -145,11 +145,12 @@ void devcb_base::resolve_space() // devcb_read_base - constructor //------------------------------------------------- -devcb_read_base::devcb_read_base(device_t &device, u64 defmask) +devcb_read_base::devcb_read_base(device_t &device, u64 defmask, bool chained) : devcb_base(device, defmask), m_adapter(&devcb_read_base::read_unresolved_adapter) { - device.m_input_callbacks.push_back(this); + if (!chained) + device.m_input_callbacks.push_back(this); } @@ -177,7 +178,7 @@ void devcb_read_base::devcb_reset() devcb_read_base &devcb_read_base::chain_alloc() { // set up the chained callback pointer - m_chain.reset(new devcb_read_base(m_device, m_defmask)); + m_chain.reset(new devcb_read_base(*this)); return *m_chain; } @@ -465,11 +466,12 @@ void devcb_read_base::validity_check(validity_checker &valid) const // devcb_write_base - constructor //------------------------------------------------- -devcb_write_base::devcb_write_base(device_t &device, u64 defmask) +devcb_write_base::devcb_write_base(device_t &device, u64 defmask, bool chained) : devcb_base(device, defmask), m_adapter(&devcb_write_base::write_unresolved_adapter) { - device.m_output_callbacks.push_back(this); + if (!chained) + device.m_output_callbacks.push_back(this); } @@ -497,7 +499,7 @@ void devcb_write_base::devcb_reset() devcb_write_base &devcb_write_base::chain_alloc() { // set up the chained callback pointer - m_chain.reset(new devcb_write_base(m_device, m_defmask)); + m_chain.reset(new devcb_write_base(m_device, m_defmask, true)); return *m_chain; } @@ -628,6 +630,8 @@ void devcb_write_base::validity_check(validity_checker &valid) const switch (m_type) { case CALLBACK_NONE: + break; + case CALLBACK_CONSTANT: case CALLBACK_LOG: case CALLBACK_IOPORT: diff --git a/src/emu/devcb.h b/src/emu/devcb.h index bdb3b0d6997..20d19161bff 100644 --- a/src/emu/devcb.h +++ b/src/emu/devcb.h @@ -244,7 +244,7 @@ class devcb_read_base : public devcb_base { protected: // construction/destruction - devcb_read_base(device_t &device, u64 defmask); + devcb_read_base(device_t &device, u64 defmask, bool chained = false); public: // callback configuration @@ -300,7 +300,7 @@ class devcb_write_base : public devcb_base { protected: // construction/destruction - devcb_write_base(device_t &device, u64 defmask); + devcb_write_base(device_t &device, u64 defmask, bool chained = false); public: // callback configuration -- cgit v1.2.3