summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/emumem_heu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/emumem_heu.cpp')
-rw-r--r--src/emu/emumem_heu.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/emu/emumem_heu.cpp b/src/emu/emumem_heu.cpp
index e556a39bd31..aba5a28f9c2 100644
--- a/src/emu/emumem_heu.cpp
+++ b/src/emu/emumem_heu.cpp
@@ -36,12 +36,27 @@ template<int Width, int AddrShift, endianness_t Endian> handler_entry_read_units
std::sort(m_subunit_infos, m_subunit_infos + m_subunits, [](const subunit_info &a, const subunit_info &b) { return a.m_offset < b.m_offset; });
}
+template<int Width, int AddrShift, endianness_t Endian> handler_entry_read_units<Width, AddrShift, Endian>::handler_entry_read_units(const handler_entry_read_units *src) :
+ handler_entry_read<Width, AddrShift, Endian>(src->m_space, inh::F_UNITS),
+ m_subunits(src->m_subunits)
+{
+ for(u32 i=0; i != src->m_subunits; i++) {
+ m_subunit_infos[i] = src->m_subunit_infos[i];
+ m_subunit_infos[i].m_handler = static_cast<handler_entry_write<Width, AddrShift, Endian> *>(m_subunit_infos[i].m_handler)->dup();
+ }
+}
+
template<int Width, int AddrShift, endianness_t Endian> handler_entry_read_units<Width, AddrShift, Endian>::~handler_entry_read_units()
{
for(u32 i=0; i != m_subunits; i++)
m_subunit_infos[i].m_handler->unref();
}
+template<int Width, int AddrShift, endianness_t Endian> handler_entry_read<Width, AddrShift, Endian> *handler_entry_read_units<Width, AddrShift, Endian>::dup()
+{
+ return new handler_entry_read_units<Width, AddrShift, Endian>(this);
+}
+
template<int Width, int AddrShift, endianness_t Endian> void handler_entry_read_units<Width, AddrShift, Endian>::enumerate_references(handler_entry::reflist &refs) const
{
for(u32 i=0; i != m_subunits; i++)
@@ -155,12 +170,27 @@ template<int Width, int AddrShift, endianness_t Endian> handler_entry_write_unit
std::sort(m_subunit_infos, m_subunit_infos + m_subunits, [](const subunit_info &a, const subunit_info &b) { return a.m_offset < b.m_offset; });
}
+template<int Width, int AddrShift, endianness_t Endian> handler_entry_write_units<Width, AddrShift, Endian>::handler_entry_write_units(const handler_entry_write_units *src) :
+ handler_entry_write<Width, AddrShift, Endian>(src->m_space, inh::F_UNITS),
+ m_subunits(src->m_subunits)
+{
+ for(u32 i=0; i != src->m_subunits; i++) {
+ m_subunit_infos[i] = src->m_subunit_infos[i];
+ m_subunit_infos[i].m_handler = static_cast<handler_entry_write<Width, AddrShift, Endian> *>(m_subunit_infos[i].m_handler)->dup();
+ }
+}
+
template<int Width, int AddrShift, endianness_t Endian> handler_entry_write_units<Width, AddrShift, Endian>::~handler_entry_write_units()
{
for(u32 i=0; i != m_subunits; i++)
m_subunit_infos[i].m_handler->unref();
}
+template<int Width, int AddrShift, endianness_t Endian> handler_entry_write<Width, AddrShift, Endian> *handler_entry_write_units<Width, AddrShift, Endian>::dup()
+{
+ return new handler_entry_write_units<Width, AddrShift, Endian>(this);
+}
+
template<int Width, int AddrShift, endianness_t Endian> void handler_entry_write_units<Width, AddrShift, Endian>::enumerate_references(handler_entry::reflist &refs) const
{
for(u32 i=0; i != m_subunits; i++)