summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2021-09-22 07:49:59 +0200
committer Olivier Galibert <galibert@pobox.com>2021-09-22 07:50:28 +0200
commitcc66d8797b1282b30b72e2b3336d013ee87aa277 (patch)
tree70b286aa5fd7b212bebfe07d93daf7352e9185c4
parentc83fb1b2fa4be4c6d4664ce0ca54a388b9d32364 (diff)
view: take into account the pre-offsetting when expanding handlers
-rw-r--r--src/emu/emumem_hedr.ipp5
-rw-r--r--src/emu/emumem_hedw.ipp5
2 files changed, 6 insertions, 4 deletions
diff --git a/src/emu/emumem_hedr.ipp b/src/emu/emumem_hedr.ipp
index 7be3afc6727..9e9967585aa 100644
--- a/src/emu/emumem_hedr.ipp
+++ b/src/emu/emumem_hedr.ipp
@@ -593,10 +593,11 @@ template<int HighBits, int Width, int AddrShift> void handler_entry_read_dispatc
} else if(lowbits != LowBits) {
u32 dt = lowbits - LowBits;
u32 ne = 1 << dt;
+ u32 ee = end_entry - start_entry;
if(m_view) {
auto filter = [s = m_view->m_addrstart, e = m_view->m_addrend] (handler_entry::range r) { r.intersect(s, e); return r; };
- for(offs_t entry = start_entry; entry <= end_entry; entry++) {
+ for(offs_t entry = 0; entry <= ee; entry++) {
dispatch[entry]->ref(ne);
u32 e0 = (entry << dt) & BITMASK;
for(offs_t e = 0; e != ne; e++) {
@@ -609,7 +610,7 @@ template<int HighBits, int Width, int AddrShift> void handler_entry_read_dispatc
}
}
} else {
- for(offs_t entry = start_entry; entry <= end_entry; entry++) {
+ for(offs_t entry = 0; entry <= ee; entry++) {
dispatch[entry]->ref(ne);
u32 e0 = (entry << dt) & BITMASK;
for(offs_t e = 0; e != ne; e++) {
diff --git a/src/emu/emumem_hedw.ipp b/src/emu/emumem_hedw.ipp
index dae4e91f802..a9b698147ea 100644
--- a/src/emu/emumem_hedw.ipp
+++ b/src/emu/emumem_hedw.ipp
@@ -592,10 +592,11 @@ template<int HighBits, int Width, int AddrShift> void handler_entry_write_dispat
} else if(lowbits != LowBits) {
u32 dt = lowbits - LowBits;
u32 ne = 1 << dt;
+ u32 ee = end_entry - start_entry;
if(m_view) {
auto filter = [s = m_view->m_addrstart, e = m_view->m_addrend] (handler_entry::range r) { r.intersect(s, e); return r; };
- for(offs_t entry = start_entry; entry <= end_entry; entry++) {
+ for(offs_t entry = 0; entry <= ee; entry++) {
dispatch[entry]->ref(ne);
u32 e0 = (entry << dt) & BITMASK;
for(offs_t e = 0; e != ne; e++) {
@@ -608,7 +609,7 @@ template<int HighBits, int Width, int AddrShift> void handler_entry_write_dispat
}
}
} else {
- for(offs_t entry = start_entry; entry <= end_entry; entry++) {
+ for(offs_t entry = 0; entry <= ee; entry++) {
dispatch[entry]->ref(ne);
u32 e0 = (entry << dt) & BITMASK;
for(offs_t e = 0; e != ne; e++) {