summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/dimemory.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/dimemory.h')
-rw-r--r--src/emu/dimemory.h32
1 files changed, 17 insertions, 15 deletions
diff --git a/src/emu/dimemory.h b/src/emu/dimemory.h
index 9c16d85bbc3..40e123e2fb8 100644
--- a/src/emu/dimemory.h
+++ b/src/emu/dimemory.h
@@ -79,46 +79,48 @@ public:
virtual ~device_memory_interface();
// configuration access
- address_map_constructor address_map(address_spacenum spacenum = AS_0) const { return (spacenum < ARRAY_LENGTH(m_address_map)) ? m_address_map[spacenum] : nullptr; }
- const address_space_config *space_config(address_spacenum spacenum = AS_0) const { return memory_space_config(spacenum); }
+ address_map_constructor address_map(int spacenum = 0) const { return spacenum >= 0 && spacenum < int(m_address_map.size()) ? m_address_map[spacenum] : nullptr; }
+ const address_space_config *space_config(int spacenum = 0) const { return spacenum >= 0 && spacenum < int(m_address_config.size()) ? m_address_config[spacenum] : nullptr; }
+ int max_space_count() const { return m_address_config.size(); }
// static inline configuration helpers
- static void static_set_addrmap(device_t &device, address_spacenum spacenum, address_map_constructor map);
+ static void static_set_addrmap(device_t &device, int spacenum, address_map_constructor map);
+ void set_addrmap(int spacenum, address_map_constructor map);
// basic information getters
- bool has_space(int index = 0) const { return (m_addrspace[index] != nullptr); }
- bool has_space(address_spacenum index) const { return (m_addrspace[int(index)] != nullptr); }
- bool has_configured_map(int index = 0) const { return (m_address_map[index] != nullptr); }
- bool has_configured_map(address_spacenum index) const { return (m_address_map[int(index)] != nullptr); }
- address_space &space(int index = 0) const { assert(m_addrspace[index] != nullptr); return *m_addrspace[index]; }
- address_space &space(address_spacenum index) const { assert(m_addrspace[int(index)] != nullptr); return *m_addrspace[int(index)]; }
+ bool has_space(int index = 0) const { return index >= 0 && index < int(m_addrspace.size()) && m_addrspace[index]; }
+ bool has_configured_map(int index = 0) const { return index >= 0 && index < int(m_address_map.size()) && m_address_map[index]; }
+ address_space &space(int index = 0) const { assert(index >= 0 && index < int(m_addrspace.size()) && m_addrspace[index]); return *m_addrspace[index]; }
// address space accessors
- void set_address_space(address_spacenum spacenum, address_space &space);
+ void set_address_space(int spacenum, address_space &space);
// address translation
- bool translate(address_spacenum spacenum, int intention, offs_t &address) { return memory_translate(spacenum, intention, address); }
+ bool translate(int spacenum, int intention, offs_t &address) { return memory_translate(spacenum, intention, address); }
// deliberately ambiguous functions; if you have the memory interface
// just use it
device_memory_interface &memory() { return *this; }
+ void load_configs();
+
protected:
// required overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum) const = 0;
+ virtual std::vector<std::pair<int, const address_space_config *>> memory_space_config() const = 0;
// optional operation overrides
- virtual bool memory_translate(address_spacenum spacenum, int intention, offs_t &address);
+ virtual bool memory_translate(int spacenum, int intention, offs_t &address);
// interface-level overrides
virtual void interface_validity_check(validity_checker &valid) const override;
// configuration
- address_map_constructor m_address_map[ADDRESS_SPACES]; // address maps for each address space
+ std::vector<address_map_constructor> m_address_map; // address maps for each address space
private:
// internal state
- address_space * m_addrspace[ADDRESS_SPACES]; // reported address spaces
+ std::vector<const address_space_config *> m_address_config; // configuration for each space
+ std::vector<address_space *> m_addrspace; // reported address spaces
};
// iterator