From 98e8ed32043d8d47fe63b6565c452dc61182fd02 Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Wed, 14 Apr 2021 14:05:19 -0700 Subject: Remove final cases where people directly registered state data with the core manager. Fixed array stride calculations in registration. Removed old registration mechanism entirely. --- src/emu/emumem.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'src/emu/emumem.cpp') 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(ptr), save_name.c_str(), bytes / 1); break; + case 16: m_contents_registrar.reg(reinterpret_cast(ptr), save_name.c_str(), bytes / 2); break; + case 32: m_contents_registrar.reg(reinterpret_cast(ptr), save_name.c_str(), bytes / 4); break; + case 64: m_contents_registrar.reg(reinterpret_cast(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)); } -- cgit v1.2.3