diff options
Diffstat (limited to 'src/emu/emumem_mud.cpp')
-rw-r--r-- | src/emu/emumem_mud.cpp | 42 |
1 files changed, 16 insertions, 26 deletions
diff --git a/src/emu/emumem_mud.cpp b/src/emu/emumem_mud.cpp index d1583b58366..4c52b5a1301 100644 --- a/src/emu/emumem_mud.cpp +++ b/src/emu/emumem_mud.cpp @@ -35,22 +35,21 @@ template<> u8 mask_to_ukey<u64>(u64 mask) (mask & 0x00000000000000ff ? 0x01 : 0x00); } -template<int Width, int AddrShift, int Endian> memory_units_descriptor<Width, AddrShift, Endian>::memory_units_descriptor(u8 access_width, u8 access_endian, handler_entry *handler, offs_t addrstart, offs_t addrend, offs_t mask, typename emu::detail::handler_entry_size<Width>::uX unitmask, int cswidth) : m_handler(handler), m_access_width(access_width), m_access_endian(access_endian) +template<int Width, int AddrShift> memory_units_descriptor<Width, AddrShift>::memory_units_descriptor(u8 access_width, endianness_t access_endian, handler_entry *handler, offs_t addrstart, offs_t addrend, offs_t mask, emu::detail::handler_entry_size_t<Width> unitmask, int cswidth) : m_handler(handler), m_access_width(access_width), m_access_endian(access_endian) { - constexpr u32 NATIVE_MASK = Width + AddrShift >= 0 ? make_bitmask<u32>(Width + AddrShift) : 0; u32 bits_per_access = 8 << access_width; + constexpr u32 NATIVE_MASK = Width + AddrShift >= 0 ? make_bitmask<u32>(Width + AddrShift) : 0; // Compute the real base addresses m_addrstart = addrstart & ~NATIVE_MASK; m_addrend = addrend & ~NATIVE_MASK; - // Compute the masks and the keys std::array<uX, 4> umasks; umasks.fill(unitmask); uX smask, emask; - if(Endian == ENDIANNESS_BIG) { + if(access_endian == ENDIANNESS_BIG) { smask = make_bitmask<uX>(8*sizeof(uX) - ((addrstart - m_addrstart) << (3 - AddrShift))); emask = ~make_bitmask<uX>(8*sizeof(uX) - ((addrend - m_addrend + 1) << (3 - AddrShift))); } else { @@ -87,7 +86,7 @@ template<int Width, int AddrShift, int Endian> memory_units_descriptor<Width, Ad generate(m_keymap[i], unitmask, umasks[i], cswidth, bits_per_access, base_shift, shift, active_count); } -template<int Width, int AddrShift, int Endian> void memory_units_descriptor<Width, AddrShift, Endian>::generate(u8 ukey, typename emu::detail::handler_entry_size<Width>::uX gumask, typename emu::detail::handler_entry_size<Width>::uX umask, u32 cswidth, u32 bits_per_access, u8 base_shift, s8 shift, u32 active_count) +template<int Width, int AddrShift> void memory_units_descriptor<Width, AddrShift>::generate(u8 ukey, emu::detail::handler_entry_size_t<Width> gumask, emu::detail::handler_entry_size_t<Width> umask, u32 cswidth, u32 bits_per_access, u8 base_shift, s8 shift, u32 active_count) { auto &entries = m_entries_for_key[ukey]; @@ -104,30 +103,21 @@ template<int Width, int AddrShift, int Endian> void memory_units_descriptor<Widt uX numask = dmask << i; if(umask & numask) { uX amask = csmask << (i & ~(cswidth - 1)); - entries.emplace_back(entry{ amask, numask, shift, u8(i), u8(Endian == ENDIANNESS_BIG ? active_count - 1 - offset : offset) }); + entries.emplace_back(entry{ amask, numask, shift, u8(i), u8(m_access_endian == ENDIANNESS_BIG ? active_count - 1 - offset : offset) }); } if(gumask & numask) offset ++; } } -template class memory_units_descriptor<1, 3, ENDIANNESS_LITTLE>; -template class memory_units_descriptor<1, 3, ENDIANNESS_BIG>; -template class memory_units_descriptor<1, 0, ENDIANNESS_LITTLE>; -template class memory_units_descriptor<1, 0, ENDIANNESS_BIG>; -template class memory_units_descriptor<1, -1, ENDIANNESS_LITTLE>; -template class memory_units_descriptor<1, -1, ENDIANNESS_BIG>; -template class memory_units_descriptor<2, 0, ENDIANNESS_LITTLE>; -template class memory_units_descriptor<2, 0, ENDIANNESS_BIG>; -template class memory_units_descriptor<2, -1, ENDIANNESS_LITTLE>; -template class memory_units_descriptor<2, -1, ENDIANNESS_BIG>; -template class memory_units_descriptor<2, -2, ENDIANNESS_LITTLE>; -template class memory_units_descriptor<2, -2, ENDIANNESS_BIG>; -template class memory_units_descriptor<3, 0, ENDIANNESS_LITTLE>; -template class memory_units_descriptor<3, 0, ENDIANNESS_BIG>; -template class memory_units_descriptor<3, -1, ENDIANNESS_LITTLE>; -template class memory_units_descriptor<3, -1, ENDIANNESS_BIG>; -template class memory_units_descriptor<3, -2, ENDIANNESS_LITTLE>; -template class memory_units_descriptor<3, -2, ENDIANNESS_BIG>; -template class memory_units_descriptor<3, -3, ENDIANNESS_LITTLE>; -template class memory_units_descriptor<3, -3, ENDIANNESS_BIG>; +template class memory_units_descriptor<1, 3>; +template class memory_units_descriptor<1, 0>; +template class memory_units_descriptor<1, -1>; +template class memory_units_descriptor<2, 3>; +template class memory_units_descriptor<2, 0>; +template class memory_units_descriptor<2, -1>; +template class memory_units_descriptor<2, -2>; +template class memory_units_descriptor<3, 0>; +template class memory_units_descriptor<3, -1>; +template class memory_units_descriptor<3, -2>; +template class memory_units_descriptor<3, -3>; |