summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/emumem.cpp
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2021-04-14 14:05:19 -0700
committer Aaron Giles <aaron@aarongiles.com>2021-04-14 14:05:19 -0700
commit98e8ed32043d8d47fe63b6565c452dc61182fd02 (patch)
tree1a2cc7981d4b015bd6b7740e4f3c9c489e96ee57 /src/emu/emumem.cpp
parent90c5a29f41bb7402cf180c4f852e4e9d7aabffd1 (diff)
Remove final cases where people directly registered state data with the core manager. Fixed array stride calculations in registration. Removed old registration mechanism entirely.
Diffstat (limited to 'src/emu/emumem.cpp')
-rw-r--r--src/emu/emumem.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/emu/emumem.cpp b/src/emu/emumem.cpp
index 30e6141e3e9..eddbc5418d7 100644
--- a/src/emu/emumem.cpp
+++ b/src/emu/emumem.cpp
@@ -284,6 +284,10 @@ template class handler_entry_write<3, -3, ENDIANNESS_BIG>;
memory_manager::memory_manager(running_machine &machine)
: m_machine(machine)
+ , m_root_registrar(machine.save().root_registrar(), "memory")
+ , m_bank_registrar(m_root_registrar, "banks")
+ , m_view_registrar(m_root_registrar, "views")
+ , m_contents_registrar(m_root_registrar, "contents")
{
}
@@ -334,7 +338,15 @@ void *memory_manager::allocate_memory(device_t &dev, int spacenum, std::string n
{
void *const ptr = m_datablocks.emplace_back(malloc(bytes)).get();
memset(ptr, 0, bytes);
- machine().save().save_memory(&dev, "memory", dev.tag(), spacenum, name.c_str(), ptr, width/8, u32(bytes) / (width/8));
+ std::string save_name = string_format("%s:%d:%s", dev.tag(), spacenum, name.c_str());
+ assert(width == 1 || width == 2 || width == 4 || width == 8);
+ switch (width)
+ {
+ case 8: m_contents_registrar.reg(reinterpret_cast<uint8_t *>(ptr), save_name.c_str(), bytes / 1); break;
+ case 16: m_contents_registrar.reg(reinterpret_cast<uint16_t *>(ptr), save_name.c_str(), bytes / 2); break;
+ case 32: m_contents_registrar.reg(reinterpret_cast<uint32_t *>(ptr), save_name.c_str(), bytes / 4); break;
+ case 64: m_contents_registrar.reg(reinterpret_cast<uint64_t *>(ptr), save_name.c_str(), bytes / 8); break;
+ }
return ptr;
}
@@ -963,7 +975,9 @@ memory_bank::memory_bank(device_t &device, std::string tag)
{
m_tag = std::move(tag);
m_name = string_format("Bank '%s'", m_tag);
- machine().save().save_item(&device, "memory", m_tag.c_str(), 0, NAME(m_curentry));
+
+ save_registrar container(m_machine.memory().bank_registrar(), string_format("%s:%s", device.tag(), m_tag.c_str()).c_str());
+ container.reg(NAME(m_curentry));
}