diff options
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 |
commit | 4cabfa3135e7798c63a21a0ef5d4b1bee1144647 (patch) | |
tree | e51bf1adae3526356983eb03309bf65ba15283c4 | |
parent | 1407a3b712f5e8d4252af485315cd5bf66b9331d (diff) |
devcb: Remove the space for the handlers, it is not needed anyomre [Ivan Vangelista, O. Galibert]
-rw-r--r-- | src/emu/devcb.cpp | 109 | ||||
-rw-r--r-- | src/emu/devcb.h | 319 |
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> >; |