diff options
| author | 2018-02-20 19:30:29 -0500 | |
|---|---|---|
| committer | 2018-02-20 19:30:29 -0500 | |
| commit | 9545f58030546ebd76cc4e39f2788850e9ee1052 (patch) | |
| tree | d5e2b846a7c32698a11b10d638fda610cae6e13f /src/emu/devcb.cpp | |
| parent | a8632acec6d632114b85a5e056d33bb8c7636ab1 (diff) | |
devcb: Fix validation problem with chained callbacks (nw)
Diffstat (limited to 'src/emu/devcb.cpp')
| -rw-r--r-- | src/emu/devcb.cpp | 16 |
1 files changed, 10 insertions, 6 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: |
