diff options
author | 2017-07-01 12:11:28 +0200 | |
---|---|---|
committer | 2017-07-03 08:03:57 +0200 | |
commit | cbbbd07484c736eae2069b294ec666f231e64bff (patch) | |
tree | b94a690f0ab10635eb6d11837425744208c7e8a4 /src/devices/cpu/drcuml.cpp | |
parent | cb1930f6e6a6b460577f01207888eab402469e9f (diff) |
dimemory: Lift the cap on the number of address spaces per device [O. Galibert]
Diffstat (limited to 'src/devices/cpu/drcuml.cpp')
-rw-r--r-- | src/devices/cpu/drcuml.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/devices/cpu/drcuml.cpp b/src/devices/cpu/drcuml.cpp index b017b6a64c8..6bc65ef8c3e 100644 --- a/src/devices/cpu/drcuml.cpp +++ b/src/devices/cpu/drcuml.cpp @@ -88,21 +88,27 @@ drcbe_interface::drcbe_interface(drcuml_state &drcuml, drc_cache &cache, device_ m_cache(cache), m_device(device), m_state(*(drcuml_machine_state *)cache.alloc_near(sizeof(m_state))), - m_accessors((data_accessors *)cache.alloc_near(sizeof(*m_accessors) * ADDRESS_SPACES)) + m_accessors(nullptr) { // reset the machine state - memset(m_accessors, 0, sizeof(*m_accessors) * ADDRESS_SPACES); memset(&m_state, 0, sizeof(m_state)); // find the spaces and fetch memory accessors device_memory_interface *memory; if (device.interface(memory)) - for (address_spacenum spacenum = AS_0; spacenum < ARRAY_LENGTH(m_space); ++spacenum) + { + int count = memory->max_space_count(); + m_accessors = ((data_accessors *)cache.alloc_near(sizeof(*m_accessors) * count)); + memset(m_accessors, 0, sizeof(*m_accessors) * count); + m_space.resize(count, nullptr); + + for (int spacenum = 0; spacenum < count; ++spacenum) if (memory->has_space(spacenum)) { m_space[spacenum] = &memory->space(spacenum); m_space[spacenum]->accessors(m_accessors[spacenum]); } + } } |