summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/emumem_hedp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/emumem_hedp.cpp')
-rw-r--r--src/emu/emumem_hedp.cpp132
1 files changed, 132 insertions, 0 deletions
diff --git a/src/emu/emumem_hedp.cpp b/src/emu/emumem_hedp.cpp
index c0215493193..84b43191d1d 100644
--- a/src/emu/emumem_hedp.cpp
+++ b/src/emu/emumem_hedp.cpp
@@ -16,6 +16,16 @@ template<int Width, int AddrShift, int Endian, typename READ> template<typename
}
template<int Width, int AddrShift, int Endian, typename READ> template<typename R>
+ std::enable_if_t<std::is_same<R, read8m_delegate>::value ||
+ std::is_same<R, read16m_delegate>::value ||
+ std::is_same<R, read32m_delegate>::value ||
+ std::is_same<R, read64m_delegate>::value,
+ typename emu::detail::handler_entry_size<Width>::uX> handler_entry_read_delegate<Width, AddrShift, Endian, READ>::read_impl(offs_t offset, uX mem_mask)
+{
+ return m_delegate(*inh::m_space, ((offset - inh::m_address_base) & inh::m_address_mask) >> (Width + AddrShift));
+}
+
+template<int Width, int AddrShift, int Endian, typename READ> template<typename R>
std::enable_if_t<std::is_same<R, read8s_delegate>::value ||
std::is_same<R, read16s_delegate>::value ||
std::is_same<R, read32s_delegate>::value ||
@@ -36,6 +46,16 @@ template<int Width, int AddrShift, int Endian, typename READ> template<typename
}
template<int Width, int AddrShift, int Endian, typename READ> template<typename R>
+ std::enable_if_t<std::is_same<R, read8mo_delegate>::value ||
+ std::is_same<R, read16mo_delegate>::value ||
+ std::is_same<R, read32mo_delegate>::value ||
+ std::is_same<R, read64mo_delegate>::value,
+ typename emu::detail::handler_entry_size<Width>::uX> handler_entry_read_delegate<Width, AddrShift, Endian, READ>::read_impl(offs_t offset, uX mem_mask)
+{
+ return m_delegate(*inh::m_space);
+}
+
+template<int Width, int AddrShift, int Endian, typename READ> template<typename R>
std::enable_if_t<std::is_same<R, read8smo_delegate>::value ||
std::is_same<R, read16smo_delegate>::value ||
std::is_same<R, read32smo_delegate>::value ||
@@ -66,6 +86,16 @@ template<int Width, int AddrShift, int Endian, typename WRITE> template<typename
}
template<int Width, int AddrShift, int Endian, typename WRITE> template<typename W>
+ std::enable_if_t<std::is_same<W, write8m_delegate>::value ||
+ std::is_same<W, write16m_delegate>::value ||
+ std::is_same<W, write32m_delegate>::value ||
+ std::is_same<W, write64m_delegate>::value,
+ void> handler_entry_write_delegate<Width, AddrShift, Endian, WRITE>::write_impl(offs_t offset, uX data, uX mem_mask)
+{
+ m_delegate(*inh::m_space, ((offset - inh::m_address_base) & inh::m_address_mask) >> (Width + AddrShift), data);
+}
+
+template<int Width, int AddrShift, int Endian, typename WRITE> template<typename W>
std::enable_if_t<std::is_same<W, write8s_delegate>::value ||
std::is_same<W, write16s_delegate>::value ||
std::is_same<W, write32s_delegate>::value ||
@@ -86,6 +116,16 @@ template<int Width, int AddrShift, int Endian, typename WRITE> template<typename
}
template<int Width, int AddrShift, int Endian, typename WRITE> template<typename W>
+ std::enable_if_t<std::is_same<W, write8mo_delegate>::value ||
+ std::is_same<W, write16mo_delegate>::value ||
+ std::is_same<W, write32mo_delegate>::value ||
+ std::is_same<W, write64mo_delegate>::value,
+ void> handler_entry_write_delegate<Width, AddrShift, Endian, WRITE>::write_impl(offs_t offset, uX data, uX mem_mask)
+{
+ m_delegate(*inh::m_space, data);
+}
+
+template<int Width, int AddrShift, int Endian, typename WRITE> template<typename W>
std::enable_if_t<std::is_same<W, write8smo_delegate>::value ||
std::is_same<W, write16smo_delegate>::value ||
std::is_same<W, write32smo_delegate>::value ||
@@ -153,6 +193,29 @@ template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64_dele
template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64_delegate>;
template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64_delegate>;
+template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8m_delegate>;
+template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8m_delegate>;
+template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16m_delegate>;
+template class handler_entry_read_delegate<1, 3, ENDIANNESS_BIG, read16m_delegate>;
+template class handler_entry_read_delegate<1, 0, ENDIANNESS_LITTLE, read16m_delegate>;
+template class handler_entry_read_delegate<1, 0, ENDIANNESS_BIG, read16m_delegate>;
+template class handler_entry_read_delegate<1, -1, ENDIANNESS_LITTLE, read16m_delegate>;
+template class handler_entry_read_delegate<1, -1, ENDIANNESS_BIG, read16m_delegate>;
+template class handler_entry_read_delegate<2, 0, ENDIANNESS_LITTLE, read32m_delegate>;
+template class handler_entry_read_delegate<2, 0, ENDIANNESS_BIG, read32m_delegate>;
+template class handler_entry_read_delegate<2, -1, ENDIANNESS_LITTLE, read32m_delegate>;
+template class handler_entry_read_delegate<2, -1, ENDIANNESS_BIG, read32m_delegate>;
+template class handler_entry_read_delegate<2, -2, ENDIANNESS_LITTLE, read32m_delegate>;
+template class handler_entry_read_delegate<2, -2, ENDIANNESS_BIG, read32m_delegate>;
+template class handler_entry_read_delegate<3, 0, ENDIANNESS_LITTLE, read64m_delegate>;
+template class handler_entry_read_delegate<3, 0, ENDIANNESS_BIG, read64m_delegate>;
+template class handler_entry_read_delegate<3, -1, ENDIANNESS_LITTLE, read64m_delegate>;
+template class handler_entry_read_delegate<3, -1, ENDIANNESS_BIG, read64m_delegate>;
+template class handler_entry_read_delegate<3, -2, ENDIANNESS_LITTLE, read64m_delegate>;
+template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64m_delegate>;
+template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64m_delegate>;
+template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64m_delegate>;
+
template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8s_delegate>;
template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8s_delegate>;
template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16s_delegate>;
@@ -199,6 +262,29 @@ template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64sm_de
template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64sm_delegate>;
template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64sm_delegate>;
+template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8mo_delegate>;
+template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8mo_delegate>;
+template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16mo_delegate>;
+template class handler_entry_read_delegate<1, 3, ENDIANNESS_BIG, read16mo_delegate>;
+template class handler_entry_read_delegate<1, 0, ENDIANNESS_LITTLE, read16mo_delegate>;
+template class handler_entry_read_delegate<1, 0, ENDIANNESS_BIG, read16mo_delegate>;
+template class handler_entry_read_delegate<1, -1, ENDIANNESS_LITTLE, read16mo_delegate>;
+template class handler_entry_read_delegate<1, -1, ENDIANNESS_BIG, read16mo_delegate>;
+template class handler_entry_read_delegate<2, 0, ENDIANNESS_LITTLE, read32mo_delegate>;
+template class handler_entry_read_delegate<2, 0, ENDIANNESS_BIG, read32mo_delegate>;
+template class handler_entry_read_delegate<2, -1, ENDIANNESS_LITTLE, read32mo_delegate>;
+template class handler_entry_read_delegate<2, -1, ENDIANNESS_BIG, read32mo_delegate>;
+template class handler_entry_read_delegate<2, -2, ENDIANNESS_LITTLE, read32mo_delegate>;
+template class handler_entry_read_delegate<2, -2, ENDIANNESS_BIG, read32mo_delegate>;
+template class handler_entry_read_delegate<3, 0, ENDIANNESS_LITTLE, read64mo_delegate>;
+template class handler_entry_read_delegate<3, 0, ENDIANNESS_BIG, read64mo_delegate>;
+template class handler_entry_read_delegate<3, -1, ENDIANNESS_LITTLE, read64mo_delegate>;
+template class handler_entry_read_delegate<3, -1, ENDIANNESS_BIG, read64mo_delegate>;
+template class handler_entry_read_delegate<3, -2, ENDIANNESS_LITTLE, read64mo_delegate>;
+template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64mo_delegate>;
+template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64mo_delegate>;
+template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64mo_delegate>;
+
template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8smo_delegate>;
template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8smo_delegate>;
template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16smo_delegate>;
@@ -245,6 +331,29 @@ template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64_de
template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64_delegate>;
template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64_delegate>;
+template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8m_delegate>;
+template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8m_delegate>;
+template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16m_delegate>;
+template class handler_entry_write_delegate<1, 3, ENDIANNESS_BIG, write16m_delegate>;
+template class handler_entry_write_delegate<1, 0, ENDIANNESS_LITTLE, write16m_delegate>;
+template class handler_entry_write_delegate<1, 0, ENDIANNESS_BIG, write16m_delegate>;
+template class handler_entry_write_delegate<1, -1, ENDIANNESS_LITTLE, write16m_delegate>;
+template class handler_entry_write_delegate<1, -1, ENDIANNESS_BIG, write16m_delegate>;
+template class handler_entry_write_delegate<2, 0, ENDIANNESS_LITTLE, write32m_delegate>;
+template class handler_entry_write_delegate<2, 0, ENDIANNESS_BIG, write32m_delegate>;
+template class handler_entry_write_delegate<2, -1, ENDIANNESS_LITTLE, write32m_delegate>;
+template class handler_entry_write_delegate<2, -1, ENDIANNESS_BIG, write32m_delegate>;
+template class handler_entry_write_delegate<2, -2, ENDIANNESS_LITTLE, write32m_delegate>;
+template class handler_entry_write_delegate<2, -2, ENDIANNESS_BIG, write32m_delegate>;
+template class handler_entry_write_delegate<3, 0, ENDIANNESS_LITTLE, write64m_delegate>;
+template class handler_entry_write_delegate<3, 0, ENDIANNESS_BIG, write64m_delegate>;
+template class handler_entry_write_delegate<3, -1, ENDIANNESS_LITTLE, write64m_delegate>;
+template class handler_entry_write_delegate<3, -1, ENDIANNESS_BIG, write64m_delegate>;
+template class handler_entry_write_delegate<3, -2, ENDIANNESS_LITTLE, write64m_delegate>;
+template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64m_delegate>;
+template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64m_delegate>;
+template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64m_delegate>;
+
template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8s_delegate>;
template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8s_delegate>;
template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16s_delegate>;
@@ -291,6 +400,29 @@ template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64sm_
template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64sm_delegate>;
template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64sm_delegate>;
+template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8mo_delegate>;
+template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8mo_delegate>;
+template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16mo_delegate>;
+template class handler_entry_write_delegate<1, 3, ENDIANNESS_BIG, write16mo_delegate>;
+template class handler_entry_write_delegate<1, 0, ENDIANNESS_LITTLE, write16mo_delegate>;
+template class handler_entry_write_delegate<1, 0, ENDIANNESS_BIG, write16mo_delegate>;
+template class handler_entry_write_delegate<1, -1, ENDIANNESS_LITTLE, write16mo_delegate>;
+template class handler_entry_write_delegate<1, -1, ENDIANNESS_BIG, write16mo_delegate>;
+template class handler_entry_write_delegate<2, 0, ENDIANNESS_LITTLE, write32mo_delegate>;
+template class handler_entry_write_delegate<2, 0, ENDIANNESS_BIG, write32mo_delegate>;
+template class handler_entry_write_delegate<2, -1, ENDIANNESS_LITTLE, write32mo_delegate>;
+template class handler_entry_write_delegate<2, -1, ENDIANNESS_BIG, write32mo_delegate>;
+template class handler_entry_write_delegate<2, -2, ENDIANNESS_LITTLE, write32mo_delegate>;
+template class handler_entry_write_delegate<2, -2, ENDIANNESS_BIG, write32mo_delegate>;
+template class handler_entry_write_delegate<3, 0, ENDIANNESS_LITTLE, write64mo_delegate>;
+template class handler_entry_write_delegate<3, 0, ENDIANNESS_BIG, write64mo_delegate>;
+template class handler_entry_write_delegate<3, -1, ENDIANNESS_LITTLE, write64mo_delegate>;
+template class handler_entry_write_delegate<3, -1, ENDIANNESS_BIG, write64mo_delegate>;
+template class handler_entry_write_delegate<3, -2, ENDIANNESS_LITTLE, write64mo_delegate>;
+template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64mo_delegate>;
+template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64mo_delegate>;
+template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64mo_delegate>;
+
template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8smo_delegate>;
template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8smo_delegate>;
template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16smo_delegate>;