summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/emumem_hedr.ipp
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/emumem_hedr.ipp')
-rw-r--r--src/emu/emumem_hedr.ipp15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/emu/emumem_hedr.ipp b/src/emu/emumem_hedr.ipp
index 5f368b57448..4c3ee5400a7 100644
--- a/src/emu/emumem_hedr.ipp
+++ b/src/emu/emumem_hedr.ipp
@@ -382,12 +382,8 @@ template<int HighBits, int Width, int AddrShift, int Endian> void handler_entry_
if(LowBits <= Width + AddrShift) {
for(offs_t ent = start_entry; ent <= end_entry; ent++) {
- if(m_dispatch[start_entry]->is_dispatch())
- m_dispatch[start_entry]->populate_passthrough_nomirror(start & LOWMASK, end & LOWMASK, ostart, oend, handler, mappings);
- else {
- passthrough_patch(handler, mappings, m_dispatch[ent]);
- m_ranges[ent].intersect(ostart, oend);
- }
+ passthrough_patch(handler, mappings, m_dispatch[ent]);
+ m_ranges[ent].intersect(ostart, oend);
}
} else if(start_entry == end_entry) {
@@ -463,9 +459,14 @@ template<int HighBits, int Width, int AddrShift, int Endian> void handler_entry_
template<int HighBits, int Width, int AddrShift, int Endian> void handler_entry_read_dispatch<HighBits, Width, AddrShift, Endian>::detach(const std::unordered_set<handler_entry *> &handlers)
{
for(unsigned int i=0; i != COUNT; i++) {
- m_dispatch[i]->unref();
+ if(m_dispatch[i]->is_dispatch()) {
+ m_dispatch[i]->detach(handlers);
+ continue;
+ }
+
if(!m_dispatch[i]->is_passthrough())
continue;
+
auto np = static_cast<handler_entry_read_passthrough<Width, AddrShift, Endian> *>(m_dispatch[i]);
if(handlers.find(np) != handlers.end()) {