diff -Nru srcold/emu/emumem.cpp src/emu/emumem.cpp --- srcold/emu/emumem.cpp 2018-12-18 13:58:50.000000000 +0100 +++ src/emu/emumem.cpp 2018-12-19 09:31:34.962109500 +0100 @@ -864,6 +864,9 @@ for (auto const memory : memories) memory->set_log_unmap(false); + // register a callback to reset banks when reloading state + machine().save().register_postload(save_prepost_delegate(FUNC(memory_manager::bank_reattach), this)); + // we are now initialized m_initialized = true; } @@ -922,6 +925,14 @@ return nullptr; } +void memory_manager::bank_reattach() +{ + // for each non-anonymous bank, explicitly reset its entry + for (auto &bank : m_banklist) + if (!bank.second->anonymous() && bank.second->entry() != -1) + bank.second->set_entry(bank.second->entry()); +} + memory_bank *memory_manager::find(address_space &space, offs_t addrstart, offs_t addrend) const { // try to find an exact match diff -Nru srcold/emu/emumem.h src/emu/emumem.h --- srcold/emu/emumem.h 2018-12-18 13:58:50.000000000 +0100 +++ src/emu/emumem.h 2018-12-19 09:23:20.403658600 +0100 @@ -1786,6 +1786,7 @@ // construction/destruction memory_manager(running_machine &machine); void initialize(); + void bank_reattach(); // getters running_machine &machine() const { return m_machine; }