diff options
author | Olivier Galibert <galibert@pobox.com> | 2021-01-18 20:07:35 +0100 |
---|---|---|
committer | Olivier Galibert <galibert@pobox.com> | 2021-01-18 20:08:16 +0100 |
commit | bc965a0ebde43a74dc47dd762d56b9d0c20f6885 (patch) | |
tree | 4376e12f25eefdfe6e3dee3fad258a8274285b51 /src/emu | |
parent | 2f71944e009d6af592d769528431e7f18bd31b39 (diff) |
views: Fix some issue when the view does nor span an exact power-of-two block
Diffstat (limited to 'src/emu')
-rw-r--r-- | src/emu/emumem_hedr.ipp | 13 | ||||
-rw-r--r-- | 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<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handler_entry_read_dispatch<HighBits, Width, AddrShift, Endian>::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<handler_entry_read_dispatch<LowBits, Width, AddrShift, Endian> *>(m_u_dispatch[start])->range_cut_before(address); break; @@ -152,7 +152,7 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handler_entry_read_dispatch<HighBits, Width, AddrShift, Endian>::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<handler_entry_read_dispatch<LowBits, Width, AddrShift, Endian> *>(m_u_dispatch[start])->range_cut_after(address); break; @@ -612,10 +612,11 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> 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<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handler_entry_write_dispatch<HighBits, Width, AddrShift, Endian>::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<handler_entry_write_dispatch<LowBits, Width, AddrShift, Endian> *>(m_u_dispatch[start])->range_cut_before(address); break; @@ -154,7 +154,7 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handler_entry_write_dispatch<HighBits, Width, AddrShift, Endian>::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<handler_entry_write_dispatch<LowBits, Width, AddrShift, Endian> *>(m_u_dispatch[start])->range_cut_after(address); break; @@ -618,10 +618,11 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> 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(); |