summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/emumem_heu.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/emumem_heu.h')
-rw-r--r--src/emu/emumem_heu.h43
1 files changed, 27 insertions, 16 deletions
diff --git a/src/emu/emumem_heu.h b/src/emu/emumem_heu.h
index dbc0cf064f7..8573cc4e334 100644
--- a/src/emu/emumem_heu.h
+++ b/src/emu/emumem_heu.h
@@ -1,25 +1,33 @@
// license:BSD-3-Clause
// copyright-holders:Olivier Galibert
+#ifndef MAME_EMU_EMUMEM_HEU_H
+#define MAME_EMU_EMUMEM_HEU_H
+
+#pragma once
// handler_entry_read_units/handler_entry_write_units
// merges/splits an access among multiple handlers (unitmask support)
-template<int Width, int AddrShift, int Endian> class handler_entry_read_units : public handler_entry_read<Width, AddrShift, Endian>
+template<int Width, int AddrShift> class handler_entry_read_units : public handler_entry_read<Width, AddrShift>
{
public:
- using uX = typename emu::detail::handler_entry_size<Width>::uX;
- using inh = handler_entry_read<Width, AddrShift, Endian>;
+ using uX = emu::detail::handler_entry_size_t<Width>;
- handler_entry_read_units(const memory_units_descriptor<Width, AddrShift, Endian> &descriptor, u8 ukey, address_space *space);
- handler_entry_read_units(const memory_units_descriptor<Width, AddrShift, Endian> &descriptor, u8 ukey, const handler_entry_read_units *src);
+ handler_entry_read_units(const memory_units_descriptor<Width, AddrShift> &descriptor, u8 ukey, address_space *space);
+ handler_entry_read_units(const memory_units_descriptor<Width, AddrShift> &descriptor, u8 ukey, const handler_entry_read_units *src);
+ handler_entry_read_units(const handler_entry_read_units *src);
~handler_entry_read_units();
- uX read(offs_t offset, uX mem_mask) override;
+ 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;
std::string name() const override;
void enumerate_references(handler_entry::reflist &refs) const override;
+ handler_entry_read<Width, AddrShift> *dup() override;
private:
static constexpr u32 SUBUNIT_COUNT = 1 << Width;
@@ -35,32 +43,35 @@ private:
u8 m_dshift; // data shift of the subunit
u8 m_width; // access width (0..3)
- u8 m_endian; // endianness
};
subunit_info m_subunit_infos[SUBUNIT_COUNT]; // subunit information
uX m_unmap; // "unmapped" value to add to reads
u8 m_subunits; // number of subunits
- void fill(const memory_units_descriptor<Width, AddrShift, Endian> &descriptor, const std::vector<typename memory_units_descriptor<Width, AddrShift, Endian>::entry> &entries);
+ void fill(const memory_units_descriptor<Width, AddrShift> &descriptor, const std::vector<typename memory_units_descriptor<Width, AddrShift>::entry> &entries);
static std::string m2r(uX mask);
};
-template<int Width, int AddrShift, int Endian> class handler_entry_write_units : public handler_entry_write<Width, AddrShift, Endian>
+template<int Width, int AddrShift> class handler_entry_write_units : public handler_entry_write<Width, AddrShift>
{
public:
- using uX = typename emu::detail::handler_entry_size<Width>::uX;
- using inh = handler_entry_write<Width, AddrShift, Endian>;
+ using uX = emu::detail::handler_entry_size_t<Width>;
- handler_entry_write_units(const memory_units_descriptor<Width, AddrShift, Endian> &descriptor, u8 ukey, address_space *space);
- handler_entry_write_units(const memory_units_descriptor<Width, AddrShift, Endian> &descriptor, u8 ukey, const handler_entry_write_units<Width, AddrShift, Endian> *src);
+ handler_entry_write_units(const memory_units_descriptor<Width, AddrShift> &descriptor, u8 ukey, address_space *space);
+ handler_entry_write_units(const memory_units_descriptor<Width, AddrShift> &descriptor, u8 ukey, const handler_entry_write_units<Width, AddrShift> *src);
+ handler_entry_write_units(const handler_entry_write_units *src);
~handler_entry_write_units();
- void write(offs_t offset, uX data, uX mem_mask) override;
+ 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;
std::string name() const override;
void enumerate_references(handler_entry::reflist &refs) const override;
+ handler_entry_write<Width, AddrShift> *dup() override;
private:
static constexpr u32 SUBUNIT_COUNT = 1 << Width;
@@ -76,13 +87,13 @@ private:
u8 m_dshift; // data shift of the subunit
u8 m_width; // access width (0..3)
- u8 m_endian; // endianness
};
subunit_info m_subunit_infos[SUBUNIT_COUNT]; // subunit information
u8 m_subunits; // number of subunits
- void fill(const memory_units_descriptor<Width, AddrShift, Endian> &descriptor, const std::vector<typename memory_units_descriptor<Width, AddrShift, Endian>::entry> &entries);
+ void fill(const memory_units_descriptor<Width, AddrShift> &descriptor, const std::vector<typename memory_units_descriptor<Width, AddrShift>::entry> &entries);
static std::string m2r(uX mask);
};
+#endif // MAME_EMU_EMUMEM_HEU_H