summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu
diff options
context:
space:
mode:
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
commitbc965a0ebde43a74dc47dd762d56b9d0c20f6885 (patch)
tree4376e12f25eefdfe6e3dee3fad258a8274285b51 /src/emu
parent2f71944e009d6af592d769528431e7f18bd31b39 (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.ipp13
-rw-r--r--src/emu/emumem_hedw.ipp13
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();