summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2020-05-21 23:26:30 +0200
committer Olivier Galibert <galibert@pobox.com>2020-05-21 23:27:44 +0200
commit4cabfa3135e7798c63a21a0ef5d4b1bee1144647 (patch)
treee51bf1adae3526356983eb03309bf65ba15283c4
parent1407a3b712f5e8d4252af485315cd5bf66b9331d (diff)
devcb: Remove the space for the handlers, it is not needed anyomre [Ivan Vangelista, O. Galibert]
-rw-r--r--src/emu/devcb.cpp109
-rw-r--r--src/emu/devcb.h319
2 files changed, 77 insertions, 351 deletions
diff --git a/src/emu/devcb.cpp b/src/emu/devcb.cpp
index 3fb8056c787..19970f45c5f 100644
--- a/src/emu/devcb.cpp
+++ b/src/emu/devcb.cpp
@@ -18,10 +18,6 @@ template class devcb_read<u32>;
template class devcb_read<u64>;
template class devcb_read<int, 1U>;
-template class devcb_read8::delegate_builder<read8_delegate>;
-template class devcb_read8::delegate_builder<read16_delegate>;
-template class devcb_read8::delegate_builder<read32_delegate>;
-template class devcb_read8::delegate_builder<read64_delegate>;
template class devcb_read8::delegate_builder<read8s_delegate>;
template class devcb_read8::delegate_builder<read16s_delegate>;
template class devcb_read8::delegate_builder<read32s_delegate>;
@@ -36,10 +32,6 @@ template class devcb_read8::delegate_builder<read32smo_delegate>;
template class devcb_read8::delegate_builder<read64smo_delegate>;
template class devcb_read8::delegate_builder<read_line_delegate>;
-template class devcb_read16::delegate_builder<read8_delegate>;
-template class devcb_read16::delegate_builder<read16_delegate>;
-template class devcb_read16::delegate_builder<read32_delegate>;
-template class devcb_read16::delegate_builder<read64_delegate>;
template class devcb_read16::delegate_builder<read8s_delegate>;
template class devcb_read16::delegate_builder<read16s_delegate>;
template class devcb_read16::delegate_builder<read32s_delegate>;
@@ -54,10 +46,6 @@ template class devcb_read16::delegate_builder<read32smo_delegate>;
template class devcb_read16::delegate_builder<read64smo_delegate>;
template class devcb_read16::delegate_builder<read_line_delegate>;
-template class devcb_read32::delegate_builder<read8_delegate>;
-template class devcb_read32::delegate_builder<read16_delegate>;
-template class devcb_read32::delegate_builder<read32_delegate>;
-template class devcb_read32::delegate_builder<read64_delegate>;
template class devcb_read32::delegate_builder<read8s_delegate>;
template class devcb_read32::delegate_builder<read16s_delegate>;
template class devcb_read32::delegate_builder<read32s_delegate>;
@@ -72,10 +60,6 @@ template class devcb_read32::delegate_builder<read32smo_delegate>;
template class devcb_read32::delegate_builder<read64smo_delegate>;
template class devcb_read32::delegate_builder<read_line_delegate>;
-template class devcb_read64::delegate_builder<read8_delegate>;
-template class devcb_read64::delegate_builder<read16_delegate>;
-template class devcb_read64::delegate_builder<read32_delegate>;
-template class devcb_read64::delegate_builder<read64_delegate>;
template class devcb_read64::delegate_builder<read8s_delegate>;
template class devcb_read64::delegate_builder<read16s_delegate>;
template class devcb_read64::delegate_builder<read32s_delegate>;
@@ -90,10 +74,6 @@ template class devcb_read64::delegate_builder<read32smo_delegate>;
template class devcb_read64::delegate_builder<read64smo_delegate>;
template class devcb_read64::delegate_builder<read_line_delegate>;
-template class devcb_read_line::delegate_builder<read8_delegate>;
-template class devcb_read_line::delegate_builder<read16_delegate>;
-template class devcb_read_line::delegate_builder<read32_delegate>;
-template class devcb_read_line::delegate_builder<read64_delegate>;
template class devcb_read_line::delegate_builder<read8s_delegate>;
template class devcb_read_line::delegate_builder<read16s_delegate>;
template class devcb_read_line::delegate_builder<read32s_delegate>;
@@ -108,10 +88,6 @@ template class devcb_read_line::delegate_builder<read32smo_delegate>;
template class devcb_read_line::delegate_builder<read64smo_delegate>;
template class devcb_read_line::delegate_builder<read_line_delegate>;
-template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read8_delegate> >;
-template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read16_delegate> >;
-template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read32_delegate> >;
-template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read64_delegate> >;
template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read8s_delegate> >;
template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read16s_delegate> >;
template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read32s_delegate> >;
@@ -127,10 +103,6 @@ template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read64smo
template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read_line_delegate> >;
template class devcb_read8::creator_impl<devcb_read8::ioport_builder>;
-template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read8_delegate> >;
-template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read16_delegate> >;
-template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read32_delegate> >;
-template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read64_delegate> >;
template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read8s_delegate> >;
template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read16s_delegate> >;
template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read32s_delegate> >;
@@ -146,10 +118,6 @@ template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read64s
template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read_line_delegate> >;
template class devcb_read16::creator_impl<devcb_read16::ioport_builder>;
-template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read8_delegate> >;
-template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read16_delegate> >;
-template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read32_delegate> >;
-template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read64_delegate> >;
template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read8s_delegate> >;
template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read16s_delegate> >;
template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read32s_delegate> >;
@@ -165,10 +133,6 @@ template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read64s
template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read_line_delegate> >;
template class devcb_read32::creator_impl<devcb_read32::ioport_builder>;
-template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read8_delegate> >;
-template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read16_delegate> >;
-template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read32_delegate> >;
-template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read64_delegate> >;
template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read8s_delegate> >;
template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read16s_delegate> >;
template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read32s_delegate> >;
@@ -184,10 +148,6 @@ template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read64s
template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read_line_delegate> >;
template class devcb_read64::creator_impl<devcb_read64::ioport_builder>;
-template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read8_delegate> >;
-template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read16_delegate> >;
-template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read32_delegate> >;
-template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read64_delegate> >;
template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read8s_delegate> >;
template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read16s_delegate> >;
template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read32s_delegate> >;
@@ -209,10 +169,6 @@ template class devcb_write<u32>;
template class devcb_write<u64>;
template class devcb_write<int, 1U>;
-template class devcb_write8::delegate_builder<write8_delegate>;
-template class devcb_write8::delegate_builder<write16_delegate>;
-template class devcb_write8::delegate_builder<write32_delegate>;
-template class devcb_write8::delegate_builder<write64_delegate>;
template class devcb_write8::delegate_builder<write8s_delegate>;
template class devcb_write8::delegate_builder<write16s_delegate>;
template class devcb_write8::delegate_builder<write32s_delegate>;
@@ -227,10 +183,6 @@ template class devcb_write8::delegate_builder<write32smo_delegate>;
template class devcb_write8::delegate_builder<write64smo_delegate>;
template class devcb_write8::delegate_builder<write_line_delegate>;
-template class devcb_write16::delegate_builder<write8_delegate>;
-template class devcb_write16::delegate_builder<write16_delegate>;
-template class devcb_write16::delegate_builder<write32_delegate>;
-template class devcb_write16::delegate_builder<write64_delegate>;
template class devcb_write16::delegate_builder<write8s_delegate>;
template class devcb_write16::delegate_builder<write16s_delegate>;
template class devcb_write16::delegate_builder<write32s_delegate>;
@@ -245,10 +197,6 @@ template class devcb_write16::delegate_builder<write32smo_delegate>;
template class devcb_write16::delegate_builder<write64smo_delegate>;
template class devcb_write16::delegate_builder<write_line_delegate>;
-template class devcb_write32::delegate_builder<write8_delegate>;
-template class devcb_write32::delegate_builder<write16_delegate>;
-template class devcb_write32::delegate_builder<write32_delegate>;
-template class devcb_write32::delegate_builder<write64_delegate>;
template class devcb_write32::delegate_builder<write8s_delegate>;
template class devcb_write32::delegate_builder<write16s_delegate>;
template class devcb_write32::delegate_builder<write32s_delegate>;
@@ -263,10 +211,6 @@ template class devcb_write32::delegate_builder<write32smo_delegate>;
template class devcb_write32::delegate_builder<write64smo_delegate>;
template class devcb_write32::delegate_builder<write_line_delegate>;
-template class devcb_write64::delegate_builder<write8_delegate>;
-template class devcb_write64::delegate_builder<write16_delegate>;
-template class devcb_write64::delegate_builder<write32_delegate>;
-template class devcb_write64::delegate_builder<write64_delegate>;
template class devcb_write64::delegate_builder<write8s_delegate>;
template class devcb_write64::delegate_builder<write16s_delegate>;
template class devcb_write64::delegate_builder<write32s_delegate>;
@@ -281,10 +225,6 @@ template class devcb_write64::delegate_builder<write32smo_delegate>;
template class devcb_write64::delegate_builder<write64smo_delegate>;
template class devcb_write64::delegate_builder<write_line_delegate>;
-template class devcb_write_line::delegate_builder<write8_delegate>;
-template class devcb_write_line::delegate_builder<write16_delegate>;
-template class devcb_write_line::delegate_builder<write32_delegate>;
-template class devcb_write_line::delegate_builder<write64_delegate>;
template class devcb_write_line::delegate_builder<write8s_delegate>;
template class devcb_write_line::delegate_builder<write16s_delegate>;
template class devcb_write_line::delegate_builder<write32s_delegate>;
@@ -299,10 +239,6 @@ template class devcb_write_line::delegate_builder<write32smo_delegate>;
template class devcb_write_line::delegate_builder<write64smo_delegate>;
template class devcb_write_line::delegate_builder<write_line_delegate>;
-template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write8_delegate> >;
-template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write16_delegate> >;
-template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write32_delegate> >;
-template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write64_delegate> >;
template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write8s_delegate> >;
template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write16s_delegate> >;
template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write32s_delegate> >;
@@ -323,10 +259,6 @@ template class devcb_write8::creator_impl<devcb_write8::membank_builder>;
template class devcb_write8::creator_impl<devcb_write8::output_builder>;
template class devcb_write8::creator_impl<devcb_write8::log_builder>;
-template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write8_delegate> >;
-template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write16_delegate> >;
-template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write32_delegate> >;
-template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write64_delegate> >;
template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write8s_delegate> >;
template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write16s_delegate> >;
template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write32s_delegate> >;
@@ -347,10 +279,6 @@ template class devcb_write16::creator_impl<devcb_write16::membank_builder>;
template class devcb_write16::creator_impl<devcb_write16::output_builder>;
template class devcb_write16::creator_impl<devcb_write16::log_builder>;
-template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write8_delegate> >;
-template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write16_delegate> >;
-template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write32_delegate> >;
-template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write64_delegate> >;
template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write8s_delegate> >;
template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write16s_delegate> >;
template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write32s_delegate> >;
@@ -371,10 +299,6 @@ template class devcb_write32::creator_impl<devcb_write32::membank_builder>;
template class devcb_write32::creator_impl<devcb_write32::output_builder>;
template class devcb_write32::creator_impl<devcb_write32::log_builder>;
-template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write8_delegate> >;
-template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write16_delegate> >;
-template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write32_delegate> >;
-template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write64_delegate> >;
template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write8s_delegate> >;
template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write16s_delegate> >;
template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write32s_delegate> >;
@@ -395,10 +319,6 @@ template class devcb_write64::creator_impl<devcb_write64::membank_builder>;
template class devcb_write64::creator_impl<devcb_write64::output_builder>;
template class devcb_write64::creator_impl<devcb_write64::log_builder>;
-template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write8_delegate> >;
-template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write16_delegate> >;
-template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write32_delegate> >;
-template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write64_delegate> >;
template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write8s_delegate> >;
template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write16s_delegate> >;
template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write32s_delegate> >;
@@ -422,11 +342,7 @@ template class devcb_write_line::creator_impl<devcb_write_line::log_builder>;
devcb_base::devcb_base(device_t &owner)
: m_owner(owner)
- , m_dflt_space_finder(owner, finder_base::DUMMY_TAG)
- , m_dflt_space_index(-1)
- , m_dflt_space(nullptr)
{
- owner.register_callback(*this);
}
@@ -434,31 +350,6 @@ devcb_base::~devcb_base()
{
}
-
-void devcb_base::validity_check(validity_checker &valid) const
-{
- // if a default address space is configured, ensure it exists
- if (m_dflt_space_finder)
- {
- if (!m_dflt_space_finder->has_space(m_dflt_space_index))
- osd_printf_error("Callback references non-existent memory space %d of device %s (%s)\n", m_dflt_space_index, m_dflt_space_finder->device().tag(), m_dflt_space_finder->device().name());
- }
- else if (m_dflt_space_finder.finder_tag() != finder_base::DUMMY_TAG)
- {
- osd_printf_error("Callback references non-existent memory space device tag %s\n", m_dflt_space_finder.finder_tag());
- }
-}
-
-
-void devcb_base::resolve()
-{
- if (m_dflt_space_finder && m_dflt_space_finder->has_space(m_dflt_space_index))
- m_dflt_space = &m_dflt_space_finder->space(m_dflt_space_index);
- else
- m_dflt_space = &m_owner.machine().dummy_space();
-}
-
-
devcb_read_base::~devcb_read_base()
{
}
diff --git a/src/emu/devcb.h b/src/emu/devcb.h
index 0ed064fbf12..a5c3acfd16c 100644
--- a/src/emu/devcb.h
+++ b/src/emu/devcb.h
@@ -62,13 +62,7 @@ template <typename T> struct rw_delegate_type<T, void_t<rw_device_class_t<write_
class devcb_base
{
public:
- template <typename T> void set_space(T &&tag, int index)
- {
- m_dflt_space_finder.set_tag(std::forward<T>(tag));
- m_dflt_space_index = index;
- }
-
- virtual void validity_check(validity_checker &valid) const;
+ virtual void validity_check(validity_checker &valid) const = 0;
protected:
// This is in C++17 but not C++14
@@ -89,21 +83,15 @@ protected:
template <typename Input, typename Result, typename Func, typename Enable = void> struct is_transform_form4 { static constexpr bool value = false; };
template <typename Input, typename Result, typename Func, typename Enable = void> struct is_transform_form5 { static constexpr bool value = false; };
template <typename Input, typename Result, typename Func, typename Enable = void> struct is_transform_form6 { static constexpr bool value = false; };
- template <typename Input, typename Result, typename Func> struct is_transform_form1<Input, Result, Func, std::enable_if_t<std::is_convertible<std::result_of_t<Func (address_space &, offs_t &, Input, std::make_unsigned_t<Input> &)>, Result>::value> > { static constexpr bool value = true; };
- template <typename Input, typename Result, typename Func> struct is_transform_form2<Input, Result, Func, std::enable_if_t<std::is_convertible<std::result_of_t<Func (address_space &, offs_t &, Input)>, Result>::value> > { static constexpr bool value = true; };
template <typename Input, typename Result, typename Func> struct is_transform_form3<Input, Result, Func, std::enable_if_t<std::is_convertible<std::result_of_t<Func (offs_t &, Input, std::make_unsigned_t<Input> &)>, Result>::value> > { static constexpr bool value = true; };
template <typename Input, typename Result, typename Func> struct is_transform_form4<Input, Result, Func, std::enable_if_t<std::is_convertible<std::result_of_t<Func (offs_t &, Input)>, Result>::value> > { static constexpr bool value = true; };
- template <typename Input, typename Result, typename Func> struct is_transform_form5<Input, Result, Func, std::enable_if_t<std::is_convertible<std::result_of_t<Func (address_space &, Input)>, Result>::value> > { static constexpr bool value = true; };
template <typename Input, typename Result, typename Func> struct is_transform_form6<Input, Result, Func, std::enable_if_t<std::is_convertible<std::result_of_t<Func (Input)>, Result>::value> > { static constexpr bool value = true; };
template <typename Input, typename Result, typename Func> struct is_transform { static constexpr bool value = is_transform_form1<Input, Result, Func>::value || is_transform_form2<Input, Result, Func>::value || is_transform_form3<Input, Result, Func>::value || is_transform_form4<Input, Result, Func>::value || is_transform_form5<Input, Result, Func>::value || is_transform_form6<Input, Result, Func>::value; };
// Determining the result type of a transform function
template <typename Input, typename Result, typename Func, typename Enable = void> struct transform_result;
- template <typename Input, typename Result, typename Func> struct transform_result<Input, Result, Func, std::enable_if_t<is_transform_form1<Input, Result, Func>::value> > { using type = std::result_of_t<Func (address_space &, offs_t &, Input, std::make_unsigned_t<Input> &)>; };
- template <typename Input, typename Result, typename Func> struct transform_result<Input, Result, Func, std::enable_if_t<is_transform_form2<Input, Result, Func>::value> > { using type = std::result_of_t<Func (address_space &, offs_t &, Input)>; };
template <typename Input, typename Result, typename Func> struct transform_result<Input, Result, Func, std::enable_if_t<is_transform_form3<Input, Result, Func>::value> > { using type = std::result_of_t<Func (offs_t &, Input, std::make_unsigned_t<Input> &)>; };
template <typename Input, typename Result, typename Func> struct transform_result<Input, Result, Func, std::enable_if_t<is_transform_form4<Input, Result, Func>::value> > { using type = std::result_of_t<Func (offs_t &, Input)>; };
- template <typename Input, typename Result, typename Func> struct transform_result<Input, Result, Func, std::enable_if_t<is_transform_form5<Input, Result, Func>::value> > { using type = std::result_of_t<Func (address_space &, Input)>; };
template <typename Input, typename Result, typename Func> struct transform_result<Input, Result, Func, std::enable_if_t<is_transform_form6<Input, Result, Func>::value> > { using type = std::result_of_t<Func (Input)>; };
template <typename Input, typename Result, typename Func> using transform_result_t = typename transform_result<Input, Result, Func>::type;
@@ -112,12 +100,9 @@ protected:
template <typename T> using delegate_device_class_t = emu::detail::rw_delegate_device_class_t<T>;
// Invoking transform callbacks
- template <typename Input, typename Result, typename T> static std::enable_if_t<is_transform_form1<Input, Result, T>::value, mask_t<transform_result_t<Input, Result, T>, Result> > invoke_transform(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> &mem_mask) { return std::make_unsigned_t<transform_result_t<Input, Result, T> >(cb(space, offset, data, mem_mask)); }
- template <typename Input, typename Result, typename T> static std::enable_if_t<is_transform_form2<Input, Result, T>::value, mask_t<transform_result_t<Input, Result, T>, Result> > invoke_transform(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> &mem_mask) { return std::make_unsigned_t<transform_result_t<Input, Result, T> >(cb(space, data, offset)); }
- template <typename Input, typename Result, typename T> static std::enable_if_t<is_transform_form3<Input, Result, T>::value, mask_t<transform_result_t<Input, Result, T>, Result> > invoke_transform(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> &mem_mask) { return std::make_unsigned_t<transform_result_t<Input, Result, T> >(cb(offset, data, mem_mask)); }
- template <typename Input, typename Result, typename T> static std::enable_if_t<is_transform_form4<Input, Result, T>::value, mask_t<transform_result_t<Input, Result, T>, Result> > invoke_transform(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> &mem_mask) { return std::make_unsigned_t<transform_result_t<Input, Result, T> >(cb(offset, data)); }
- template <typename Input, typename Result, typename T> static std::enable_if_t<is_transform_form5<Input, Result, T>::value, mask_t<transform_result_t<Input, Result, T>, Result> > invoke_transform(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> &mem_mask) { return std::make_unsigned_t<transform_result_t<Input, Result, T> >(cb(space, data)); }
- template <typename Input, typename Result, typename T> static std::enable_if_t<is_transform_form6<Input, Result, T>::value, mask_t<transform_result_t<Input, Result, T>, Result> > invoke_transform(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> &mem_mask) { return std::make_unsigned_t<transform_result_t<Input, Result, T> >(cb(data)); }
+ template <typename Input, typename Result, typename T> static std::enable_if_t<is_transform_form3<Input, Result, T>::value, mask_t<transform_result_t<Input, Result, T>, Result> > invoke_transform(T const &cb, offs_t &offset, Input data, std::make_unsigned_t<Input> &mem_mask) { return std::make_unsigned_t<transform_result_t<Input, Result, T> >(cb(offset, data, mem_mask)); }
+ template <typename Input, typename Result, typename T> static std::enable_if_t<is_transform_form4<Input, Result, T>::value, mask_t<transform_result_t<Input, Result, T>, Result> > invoke_transform(T const &cb, offs_t &offset, Input data, std::make_unsigned_t<Input> &mem_mask) { return std::make_unsigned_t<transform_result_t<Input, Result, T> >(cb(offset, data)); }
+ template <typename Input, typename Result, typename T> static std::enable_if_t<is_transform_form6<Input, Result, T>::value, mask_t<transform_result_t<Input, Result, T>, Result> > invoke_transform(T const &cb, offs_t &offset, Input data, std::make_unsigned_t<Input> &mem_mask) { return std::make_unsigned_t<transform_result_t<Input, Result, T> >(cb(data)); }
// Working with devices and interfaces
template <typename T> static std::enable_if_t<emu::detail::is_device_implementation<T>::value, const char *> get_tag(T &obj) { return obj.tag(); }
@@ -204,15 +189,8 @@ protected:
device_t &owner() const { return m_owner; }
- void resolve();
-
- address_space &default_space() { assert(m_dflt_space); return *m_dflt_space; }
-
private:
device_t &m_owner;
- optional_device<device_memory_interface> m_dflt_space_finder;
- int m_dflt_space_index;
- address_space *m_dflt_space;
};
@@ -226,33 +204,20 @@ protected:
template <typename Result, typename Func, typename Enable = void> struct is_read_form1 { static constexpr bool value = false; };
template <typename Result, typename Func, typename Enable = void> struct is_read_form2 { static constexpr bool value = false; };
template <typename Result, typename Func, typename Enable = void> struct is_read_form3 { static constexpr bool value = false; };
- template <typename Result, typename Func, typename Enable = void> struct is_read_form4 { static constexpr bool value = false; };
- template <typename Result, typename Func, typename Enable = void> struct is_read_form5 { static constexpr bool value = false; };
- template <typename Result, typename Func, typename Enable = void> struct is_read_form6 { static constexpr bool value = false; };
- template <typename Result, typename Func> struct is_read_form1<Result, Func, std::enable_if_t<std::is_convertible<std::result_of_t<Func (address_space &, offs_t, Result)>, Result>::value> > { static constexpr bool value = true; };
- template <typename Result, typename Func> struct is_read_form2<Result, Func, std::enable_if_t<std::is_convertible<std::result_of_t<Func (address_space &, offs_t)>, Result>::value> > { static constexpr bool value = true; };
- template <typename Result, typename Func> struct is_read_form3<Result, Func, std::enable_if_t<std::is_convertible<std::result_of_t<Func (offs_t, Result)>, Result>::value> > { static constexpr bool value = true; };
- template <typename Result, typename Func> struct is_read_form4<Result, Func, std::enable_if_t<std::is_convertible<std::result_of_t<Func (offs_t)>, Result>::value> > { static constexpr bool value = true; };
- template <typename Result, typename Func> struct is_read_form5<Result, Func, std::enable_if_t<std::is_convertible<std::result_of_t<Func (address_space &)>, Result>::value> > { static constexpr bool value = true; };
- template <typename Result, typename Func> struct is_read_form6<Result, Func, std::enable_if_t<std::is_convertible<std::result_of_t<Func ()>, Result>::value> > { static constexpr bool value = true; };
- template <typename Result, typename Func> struct is_read { static constexpr bool value = is_read_form1<Result, Func>::value || is_read_form2<Result, Func>::value || is_read_form3<Result, Func>::value || is_read_form4<Result, Func>::value || is_read_form5<Result, Func>::value || is_read_form6<Result, Func>::value; };
+ template <typename Result, typename Func> struct is_read_form1<Result, Func, std::enable_if_t<std::is_convertible<std::result_of_t<Func (offs_t, Result)>, Result>::value> > { static constexpr bool value = true; };
+ template <typename Result, typename Func> struct is_read_form2<Result, Func, std::enable_if_t<std::is_convertible<std::result_of_t<Func (offs_t)>, Result>::value> > { static constexpr bool value = true; };
+ template <typename Result, typename Func> struct is_read_form3<Result, Func, std::enable_if_t<std::is_convertible<std::result_of_t<Func ()>, Result>::value> > { static constexpr bool value = true; };
+ template <typename Result, typename Func> struct is_read { static constexpr bool value = is_read_form1<Result, Func>::value || is_read_form2<Result, Func>::value || is_read_form3<Result, Func>::value; };
// Determining the result type of a read function
template <typename Result, typename Func, typename Enable = void> struct read_result;
- template <typename Result, typename Func> struct read_result<Result, Func, std::enable_if_t<is_read_form1<Result, Func>::value> > { using type = std::result_of_t<Func (address_space &, offs_t, std::make_unsigned_t<Result>)>; };
- template <typename Result, typename Func> struct read_result<Result, Func, std::enable_if_t<is_read_form2<Result, Func>::value> > { using type = std::result_of_t<Func (address_space &, offs_t)>; };
- template <typename Result, typename Func> struct read_result<Result, Func, std::enable_if_t<is_read_form3<Result, Func>::value> > { using type = std::result_of_t<Func (offs_t, std::make_unsigned_t<Result>)>; };
- template <typename Result, typename Func> struct read_result<Result, Func, std::enable_if_t<is_read_form4<Result, Func>::value> > { using type = std::result_of_t<Func (offs_t)>; };
- template <typename Result, typename Func> struct read_result<Result, Func, std::enable_if_t<is_read_form5<Result, Func>::value> > { using type = std::result_of_t<Func (address_space &)>; };
- template <typename Result, typename Func> struct read_result<Result, Func, std::enable_if_t<is_read_form6<Result, Func>::value> > { using type = std::result_of_t<Func ()>; };
+ template <typename Result, typename Func> struct read_result<Result, Func, std::enable_if_t<is_read_form1<Result, Func>::value> > { using type = std::result_of_t<Func (offs_t, std::make_unsigned_t<Result>)>; };
+ template <typename Result, typename Func> struct read_result<Result, Func, std::enable_if_t<is_read_form2<Result, Func>::value> > { using type = std::result_of_t<Func (offs_t)>; };
+ template <typename Result, typename Func> struct read_result<Result, Func, std::enable_if_t<is_read_form3<Result, Func>::value> > { using type = std::result_of_t<Func ()>; };
template <typename Result, typename Func> using read_result_t = typename read_result<Result, Func>::type;
// Detecting candidates for read delegates
template <typename T, typename Enable = void> struct is_read_method { static constexpr bool value = false; };
- template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read8_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
- template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read16_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
- template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read32_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
- template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read64_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read8s_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read16s_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read32s_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
@@ -268,19 +233,12 @@ protected:
template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read_line_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
// Invoking read callbacks
- template <typename Result, typename T> static std::enable_if_t<is_read_form1<Result, T>::value, mask_t<read_result_t<Result, T>, Result> > invoke_read(T const &cb, address_space &space, offs_t offset, std::make_unsigned_t<Result> mem_mask) { return std::make_unsigned_t<read_result_t<Result, T> >(cb(space, offset, mem_mask)); }
- template <typename Result, typename T> static std::enable_if_t<is_read_form2<Result, T>::value, mask_t<read_result_t<Result, T>, Result> > invoke_read(T const &cb, address_space &space, offs_t offset, std::make_unsigned_t<Result> mem_mask) { return std::make_unsigned_t<read_result_t<Result, T> >(cb(space, offset)); }
- template <typename Result, typename T> static std::enable_if_t<is_read_form3<Result, T>::value, mask_t<read_result_t<Result, T>, Result> > invoke_read(T const &cb, address_space &space, offs_t offset, std::make_unsigned_t<Result> mem_mask) { return std::make_unsigned_t<read_result_t<Result, T> >(cb(offset, mem_mask)); }
- template <typename Result, typename T> static std::enable_if_t<is_read_form4<Result, T>::value, mask_t<read_result_t<Result, T>, Result> > invoke_read(T const &cb, address_space &space, offs_t offset, std::make_unsigned_t<Result> mem_mask) { return std::make_unsigned_t<read_result_t<Result, T> >(cb(offset)); }
- template <typename Result, typename T> static std::enable_if_t<is_read_form5<Result, T>::value, mask_t<read_result_t<Result, T>, Result> > invoke_read(T const &cb, address_space &space, offs_t offset, std::make_unsigned_t<Result> mem_mask) { return std::make_unsigned_t<read_result_t<Result, T> >(cb(space)); }
- template <typename Result, typename T> static std::enable_if_t<is_read_form6<Result, T>::value, mask_t<read_result_t<Result, T>, Result> > invoke_read(T const &cb, address_space &space, offs_t offset, std::make_unsigned_t<Result> mem_mask) { return std::make_unsigned_t<read_result_t<Result, T> >(cb()); }
+ template <typename Result, typename T> static std::enable_if_t<is_read_form1<Result, T>::value, mask_t<read_result_t<Result, T>, Result> > invoke_read(T const &cb, offs_t offset, std::make_unsigned_t<Result> mem_mask) { return std::make_unsigned_t<read_result_t<Result, T> >(cb(offset, mem_mask)); }
+ template <typename Result, typename T> static std::enable_if_t<is_read_form2<Result, T>::value, mask_t<read_result_t<Result, T>, Result> > invoke_read(T const &cb, offs_t offset, std::make_unsigned_t<Result> mem_mask) { return std::make_unsigned_t<read_result_t<Result, T> >(cb(offset)); }
+ template <typename Result, typename T> static std::enable_if_t<is_read_form3<Result, T>::value, mask_t<read_result_t<Result, T>, Result> > invoke_read(T const &cb, offs_t offset, std::make_unsigned_t<Result> mem_mask) { return std::make_unsigned_t<read_result_t<Result, T> >(cb()); }
// Delegate characteristics
template <typename T, typename Dummy = void> struct delegate_traits;
- template <typename Dummy> struct delegate_traits<read8_delegate, Dummy> { static constexpr u8 default_mask = ~u8(0); };
- template <typename Dummy> struct delegate_traits<read16_delegate, Dummy> { static constexpr u16 default_mask = ~u16(0); };
- template <typename Dummy> struct delegate_traits<read32_delegate, Dummy> { static constexpr u32 default_mask = ~u32(0); };
- template <typename Dummy> struct delegate_traits<read64_delegate, Dummy> { static constexpr u64 default_mask = ~u64(0); };
template <typename Dummy> struct delegate_traits<read8s_delegate, Dummy> { static constexpr u8 default_mask = ~u8(0); };
template <typename Dummy> struct delegate_traits<read16s_delegate, Dummy> { static constexpr u16 default_mask = ~u16(0); };
template <typename Dummy> struct delegate_traits<read32s_delegate, Dummy> { static constexpr u32 default_mask = ~u32(0); };
@@ -310,23 +268,13 @@ protected:
template <typename Input, typename Func, typename Enable = void> struct is_write_form1 { static constexpr bool value = false; };
template <typename Input, typename Func, typename Enable = void> struct is_write_form2 { static constexpr bool value = false; };
template <typename Input, typename Func, typename Enable = void> struct is_write_form3 { static constexpr bool value = false; };
- template <typename Input, typename Func, typename Enable = void> struct is_write_form4 { static constexpr bool value = false; };
- template <typename Input, typename Func, typename Enable = void> struct is_write_form5 { static constexpr bool value = false; };
- template <typename Input, typename Func, typename Enable = void> struct is_write_form6 { static constexpr bool value = false; };
- template <typename Input, typename Func> struct is_write_form1<Input, Func, void_t<std::result_of_t<Func (address_space &, offs_t, Input, std::make_unsigned_t<Input>)> > > { static constexpr bool value = true; };
- template <typename Input, typename Func> struct is_write_form2<Input, Func, void_t<std::result_of_t<Func (address_space &, offs_t, Input)> > > { static constexpr bool value = true; };
- template <typename Input, typename Func> struct is_write_form3<Input, Func, void_t<std::result_of_t<Func (offs_t, Input, std::make_unsigned_t<Input>)> > > { static constexpr bool value = true; };
- template <typename Input, typename Func> struct is_write_form4<Input, Func, void_t<std::result_of_t<Func (offs_t, Input)> > > { static constexpr bool value = true; };
- template <typename Input, typename Func> struct is_write_form5<Input, Func, void_t<std::result_of_t<Func (address_space &, Input)> > > { static constexpr bool value = true; };
- template <typename Input, typename Func> struct is_write_form6<Input, Func, void_t<std::result_of_t<Func (Input)> > > { static constexpr bool value = true; };
- template <typename Input, typename Func> struct is_write { static constexpr bool value = is_write_form1<Input, Func>::value || is_write_form2<Input, Func>::value || is_write_form3<Input, Func>::value || is_write_form4<Input, Func>::value || is_write_form5<Input, Func>::value || is_write_form6<Input, Func>::value; };
+ template <typename Input, typename Func> struct is_write_form1<Input, Func, void_t<std::result_of_t<Func (offs_t, Input, std::make_unsigned_t<Input>)> > > { static constexpr bool value = true; };
+ template <typename Input, typename Func> struct is_write_form2<Input, Func, void_t<std::result_of_t<Func (offs_t, Input)> > > { static constexpr bool value = true; };
+ template <typename Input, typename Func> struct is_write_form3<Input, Func, void_t<std::result_of_t<Func (Input)> > > { static constexpr bool value = true; };
+ template <typename Input, typename Func> struct is_write { static constexpr bool value = is_write_form1<Input, Func>::value || is_write_form2<Input, Func>::value || is_write_form3<Input, Func>::value; };
// Detecting candidates for write delegates
template <typename T, typename Enable = void> struct is_write_method { static constexpr bool value = false; };
- template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write8_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
- template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write16_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
- template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write32_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
- template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write64_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write8s_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write16s_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write32s_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
@@ -342,19 +290,12 @@ protected:
template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write_line_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
// Invoking write callbacks
- template <typename Input, typename T> static std::enable_if_t<is_write_form1<Input, T>::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> mem_mask) { return cb(space, offset, data, mem_mask); }
- template <typename Input, typename T> static std::enable_if_t<is_write_form2<Input, T>::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> mem_mask) { return cb(space, offset, data); }
- template <typename Input, typename T> static std::enable_if_t<is_write_form3<Input, T>::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> mem_mask) { return cb(offset, data, mem_mask); }
- template <typename Input, typename T> static std::enable_if_t<is_write_form4<Input, T>::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> mem_mask) { return cb(offset, data); }
- template <typename Input, typename T> static std::enable_if_t<is_write_form5<Input, T>::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> mem_mask) { return cb(space, data); }
- template <typename Input, typename T> static std::enable_if_t<is_write_form6<Input, T>::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> mem_mask) { return cb(data); }
+ template <typename Input, typename T> static std::enable_if_t<is_write_form1<Input, T>::value> invoke_write(T const &cb, offs_t &offset, Input data, std::make_unsigned_t<Input> mem_mask) { return cb(offset, data, mem_mask); }
+ template <typename Input, typename T> static std::enable_if_t<is_write_form2<Input, T>::value> invoke_write(T const &cb, offs_t &offset, Input data, std::make_unsigned_t<Input> mem_mask) { return cb(offset, data); }
+ template <typename Input, typename T> static std::enable_if_t<is_write_form3<Input, T>::value> invoke_write(T const &cb, offs_t &offset, Input data, std::make_unsigned_t<Input> mem_mask) { return cb(data); }
// Delegate characteristics
template <typename T, typename Dummy = void> struct delegate_traits;
- template <typename Dummy> struct delegate_traits<write8_delegate, Dummy> { using input_t = u8; static constexpr u8 default_mask = ~u8(0); };
- template <typename Dummy> struct delegate_traits<write16_delegate, Dummy> { using input_t = u16; static constexpr u16 default_mask = ~u16(0); };
- template <typename Dummy> struct delegate_traits<write32_delegate, Dummy> { using input_t = u32; static constexpr u32 default_mask = ~u32(0); };
- template <typename Dummy> struct delegate_traits<write64_delegate, Dummy> { using input_t = u64; static constexpr u64 default_mask = ~u64(0); };
template <typename Dummy> struct delegate_traits<write8s_delegate, Dummy> { using input_t = u8; static constexpr u8 default_mask = ~u8(0); };
template <typename Dummy> struct delegate_traits<write16s_delegate, Dummy> { using input_t = u16; static constexpr u16 default_mask = ~u16(0); };
template <typename Dummy> struct delegate_traits<write32s_delegate, Dummy> { using input_t = u32; static constexpr u32 default_mask = ~u32(0); };
@@ -383,7 +324,7 @@ template <typename Result, std::make_unsigned_t<Result> DefaultMask = std::make_
class devcb_read : public devcb_read_base
{
private:
- using func_t = std::function<Result (address_space &, offs_t, std::make_unsigned_t<Result>)>;
+ using func_t = std::function<Result (offs_t, std::make_unsigned_t<Result>)>;
class creator
{
@@ -413,7 +354,7 @@ private:
virtual func_t create() override
{
func_t result;
- m_builder.build([&result] (auto &&f) { result = [cb = std::move(f)] (address_space &space, offs_t offset, typename T::input_mask_t mem_mask) { return cb(space, offset, mem_mask); }; });
+ m_builder.build([&result] (auto &&f) { result = [cb = std::move(f)] (offs_t offset, typename T::input_mask_t mem_mask) { return cb(offset, mem_mask); }; });
return result;
}
@@ -431,7 +372,7 @@ private:
virtual func_t create() override
{
return
- [&devbase = m_devbase, message = std::move(m_message)] (address_space &space, offs_t offset, std::make_unsigned_t<Result> mem_mask)
+ [&devbase = m_devbase, message = std::move(m_message)] (offs_t offset, std::make_unsigned_t<Result> mem_mask)
{
devbase.logerror("%s: %s\n", devbase.machine().describe_context(), message);
return Result(0);
@@ -543,12 +484,12 @@ private:
assert(this->m_consumed);
this->built();
chain(
- [src = std::forward<U>(f), cb = std::move(this->m_cb), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t &offset, input_mask_t &mem_mask)
+ [src = std::forward<U>(f), cb = std::move(this->m_cb), exor = this->exor(), mask = this->mask()] (offs_t &offset, input_mask_t &mem_mask)
{
typename Source::input_mask_t source_mask(mem_mask);
- auto const data(src(space, offset, source_mask));
+ auto const data(src(offset, source_mask));
mem_mask = source_mask & mask;
- return (devcb_read::invoke_transform<input_t, Result>(cb, space, offset, data, mem_mask) ^ exor) & mask;
+ return (devcb_read::invoke_transform<input_t, Result>(cb, offset, data, mem_mask) ^ exor) & mask;
});
}
@@ -598,8 +539,8 @@ private:
assert(this->m_consumed);
this->built();
chain(
- [cb = std::move(this->m_cb), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_mask_t mem_mask)
- { return (devcb_read::invoke_read<Result>(cb, space, offset, mem_mask & mask) ^ exor) & mask; });
+ [cb = std::move(this->m_cb), exor = this->exor(), mask = this->mask()] (offs_t offset, input_mask_t mem_mask)
+ { return (devcb_read::invoke_read<Result>(cb, offset, mem_mask & mask) ^ exor) & mask; });
}
private:
@@ -664,8 +605,8 @@ private:
this->built();
m_delegate.resolve();
chain(
- [cb = std::move(this->m_delegate), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_mask_t mem_mask)
- { return (devcb_read::invoke_read<Result>(cb, space, offset, mem_mask & mask) ^ exor) & mask; });
+ [cb = std::move(this->m_delegate), exor = this->exor(), mask = this->mask()] (offs_t offset, input_mask_t mem_mask)
+ { return (devcb_read::invoke_read<Result>(cb, offset, mem_mask & mask) ^ exor) & mask; });
}
private:
@@ -721,7 +662,7 @@ private:
if (!ioport)
throw emu_fatalerror("Read callback bound to non-existent I/O port %s of device %s (%s)\n", m_tag.c_str(), m_devbase.tag(), m_devbase.name());
chain(
- [&port = *ioport, exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_mask_t mem_mask)
+ [&port = *ioport, exor = this->exor(), mask = this->mask()] (offs_t offset, input_mask_t mem_mask)
{ return (port.read() ^ exor) & mask; });
}
@@ -896,7 +837,6 @@ public:
void resolve();
void resolve_safe(Result dflt);
- Result operator()(address_space &space, offs_t offset = 0, std::make_unsigned_t<Result> mem_mask = DefaultMask);
Result operator()(offs_t offset, std::make_unsigned_t<Result> mem_mask = DefaultMask);
Result operator()();
@@ -927,7 +867,6 @@ template <typename Result, std::make_unsigned_t<Result> DefaultMask>
void devcb_read<Result, DefaultMask>::validity_check(validity_checker &valid) const
{
assert(m_functions.empty());
- devcb_read_base::validity_check(valid);
for (typename std::vector<typename creator::ptr>::const_iterator i = m_creators.begin(); m_creators.end() != i; ++i)
{
(*i)->validity_check(valid);
@@ -945,7 +884,6 @@ template <typename Result, std::make_unsigned_t<Result> DefaultMask>
void devcb_read<Result, DefaultMask>::resolve()
{
assert(m_functions.empty());
- devcb_read_base::resolve();
m_functions.reserve(m_creators.size());
for (typename creator::ptr const &c : m_creators)
m_functions.emplace_back(c->create());
@@ -957,30 +895,24 @@ void devcb_read<Result, DefaultMask>::resolve_safe(Result dflt)
{
resolve();
if (m_functions.empty())
- m_functions.emplace_back([dflt] (address_space &space, offs_t offset, std::make_unsigned_t<Result> mem_mask) { return dflt; });
+ m_functions.emplace_back([dflt] (offs_t offset, std::make_unsigned_t<Result> mem_mask) { return dflt; });
}
template <typename Result, std::make_unsigned_t<Result> DefaultMask>
-Result devcb_read<Result, DefaultMask>::operator()(address_space &space, offs_t offset, std::make_unsigned_t<Result> mem_mask)
+Result devcb_read<Result, DefaultMask>::operator()(offs_t offset, std::make_unsigned_t<Result> mem_mask)
{
assert(m_creators.empty() && !m_functions.empty());
typename std::vector<func_t>::const_iterator it(m_functions.begin());
- std::make_unsigned_t<Result> result((*it)(space, offset, mem_mask));
+ std::make_unsigned_t<Result> result((*it)(offset, mem_mask));
while (m_functions.end() != ++it)
- result |= (*it)(space, offset, mem_mask);
+ result |= (*it)(offset, mem_mask);
return result;
}
template <typename Result, std::make_unsigned_t<Result> DefaultMask>
-Result devcb_read<Result, DefaultMask>::operator()(offs_t offset, std::make_unsigned_t<Result> mem_mask)
-{
- return this->operator()(this->default_space(), offset, mem_mask);
-}
-
-template <typename Result, std::make_unsigned_t<Result> DefaultMask>
Result devcb_read<Result, DefaultMask>::operator()()
{
- return this->operator()(this->default_space(), 0U, DefaultMask);
+ return this->operator()(0U, DefaultMask);
}
@@ -993,7 +925,7 @@ template <typename Input, std::make_unsigned_t<Input> DefaultMask = std::make_un
class devcb_write : public devcb_write_base
{
private:
- using func_t = std::function<void (address_space &, offs_t, Input, std::make_unsigned_t<Input>)>;
+ using func_t = std::function<void (offs_t, Input, std::make_unsigned_t<Input>)>;
class creator
{
@@ -1015,7 +947,7 @@ private:
virtual func_t create() override
{
- return [cb = m_builder.build()] (address_space &space, offs_t offset, Input data, std::make_unsigned_t<Input> mem_mask) { cb(space, offset, data, mem_mask); };
+ return [cb = m_builder.build()] (offs_t offset, Input data, std::make_unsigned_t<Input> mem_mask) { cb(offset, data, mem_mask); };
}
private:
@@ -1026,7 +958,7 @@ private:
{
public:
virtual void validity_check(validity_checker &valid) const override { }
- virtual func_t create() override { return [] (address_space &space, offs_t offset, Input data, std::make_unsigned_t<Input> mem_mask) { }; }
+ virtual func_t create() override { return [] (offs_t offset, Input data, std::make_unsigned_t<Input> mem_mask) { }; }
};
template <typename Source, typename Func> class transform_builder; // workaround for MSVC
@@ -1116,9 +1048,9 @@ private:
assert(this->m_consumed);
this->built();
return m_src.build(
- [cb = std::move(m_cb), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t &offset, input_t data, std::make_unsigned_t<input_t> &mem_mask)
+ [cb = std::move(m_cb), exor = this->exor(), mask = this->mask()] (offs_t &offset, input_t data, std::make_unsigned_t<input_t> &mem_mask)
{
- auto const trans(devcb_write::invoke_transform<input_t, output_t>(cb, space, offset, data, mem_mask));
+ auto const trans(devcb_write::invoke_transform<input_t, output_t>(cb, offset, data, mem_mask));
mem_mask &= mask;
return (trans ^ exor) & mask;
});
@@ -1137,11 +1069,11 @@ private:
assert(this->m_consumed);
this->built();
return m_src.build(
- [f = std::move(chain), cb = std::move(this->m_cb), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t &offset, input_t data, std::make_unsigned_t<input_t> &mem_mask)
+ [f = std::move(chain), cb = std::move(this->m_cb), exor = this->exor(), mask = this->mask()] (offs_t &offset, input_t data, std::make_unsigned_t<input_t> &mem_mask)
{
- auto const trans(devcb_write::invoke_transform<input_t, output_t>(cb, space, offset, data, mem_mask));
+ auto const trans(devcb_write::invoke_transform<input_t, output_t>(cb, offset, data, mem_mask));
output_t out_mask(mem_mask & mask);
- return f(space, offset, (trans ^ exor) & mask, out_mask);
+ return f(offset, (trans ^ exor) & mask, out_mask);
});
}
@@ -1197,13 +1129,13 @@ private:
assert(this->m_consumed);
this->built();
return
- [sink = m_sink.build(), cb = std::move(this->m_cb), in_exor = m_in_exor, in_mask = m_in_mask, exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ [sink = m_sink.build(), cb = std::move(this->m_cb), in_exor = m_in_exor, in_mask = m_in_mask, exor = this->exor(), mask = this->mask()] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
{
data = (data ^ in_exor) & in_mask;
mem_mask &= in_mask;
- auto const trans(devcb_write::invoke_transform<input_t, output_t>(cb, space, offset, data, mem_mask));
+ auto const trans(devcb_write::invoke_transform<input_t, output_t>(cb, offset, data, mem_mask));
mem_mask &= mask;
- sink(space, offset, (trans ^ exor) & mask, mem_mask);
+ sink(offset, (trans ^ exor) & mask, mem_mask);
};
}
@@ -1218,14 +1150,14 @@ private:
assert(this->m_consumed);
this->built();
return
- [f = std::move(chain), sink = m_sink.build(), cb = std::move(this->m_cb), in_exor = m_in_exor, in_mask = m_in_mask, exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ [f = std::move(chain), sink = m_sink.build(), cb = std::move(this->m_cb), in_exor = m_in_exor, in_mask = m_in_mask, exor = this->exor(), mask = this->mask()] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
{
data = (data ^ in_exor) & in_mask;
mem_mask &= in_mask;
- auto const trans_1(devcb_write::invoke_transform<input_t, output_t>(cb, space, offset, data, mem_mask));
+ auto const trans_1(devcb_write::invoke_transform<input_t, output_t>(cb, offset, data, mem_mask));
output_t out_mask(mem_mask & mask);
- auto const trans_n(f(space, offset, (trans_1 ^ exor) & mask, out_mask));
- sink(space, offset, trans_n, out_mask);
+ auto const trans_n(f(offset, (trans_1 ^ exor) & mask, out_mask));
+ sink(offset, trans_n, out_mask);
};
}
@@ -1255,8 +1187,8 @@ private:
assert(this->m_consumed);
this->built();
return
- [cb = std::move(this->m_cb)] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
- { devcb_write::invoke_write<Input>(cb, space, offset, data, mem_mask); };
+ [cb = std::move(this->m_cb)] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ { devcb_write::invoke_write<Input>(cb, offset, data, mem_mask); };
}
private:
@@ -1305,8 +1237,8 @@ private:
assert(this->m_consumed);
this->built();
return
- [cb = std::move(this->m_cb), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
- { devcb_write::invoke_write<Input>(cb, space, offset, (data ^ exor) & mask, mem_mask & mask); };
+ [cb = std::move(this->m_cb), exor = this->exor(), mask = this->mask()] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ { devcb_write::invoke_write<Input>(cb, offset, (data ^ exor) & mask, mem_mask & mask); };
}
};
@@ -1349,8 +1281,8 @@ private:
this->built();
m_delegate.resolve();
return
- [cb = std::move(this->m_delegate)] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
- { devcb_write::invoke_write<Input>(cb, space, offset, data, mem_mask); };
+ [cb = std::move(this->m_delegate)] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ { devcb_write::invoke_write<Input>(cb, offset, data, mem_mask); };
}
private:
@@ -1415,8 +1347,8 @@ private:
this->built();
m_delegate.resolve();
return
- [cb = std::move(this->m_delegate), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
- { devcb_write::invoke_write<Input>(cb, space, offset, (data ^ exor) & mask, mem_mask & mask); };
+ [cb = std::move(this->m_delegate), exor = this->exor(), mask = this->mask()] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ { devcb_write::invoke_write<Input>(cb, offset, (data ^ exor) & mask, mem_mask & mask); };
}
};
@@ -1477,7 +1409,7 @@ private:
throw emu_fatalerror("Write callback bound to device %s (%s) that does not implement device_execute_interface\n", device->tag(), device->name());
}
return
- [&exec = *m_exec, linenum = m_linenum] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ [&exec = *m_exec, linenum = m_linenum] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
{ exec.set_input_line(linenum, data); };
}
@@ -1568,7 +1500,7 @@ private:
throw emu_fatalerror("Write callback bound to device %s (%s) that does not implement device_execute_interface\n", device->tag(), device->name());
}
return
- [&exec = *m_exec, linenum = m_linenum, exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ [&exec = *m_exec, linenum = m_linenum, exor = this->exor(), mask = this->mask()] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
{ exec.set_input_line(linenum, (data ^ exor) & mask); };
}
};
@@ -1632,7 +1564,7 @@ private:
throw emu_fatalerror("Write callback bound to device %s (%s) that does not implement device_execute_interface\n", device->tag(), device->name());
}
return
- [&exec = *m_exec, linenum = m_linenum, value = m_value] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ [&exec = *m_exec, linenum = m_linenum, value = m_value] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
{ if (data) exec.set_input_line(linenum, value); };
}
@@ -1727,7 +1659,7 @@ private:
throw emu_fatalerror("Write callback bound to device %s (%s) that does not implement device_execute_interface\n", device->tag(), device->name());
}
return
- [&exec = *m_exec, linenum = m_linenum, value = m_value, exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ [&exec = *m_exec, linenum = m_linenum, value = m_value, exor = this->exor(), mask = this->mask()] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
{ if ((data ^ exor) & mask) exec.set_input_line(linenum, value); };
}
};
@@ -1769,7 +1701,7 @@ private:
if (!ioport)
throw emu_fatalerror("Write callback bound to non-existent I/O port %s of device %s (%s)\n", m_tag.c_str(), m_devbase.tag(), m_devbase.name());
return
- [&port = *ioport] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ [&port = *ioport] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
{ port.write(data); };
}
@@ -1827,7 +1759,7 @@ private:
if (!ioport)
throw emu_fatalerror("Write callback bound to non-existent I/O port %s of device %s (%s)\n", m_tag.c_str(), m_devbase.tag(), m_devbase.name());
return
- [&port = *ioport, exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ [&port = *ioport, exor = this->exor(), mask = this->mask()] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
{ port.write((data ^ exor) & mask); };
}
};
@@ -1869,7 +1801,7 @@ private:
if (!bank)
throw emu_fatalerror("Write callback bound to non-existent memory bank %s of device %s (%s)\n", m_tag.c_str(), m_devbase.tag(), m_devbase.name());
return
- [&membank = *bank] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ [&membank = *bank] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
{ membank.set_entry(data); };
}
@@ -1927,7 +1859,7 @@ private:
if (!bank)
throw emu_fatalerror("Write callback bound to non-existent memory bank %s of device %s (%s)\n", m_tag.c_str(), m_devbase.tag(), m_devbase.name());
return
- [&membank = *bank, exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ [&membank = *bank, exor = this->exor(), mask = this->mask()] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
{ membank.set_entry((data ^ exor) & mask); };
}
};
@@ -1966,7 +1898,7 @@ private:
assert(this->m_consumed);
this->built();
return
- [&item = m_devbase.machine().output().find_or_create_item(m_tag.c_str(), 0)] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ [&item = m_devbase.machine().output().find_or_create_item(m_tag.c_str(), 0)] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
{ item.set(data); };
}
@@ -2021,7 +1953,7 @@ private:
assert(this->m_consumed);
this->built();
return
- [&item = m_devbase.machine().output().find_or_create_item(m_tag.c_str(), 0), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ [&item = m_devbase.machine().output().find_or_create_item(m_tag.c_str(), 0), exor = this->exor(), mask = this->mask()] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
{ item.set((data ^ exor) & mask); };
}
};
@@ -2060,7 +1992,7 @@ private:
assert(this->m_consumed);
this->built();
return
- [&devbase = m_devbase, message = std::move(m_message)] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ [&devbase = m_devbase, message = std::move(m_message)] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
{ if (data) devbase.logerror("%s: %s\n", devbase.machine().describe_context(), message); };
}
@@ -2115,7 +2047,7 @@ private:
assert(this->m_consumed);
this->built();
return
- [&devbase = m_devbase, message = std::move(m_message), exor = this->exor(), mask = this->mask()] (address_space &space, offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
+ [&devbase = m_devbase, message = std::move(m_message), exor = this->exor(), mask = this->mask()] (offs_t offset, input_t data, std::make_unsigned_t<input_t> mem_mask)
{ if ((data ^ exor) & mask) devbase.logerror("%s: %s\n", devbase.machine().describe_context(), message); };
}
};
@@ -2374,8 +2306,6 @@ public:
void resolve();
void resolve_safe();
- void operator()(address_space &space, offs_t offset, Input data, std::make_unsigned_t<Input> mem_mask = DefaultMask);
- void operator()(address_space &space, Input data);
void operator()(offs_t offset, Input data, std::make_unsigned_t<Input> mem_mask = DefaultMask);
void operator()(Input data);
@@ -2406,7 +2336,6 @@ template <typename Input, std::make_unsigned_t<Input> DefaultMask>
void devcb_write<Input, DefaultMask>::validity_check(validity_checker &valid) const
{
assert(m_functions.empty());
- devcb_write_base::validity_check(valid);
for (typename creator::ptr const &c : m_creators)
c->validity_check(valid);
}
@@ -2415,7 +2344,6 @@ template <typename Input, std::make_unsigned_t<Input> DefaultMask>
void devcb_write<Input, DefaultMask>::resolve()
{
assert(m_functions.empty());
- devcb_write_base::resolve();
m_functions.reserve(m_creators.size());
for (typename creator::ptr const &c : m_creators)
m_functions.emplace_back(c->create());
@@ -2427,38 +2355,25 @@ void devcb_write<Input, DefaultMask>::resolve_safe()
{
resolve();
if (m_functions.empty())
- m_functions.emplace_back([] (address_space &space, offs_t offset, Input data, std::make_unsigned_t<Input> mem_mask) { });
+ m_functions.emplace_back([] (offs_t offset, Input data, std::make_unsigned_t<Input> mem_mask) { });
}
template <typename Input, std::make_unsigned_t<Input> DefaultMask>
-void devcb_write<Input, DefaultMask>::operator()(address_space &space, offs_t offset, Input data, std::make_unsigned_t<Input> mem_mask)
+void devcb_write<Input, DefaultMask>::operator()(offs_t offset, Input data, std::make_unsigned_t<Input> mem_mask)
{
assert(m_creators.empty() && !m_functions.empty());
typename std::vector<func_t>::const_iterator it(m_functions.begin());
- (*it)(space, offset, data, mem_mask);
+ (*it)(offset, data, mem_mask);
while (m_functions.end() != ++it)
- (*it)(space, offset, data, mem_mask);
-}
-
-template <typename Input, std::make_unsigned_t<Input> DefaultMask>
-void devcb_write<Input, DefaultMask>::operator()(address_space &space, Input data)
-{
- this->operator()(space, 0U, data, DefaultMask);
-}
-
-template <typename Input, std::make_unsigned_t<Input> DefaultMask>
-void devcb_write<Input, DefaultMask>::operator()(offs_t offset, Input data, std::make_unsigned_t<Input> mem_mask)
-{
- this->operator()(this->default_space(), offset, data, mem_mask);
+ (*it)(offset, data, mem_mask);
}
template <typename Input, std::make_unsigned_t<Input> DefaultMask>
void devcb_write<Input, DefaultMask>::operator()(Input data)
{
- this->operator()(this->default_space(), 0U, data, DefaultMask);
+ this->operator()(0U, data, DefaultMask);
}
-
using devcb_read8 = devcb_read<u8>;
using devcb_read16 = devcb_read<u16>;
using devcb_read32 = devcb_read<u32>;
@@ -2482,10 +2397,6 @@ extern template class devcb_read<u32>;
extern template class devcb_read<u64>;
extern template class devcb_read<int, 1U>;
-extern template class devcb_read8::delegate_builder<read8_delegate>;
-extern template class devcb_read8::delegate_builder<read16_delegate>;
-extern template class devcb_read8::delegate_builder<read32_delegate>;
-extern template class devcb_read8::delegate_builder<read64_delegate>;
extern template class devcb_read8::delegate_builder<read8s_delegate>;
extern template class devcb_read8::delegate_builder<read16s_delegate>;
extern template class devcb_read8::delegate_builder<read32s_delegate>;
@@ -2500,10 +2411,6 @@ extern template class devcb_read8::delegate_builder<read32smo_delegate>;
extern template class devcb_read8::delegate_builder<read64smo_delegate>;
extern template class devcb_read8::delegate_builder<read_line_delegate>;
-extern template class devcb_read16::delegate_builder<read8_delegate>;
-extern template class devcb_read16::delegate_builder<read16_delegate>;
-extern template class devcb_read16::delegate_builder<read32_delegate>;
-extern template class devcb_read16::delegate_builder<read64_delegate>;
extern template class devcb_read16::delegate_builder<read8s_delegate>;
extern template class devcb_read16::delegate_builder<read16s_delegate>;
extern template class devcb_read16::delegate_builder<read32s_delegate>;
@@ -2518,10 +2425,6 @@ extern template class devcb_read16::delegate_builder<read32smo_delegate>;
extern template class devcb_read16::delegate_builder<read64smo_delegate>;
extern template class devcb_read16::delegate_builder<read_line_delegate>;
-extern template class devcb_read32::delegate_builder<read8_delegate>;
-extern template class devcb_read32::delegate_builder<read16_delegate>;
-extern template class devcb_read32::delegate_builder<read32_delegate>;
-extern template class devcb_read32::delegate_builder<read64_delegate>;
extern template class devcb_read32::delegate_builder<read8s_delegate>;
extern template class devcb_read32::delegate_builder<read16s_delegate>;
extern template class devcb_read32::delegate_builder<read32s_delegate>;
@@ -2536,10 +2439,6 @@ extern template class devcb_read32::delegate_builder<read32smo_delegate>;
extern template class devcb_read32::delegate_builder<read64smo_delegate>;
extern template class devcb_read32::delegate_builder<read_line_delegate>;
-extern template class devcb_read64::delegate_builder<read8_delegate>;
-extern template class devcb_read64::delegate_builder<read16_delegate>;
-extern template class devcb_read64::delegate_builder<read32_delegate>;
-extern template class devcb_read64::delegate_builder<read64_delegate>;
extern template class devcb_read64::delegate_builder<read8s_delegate>;
extern template class devcb_read64::delegate_builder<read16s_delegate>;
extern template class devcb_read64::delegate_builder<read32s_delegate>;
@@ -2554,10 +2453,6 @@ extern template class devcb_read64::delegate_builder<read32smo_delegate>;
extern template class devcb_read64::delegate_builder<read64smo_delegate>;
extern template class devcb_read64::delegate_builder<read_line_delegate>;
-extern template class devcb_read_line::delegate_builder<read8_delegate>;
-extern template class devcb_read_line::delegate_builder<read16_delegate>;
-extern template class devcb_read_line::delegate_builder<read32_delegate>;
-extern template class devcb_read_line::delegate_builder<read64_delegate>;
extern template class devcb_read_line::delegate_builder<read8s_delegate>;
extern template class devcb_read_line::delegate_builder<read16s_delegate>;
extern template class devcb_read_line::delegate_builder<read32s_delegate>;
@@ -2572,10 +2467,6 @@ extern template class devcb_read_line::delegate_builder<read32smo_delegate>;
extern template class devcb_read_line::delegate_builder<read64smo_delegate>;
extern template class devcb_read_line::delegate_builder<read_line_delegate>;
-extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read8_delegate> >;
-extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read16_delegate> >;
-extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read32_delegate> >;
-extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read64_delegate> >;
extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read8s_delegate> >;
extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read16s_delegate> >;
extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read32s_delegate> >;
@@ -2591,10 +2482,6 @@ extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<re
extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read_line_delegate> >;
extern template class devcb_read8::creator_impl<devcb_read8::ioport_builder>;
-extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read8_delegate> >;
-extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read16_delegate> >;
-extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read32_delegate> >;
-extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read64_delegate> >;
extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read8s_delegate> >;
extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read16s_delegate> >;
extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read32s_delegate> >;
@@ -2610,10 +2497,6 @@ extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<
extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read_line_delegate> >;
extern template class devcb_read16::creator_impl<devcb_read16::ioport_builder>;
-extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read8_delegate> >;
-extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read16_delegate> >;
-extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read32_delegate> >;
-extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read64_delegate> >;
extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read8s_delegate> >;
extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read16s_delegate> >;
extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read32s_delegate> >;
@@ -2629,10 +2512,6 @@ extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<
extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read_line_delegate> >;
extern template class devcb_read32::creator_impl<devcb_read32::ioport_builder>;
-extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read8_delegate> >;
-extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read16_delegate> >;
-extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read32_delegate> >;
-extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read64_delegate> >;
extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read8s_delegate> >;
extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read16s_delegate> >;
extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read32s_delegate> >;
@@ -2648,10 +2527,6 @@ extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<
extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read_line_delegate> >;
extern template class devcb_read64::creator_impl<devcb_read64::ioport_builder>;
-extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read8_delegate> >;
-extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read16_delegate> >;
-extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read32_delegate> >;
-extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read64_delegate> >;
extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read8s_delegate> >;
extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read16s_delegate> >;
extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read32s_delegate> >;
@@ -2673,10 +2548,6 @@ extern template class devcb_write<u32>;
extern template class devcb_write<u64>;
extern template class devcb_write<int, 1U>;
-extern template class devcb_write8::delegate_builder<write8_delegate>;
-extern template class devcb_write8::delegate_builder<write16_delegate>;
-extern template class devcb_write8::delegate_builder<write32_delegate>;
-extern template class devcb_write8::delegate_builder<write64_delegate>;
extern template class devcb_write8::delegate_builder<write8s_delegate>;
extern template class devcb_write8::delegate_builder<write16s_delegate>;
extern template class devcb_write8::delegate_builder<write32s_delegate>;
@@ -2691,10 +2562,6 @@ extern template class devcb_write8::delegate_builder<write32smo_delegate>;
extern template class devcb_write8::delegate_builder<write64smo_delegate>;
extern template class devcb_write8::delegate_builder<write_line_delegate>;
-extern template class devcb_write16::delegate_builder<write8_delegate>;
-extern template class devcb_write16::delegate_builder<write16_delegate>;
-extern template class devcb_write16::delegate_builder<write32_delegate>;
-extern template class devcb_write16::delegate_builder<write64_delegate>;
extern template class devcb_write16::delegate_builder<write8s_delegate>;
extern template class devcb_write16::delegate_builder<write16s_delegate>;
extern template class devcb_write16::delegate_builder<write32s_delegate>;
@@ -2709,10 +2576,6 @@ extern template class devcb_write16::delegate_builder<write32smo_delegate>;
extern template class devcb_write16::delegate_builder<write64smo_delegate>;
extern template class devcb_write16::delegate_builder<write_line_delegate>;
-extern template class devcb_write32::delegate_builder<write8_delegate>;
-extern template class devcb_write32::delegate_builder<write16_delegate>;
-extern template class devcb_write32::delegate_builder<write32_delegate>;
-extern template class devcb_write32::delegate_builder<write64_delegate>;
extern template class devcb_write32::delegate_builder<write8s_delegate>;
extern template class devcb_write32::delegate_builder<write16s_delegate>;
extern template class devcb_write32::delegate_builder<write32s_delegate>;
@@ -2727,10 +2590,6 @@ extern template class devcb_write32::delegate_builder<write32smo_delegate>;
extern template class devcb_write32::delegate_builder<write64smo_delegate>;
extern template class devcb_write32::delegate_builder<write_line_delegate>;
-extern template class devcb_write64::delegate_builder<write8_delegate>;
-extern template class devcb_write64::delegate_builder<write16_delegate>;
-extern template class devcb_write64::delegate_builder<write32_delegate>;
-extern template class devcb_write64::delegate_builder<write64_delegate>;
extern template class devcb_write64::delegate_builder<write8s_delegate>;
extern template class devcb_write64::delegate_builder<write16s_delegate>;
extern template class devcb_write64::delegate_builder<write32s_delegate>;
@@ -2745,10 +2604,6 @@ extern template class devcb_write64::delegate_builder<write32smo_delegate>;
extern template class devcb_write64::delegate_builder<write64smo_delegate>;
extern template class devcb_write64::delegate_builder<write_line_delegate>;
-extern template class devcb_write_line::delegate_builder<write8_delegate>;
-extern template class devcb_write_line::delegate_builder<write16_delegate>;
-extern template class devcb_write_line::delegate_builder<write32_delegate>;
-extern template class devcb_write_line::delegate_builder<write64_delegate>;
extern template class devcb_write_line::delegate_builder<write8s_delegate>;
extern template class devcb_write_line::delegate_builder<write16s_delegate>;
extern template class devcb_write_line::delegate_builder<write32s_delegate>;
@@ -2763,10 +2618,6 @@ extern template class devcb_write_line::delegate_builder<write32smo_delegate>;
extern template class devcb_write_line::delegate_builder<write64smo_delegate>;
extern template class devcb_write_line::delegate_builder<write_line_delegate>;
-extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write8_delegate> >;
-extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write16_delegate> >;
-extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write32_delegate> >;
-extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write64_delegate> >;
extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write8s_delegate> >;
extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write16s_delegate> >;
extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write32s_delegate> >;
@@ -2787,10 +2638,6 @@ extern template class devcb_write8::creator_impl<devcb_write8::membank_builder>;
extern template class devcb_write8::creator_impl<devcb_write8::output_builder>;
extern template class devcb_write8::creator_impl<devcb_write8::log_builder>;
-extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write8_delegate> >;
-extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write16_delegate> >;
-extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write32_delegate> >;
-extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write64_delegate> >;
extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write8s_delegate> >;
extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write16s_delegate> >;
extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write32s_delegate> >;
@@ -2811,10 +2658,6 @@ extern template class devcb_write16::creator_impl<devcb_write16::membank_builder
extern template class devcb_write16::creator_impl<devcb_write16::output_builder>;
extern template class devcb_write16::creator_impl<devcb_write16::log_builder>;
-extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write8_delegate> >;
-extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write16_delegate> >;
-extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write32_delegate> >;
-extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write64_delegate> >;
extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write8s_delegate> >;
extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write16s_delegate> >;
extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write32s_delegate> >;
@@ -2835,10 +2678,6 @@ extern template class devcb_write32::creator_impl<devcb_write32::membank_builder
extern template class devcb_write32::creator_impl<devcb_write32::output_builder>;
extern template class devcb_write32::creator_impl<devcb_write32::log_builder>;
-extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write8_delegate> >;
-extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write16_delegate> >;
-extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write32_delegate> >;
-extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write64_delegate> >;
extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write8s_delegate> >;
extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write16s_delegate> >;
extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write32s_delegate> >;
@@ -2859,10 +2698,6 @@ extern template class devcb_write64::creator_impl<devcb_write64::membank_builder
extern template class devcb_write64::creator_impl<devcb_write64::output_builder>;
extern template class devcb_write64::creator_impl<devcb_write64::log_builder>;
-extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write8_delegate> >;
-extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write16_delegate> >;
-extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write32_delegate> >;
-extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write64_delegate> >;
extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write8s_delegate> >;
extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write16s_delegate> >;
extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write32s_delegate> >;