diff options
author | 2022-02-13 19:47:33 +1100 | |
---|---|---|
committer | 2022-02-13 19:47:33 +1100 | |
commit | 2ad2ea02de2abac0370581bfd87b45e8465c4105 (patch) | |
tree | 9f6b7f6d7d292feadab95b0f3a45cd236f1b6643 /src/frontend/mame/luaengine_mem.cpp | |
parent | ce90ea36bcdd8ef72eb5cf62af64d268a5311a63 (diff) |
vegas.cpp: Cleanup:
* Combine DUART interrupts.
* Disabled SIO logging that had been left on.
* Added system LED output and added it to sf0249 layout (hidden by
default).
Diffstat (limited to 'src/frontend/mame/luaengine_mem.cpp')
-rw-r--r-- | src/frontend/mame/luaengine_mem.cpp | 81 |
1 files changed, 48 insertions, 33 deletions
diff --git a/src/frontend/mame/luaengine_mem.cpp b/src/frontend/mame/luaengine_mem.cpp index 8ad5d6300bb..f22d23b0961 100644 --- a/src/frontend/mame/luaengine_mem.cpp +++ b/src/frontend/mame/luaengine_mem.cpp @@ -238,7 +238,15 @@ public: void remove() { ++m_installing; - m_handler.remove(); + try + { + m_handler.remove(); + } + catch (...) + { + --m_installing; + throw; + } --m_installing; } @@ -249,41 +257,48 @@ private: if (m_installing) return; ++m_installing; - m_handler.remove(); + try + { + m_handler.remove(); - switch (m_mode) + switch (m_mode) + { + case read_or_write::READ: + m_handler = m_space.install_read_tap( + m_start, + m_end, + m_name, + [this] (offs_t offset, T &data, T mem_mask) + { + auto result = m_engine.invoke(m_callback, offset, data, mem_mask).template get<sol::optional<T> >(); + if (result) + data = *result; + }, + &m_handler); + break; + case read_or_write::WRITE: + m_handler = m_space.install_write_tap( + m_start, + m_end, + m_name, + [this] (offs_t offset, T &data, T mem_mask) + { + auto result = m_engine.invoke(m_callback, offset, data, mem_mask).template get<sol::optional<T> >(); + if (result) + data = *result; + }, + &m_handler); + break; + case read_or_write::READWRITE: + // won't ever get here, but compilers complain about unhandled enum value + break; + } + } + catch (...) { - case read_or_write::READ: - m_handler = m_space.install_read_tap( - m_start, - m_end, - m_name, - [this] (offs_t offset, T &data, T mem_mask) - { - auto result = m_engine.invoke(m_callback, offset, data, mem_mask).template get<sol::optional<T> >(); - if (result) - data = *result; - }, - &m_handler); - break; - case read_or_write::WRITE: - m_handler = m_space.install_write_tap( - m_start, - m_end, - m_name, - [this] (offs_t offset, T &data, T mem_mask) - { - auto result = m_engine.invoke(m_callback, offset, data, mem_mask).template get<sol::optional<T> >(); - if (result) - data = *result; - }, - &m_handler); - break; - case read_or_write::READWRITE: - // won't ever get here, but compilers complain about unhandled enum value - break; + --m_installing; + throw; } - --m_installing; }; |