diff options
Diffstat (limited to 'src/emu/emumem_hem.h')
-rw-r--r-- | src/emu/emumem_hem.h | 50 |
1 files changed, 30 insertions, 20 deletions
diff --git a/src/emu/emumem_hem.h b/src/emu/emumem_hem.h index 1d076ebc51b..d4c8c145860 100644 --- a/src/emu/emumem_hem.h +++ b/src/emu/emumem_hem.h @@ -1,44 +1,48 @@ // license:BSD-3-Clause // copyright-holders:Olivier Galibert +#ifndef MAME_EMU_EMUMEM_HEM_H +#define MAME_EMU_EMUMEM_HEM_H + +#pragma once // handler_entry_read_memory/handler_entry_write_memory // Accesses fixed memory (non-banked rom or ram) -template<int Width, int AddrShift, endianness_t Endian> class handler_entry_read_memory : public handler_entry_read_address<Width, AddrShift, Endian> +template<int Width, int AddrShift> class handler_entry_read_memory : public handler_entry_read_address<Width, AddrShift> { public: - using uX = typename emu::detail::handler_entry_size<Width>::uX; - using inh = handler_entry_read_address<Width, AddrShift, Endian>; + using uX = emu::detail::handler_entry_size_t<Width>; - handler_entry_read_memory(address_space *space) : handler_entry_read_address<Width, AddrShift, Endian>(space, 0) {} + handler_entry_read_memory(address_space *space, u16 flags, void *base) : handler_entry_read_address<Width, AddrShift>(space, flags), m_base(reinterpret_cast<uX *>(base)) {} ~handler_entry_read_memory() = default; uX read(offs_t offset, uX mem_mask) const override; + uX read_interruptible(offs_t offset, uX mem_mask) const override; + std::pair<uX, u16> read_flags(offs_t offset, uX mem_mask) const override; + u16 lookup_flags(offs_t offset, uX mem_mask) const override; void *get_ptr(offs_t offset) const override; - inline void set_base(uX *base) { m_base = base; } - std::string name() const override; private: uX *m_base; }; -template<int Width, int AddrShift, endianness_t Endian> class handler_entry_write_memory : public handler_entry_write_address<Width, AddrShift, Endian> +template<int Width, int AddrShift> class handler_entry_write_memory : public handler_entry_write_address<Width, AddrShift> { public: - using uX = typename emu::detail::handler_entry_size<Width>::uX; - using inh = handler_entry_write_address<Width, AddrShift, Endian>; + using uX = emu::detail::handler_entry_size_t<Width>; - handler_entry_write_memory(address_space *space) : handler_entry_write_address<Width, AddrShift, Endian>(space, 0) {} + handler_entry_write_memory(address_space *space, u16 flags, void *base) : handler_entry_write_address<Width, AddrShift>(space, flags), m_base(reinterpret_cast<uX *>(base)) {} ~handler_entry_write_memory() = default; void write(offs_t offset, uX data, uX mem_mask) const override; + void write_interruptible(offs_t offset, uX data, uX mem_mask) const override; + u16 write_flags(offs_t offset, uX data, uX mem_mask) const override; + u16 lookup_flags(offs_t offset, uX mem_mask) const override; void *get_ptr(offs_t offset) const override; - inline void set_base(uX *base) { m_base = base; } - std::string name() const override; private: @@ -50,16 +54,18 @@ private: // Accesses banked memory, associated to a memory_bank -template<int Width, int AddrShift, endianness_t Endian> class handler_entry_read_memory_bank : public handler_entry_read_address<Width, AddrShift, Endian> +template<int Width, int AddrShift> class handler_entry_read_memory_bank : public handler_entry_read_address<Width, AddrShift> { public: - using uX = typename emu::detail::handler_entry_size<Width>::uX; - using inh = handler_entry_read_address<Width, AddrShift, Endian>; + using uX = emu::detail::handler_entry_size_t<Width>; - handler_entry_read_memory_bank(address_space *space, memory_bank &bank) : handler_entry_read_address<Width, AddrShift, Endian>(space, 0), m_bank(bank) {} + handler_entry_read_memory_bank(address_space *space, u16 flags, memory_bank &bank) : handler_entry_read_address<Width, AddrShift>(space, flags), m_bank(bank) {} ~handler_entry_read_memory_bank() = default; uX read(offs_t offset, uX mem_mask) const override; + uX read_interruptible(offs_t offset, uX mem_mask) const override; + std::pair<uX, u16> read_flags(offs_t offset, uX mem_mask) const override; + u16 lookup_flags(offs_t offset, uX mem_mask) const override; void *get_ptr(offs_t offset) const override; std::string name() const override; @@ -68,16 +74,18 @@ private: memory_bank &m_bank; }; -template<int Width, int AddrShift, endianness_t Endian> class handler_entry_write_memory_bank : public handler_entry_write_address<Width, AddrShift, Endian> +template<int Width, int AddrShift> class handler_entry_write_memory_bank : public handler_entry_write_address<Width, AddrShift> { public: - using uX = typename emu::detail::handler_entry_size<Width>::uX; - using inh = handler_entry_write_address<Width, AddrShift, Endian>; + using uX = emu::detail::handler_entry_size_t<Width>; - handler_entry_write_memory_bank(address_space *space, memory_bank &bank) : handler_entry_write_address<Width, AddrShift, Endian>(space, 0), m_bank(bank) {} + handler_entry_write_memory_bank(address_space *space, u16 flags, memory_bank &bank) : handler_entry_write_address<Width, AddrShift>(space, flags), m_bank(bank) {} ~handler_entry_write_memory_bank() = default; void write(offs_t offset, uX data, uX mem_mask) const override; + void write_interruptible(offs_t offset, uX data, uX mem_mask) const override; + u16 write_flags(offs_t offset, uX data, uX mem_mask) const override; + u16 lookup_flags(offs_t offset, uX mem_mask) const override; void *get_ptr(offs_t offset) const override; std::string name() const override; @@ -85,3 +93,5 @@ public: private: memory_bank &m_bank; }; + +#endif // MAME_EMU_EMUMEM_HEM_H |