summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/drcuml.cpp
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2017-07-01 12:11:28 +0200
committer Olivier Galibert <galibert@pobox.com>2017-07-03 08:03:57 +0200
commitcbbbd07484c736eae2069b294ec666f231e64bff (patch)
treeb94a690f0ab10635eb6d11837425744208c7e8a4 /src/devices/cpu/drcuml.cpp
parentcb1930f6e6a6b460577f01207888eab402469e9f (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.cpp12
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]);
}
+ }
}