From bc965a0ebde43a74dc47dd762d56b9d0c20f6885 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Mon, 18 Jan 2021 20:07:35 +0100 Subject: views: Fix some issue when the view does nor span an exact power-of-two block --- src/emu/emumem_hedr.ipp | 13 +++++++------ src/emu/emumem_hedw.ipp | 13 +++++++------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/emu/emumem_hedr.ipp b/src/emu/emumem_hedr.ipp index 21085d9c7f2..b9dd5089242 100644 --- a/src/emu/emumem_hedr.ipp +++ b/src/emu/emumem_hedr.ipp @@ -139,7 +139,7 @@ template void handl template void handler_entry_read_dispatch::range_cut_before(offs_t address, int start) { - while(--start >= 0) { + while(--start >= 0 && m_u_dispatch[start]) { if(int(LowBits) > -AddrShift && m_u_dispatch[start]->is_dispatch()) { static_cast *>(m_u_dispatch[start])->range_cut_before(address); break; @@ -152,7 +152,7 @@ template void handl template void handler_entry_read_dispatch::range_cut_after(offs_t address, int start) { - while(++start < COUNT) { + while(++start < COUNT && m_u_dispatch[start]) { if(int(LowBits) > -AddrShift && m_u_dispatch[start]->is_dispatch()) { static_cast *>(m_u_dispatch[start])->range_cut_after(address); break; @@ -612,10 +612,11 @@ template void handl m_u_ranges = m_ranges_array[i].data(); m_u_dispatch = m_dispatch_array[i].data(); - for(u32 entry = 0; entry != COUNT; entry++) { - m_u_dispatch[entry] = m_dispatch_array[0][entry]->dup(); - m_u_ranges[entry] = m_ranges_array[0][entry]; - } + for(u32 entry = 0; entry != COUNT; entry++) + if(m_dispatch_array[0][entry]) { + m_u_dispatch[entry] = m_dispatch_array[0][entry]->dup(); + m_u_ranges[entry] = m_ranges_array[0][entry]; + } } else { m_u_ranges = m_ranges_array[i].data(); diff --git a/src/emu/emumem_hedw.ipp b/src/emu/emumem_hedw.ipp index dcd506d4f33..ec624d575b1 100644 --- a/src/emu/emumem_hedw.ipp +++ b/src/emu/emumem_hedw.ipp @@ -141,7 +141,7 @@ template void handl template void handler_entry_write_dispatch::range_cut_before(offs_t address, int start) { - while(--start >= 0) { + while(--start >= 0 && m_u_dispatch[start]) { if(int(LowBits) > -AddrShift && m_u_dispatch[start]->is_dispatch()) { static_cast *>(m_u_dispatch[start])->range_cut_before(address); break; @@ -154,7 +154,7 @@ template void handl template void handler_entry_write_dispatch::range_cut_after(offs_t address, int start) { - while(++start < COUNT) { + while(++start < COUNT && m_u_dispatch[start]) { if(int(LowBits) > -AddrShift && m_u_dispatch[start]->is_dispatch()) { static_cast *>(m_u_dispatch[start])->range_cut_after(address); break; @@ -618,10 +618,11 @@ template void handl m_u_ranges = m_ranges_array[i].data(); m_u_dispatch = m_dispatch_array[i].data(); - for(u32 entry = 0; entry != COUNT; entry++) { - m_u_dispatch[entry] = m_dispatch_array[0][entry]->dup(); - m_u_ranges[entry] = m_ranges_array[0][entry]; - } + for(u32 entry = 0; entry != COUNT; entry++) + if(m_dispatch_array[0][entry]) { + m_u_dispatch[entry] = m_dispatch_array[0][entry]->dup(); + m_u_ranges[entry] = m_ranges_array[0][entry]; + } } else { m_u_ranges = m_ranges_array[i].data(); -- cgit v1.2.3