summaryrefslogtreecommitdiffstatshomepage
path: root/src/frontend/mame
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2022-02-13 19:47:33 +1100
committer Vas Crabb <vas@vastheman.com>2022-02-13 19:47:33 +1100
commit2ad2ea02de2abac0370581bfd87b45e8465c4105 (patch)
tree9f6b7f6d7d292feadab95b0f3a45cd236f1b6643 /src/frontend/mame
parentce90ea36bcdd8ef72eb5cf62af64d268a5311a63 (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')
-rw-r--r--src/frontend/mame/luaengine_mem.cpp81
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;
};