summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2018-08-07 17:38:23 +0200
committer Olivier Galibert <galibert@pobox.com>2018-08-10 09:47:03 +0200
commite78ca34bac6e5ef1e8ae8deebae9ae8563cb1b04 (patch)
tree43143af85faaaf27147359299897627700f583d5
parenta4c5cb55bb72d0e36cdb74ad14f52a8f332b0699 (diff)
memory,devcb: Put capabilities at parity [O. Galibert]
-rw-r--r--src/emu/addrmap.cpp228
-rw-r--r--src/emu/addrmap.h38
-rw-r--r--src/emu/devcb.cpp241
-rw-r--r--src/emu/devcb.h339
-rw-r--r--src/emu/emumem.cpp186
-rw-r--r--src/emu/emumem.h190
-rw-r--r--src/emu/emumem_hedp.cpp132
-rw-r--r--src/emu/emumem_hedp.h28
-rw-r--r--src/frontend/mame/luaengine.cpp4
9 files changed, 1341 insertions, 45 deletions
diff --git a/src/emu/addrmap.cpp b/src/emu/addrmap.cpp
index 7e6b56ed3a1..eb3aa2c87e8 100644
--- a/src/emu/addrmap.cpp
+++ b/src/emu/addrmap.cpp
@@ -162,7 +162,7 @@ address_map_entry &address_map_entry::m(device_t *device, address_map_constructo
address_map_entry &address_map_entry::r(read8_delegate func)
{
assert(!func.isnull());
- m_read.m_type = AMH_DEVICE_DELEGATE_F;
+ m_read.m_type = AMH_DEVICE_DELEGATE;
m_read.m_bits = 8;
m_read.m_name = func.name();
m_rproto8 = func;
@@ -172,13 +172,33 @@ address_map_entry &address_map_entry::r(read8_delegate func)
address_map_entry &address_map_entry::w(write8_delegate func)
{
assert(!func.isnull());
- m_write.m_type = AMH_DEVICE_DELEGATE_F;
+ m_write.m_type = AMH_DEVICE_DELEGATE;
m_write.m_bits = 8;
m_write.m_name = func.name();
m_wproto8 = func;
return *this;
}
+address_map_entry &address_map_entry::r(read8m_delegate func)
+{
+ assert(!func.isnull());
+ m_read.m_type = AMH_DEVICE_DELEGATE_M;
+ m_read.m_bits = 8;
+ m_read.m_name = func.name();
+ m_rproto8m = func;
+ return *this;
+}
+
+address_map_entry &address_map_entry::w(write8m_delegate func)
+{
+ assert(!func.isnull());
+ m_write.m_type = AMH_DEVICE_DELEGATE_M;
+ m_write.m_bits = 8;
+ m_write.m_name = func.name();
+ m_wproto8m = func;
+ return *this;
+}
+
address_map_entry &address_map_entry::r(read8s_delegate func)
{
assert(!func.isnull());
@@ -219,6 +239,26 @@ address_map_entry &address_map_entry::w(write8sm_delegate func)
return *this;
}
+address_map_entry &address_map_entry::r(read8mo_delegate func)
+{
+ assert(!func.isnull());
+ m_read.m_type = AMH_DEVICE_DELEGATE_MO;
+ m_read.m_bits = 8;
+ m_read.m_name = func.name();
+ m_rproto8mo = func;
+ return *this;
+}
+
+address_map_entry &address_map_entry::w(write8mo_delegate func)
+{
+ assert(!func.isnull());
+ m_write.m_type = AMH_DEVICE_DELEGATE_MO;
+ m_write.m_bits = 8;
+ m_write.m_name = func.name();
+ m_wproto8mo = func;
+ return *this;
+}
+
address_map_entry &address_map_entry::r(read8smo_delegate func)
{
assert(!func.isnull());
@@ -248,7 +288,7 @@ address_map_entry &address_map_entry::w(write8smo_delegate func)
address_map_entry &address_map_entry::r(read16_delegate func)
{
assert(!func.isnull());
- m_read.m_type = AMH_DEVICE_DELEGATE_F;
+ m_read.m_type = AMH_DEVICE_DELEGATE;
m_read.m_bits = 16;
m_read.m_name = func.name();
m_rproto16 = func;
@@ -258,13 +298,33 @@ address_map_entry &address_map_entry::r(read16_delegate func)
address_map_entry &address_map_entry::w(write16_delegate func)
{
assert(!func.isnull());
- m_write.m_type = AMH_DEVICE_DELEGATE_F;
+ m_write.m_type = AMH_DEVICE_DELEGATE;
m_write.m_bits = 16;
m_write.m_name = func.name();
m_wproto16 = func;
return *this;
}
+address_map_entry &address_map_entry::r(read16m_delegate func)
+{
+ assert(!func.isnull());
+ m_read.m_type = AMH_DEVICE_DELEGATE_M;
+ m_read.m_bits = 16;
+ m_read.m_name = func.name();
+ m_rproto16m = func;
+ return *this;
+}
+
+address_map_entry &address_map_entry::w(write16m_delegate func)
+{
+ assert(!func.isnull());
+ m_write.m_type = AMH_DEVICE_DELEGATE_M;
+ m_write.m_bits = 16;
+ m_write.m_name = func.name();
+ m_wproto16m = func;
+ return *this;
+}
+
address_map_entry &address_map_entry::r(read16s_delegate func)
{
assert(!func.isnull());
@@ -305,6 +365,26 @@ address_map_entry &address_map_entry::w(write16sm_delegate func)
return *this;
}
+address_map_entry &address_map_entry::r(read16mo_delegate func)
+{
+ assert(!func.isnull());
+ m_read.m_type = AMH_DEVICE_DELEGATE_MO;
+ m_read.m_bits = 16;
+ m_read.m_name = func.name();
+ m_rproto16mo = func;
+ return *this;
+}
+
+address_map_entry &address_map_entry::w(write16mo_delegate func)
+{
+ assert(!func.isnull());
+ m_write.m_type = AMH_DEVICE_DELEGATE_MO;
+ m_write.m_bits = 16;
+ m_write.m_name = func.name();
+ m_wproto16mo = func;
+ return *this;
+}
+
address_map_entry &address_map_entry::r(read16smo_delegate func)
{
assert(!func.isnull());
@@ -334,7 +414,7 @@ address_map_entry &address_map_entry::w(write16smo_delegate func)
address_map_entry &address_map_entry::r(read32_delegate func)
{
assert(!func.isnull());
- m_read.m_type = AMH_DEVICE_DELEGATE_F;
+ m_read.m_type = AMH_DEVICE_DELEGATE;
m_read.m_bits = 32;
m_read.m_name = func.name();
m_rproto32 = func;
@@ -344,13 +424,33 @@ address_map_entry &address_map_entry::r(read32_delegate func)
address_map_entry &address_map_entry::w(write32_delegate func)
{
assert(!func.isnull());
- m_write.m_type = AMH_DEVICE_DELEGATE_F;
+ m_write.m_type = AMH_DEVICE_DELEGATE;
m_write.m_bits = 32;
m_write.m_name = func.name();
m_wproto32 = func;
return *this;
}
+address_map_entry &address_map_entry::r(read32m_delegate func)
+{
+ assert(!func.isnull());
+ m_read.m_type = AMH_DEVICE_DELEGATE_M;
+ m_read.m_bits = 32;
+ m_read.m_name = func.name();
+ m_rproto32m = func;
+ return *this;
+}
+
+address_map_entry &address_map_entry::w(write32m_delegate func)
+{
+ assert(!func.isnull());
+ m_write.m_type = AMH_DEVICE_DELEGATE_M;
+ m_write.m_bits = 32;
+ m_write.m_name = func.name();
+ m_wproto32m = func;
+ return *this;
+}
+
address_map_entry &address_map_entry::r(read32s_delegate func)
{
assert(!func.isnull());
@@ -391,6 +491,26 @@ address_map_entry &address_map_entry::w(write32sm_delegate func)
return *this;
}
+address_map_entry &address_map_entry::r(read32mo_delegate func)
+{
+ assert(!func.isnull());
+ m_read.m_type = AMH_DEVICE_DELEGATE_MO;
+ m_read.m_bits = 32;
+ m_read.m_name = func.name();
+ m_rproto32mo = func;
+ return *this;
+}
+
+address_map_entry &address_map_entry::w(write32mo_delegate func)
+{
+ assert(!func.isnull());
+ m_write.m_type = AMH_DEVICE_DELEGATE_MO;
+ m_write.m_bits = 32;
+ m_write.m_name = func.name();
+ m_wproto32mo = func;
+ return *this;
+}
+
address_map_entry &address_map_entry::r(read32smo_delegate func)
{
assert(!func.isnull());
@@ -419,7 +539,7 @@ address_map_entry &address_map_entry::w(write32smo_delegate func)
address_map_entry &address_map_entry::r(read64_delegate func)
{
assert(!func.isnull());
- m_read.m_type = AMH_DEVICE_DELEGATE_F;
+ m_read.m_type = AMH_DEVICE_DELEGATE;
m_read.m_bits = 64;
m_read.m_name = func.name();
m_rproto64 = func;
@@ -429,13 +549,33 @@ address_map_entry &address_map_entry::r(read64_delegate func)
address_map_entry &address_map_entry::w(write64_delegate func)
{
assert(!func.isnull());
- m_write.m_type = AMH_DEVICE_DELEGATE_F;
+ m_write.m_type = AMH_DEVICE_DELEGATE;
m_write.m_bits = 64;
m_write.m_name = func.name();
m_wproto64 = func;
return *this;
}
+address_map_entry &address_map_entry::r(read64m_delegate func)
+{
+ assert(!func.isnull());
+ m_read.m_type = AMH_DEVICE_DELEGATE_M;
+ m_read.m_bits = 64;
+ m_read.m_name = func.name();
+ m_rproto64m = func;
+ return *this;
+}
+
+address_map_entry &address_map_entry::w(write64m_delegate func)
+{
+ assert(!func.isnull());
+ m_write.m_type = AMH_DEVICE_DELEGATE_M;
+ m_write.m_bits = 64;
+ m_write.m_name = func.name();
+ m_wproto64m = func;
+ return *this;
+}
+
address_map_entry &address_map_entry::r(read64s_delegate func)
{
assert(!func.isnull());
@@ -476,6 +616,26 @@ address_map_entry &address_map_entry::w(write64sm_delegate func)
return *this;
}
+address_map_entry &address_map_entry::r(read64mo_delegate func)
+{
+ assert(!func.isnull());
+ m_read.m_type = AMH_DEVICE_DELEGATE_MO;
+ m_read.m_bits = 64;
+ m_read.m_name = func.name();
+ m_rproto64mo = func;
+ return *this;
+}
+
+address_map_entry &address_map_entry::w(write64mo_delegate func)
+{
+ assert(!func.isnull());
+ m_write.m_type = AMH_DEVICE_DELEGATE_MO;
+ m_write.m_bits = 64;
+ m_write.m_name = func.name();
+ m_wproto64mo = func;
+ return *this;
+}
+
address_map_entry &address_map_entry::r(read64smo_delegate func)
{
assert(!func.isnull());
@@ -952,52 +1112,68 @@ void address_map::map_validity_check(validity_checker &valid, int spacenum) cons
}
// make sure all devices exist
- if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_F || entry.m_read.m_type == AMH_DEVICE_DELEGATE_S || entry.m_read.m_type == AMH_DEVICE_DELEGATE_SM || entry.m_read.m_type == AMH_DEVICE_DELEGATE_SMO)
+ if (entry.m_read.m_type == AMH_DEVICE_DELEGATE || entry.m_read.m_type == AMH_DEVICE_DELEGATE_M || entry.m_read.m_type == AMH_DEVICE_DELEGATE_S || entry.m_read.m_type == AMH_DEVICE_DELEGATE_SM || entry.m_read.m_type == AMH_DEVICE_DELEGATE_MO || entry.m_read.m_type == AMH_DEVICE_DELEGATE_SMO)
{
// extract the device tag from the proto-delegate
const char *devtag = nullptr;
switch (entry.m_read.m_bits)
{
case 8:
- if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_F)
+ if (entry.m_read.m_type == AMH_DEVICE_DELEGATE)
devtag = entry.m_rproto8.device_name();
+ else if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_M)
+ devtag = entry.m_rproto8m.device_name();
else if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_S)
devtag = entry.m_rproto8s.device_name();
else if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_SM)
devtag = entry.m_rproto8sm.device_name();
+ else if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_MO)
+ devtag = entry.m_rproto8mo.device_name();
else
devtag = entry.m_rproto8smo.device_name();
break;
case 16:
- if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_F)
+ if (entry.m_read.m_type == AMH_DEVICE_DELEGATE)
devtag = entry.m_rproto16.device_name();
+ else if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_M)
+ devtag = entry.m_rproto16m.device_name();
else if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_S)
devtag = entry.m_rproto16s.device_name();
else if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_SM)
devtag = entry.m_rproto16sm.device_name();
+ else if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_MO)
+ devtag = entry.m_rproto16mo.device_name();
else
devtag = entry.m_rproto16smo.device_name();
break;
case 32:
- if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_F)
+ if (entry.m_read.m_type == AMH_DEVICE_DELEGATE)
devtag = entry.m_rproto32.device_name();
+ else if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_M)
+ devtag = entry.m_rproto32m.device_name();
else if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_S)
devtag = entry.m_rproto32s.device_name();
else if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_SM)
devtag = entry.m_rproto32sm.device_name();
+ else if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_MO)
+ devtag = entry.m_rproto32mo.device_name();
else
devtag = entry.m_rproto32smo.device_name();
break;
case 64:
- if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_F)
+ if (entry.m_read.m_type == AMH_DEVICE_DELEGATE)
devtag = entry.m_rproto64.device_name();
+ else if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_M)
+ devtag = entry.m_rproto64m.device_name();
else if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_S)
devtag = entry.m_rproto64s.device_name();
else if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_SM)
devtag = entry.m_rproto64sm.device_name();
+ else if (entry.m_read.m_type == AMH_DEVICE_DELEGATE_MO)
+ devtag = entry.m_rproto64mo.device_name();
else
devtag = entry.m_rproto64smo.device_name();
break;
@@ -1008,52 +1184,68 @@ void address_map::map_validity_check(validity_checker &valid, int spacenum) cons
(void)entry.unitmask_is_appropriate(entry.m_read.m_bits, entry.m_mask, entry.m_read.m_name);
#endif
}
- if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_F || entry.m_write.m_type == AMH_DEVICE_DELEGATE_S || entry.m_write.m_type == AMH_DEVICE_DELEGATE_SM || entry.m_write.m_type == AMH_DEVICE_DELEGATE_SMO)
+ if (entry.m_write.m_type == AMH_DEVICE_DELEGATE || entry.m_read.m_type == AMH_DEVICE_DELEGATE_M || entry.m_write.m_type == AMH_DEVICE_DELEGATE_S || entry.m_write.m_type == AMH_DEVICE_DELEGATE_SM || entry.m_read.m_type == AMH_DEVICE_DELEGATE_MO || entry.m_write.m_type == AMH_DEVICE_DELEGATE_SMO)
{
// extract the device tag from the proto-delegate
const char *devtag = nullptr;
switch (entry.m_write.m_bits)
{
case 8:
- if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_F)
+ if (entry.m_write.m_type == AMH_DEVICE_DELEGATE)
devtag = entry.m_wproto8.device_name();
+ else if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_M)
+ devtag = entry.m_wproto8m.device_name();
else if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_S)
devtag = entry.m_wproto8s.device_name();
else if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_SM)
devtag = entry.m_wproto8sm.device_name();
+ else if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_MO)
+ devtag = entry.m_wproto8mo.device_name();
else
devtag = entry.m_wproto8smo.device_name();
break;
case 16:
- if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_F)
+ if (entry.m_write.m_type == AMH_DEVICE_DELEGATE)
devtag = entry.m_wproto16.device_name();
+ else if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_M)
+ devtag = entry.m_wproto16m.device_name();
else if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_S)
devtag = entry.m_wproto16s.device_name();
else if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_SM)
devtag = entry.m_wproto16sm.device_name();
+ else if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_MO)
+ devtag = entry.m_wproto16mo.device_name();
else
devtag = entry.m_wproto16smo.device_name();
break;
case 32:
- if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_F)
+ if (entry.m_write.m_type == AMH_DEVICE_DELEGATE)
devtag = entry.m_wproto32.device_name();
+ else if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_M)
+ devtag = entry.m_wproto32m.device_name();
else if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_S)
devtag = entry.m_wproto32s.device_name();
else if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_SM)
devtag = entry.m_wproto32sm.device_name();
+ else if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_MO)
+ devtag = entry.m_wproto32mo.device_name();
else
devtag = entry.m_wproto32smo.device_name();
break;
case 64:
- if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_F)
+ if (entry.m_write.m_type == AMH_DEVICE_DELEGATE)
devtag = entry.m_wproto64.device_name();
+ else if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_M)
+ devtag = entry.m_wproto64m.device_name();
else if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_S)
devtag = entry.m_wproto64s.device_name();
else if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_SM)
devtag = entry.m_wproto64sm.device_name();
+ else if (entry.m_write.m_type == AMH_DEVICE_DELEGATE_MO)
+ devtag = entry.m_wproto64mo.device_name();
else
devtag = entry.m_wproto64smo.device_name();
break;
diff --git a/src/emu/addrmap.h b/src/emu/addrmap.h
index 56d50ef4f7e..9256d22f65d 100644
--- a/src/emu/addrmap.h
+++ b/src/emu/addrmap.h
@@ -32,9 +32,11 @@ enum map_handler_type
AMH_ROM,
AMH_NOP,
AMH_UNMAP,
- AMH_DEVICE_DELEGATE_F,
+ AMH_DEVICE_DELEGATE,
+ AMH_DEVICE_DELEGATE_M,
AMH_DEVICE_DELEGATE_S,
AMH_DEVICE_DELEGATE_SM,
+ AMH_DEVICE_DELEGATE_MO,
AMH_DEVICE_DELEGATE_SMO,
AMH_PORT,
AMH_BANK,
@@ -338,6 +340,15 @@ public:
write32_delegate m_wproto32; // 32-bit write proto-delegate
write64_delegate m_wproto64; // 64-bit write proto-delegate
+ read8m_delegate m_rproto8m; // 8-bit read proto-delegate
+ read16m_delegate m_rproto16m; // 16-bit read proto-delegate
+ read32m_delegate m_rproto32m; // 32-bit read proto-delegate
+ read64m_delegate m_rproto64m; // 64-bit read proto-delegate
+ write8m_delegate m_wproto8m; // 8-bit write proto-delegate
+ write16m_delegate m_wproto16m; // 16-bit write proto-delegate
+ write32m_delegate m_wproto32m; // 32-bit write proto-delegate
+ write64m_delegate m_wproto64m; // 64-bit write proto-delegate
+
read8s_delegate m_rproto8s; // 8-bit read proto-delegate
read16s_delegate m_rproto16s; // 16-bit read proto-delegate
read32s_delegate m_rproto32s; // 32-bit read proto-delegate
@@ -356,6 +367,15 @@ public:
write32sm_delegate m_wproto32sm; // 32-bit write proto-delegate
write64sm_delegate m_wproto64sm; // 64-bit write proto-delegate
+ read8mo_delegate m_rproto8mo; // 8-bit read proto-delegate
+ read16mo_delegate m_rproto16mo; // 16-bit read proto-delegate
+ read32mo_delegate m_rproto32mo; // 32-bit read proto-delegate
+ read64mo_delegate m_rproto64mo; // 64-bit read proto-delegate
+ write8mo_delegate m_wproto8mo; // 8-bit write proto-delegate
+ write16mo_delegate m_wproto16mo; // 16-bit write proto-delegate
+ write32mo_delegate m_wproto32mo; // 32-bit write proto-delegate
+ write64mo_delegate m_wproto64mo; // 64-bit write proto-delegate
+
read8smo_delegate m_rproto8smo; // 8-bit read proto-delegate
read16smo_delegate m_rproto16smo; // 16-bit read proto-delegate
read32smo_delegate m_rproto32smo; // 32-bit read proto-delegate
@@ -374,40 +394,56 @@ public:
// handler setters for 8-bit delegates
address_map_entry &r(read8_delegate func);
address_map_entry &w(write8_delegate func);
+ address_map_entry &r(read8m_delegate func);
+ address_map_entry &w(write8m_delegate func);
address_map_entry &r(read8s_delegate func);
address_map_entry &w(write8s_delegate func);
address_map_entry &r(read8sm_delegate func);
address_map_entry &w(write8sm_delegate func);
+ address_map_entry &r(read8mo_delegate func);
+ address_map_entry &w(write8mo_delegate func);
address_map_entry &r(read8smo_delegate func);
address_map_entry &w(write8smo_delegate func);
// handler setters for 16-bit delegates
address_map_entry &r(read16_delegate func);
address_map_entry &w(write16_delegate func);
+ address_map_entry &r(read16m_delegate func);
+ address_map_entry &w(write16m_delegate func);
address_map_entry &r(read16s_delegate func);
address_map_entry &w(write16s_delegate func);
address_map_entry &r(read16sm_delegate func);
address_map_entry &w(write16sm_delegate func);
+ address_map_entry &r(read16mo_delegate func);
+ address_map_entry &w(write16mo_delegate func);
address_map_entry &r(read16smo_delegate func);
address_map_entry &w(write16smo_delegate func);
// handler setters for 32-bit delegates
address_map_entry &r(read32_delegate func);
address_map_entry &w(write32_delegate func);
+ address_map_entry &r(read32m_delegate func);
+ address_map_entry &w(write32m_delegate func);
address_map_entry &r(read32s_delegate func);
address_map_entry &w(write32s_delegate func);
address_map_entry &r(read32sm_delegate func);
address_map_entry &w(write32sm_delegate func);
+ address_map_entry &r(read32mo_delegate func);
+ address_map_entry &w(write32mo_delegate func);
address_map_entry &r(read32smo_delegate func);
address_map_entry &w(write32smo_delegate func);
// handler setters for 64-bit delegates
address_map_entry &r(read64_delegate func);
address_map_entry &w(write64_delegate func);
+ address_map_entry &r(read64m_delegate func);
+ address_map_entry &w(write64m_delegate func);
address_map_entry &r(read64s_delegate func);
address_map_entry &w(write64s_delegate func);
address_map_entry &r(read64sm_delegate func);
address_map_entry &w(write64sm_delegate func);
+ address_map_entry &r(read64mo_delegate func);
+ address_map_entry &w(write64mo_delegate func);
address_map_entry &r(read64smo_delegate func);
address_map_entry &w(write64smo_delegate func);
diff --git a/src/emu/devcb.cpp b/src/emu/devcb.cpp
index 75e43ad606e..3fb8056c787 100644
--- a/src/emu/devcb.cpp
+++ b/src/emu/devcb.cpp
@@ -11,6 +11,7 @@
#include "emu.h"
#include "devcb.h"
+
template class devcb_read<u8>;
template class devcb_read<u16>;
template class devcb_read<u32>;
@@ -21,36 +22,108 @@ template class devcb_read8::delegate_builder<read8_delegate>;
template class devcb_read8::delegate_builder<read16_delegate>;
template class devcb_read8::delegate_builder<read32_delegate>;
template class devcb_read8::delegate_builder<read64_delegate>;
+template class devcb_read8::delegate_builder<read8s_delegate>;
+template class devcb_read8::delegate_builder<read16s_delegate>;
+template class devcb_read8::delegate_builder<read32s_delegate>;
+template class devcb_read8::delegate_builder<read64s_delegate>;
+template class devcb_read8::delegate_builder<read8sm_delegate>;
+template class devcb_read8::delegate_builder<read16sm_delegate>;
+template class devcb_read8::delegate_builder<read32sm_delegate>;
+template class devcb_read8::delegate_builder<read64sm_delegate>;
+template class devcb_read8::delegate_builder<read8smo_delegate>;
+template class devcb_read8::delegate_builder<read16smo_delegate>;
+template class devcb_read8::delegate_builder<read32smo_delegate>;
+template class devcb_read8::delegate_builder<read64smo_delegate>;
template class devcb_read8::delegate_builder<read_line_delegate>;
template class devcb_read16::delegate_builder<read8_delegate>;
template class devcb_read16::delegate_builder<read16_delegate>;
template class devcb_read16::delegate_builder<read32_delegate>;
template class devcb_read16::delegate_builder<read64_delegate>;
+template class devcb_read16::delegate_builder<read8s_delegate>;
+template class devcb_read16::delegate_builder<read16s_delegate>;
+template class devcb_read16::delegate_builder<read32s_delegate>;
+template class devcb_read16::delegate_builder<read64s_delegate>;
+template class devcb_read16::delegate_builder<read8sm_delegate>;
+template class devcb_read16::delegate_builder<read16sm_delegate>;
+template class devcb_read16::delegate_builder<read32sm_delegate>;
+template class devcb_read16::delegate_builder<read64sm_delegate>;
+template class devcb_read16::delegate_builder<read8smo_delegate>;
+template class devcb_read16::delegate_builder<read16smo_delegate>;
+template class devcb_read16::delegate_builder<read32smo_delegate>;
+template class devcb_read16::delegate_builder<read64smo_delegate>;
template class devcb_read16::delegate_builder<read_line_delegate>;
template class devcb_read32::delegate_builder<read8_delegate>;
template class devcb_read32::delegate_builder<read16_delegate>;
template class devcb_read32::delegate_builder<read32_delegate>;
template class devcb_read32::delegate_builder<read64_delegate>;
+template class devcb_read32::delegate_builder<read8s_delegate>;
+template class devcb_read32::delegate_builder<read16s_delegate>;
+template class devcb_read32::delegate_builder<read32s_delegate>;
+template class devcb_read32::delegate_builder<read64s_delegate>;
+template class devcb_read32::delegate_builder<read8sm_delegate>;
+template class devcb_read32::delegate_builder<read16sm_delegate>;
+template class devcb_read32::delegate_builder<read32sm_delegate>;
+template class devcb_read32::delegate_builder<read64sm_delegate>;
+template class devcb_read32::delegate_builder<read8smo_delegate>;
+template class devcb_read32::delegate_builder<read16smo_delegate>;
+template class devcb_read32::delegate_builder<read32smo_delegate>;
+template class devcb_read32::delegate_builder<read64smo_delegate>;
template class devcb_read32::delegate_builder<read_line_delegate>;
template class devcb_read64::delegate_builder<read8_delegate>;
template class devcb_read64::delegate_builder<read16_delegate>;
template class devcb_read64::delegate_builder<read32_delegate>;
template class devcb_read64::delegate_builder<read64_delegate>;
+template class devcb_read64::delegate_builder<read8s_delegate>;
+template class devcb_read64::delegate_builder<read16s_delegate>;
+template class devcb_read64::delegate_builder<read32s_delegate>;
+template class devcb_read64::delegate_builder<read64s_delegate>;
+template class devcb_read64::delegate_builder<read8sm_delegate>;
+template class devcb_read64::delegate_builder<read16sm_delegate>;
+template class devcb_read64::delegate_builder<read32sm_delegate>;
+template class devcb_read64::delegate_builder<read64sm_delegate>;
+template class devcb_read64::delegate_builder<read8smo_delegate>;
+template class devcb_read64::delegate_builder<read16smo_delegate>;
+template class devcb_read64::delegate_builder<read32smo_delegate>;
+template class devcb_read64::delegate_builder<read64smo_delegate>;
template class devcb_read64::delegate_builder<read_line_delegate>;
template class devcb_read_line::delegate_builder<read8_delegate>;
template class devcb_read_line::delegate_builder<read16_delegate>;
template class devcb_read_line::delegate_builder<read32_delegate>;
template class devcb_read_line::delegate_builder<read64_delegate>;
+template class devcb_read_line::delegate_builder<read8s_delegate>;
+template class devcb_read_line::delegate_builder<read16s_delegate>;
+template class devcb_read_line::delegate_builder<read32s_delegate>;
+template class devcb_read_line::delegate_builder<read64s_delegate>;
+template class devcb_read_line::delegate_builder<read8sm_delegate>;
+template class devcb_read_line::delegate_builder<read16sm_delegate>;
+template class devcb_read_line::delegate_builder<read32sm_delegate>;
+template class devcb_read_line::delegate_builder<read64sm_delegate>;
+template class devcb_read_line::delegate_builder<read8smo_delegate>;
+template class devcb_read_line::delegate_builder<read16smo_delegate>;
+template class devcb_read_line::delegate_builder<read32smo_delegate>;
+template class devcb_read_line::delegate_builder<read64smo_delegate>;
template class devcb_read_line::delegate_builder<read_line_delegate>;
template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read8_delegate> >;
template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read16_delegate> >;
template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read32_delegate> >;
template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read64_delegate> >;
+template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read8s_delegate> >;
+template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read16s_delegate> >;
+template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read32s_delegate> >;
+template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read64s_delegate> >;
+template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read8sm_delegate> >;
+template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read16sm_delegate> >;
+template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read32sm_delegate> >;
+template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read64sm_delegate> >;
+template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read8smo_delegate> >;
+template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read16smo_delegate> >;
+template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read32smo_delegate> >;
+template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read64smo_delegate> >;
template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read_line_delegate> >;
template class devcb_read8::creator_impl<devcb_read8::ioport_builder>;
@@ -58,6 +131,18 @@ template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read8_d
template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read16_delegate> >;
template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read32_delegate> >;
template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read64_delegate> >;
+template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read8s_delegate> >;
+template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read16s_delegate> >;
+template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read32s_delegate> >;
+template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read64s_delegate> >;
+template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read8sm_delegate> >;
+template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read16sm_delegate> >;
+template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read32sm_delegate> >;
+template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read64sm_delegate> >;
+template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read8smo_delegate> >;
+template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read16smo_delegate> >;
+template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read32smo_delegate> >;
+template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read64smo_delegate> >;
template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read_line_delegate> >;
template class devcb_read16::creator_impl<devcb_read16::ioport_builder>;
@@ -65,6 +150,18 @@ template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read8_d
template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read16_delegate> >;
template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read32_delegate> >;
template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read64_delegate> >;
+template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read8s_delegate> >;
+template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read16s_delegate> >;
+template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read32s_delegate> >;
+template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read64s_delegate> >;
+template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read8sm_delegate> >;
+template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read16sm_delegate> >;
+template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read32sm_delegate> >;
+template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read64sm_delegate> >;
+template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read8smo_delegate> >;
+template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read16smo_delegate> >;
+template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read32smo_delegate> >;
+template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read64smo_delegate> >;
template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read_line_delegate> >;
template class devcb_read32::creator_impl<devcb_read32::ioport_builder>;
@@ -72,6 +169,18 @@ template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read8_d
template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read16_delegate> >;
template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read32_delegate> >;
template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read64_delegate> >;
+template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read8s_delegate> >;
+template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read16s_delegate> >;
+template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read32s_delegate> >;
+template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read64s_delegate> >;
+template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read8sm_delegate> >;
+template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read16sm_delegate> >;
+template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read32sm_delegate> >;
+template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read64sm_delegate> >;
+template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read8smo_delegate> >;
+template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read16smo_delegate> >;
+template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read32smo_delegate> >;
+template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read64smo_delegate> >;
template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read_line_delegate> >;
template class devcb_read64::creator_impl<devcb_read64::ioport_builder>;
@@ -79,6 +188,18 @@ template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<r
template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read16_delegate> >;
template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read32_delegate> >;
template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read64_delegate> >;
+template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read8s_delegate> >;
+template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read16s_delegate> >;
+template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read32s_delegate> >;
+template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read64s_delegate> >;
+template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read8sm_delegate> >;
+template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read16sm_delegate> >;
+template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read32sm_delegate> >;
+template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read64sm_delegate> >;
+template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read8smo_delegate> >;
+template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read16smo_delegate> >;
+template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read32smo_delegate> >;
+template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read64smo_delegate> >;
template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read_line_delegate> >;
template class devcb_read_line::creator_impl<devcb_read_line::ioport_builder>;
@@ -92,36 +213,108 @@ template class devcb_write8::delegate_builder<write8_delegate>;
template class devcb_write8::delegate_builder<write16_delegate>;
template class devcb_write8::delegate_builder<write32_delegate>;
template class devcb_write8::delegate_builder<write64_delegate>;
+template class devcb_write8::delegate_builder<write8s_delegate>;
+template class devcb_write8::delegate_builder<write16s_delegate>;
+template class devcb_write8::delegate_builder<write32s_delegate>;
+template class devcb_write8::delegate_builder<write64s_delegate>;
+template class devcb_write8::delegate_builder<write8sm_delegate>;
+template class devcb_write8::delegate_builder<write16sm_delegate>;
+template class devcb_write8::delegate_builder<write32sm_delegate>;
+template class devcb_write8::delegate_builder<write64sm_delegate>;
+template class devcb_write8::delegate_builder<write8smo_delegate>;
+template class devcb_write8::delegate_builder<write16smo_delegate>;
+template class devcb_write8::delegate_builder<write32smo_delegate>;
+template class devcb_write8::delegate_builder<write64smo_delegate>;
template class devcb_write8::delegate_builder<write_line_delegate>;
template class devcb_write16::delegate_builder<write8_delegate>;
template class devcb_write16::delegate_builder<write16_delegate>;
template class devcb_write16::delegate_builder<write32_delegate>;
template class devcb_write16::delegate_builder<write64_delegate>;
+template class devcb_write16::delegate_builder<write8s_delegate>;
+template class devcb_write16::delegate_builder<write16s_delegate>;
+template class devcb_write16::delegate_builder<write32s_delegate>;
+template class devcb_write16::delegate_builder<write64s_delegate>;
+template class devcb_write16::delegate_builder<write8sm_delegate>;
+template class devcb_write16::delegate_builder<write16sm_delegate>;
+template class devcb_write16::delegate_builder<write32sm_delegate>;
+template class devcb_write16::delegate_builder<write64sm_delegate>;
+template class devcb_write16::delegate_builder<write8smo_delegate>;
+template class devcb_write16::delegate_builder<write16smo_delegate>;
+template class devcb_write16::delegate_builder<write32smo_delegate>;
+template class devcb_write16::delegate_builder<write64smo_delegate>;
template class devcb_write16::delegate_builder<write_line_delegate>;
template class devcb_write32::delegate_builder<write8_delegate>;
template class devcb_write32::delegate_builder<write16_delegate>;
template class devcb_write32::delegate_builder<write32_delegate>;
template class devcb_write32::delegate_builder<write64_delegate>;
+template class devcb_write32::delegate_builder<write8s_delegate>;
+template class devcb_write32::delegate_builder<write16s_delegate>;
+template class devcb_write32::delegate_builder<write32s_delegate>;
+template class devcb_write32::delegate_builder<write64s_delegate>;
+template class devcb_write32::delegate_builder<write8sm_delegate>;
+template class devcb_write32::delegate_builder<write16sm_delegate>;
+template class devcb_write32::delegate_builder<write32sm_delegate>;
+template class devcb_write32::delegate_builder<write64sm_delegate>;
+template class devcb_write32::delegate_builder<write8smo_delegate>;
+template class devcb_write32::delegate_builder<write16smo_delegate>;
+template class devcb_write32::delegate_builder<write32smo_delegate>;
+template class devcb_write32::delegate_builder<write64smo_delegate>;
template class devcb_write32::delegate_builder<write_line_delegate>;
template class devcb_write64::delegate_builder<write8_delegate>;
template class devcb_write64::delegate_builder<write16_delegate>;
template class devcb_write64::delegate_builder<write32_delegate>;
template class devcb_write64::delegate_builder<write64_delegate>;
+template class devcb_write64::delegate_builder<write8s_delegate>;
+template class devcb_write64::delegate_builder<write16s_delegate>;
+template class devcb_write64::delegate_builder<write32s_delegate>;
+template class devcb_write64::delegate_builder<write64s_delegate>;
+template class devcb_write64::delegate_builder<write8sm_delegate>;
+template class devcb_write64::delegate_builder<write16sm_delegate>;
+template class devcb_write64::delegate_builder<write32sm_delegate>;
+template class devcb_write64::delegate_builder<write64sm_delegate>;
+template class devcb_write64::delegate_builder<write8smo_delegate>;
+template class devcb_write64::delegate_builder<write16smo_delegate>;
+template class devcb_write64::delegate_builder<write32smo_delegate>;
+template class devcb_write64::delegate_builder<write64smo_delegate>;
template class devcb_write64::delegate_builder<write_line_delegate>;
template class devcb_write_line::delegate_builder<write8_delegate>;
template class devcb_write_line::delegate_builder<write16_delegate>;
template class devcb_write_line::delegate_builder<write32_delegate>;
template class devcb_write_line::delegate_builder<write64_delegate>;
+template class devcb_write_line::delegate_builder<write8s_delegate>;
+template class devcb_write_line::delegate_builder<write16s_delegate>;
+template class devcb_write_line::delegate_builder<write32s_delegate>;
+template class devcb_write_line::delegate_builder<write64s_delegate>;
+template class devcb_write_line::delegate_builder<write8sm_delegate>;
+template class devcb_write_line::delegate_builder<write16sm_delegate>;
+template class devcb_write_line::delegate_builder<write32sm_delegate>;
+template class devcb_write_line::delegate_builder<write64sm_delegate>;
+template class devcb_write_line::delegate_builder<write8smo_delegate>;
+template class devcb_write_line::delegate_builder<write16smo_delegate>;
+template class devcb_write_line::delegate_builder<write32smo_delegate>;
+template class devcb_write_line::delegate_builder<write64smo_delegate>;
template class devcb_write_line::delegate_builder<write_line_delegate>;
template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write8_delegate> >;
template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write16_delegate> >;
template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write32_delegate> >;
template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write64_delegate> >;
+template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write8s_delegate> >;
+template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write16s_delegate> >;
+template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write32s_delegate> >;
+template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write64s_delegate> >;
+template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write8sm_delegate> >;
+template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write16sm_delegate> >;
+template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write32sm_delegate> >;
+template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write64sm_delegate> >;
+template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write8smo_delegate> >;
+template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write16smo_delegate> >;
+template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write32smo_delegate> >;
+template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write64smo_delegate> >;
template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write_line_delegate> >;
template class devcb_write8::creator_impl<devcb_write8::inputline_builder>;
template class devcb_write8::creator_impl<devcb_write8::latched_inputline_builder>;
@@ -134,6 +327,18 @@ template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write
template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write16_delegate> >;
template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write32_delegate> >;
template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write64_delegate> >;
+template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write8s_delegate> >;
+template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write16s_delegate> >;
+template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write32s_delegate> >;
+template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write64s_delegate> >;
+template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write8sm_delegate> >;
+template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write16sm_delegate> >;
+template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write32sm_delegate> >;
+template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write64sm_delegate> >;
+template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write8smo_delegate> >;
+template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write16smo_delegate> >;
+template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write32smo_delegate> >;
+template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write64smo_delegate> >;
template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write_line_delegate> >;
template class devcb_write16::creator_impl<devcb_write16::inputline_builder>;
template class devcb_write16::creator_impl<devcb_write16::latched_inputline_builder>;
@@ -146,6 +351,18 @@ template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write
template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write16_delegate> >;
template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write32_delegate> >;
template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write64_delegate> >;
+template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write8s_delegate> >;
+template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write16s_delegate> >;
+template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write32s_delegate> >;
+template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write64s_delegate> >;
+template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write8sm_delegate> >;
+template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write16sm_delegate> >;
+template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write32sm_delegate> >;
+template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write64sm_delegate> >;
+template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write8smo_delegate> >;
+template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write16smo_delegate> >;
+template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write32smo_delegate> >;
+template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write64smo_delegate> >;
template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write_line_delegate> >;
template class devcb_write32::creator_impl<devcb_write32::inputline_builder>;
template class devcb_write32::creator_impl<devcb_write32::latched_inputline_builder>;
@@ -158,6 +375,18 @@ template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write
template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write16_delegate> >;
template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write32_delegate> >;
template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write64_delegate> >;
+template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write8s_delegate> >;
+template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write16s_delegate> >;
+template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write32s_delegate> >;
+template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write64s_delegate> >;
+template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write8sm_delegate> >;
+template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write16sm_delegate> >;
+template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write32sm_delegate> >;
+template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write64sm_delegate> >;
+template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write8smo_delegate> >;
+template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write16smo_delegate> >;
+template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write32smo_delegate> >;
+template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write64smo_delegate> >;
template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write_line_delegate> >;
template class devcb_write64::creator_impl<devcb_write64::inputline_builder>;
template class devcb_write64::creator_impl<devcb_write64::latched_inputline_builder>;
@@ -170,6 +399,18 @@ template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder
template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write16_delegate> >;
template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write32_delegate> >;
template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write64_delegate> >;
+template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write8s_delegate> >;
+template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write16s_delegate> >;
+template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write32s_delegate> >;
+template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write64s_delegate> >;
+template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write8sm_delegate> >;
+template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write16sm_delegate> >;
+template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write32sm_delegate> >;
+template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write64sm_delegate> >;
+template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write8smo_delegate> >;
+template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write16smo_delegate> >;
+template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write32smo_delegate> >;
+template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write64smo_delegate> >;
template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write_line_delegate> >;
template class devcb_write_line::creator_impl<devcb_write_line::inputline_builder>;
template class devcb_write_line::creator_impl<devcb_write_line::latched_inputline_builder>;
diff --git a/src/emu/devcb.h b/src/emu/devcb.h
index 4d858f8b82a..f535b9db84e 100644
--- a/src/emu/devcb.h
+++ b/src/emu/devcb.h
@@ -116,33 +116,12 @@ namespace emu { namespace detail {
template <typename T, typename Enable = void> struct read_line_device_class { };
template <typename T, typename Enable = void> struct write_line_device_class { };
-template <typename T, typename Ret, typename... Params>
-struct read_line_device_class<Ret (T::*)(Params...), std::enable_if_t<std::is_constructible<read_line_delegate, Ret (T::*)(Params...), char const *, char const *, T *>::value> > { using type = T; };
-template <typename T, typename Ret, typename... Params>
-struct read_line_device_class<Ret (T::*)(Params...) const, std::enable_if_t<std::is_constructible<read_line_delegate, Ret (T::*)(Params...) const, char const *, char const *, T *>::value> > { using type = T; };
-template <typename T, typename Ret, typename... Params>
-struct read_line_device_class<Ret (*)(T &, Params...), std::enable_if_t<std::is_constructible<read_line_delegate, Ret (*)(T &, Params...), char const *, char const *, T *>::value> > { using type = T; };
-template <typename T, typename Ret, typename... Params>
-struct read_line_device_class<Ret (*)(T *, Params...), std::enable_if_t<std::is_constructible<read_line_delegate, Ret (*)(T *, Params...), char const *, char const *, T *>::value> > { using type = T; };
-
-template <typename T, typename Ret, typename... Params>
-struct write_line_device_class<Ret (T::*)(Params...), std::enable_if_t<std::is_constructible<write_line_delegate, Ret (T::*)(Params...), char const *, char const *, T *>::value> > { using type = T; };
-template <typename T, typename Ret, typename... Params>
-struct write_line_device_class<Ret (T::*)(Params...) const, std::enable_if_t<std::is_constructible<write_line_delegate, Ret (T::*)(Params...) const, char const *, char const *, T *>::value> > { using type = T; };
-template <typename T, typename Ret, typename... Params>
-struct write_line_device_class<Ret (*)(T &, Params...), std::enable_if_t<std::is_constructible<write_line_delegate, Ret (*)(T &, Params...), char const *, char const *, T *>::value> > { using type = T; };
-template <typename T, typename Ret, typename... Params>
-struct write_line_device_class<Ret (*)(T *, Params...), std::enable_if_t<std::is_constructible<write_line_delegate, Ret (*)(T *, Params...), char const *, char const *, T *>::value> > { using type = T; };
-
-template <typename T> using read_line_device_class_t = typename read_line_device_class<T>::type;
-template <typename T> using write_line_device_class_t = typename write_line_device_class<T>::type;
-
template <typename T>
-inline read_line_delegate make_delegate(T &&func, char const *name, char const *tag, read_line_device_class_t<std::remove_reference_t<T> > *obj)
+inline read_line_delegate make_delegate(T &&func, char const *name, char const *tag, rw_device_class_t<read_line_delegate, std::remove_reference_t<T> > *obj)
{ return read_line_delegate(func, name, tag, obj); }
template <typename T>
-inline write_line_delegate make_delegate(T &&func, char const *name, char const *tag, write_line_device_class_t<std::remove_reference_t<T> > *obj)
+inline write_line_delegate make_delegate(T &&func, char const *name, char const *tag, rw_device_class_t<write_line_delegate, std::remove_reference_t<T> > *obj)
{ return write_line_delegate(func, name, tag, obj); }
} } // namespace emu::detail
@@ -210,11 +189,35 @@ protected:
template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<read16_delegate, std::remove_reference_t<T> > > > { using type = read16_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<read32_delegate, std::remove_reference_t<T> > > > { using type = read32_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<read64_delegate, std::remove_reference_t<T> > > > { using type = read64_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<read8s_delegate, std::remove_reference_t<T> > > > { using type = read8s_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<read16s_delegate, std::remove_reference_t<T> > > > { using type = read16s_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<read32s_delegate, std::remove_reference_t<T> > > > { using type = read32s_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<read64s_delegate, std::remove_reference_t<T> > > > { using type = read64s_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<read8sm_delegate, std::remove_reference_t<T> > > > { using type = read8sm_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<read16sm_delegate, std::remove_reference_t<T> > > > { using type = read16sm_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<read32sm_delegate, std::remove_reference_t<T> > > > { using type = read32sm_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<read64sm_delegate, std::remove_reference_t<T> > > > { using type = read64sm_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<read8smo_delegate, std::remove_reference_t<T> > > > { using type = read8smo_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<read16smo_delegate, std::remove_reference_t<T> > > > { using type = read16smo_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<read32smo_delegate, std::remove_reference_t<T> > > > { using type = read32smo_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<read64smo_delegate, std::remove_reference_t<T> > > > { using type = read64smo_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<read_line_delegate, std::remove_reference_t<T> > > > { using type = read_line_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<write8_delegate, std::remove_reference_t<T> > > > { using type = write8_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<write16_delegate, std::remove_reference_t<T> > > > { using type = write16_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<write32_delegate, std::remove_reference_t<T> > > > { using type = write32_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<write64_delegate, std::remove_reference_t<T> > > > { using type = write64_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<write8s_delegate, std::remove_reference_t<T> > > > { using type = write8s_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<write16s_delegate, std::remove_reference_t<T> > > > { using type = write16s_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<write32s_delegate, std::remove_reference_t<T> > > > { using type = write32s_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<write64s_delegate, std::remove_reference_t<T> > > > { using type = write64s_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<write8sm_delegate, std::remove_reference_t<T> > > > { using type = write8sm_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<write16sm_delegate, std::remove_reference_t<T> > > > { using type = write16sm_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<write32sm_delegate, std::remove_reference_t<T> > > > { using type = write32sm_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<write64sm_delegate, std::remove_reference_t<T> > > > { using type = write64sm_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<write8smo_delegate, std::remove_reference_t<T> > > > { using type = write8smo_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<write16smo_delegate, std::remove_reference_t<T> > > > { using type = write16smo_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<write32smo_delegate, std::remove_reference_t<T> > > > { using type = write32smo_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
+ template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<write64smo_delegate, std::remove_reference_t<T> > > > { using type = write64smo_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
template <typename T> struct delegate_type<T, void_t<emu::detail::rw_device_class_t<write_line_delegate, std::remove_reference_t<T> > > > { using type = write_line_delegate; using device_class = emu::detail::rw_device_class_t<type, std::remove_reference_t<T> >; };
template <typename T> using delegate_type_t = typename delegate_type<T>::type;
template <typename T> using delegate_device_class_t = typename delegate_type<T>::device_class;
@@ -334,6 +337,18 @@ protected:
template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read16_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read32_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read64_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read8s_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read16s_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read32s_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read64s_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read8sm_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read16sm_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read32sm_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read64sm_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read8smo_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read16smo_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read32smo_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read64smo_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
template <typename T> struct is_read_method<T, void_t<emu::detail::rw_device_class_t<read_line_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
// Invoking read callbacks
@@ -350,6 +365,18 @@ protected:
template <typename Dummy> struct delegate_traits<read16_delegate, Dummy> { static constexpr u16 default_mask = ~u16(0); };
template <typename Dummy> struct delegate_traits<read32_delegate, Dummy> { static constexpr u32 default_mask = ~u32(0); };
template <typename Dummy> struct delegate_traits<read64_delegate, Dummy> { static constexpr u64 default_mask = ~u64(0); };
+ template <typename Dummy> struct delegate_traits<read8s_delegate, Dummy> { static constexpr u8 default_mask = ~u8(0); };
+ template <typename Dummy> struct delegate_traits<read16s_delegate, Dummy> { static constexpr u16 default_mask = ~u16(0); };
+ template <typename Dummy> struct delegate_traits<read32s_delegate, Dummy> { static constexpr u32 default_mask = ~u32(0); };
+ template <typename Dummy> struct delegate_traits<read64s_delegate, Dummy> { static constexpr u64 default_mask = ~u64(0); };
+ template <typename Dummy> struct delegate_traits<read8sm_delegate, Dummy> { static constexpr u8 default_mask = ~u8(0); };
+ template <typename Dummy> struct delegate_traits<read16sm_delegate, Dummy> { static constexpr u16 default_mask = ~u16(0); };
+ template <typename Dummy> struct delegate_traits<read32sm_delegate, Dummy> { static constexpr u32 default_mask = ~u32(0); };
+ template <typename Dummy> struct delegate_traits<read64sm_delegate, Dummy> { static constexpr u64 default_mask = ~u64(0); };
+ template <typename Dummy> struct delegate_traits<read8smo_delegate, Dummy> { static constexpr u8 default_mask = ~u8(0); };
+ template <typename Dummy> struct delegate_traits<read16smo_delegate, Dummy> { static constexpr u16 default_mask = ~u16(0); };
+ template <typename Dummy> struct delegate_traits<read32smo_delegate, Dummy> { static constexpr u32 default_mask = ~u32(0); };
+ template <typename Dummy> struct delegate_traits<read64smo_delegate, Dummy> { static constexpr u64 default_mask = ~u64(0); };
template <typename Dummy> struct delegate_traits<read_line_delegate, Dummy> { static constexpr unsigned default_mask = 1U; };
using devcb_base::devcb_base;
@@ -384,11 +411,23 @@ protected:
template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write16_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write32_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write64_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write8s_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write16s_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write32s_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write64s_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write8sm_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write16sm_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write32sm_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write64sm_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write8smo_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write16smo_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write32smo_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
+ template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write64smo_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
template <typename T> struct is_write_method<T, void_t<emu::detail::rw_device_class_t<write_line_delegate, std::remove_reference_t<T> > > > { static constexpr bool value = true; };
// Invoking write callbacks
template <typename Input, typename T> static std::enable_if_t<is_write_form1<Input, T>::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> mem_mask) { return cb(space, offset, data, mem_mask); }
- template <typename Input, typename T> static std::enable_if_t<is_write_form2<Input, T>::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> mem_mask) { return cb(space, data, offset); }
+ template <typename Input, typename T> static std::enable_if_t<is_write_form2<Input, T>::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> mem_mask) { return cb(space, offset, data); }
template <typename Input, typename T> static std::enable_if_t<is_write_form3<Input, T>::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> mem_mask) { return cb(offset, data, mem_mask); }
template <typename Input, typename T> static std::enable_if_t<is_write_form4<Input, T>::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> mem_mask) { return cb(offset, data); }
template <typename Input, typename T> static std::enable_if_t<is_write_form5<Input, T>::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t<Input> mem_mask) { return cb(space, data); }
@@ -400,6 +439,18 @@ protected:
template <typename Dummy> struct delegate_traits<write16_delegate, Dummy> { using input_t = u16; static constexpr u16 default_mask = ~u16(0); };
template <typename Dummy> struct delegate_traits<write32_delegate, Dummy> { using input_t = u32; static constexpr u32 default_mask = ~u32(0); };
template <typename Dummy> struct delegate_traits<write64_delegate, Dummy> { using input_t = u64; static constexpr u64 default_mask = ~u64(0); };
+ template <typename Dummy> struct delegate_traits<write8s_delegate, Dummy> { using input_t = u8; static constexpr u8 default_mask = ~u8(0); };
+ template <typename Dummy> struct delegate_traits<write16s_delegate, Dummy> { using input_t = u16; static constexpr u16 default_mask = ~u16(0); };
+ template <typename Dummy> struct delegate_traits<write32s_delegate, Dummy> { using input_t = u32; static constexpr u32 default_mask = ~u32(0); };
+ template <typename Dummy> struct delegate_traits<write64s_delegate, Dummy> { using input_t = u64; static constexpr u64 default_mask = ~u64(0); };
+ template <typename Dummy> struct delegate_traits<write8sm_delegate, Dummy> { using input_t = u8; static constexpr u8 default_mask = ~u8(0); };
+ template <typename Dummy> struct delegate_traits<write16sm_delegate, Dummy> { using input_t = u16; static constexpr u16 default_mask = ~u16(0); };
+ template <typename Dummy> struct delegate_traits<write32sm_delegate, Dummy> { using input_t = u32; static constexpr u32 default_mask = ~u32(0); };
+ template <typename Dummy> struct delegate_traits<write64sm_delegate, Dummy> { using input_t = u64; static constexpr u64 default_mask = ~u64(0); };
+ template <typename Dummy> struct delegate_traits<write8smo_delegate, Dummy> { using input_t = u8; static constexpr u8 default_mask = ~u8(0); };
+ template <typename Dummy> struct delegate_traits<write16smo_delegate, Dummy> { using input_t = u16; static constexpr u16 default_mask = ~u16(0); };
+ template <typename Dummy> struct delegate_traits<write32smo_delegate, Dummy> { using input_t = u32; static constexpr u32 default_mask = ~u32(0); };
+ template <typename Dummy> struct delegate_traits<write64smo_delegate, Dummy> { using input_t = u64; static constexpr u64 default_mask = ~u64(0); };
template <typename Dummy> struct delegate_traits<write_line_delegate, Dummy> { using input_t = int; static constexpr unsigned default_mask = 1U; };
using devcb_base::devcb_base;
@@ -2529,36 +2580,108 @@ extern template class devcb_read8::delegate_builder<read8_delegate>;
extern template class devcb_read8::delegate_builder<read16_delegate>;
extern template class devcb_read8::delegate_builder<read32_delegate>;
extern template class devcb_read8::delegate_builder<read64_delegate>;
+extern template class devcb_read8::delegate_builder<read8s_delegate>;
+extern template class devcb_read8::delegate_builder<read16s_delegate>;
+extern template class devcb_read8::delegate_builder<read32s_delegate>;
+extern template class devcb_read8::delegate_builder<read64s_delegate>;
+extern template class devcb_read8::delegate_builder<read8sm_delegate>;
+extern template class devcb_read8::delegate_builder<read16sm_delegate>;
+extern template class devcb_read8::delegate_builder<read32sm_delegate>;
+extern template class devcb_read8::delegate_builder<read64sm_delegate>;
+extern template class devcb_read8::delegate_builder<read8smo_delegate>;
+extern template class devcb_read8::delegate_builder<read16smo_delegate>;
+extern template class devcb_read8::delegate_builder<read32smo_delegate>;
+extern template class devcb_read8::delegate_builder<read64smo_delegate>;
extern template class devcb_read8::delegate_builder<read_line_delegate>;
extern template class devcb_read16::delegate_builder<read8_delegate>;
extern template class devcb_read16::delegate_builder<read16_delegate>;
extern template class devcb_read16::delegate_builder<read32_delegate>;
extern template class devcb_read16::delegate_builder<read64_delegate>;
+extern template class devcb_read16::delegate_builder<read8s_delegate>;
+extern template class devcb_read16::delegate_builder<read16s_delegate>;
+extern template class devcb_read16::delegate_builder<read32s_delegate>;
+extern template class devcb_read16::delegate_builder<read64s_delegate>;
+extern template class devcb_read16::delegate_builder<read8sm_delegate>;
+extern template class devcb_read16::delegate_builder<read16sm_delegate>;
+extern template class devcb_read16::delegate_builder<read32sm_delegate>;
+extern template class devcb_read16::delegate_builder<read64sm_delegate>;
+extern template class devcb_read16::delegate_builder<read8smo_delegate>;
+extern template class devcb_read16::delegate_builder<read16smo_delegate>;
+extern template class devcb_read16::delegate_builder<read32smo_delegate>;
+extern template class devcb_read16::delegate_builder<read64smo_delegate>;
extern template class devcb_read16::delegate_builder<read_line_delegate>;
extern template class devcb_read32::delegate_builder<read8_delegate>;
extern template class devcb_read32::delegate_builder<read16_delegate>;
extern template class devcb_read32::delegate_builder<read32_delegate>;
extern template class devcb_read32::delegate_builder<read64_delegate>;
+extern template class devcb_read32::delegate_builder<read8s_delegate>;
+extern template class devcb_read32::delegate_builder<read16s_delegate>;
+extern template class devcb_read32::delegate_builder<read32s_delegate>;
+extern template class devcb_read32::delegate_builder<read64s_delegate>;
+extern template class devcb_read32::delegate_builder<read8sm_delegate>;
+extern template class devcb_read32::delegate_builder<read16sm_delegate>;
+extern template class devcb_read32::delegate_builder<read32sm_delegate>;
+extern template class devcb_read32::delegate_builder<read64sm_delegate>;
+extern template class devcb_read32::delegate_builder<read8smo_delegate>;
+extern template class devcb_read32::delegate_builder<read16smo_delegate>;
+extern template class devcb_read32::delegate_builder<read32smo_delegate>;
+extern template class devcb_read32::delegate_builder<read64smo_delegate>;
extern template class devcb_read32::delegate_builder<read_line_delegate>;
extern template class devcb_read64::delegate_builder<read8_delegate>;
extern template class devcb_read64::delegate_builder<read16_delegate>;
extern template class devcb_read64::delegate_builder<read32_delegate>;
extern template class devcb_read64::delegate_builder<read64_delegate>;
+extern template class devcb_read64::delegate_builder<read8s_delegate>;
+extern template class devcb_read64::delegate_builder<read16s_delegate>;
+extern template class devcb_read64::delegate_builder<read32s_delegate>;
+extern template class devcb_read64::delegate_builder<read64s_delegate>;
+extern template class devcb_read64::delegate_builder<read8sm_delegate>;
+extern template class devcb_read64::delegate_builder<read16sm_delegate>;
+extern template class devcb_read64::delegate_builder<read32sm_delegate>;
+extern template class devcb_read64::delegate_builder<read64sm_delegate>;
+extern template class devcb_read64::delegate_builder<read8smo_delegate>;
+extern template class devcb_read64::delegate_builder<read16smo_delegate>;
+extern template class devcb_read64::delegate_builder<read32smo_delegate>;
+extern template class devcb_read64::delegate_builder<read64smo_delegate>;
extern template class devcb_read64::delegate_builder<read_line_delegate>;
extern template class devcb_read_line::delegate_builder<read8_delegate>;
extern template class devcb_read_line::delegate_builder<read16_delegate>;
extern template class devcb_read_line::delegate_builder<read32_delegate>;
extern template class devcb_read_line::delegate_builder<read64_delegate>;
+extern template class devcb_read_line::delegate_builder<read8s_delegate>;
+extern template class devcb_read_line::delegate_builder<read16s_delegate>;
+extern template class devcb_read_line::delegate_builder<read32s_delegate>;
+extern template class devcb_read_line::delegate_builder<read64s_delegate>;
+extern template class devcb_read_line::delegate_builder<read8sm_delegate>;
+extern template class devcb_read_line::delegate_builder<read16sm_delegate>;
+extern template class devcb_read_line::delegate_builder<read32sm_delegate>;
+extern template class devcb_read_line::delegate_builder<read64sm_delegate>;
+extern template class devcb_read_line::delegate_builder<read8smo_delegate>;
+extern template class devcb_read_line::delegate_builder<read16smo_delegate>;
+extern template class devcb_read_line::delegate_builder<read32smo_delegate>;
+extern template class devcb_read_line::delegate_builder<read64smo_delegate>;
extern template class devcb_read_line::delegate_builder<read_line_delegate>;
extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read8_delegate> >;
extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read16_delegate> >;
extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read32_delegate> >;
extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read64_delegate> >;
+extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read8s_delegate> >;
+extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read16s_delegate> >;
+extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read32s_delegate> >;
+extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read64s_delegate> >;
+extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read8sm_delegate> >;
+extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read16sm_delegate> >;
+extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read32sm_delegate> >;
+extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read64sm_delegate> >;
+extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read8smo_delegate> >;
+extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read16smo_delegate> >;
+extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read32smo_delegate> >;
+extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read64smo_delegate> >;
extern template class devcb_read8::creator_impl<devcb_read8::delegate_builder<read_line_delegate> >;
extern template class devcb_read8::creator_impl<devcb_read8::ioport_builder>;
@@ -2566,6 +2689,18 @@ extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<
extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read16_delegate> >;
extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read32_delegate> >;
extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read64_delegate> >;
+extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read8s_delegate> >;
+extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read16s_delegate> >;
+extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read32s_delegate> >;
+extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read64s_delegate> >;
+extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read8sm_delegate> >;
+extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read16sm_delegate> >;
+extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read32sm_delegate> >;
+extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read64sm_delegate> >;
+extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read8smo_delegate> >;
+extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read16smo_delegate> >;
+extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read32smo_delegate> >;
+extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read64smo_delegate> >;
extern template class devcb_read16::creator_impl<devcb_read16::delegate_builder<read_line_delegate> >;
extern template class devcb_read16::creator_impl<devcb_read16::ioport_builder>;
@@ -2573,6 +2708,18 @@ extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<
extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read16_delegate> >;
extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read32_delegate> >;
extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read64_delegate> >;
+extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read8s_delegate> >;
+extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read16s_delegate> >;
+extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read32s_delegate> >;
+extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read64s_delegate> >;
+extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read8sm_delegate> >;
+extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read16sm_delegate> >;
+extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read32sm_delegate> >;
+extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read64sm_delegate> >;
+extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read8smo_delegate> >;
+extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read16smo_delegate> >;
+extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read32smo_delegate> >;
+extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read64smo_delegate> >;
extern template class devcb_read32::creator_impl<devcb_read32::delegate_builder<read_line_delegate> >;
extern template class devcb_read32::creator_impl<devcb_read32::ioport_builder>;
@@ -2580,6 +2727,18 @@ extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<
extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read16_delegate> >;
extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read32_delegate> >;
extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read64_delegate> >;
+extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read8s_delegate> >;
+extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read16s_delegate> >;
+extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read32s_delegate> >;
+extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read64s_delegate> >;
+extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read8sm_delegate> >;
+extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read16sm_delegate> >;
+extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read32sm_delegate> >;
+extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read64sm_delegate> >;
+extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read8smo_delegate> >;
+extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read16smo_delegate> >;
+extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read32smo_delegate> >;
+extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read64smo_delegate> >;
extern template class devcb_read64::creator_impl<devcb_read64::delegate_builder<read_line_delegate> >;
extern template class devcb_read64::creator_impl<devcb_read64::ioport_builder>;
@@ -2587,6 +2746,18 @@ extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_bu
extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read16_delegate> >;
extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read32_delegate> >;
extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read64_delegate> >;
+extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read8s_delegate> >;
+extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read16s_delegate> >;
+extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read32s_delegate> >;
+extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read64s_delegate> >;
+extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read8sm_delegate> >;
+extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read16sm_delegate> >;
+extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read32sm_delegate> >;
+extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read64sm_delegate> >;
+extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read8smo_delegate> >;
+extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read16smo_delegate> >;
+extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read32smo_delegate> >;
+extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read64smo_delegate> >;
extern template class devcb_read_line::creator_impl<devcb_read_line::delegate_builder<read_line_delegate> >;
extern template class devcb_read_line::creator_impl<devcb_read_line::ioport_builder>;
@@ -2600,36 +2771,108 @@ extern template class devcb_write8::delegate_builder<write8_delegate>;
extern template class devcb_write8::delegate_builder<write16_delegate>;
extern template class devcb_write8::delegate_builder<write32_delegate>;
extern template class devcb_write8::delegate_builder<write64_delegate>;
+extern template class devcb_write8::delegate_builder<write8s_delegate>;
+extern template class devcb_write8::delegate_builder<write16s_delegate>;
+extern template class devcb_write8::delegate_builder<write32s_delegate>;
+extern template class devcb_write8::delegate_builder<write64s_delegate>;
+extern template class devcb_write8::delegate_builder<write8sm_delegate>;
+extern template class devcb_write8::delegate_builder<write16sm_delegate>;
+extern template class devcb_write8::delegate_builder<write32sm_delegate>;
+extern template class devcb_write8::delegate_builder<write64sm_delegate>;
+extern template class devcb_write8::delegate_builder<write8smo_delegate>;
+extern template class devcb_write8::delegate_builder<write16smo_delegate>;
+extern template class devcb_write8::delegate_builder<write32smo_delegate>;
+extern template class devcb_write8::delegate_builder<write64smo_delegate>;
extern template class devcb_write8::delegate_builder<write_line_delegate>;
extern template class devcb_write16::delegate_builder<write8_delegate>;
extern template class devcb_write16::delegate_builder<write16_delegate>;
extern template class devcb_write16::delegate_builder<write32_delegate>;
extern template class devcb_write16::delegate_builder<write64_delegate>;
+extern template class devcb_write16::delegate_builder<write8s_delegate>;
+extern template class devcb_write16::delegate_builder<write16s_delegate>;
+extern template class devcb_write16::delegate_builder<write32s_delegate>;
+extern template class devcb_write16::delegate_builder<write64s_delegate>;
+extern template class devcb_write16::delegate_builder<write8sm_delegate>;
+extern template class devcb_write16::delegate_builder<write16sm_delegate>;
+extern template class devcb_write16::delegate_builder<write32sm_delegate>;
+extern template class devcb_write16::delegate_builder<write64sm_delegate>;
+extern template class devcb_write16::delegate_builder<write8smo_delegate>;
+extern template class devcb_write16::delegate_builder<write16smo_delegate>;
+extern template class devcb_write16::delegate_builder<write32smo_delegate>;
+extern template class devcb_write16::delegate_builder<write64smo_delegate>;
extern template class devcb_write16::delegate_builder<write_line_delegate>;
extern template class devcb_write32::delegate_builder<write8_delegate>;
extern template class devcb_write32::delegate_builder<write16_delegate>;
extern template class devcb_write32::delegate_builder<write32_delegate>;
extern template class devcb_write32::delegate_builder<write64_delegate>;
+extern template class devcb_write32::delegate_builder<write8s_delegate>;
+extern template class devcb_write32::delegate_builder<write16s_delegate>;
+extern template class devcb_write32::delegate_builder<write32s_delegate>;
+extern template class devcb_write32::delegate_builder<write64s_delegate>;
+extern template class devcb_write32::delegate_builder<write8sm_delegate>;
+extern template class devcb_write32::delegate_builder<write16sm_delegate>;
+extern template class devcb_write32::delegate_builder<write32sm_delegate>;
+extern template class devcb_write32::delegate_builder<write64sm_delegate>;
+extern template class devcb_write32::delegate_builder<write8smo_delegate>;
+extern template class devcb_write32::delegate_builder<write16smo_delegate>;
+extern template class devcb_write32::delegate_builder<write32smo_delegate>;
+extern template class devcb_write32::delegate_builder<write64smo_delegate>;
extern template class devcb_write32::delegate_builder<write_line_delegate>;
extern template class devcb_write64::delegate_builder<write8_delegate>;
extern template class devcb_write64::delegate_builder<write16_delegate>;
extern template class devcb_write64::delegate_builder<write32_delegate>;
extern template class devcb_write64::delegate_builder<write64_delegate>;
+extern template class devcb_write64::delegate_builder<write8s_delegate>;
+extern template class devcb_write64::delegate_builder<write16s_delegate>;
+extern template class devcb_write64::delegate_builder<write32s_delegate>;
+extern template class devcb_write64::delegate_builder<write64s_delegate>;
+extern template class devcb_write64::delegate_builder<write8sm_delegate>;
+extern template class devcb_write64::delegate_builder<write16sm_delegate>;
+extern template class devcb_write64::delegate_builder<write32sm_delegate>;
+extern template class devcb_write64::delegate_builder<write64sm_delegate>;
+extern template class devcb_write64::delegate_builder<write8smo_delegate>;
+extern template class devcb_write64::delegate_builder<write16smo_delegate>;
+extern template class devcb_write64::delegate_builder<write32smo_delegate>;
+extern template class devcb_write64::delegate_builder<write64smo_delegate>;
extern template class devcb_write64::delegate_builder<write_line_delegate>;
extern template class devcb_write_line::delegate_builder<write8_delegate>;
extern template class devcb_write_line::delegate_builder<write16_delegate>;
extern template class devcb_write_line::delegate_builder<write32_delegate>;
extern template class devcb_write_line::delegate_builder<write64_delegate>;
+extern template class devcb_write_line::delegate_builder<write8s_delegate>;
+extern template class devcb_write_line::delegate_builder<write16s_delegate>;
+extern template class devcb_write_line::delegate_builder<write32s_delegate>;
+extern template class devcb_write_line::delegate_builder<write64s_delegate>;
+extern template class devcb_write_line::delegate_builder<write8sm_delegate>;
+extern template class devcb_write_line::delegate_builder<write16sm_delegate>;
+extern template class devcb_write_line::delegate_builder<write32sm_delegate>;
+extern template class devcb_write_line::delegate_builder<write64sm_delegate>;
+extern template class devcb_write_line::delegate_builder<write8smo_delegate>;
+extern template class devcb_write_line::delegate_builder<write16smo_delegate>;
+extern template class devcb_write_line::delegate_builder<write32smo_delegate>;
+extern template class devcb_write_line::delegate_builder<write64smo_delegate>;
extern template class devcb_write_line::delegate_builder<write_line_delegate>;
extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write8_delegate> >;
extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write16_delegate> >;
extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write32_delegate> >;
extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write64_delegate> >;
+extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write8s_delegate> >;
+extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write16s_delegate> >;
+extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write32s_delegate> >;
+extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write64s_delegate> >;
+extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write8sm_delegate> >;
+extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write16sm_delegate> >;
+extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write32sm_delegate> >;
+extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write64sm_delegate> >;
+extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write8smo_delegate> >;
+extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write16smo_delegate> >;
+extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write32smo_delegate> >;
+extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write64smo_delegate> >;
extern template class devcb_write8::creator_impl<devcb_write8::delegate_builder<write_line_delegate> >;
extern template class devcb_write8::creator_impl<devcb_write8::inputline_builder>;
extern template class devcb_write8::creator_impl<devcb_write8::latched_inputline_builder>;
@@ -2642,6 +2885,18 @@ extern template class devcb_write16::creator_impl<devcb_write16::delegate_builde
extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write16_delegate> >;
extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write32_delegate> >;
extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write64_delegate> >;
+extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write8s_delegate> >;
+extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write16s_delegate> >;
+extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write32s_delegate> >;
+extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write64s_delegate> >;
+extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write8sm_delegate> >;
+extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write16sm_delegate> >;
+extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write32sm_delegate> >;
+extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write64sm_delegate> >;
+extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write8smo_delegate> >;
+extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write16smo_delegate> >;
+extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write32smo_delegate> >;
+extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write64smo_delegate> >;
extern template class devcb_write16::creator_impl<devcb_write16::delegate_builder<write_line_delegate> >;
extern template class devcb_write16::creator_impl<devcb_write16::inputline_builder>;
extern template class devcb_write16::creator_impl<devcb_write16::latched_inputline_builder>;
@@ -2654,6 +2909,18 @@ extern template class devcb_write32::creator_impl<devcb_write32::delegate_builde
extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write16_delegate> >;
extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write32_delegate> >;
extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write64_delegate> >;
+extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write8s_delegate> >;
+extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write16s_delegate> >;
+extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write32s_delegate> >;
+extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write64s_delegate> >;
+extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write8sm_delegate> >;
+extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write16sm_delegate> >;
+extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write32sm_delegate> >;
+extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write64sm_delegate> >;
+extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write8smo_delegate> >;
+extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write16smo_delegate> >;
+extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write32smo_delegate> >;
+extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write64smo_delegate> >;
extern template class devcb_write32::creator_impl<devcb_write32::delegate_builder<write_line_delegate> >;
extern template class devcb_write32::creator_impl<devcb_write32::inputline_builder>;
extern template class devcb_write32::creator_impl<devcb_write32::latched_inputline_builder>;
@@ -2666,6 +2933,18 @@ extern template class devcb_write64::creator_impl<devcb_write64::delegate_builde
extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write16_delegate> >;
extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write32_delegate> >;
extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write64_delegate> >;
+extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write8s_delegate> >;
+extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write16s_delegate> >;
+extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write32s_delegate> >;
+extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write64s_delegate> >;
+extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write8sm_delegate> >;
+extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write16sm_delegate> >;
+extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write32sm_delegate> >;
+extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write64sm_delegate> >;
+extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write8smo_delegate> >;
+extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write16smo_delegate> >;
+extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write32smo_delegate> >;
+extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write64smo_delegate> >;
extern template class devcb_write64::creator_impl<devcb_write64::delegate_builder<write_line_delegate> >;
extern template class devcb_write64::creator_impl<devcb_write64::inputline_builder>;
extern template class devcb_write64::creator_impl<devcb_write64::latched_inputline_builder>;
@@ -2678,6 +2957,18 @@ extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_
extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write16_delegate> >;
extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write32_delegate> >;
extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write64_delegate> >;
+extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write8s_delegate> >;
+extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write16s_delegate> >;
+extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write32s_delegate> >;
+extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write64s_delegate> >;
+extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write8sm_delegate> >;
+extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write16sm_delegate> >;
+extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write32sm_delegate> >;
+extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write64sm_delegate> >;
+extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write8smo_delegate> >;
+extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write16smo_delegate> >;
+extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write32smo_delegate> >;
+extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write64smo_delegate> >;
extern template class devcb_write_line::creator_impl<devcb_write_line::delegate_builder<write_line_delegate> >;
extern template class devcb_write_line::creator_impl<devcb_write_line::inputline_builder>;
extern template class devcb_write_line::creator_impl<devcb_write_line::latched_inputline_builder>;
diff --git a/src/emu/emumem.cpp b/src/emu/emumem.cpp
index 0ba90cb45ab..3fb7f3a76df 100644
--- a/src/emu/emumem.cpp
+++ b/src/emu/emumem.cpp
@@ -258,6 +258,19 @@ public:
void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64_delegate rhandler, write64_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8m_delegate rhandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8m_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8m_delegate rhandler, write8m_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16m_delegate rhandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16m_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16m_delegate rhandler, write16m_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32m_delegate rhandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32m_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32m_delegate rhandler, write32m_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64m_delegate rhandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64m_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64m_delegate rhandler, write64m_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+
void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8s_delegate rhandler, u64 unitmask = 0, int cswidth = 0) override;
void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8s_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8s_delegate rhandler, write8s_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
@@ -284,6 +297,19 @@ public:
void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64sm_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64sm_delegate rhandler, write64sm_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8mo_delegate rhandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8mo_delegate rhandler, write8mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16mo_delegate rhandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16mo_delegate rhandler, write16mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32mo_delegate rhandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32mo_delegate rhandler, write32mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64mo_delegate rhandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+ void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64mo_delegate rhandler, write64mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
+
void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8smo_delegate rhandler, u64 unitmask = 0, int cswidth = 0) override;
void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8smo_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8smo_delegate rhandler, write8smo_delegate whandler, u64 unitmask = 0, int cswidth = 0) override;
@@ -1295,7 +1321,7 @@ void address_space::populate_map_entry(const address_map_entry &entry, read_or_w
unmap_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, readorwrite, false);
break;
- case AMH_DEVICE_DELEGATE_F:
+ case AMH_DEVICE_DELEGATE:
if (readorwrite == read_or_write::READ)
switch (data.m_bits)
{
@@ -1314,6 +1340,25 @@ void address_space::populate_map_entry(const address_map_entry &entry, read_or_w
}
break;
+ case AMH_DEVICE_DELEGATE_M:
+ if (readorwrite == read_or_write::READ)
+ switch (data.m_bits)
+ {
+ case 8: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, read8m_delegate(entry.m_rproto8m, entry.m_devbase), entry.m_mask, entry.m_cswidth); break;
+ case 16: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, read16m_delegate(entry.m_rproto16m, entry.m_devbase), entry.m_mask, entry.m_cswidth); break;
+ case 32: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, read32m_delegate(entry.m_rproto32m, entry.m_devbase), entry.m_mask, entry.m_cswidth); break;
+ case 64: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, read64m_delegate(entry.m_rproto64m, entry.m_devbase), entry.m_mask, entry.m_cswidth); break;
+ }
+ else
+ switch (data.m_bits)
+ {
+ case 8: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, write8m_delegate(entry.m_wproto8m, entry.m_devbase), entry.m_mask, entry.m_cswidth); break;
+ case 16: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, write16m_delegate(entry.m_wproto16m, entry.m_devbase), entry.m_mask, entry.m_cswidth); break;
+ case 32: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, write32m_delegate(entry.m_wproto32m, entry.m_devbase), entry.m_mask, entry.m_cswidth); break;
+ case 64: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, write64m_delegate(entry.m_wproto64m, entry.m_devbase), entry.m_mask, entry.m_cswidth); break;
+ }
+ break;
+
case AMH_DEVICE_DELEGATE_S:
if (readorwrite == read_or_write::READ)
switch (data.m_bits)
@@ -1352,6 +1397,25 @@ void address_space::populate_map_entry(const address_map_entry &entry, read_or_w
}
break;
+ case AMH_DEVICE_DELEGATE_MO:
+ if (readorwrite == read_or_write::READ)
+ switch (data.m_bits)
+ {
+ case 8: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, read8mo_delegate(entry.m_rproto8mo, entry.m_devbase), entry.m_mask, entry.m_cswidth); break;
+ case 16: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, read16mo_delegate(entry.m_rproto16mo, entry.m_devbase), entry.m_mask, entry.m_cswidth); break;
+ case 32: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, read32mo_delegate(entry.m_rproto32mo, entry.m_devbase), entry.m_mask, entry.m_cswidth); break;
+ case 64: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, read64mo_delegate(entry.m_rproto64mo, entry.m_devbase), entry.m_mask, entry.m_cswidth); break;
+ }
+ else
+ switch (data.m_bits)
+ {
+ case 8: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, write8mo_delegate(entry.m_wproto8mo, entry.m_devbase), entry.m_mask, entry.m_cswidth); break;
+ case 16: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, write16mo_delegate(entry.m_wproto16mo, entry.m_devbase), entry.m_mask, entry.m_cswidth); break;
+ case 32: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, write32mo_delegate(entry.m_wproto32mo, entry.m_devbase), entry.m_mask, entry.m_cswidth); break;
+ case 64: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, write64mo_delegate(entry.m_wproto64mo, entry.m_devbase), entry.m_mask, entry.m_cswidth); break;
+ }
+ break;
+
case AMH_DEVICE_DELEGATE_SMO:
if (readorwrite == read_or_write::READ)
switch (data.m_bits)
@@ -1991,6 +2055,21 @@ template<int Width, int AddrShift, endianness_t Endian> void address_space_speci
install_readwrite_handler_helper<0>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler);
}
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8m_delegate handler, u64 unitmask, int cswidth)
+{
+ install_read_handler_helper<0>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
+}
+
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8m_delegate handler, u64 unitmask, int cswidth)
+{
+ install_write_handler_helper<0>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
+}
+
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8m_delegate rhandler, write8m_delegate whandler, u64 unitmask, int cswidth)
+{
+ install_readwrite_handler_helper<0>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler);
+}
+
template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8s_delegate handler, u64 unitmask, int cswidth)
{
install_read_handler_helper<0>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
@@ -2021,6 +2100,21 @@ template<int Width, int AddrShift, endianness_t Endian> void address_space_speci
install_readwrite_handler_helper<0>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler);
}
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8mo_delegate handler, u64 unitmask, int cswidth)
+{
+ install_read_handler_helper<0>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
+}
+
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8mo_delegate handler, u64 unitmask, int cswidth)
+{
+ install_write_handler_helper<0>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
+}
+
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8mo_delegate rhandler, write8mo_delegate whandler, u64 unitmask, int cswidth)
+{
+ install_readwrite_handler_helper<0>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler);
+}
+
template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8smo_delegate handler, u64 unitmask, int cswidth)
{
install_read_handler_helper<0>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
@@ -2057,6 +2151,21 @@ template<int Width, int AddrShift, endianness_t Endian> void address_space_speci
install_readwrite_handler_helper<1>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler);
}
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16m_delegate handler, u64 unitmask, int cswidth)
+{
+ install_read_handler_helper<1>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
+}
+
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16m_delegate handler, u64 unitmask, int cswidth)
+{
+ install_write_handler_helper<1>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
+}
+
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16m_delegate rhandler, write16m_delegate whandler, u64 unitmask, int cswidth)
+{
+ install_readwrite_handler_helper<1>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler);
+}
+
template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16s_delegate handler, u64 unitmask, int cswidth)
{
install_read_handler_helper<1>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
@@ -2102,6 +2211,21 @@ template<int Width, int AddrShift, endianness_t Endian> void address_space_speci
install_readwrite_handler_helper<1>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler);
}
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16mo_delegate handler, u64 unitmask, int cswidth)
+{
+ install_read_handler_helper<1>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
+}
+
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16mo_delegate handler, u64 unitmask, int cswidth)
+{
+ install_write_handler_helper<1>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
+}
+
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16mo_delegate rhandler, write16mo_delegate whandler, u64 unitmask, int cswidth)
+{
+ install_readwrite_handler_helper<1>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler);
+}
+
//-------------------------------------------------
// install_handler - install 32-bit read/write
@@ -2123,6 +2247,21 @@ template<int Width, int AddrShift, endianness_t Endian> void address_space_speci
install_readwrite_handler_helper<2>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler);
}
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32m_delegate handler, u64 unitmask, int cswidth)
+{
+ install_read_handler_helper<2>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
+}
+
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32m_delegate handler, u64 unitmask, int cswidth)
+{
+ install_write_handler_helper<2>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
+}
+
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32m_delegate rhandler, write32m_delegate whandler, u64 unitmask, int cswidth)
+{
+ install_readwrite_handler_helper<2>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler);
+}
+
template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32s_delegate handler, u64 unitmask, int cswidth)
{
install_read_handler_helper<2>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
@@ -2153,6 +2292,21 @@ template<int Width, int AddrShift, endianness_t Endian> void address_space_speci
install_readwrite_handler_helper<2>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler);
}
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32mo_delegate handler, u64 unitmask, int cswidth)
+{
+ install_read_handler_helper<2>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
+}
+
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32mo_delegate handler, u64 unitmask, int cswidth)
+{
+ install_write_handler_helper<2>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
+}
+
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32mo_delegate rhandler, write32mo_delegate whandler, u64 unitmask, int cswidth)
+{
+ install_readwrite_handler_helper<2>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler);
+}
+
template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32smo_delegate handler, u64 unitmask, int cswidth)
{
install_read_handler_helper<2>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
@@ -2189,6 +2343,21 @@ template<int Width, int AddrShift, endianness_t Endian> void address_space_speci
install_readwrite_handler_helper<3>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler);
}
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64m_delegate handler, u64 unitmask, int cswidth)
+{
+ install_read_handler_helper<3>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
+}
+
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64m_delegate handler, u64 unitmask, int cswidth)
+{
+ install_write_handler_helper<3>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
+}
+
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64m_delegate rhandler, write64m_delegate whandler, u64 unitmask, int cswidth)
+{
+ install_readwrite_handler_helper<3>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler);
+}
+
template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64s_delegate handler, u64 unitmask, int cswidth)
{
install_read_handler_helper<3>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
@@ -2219,6 +2388,21 @@ template<int Width, int AddrShift, endianness_t Endian> void address_space_speci
install_readwrite_handler_helper<3>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler);
}
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64mo_delegate handler, u64 unitmask, int cswidth)
+{
+ install_read_handler_helper<3>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
+}
+
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64mo_delegate handler, u64 unitmask, int cswidth)
+{
+ install_write_handler_helper<3>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
+}
+
+template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64mo_delegate rhandler, write64mo_delegate whandler, u64 unitmask, int cswidth)
+{
+ install_readwrite_handler_helper<3>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler);
+}
+
template<int Width, int AddrShift, endianness_t Endian> void address_space_specific<Width, AddrShift, Endian>::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64smo_delegate handler, u64 unitmask, int cswidth)
{
install_read_handler_helper<3>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, handler);
diff --git a/src/emu/emumem.h b/src/emu/emumem.h
index ec7fae2b258..5cc496bfb1f 100644
--- a/src/emu/emumem.h
+++ b/src/emu/emumem.h
@@ -94,6 +94,11 @@ using read16_delegate = device_delegate<u16 (address_space &, offs_t, u16)>;
using read32_delegate = device_delegate<u32 (address_space &, offs_t, u32)>;
using read64_delegate = device_delegate<u64 (address_space &, offs_t, u64)>;
+using read8m_delegate = device_delegate<u8 (address_space &, offs_t)>;
+using read16m_delegate = device_delegate<u16 (address_space &, offs_t)>;
+using read32m_delegate = device_delegate<u32 (address_space &, offs_t)>;
+using read64m_delegate = device_delegate<u64 (address_space &, offs_t)>;
+
using read8s_delegate = device_delegate<u8 (offs_t, u8 )>;
using read16s_delegate = device_delegate<u16 (offs_t, u16)>;
using read32s_delegate = device_delegate<u32 (offs_t, u32)>;
@@ -104,6 +109,11 @@ using read16sm_delegate = device_delegate<u16 (offs_t)>;
using read32sm_delegate = device_delegate<u32 (offs_t)>;
using read64sm_delegate = device_delegate<u64 (offs_t)>;
+using read8mo_delegate = device_delegate<u8 (address_space &)>;
+using read16mo_delegate = device_delegate<u16 (address_space &)>;
+using read32mo_delegate = device_delegate<u32 (address_space &)>;
+using read64mo_delegate = device_delegate<u64 (address_space &)>;
+
using read8smo_delegate = device_delegate<u8 ()>;
using read16smo_delegate = device_delegate<u16 ()>;
using read32smo_delegate = device_delegate<u32 ()>;
@@ -118,6 +128,11 @@ using write16_delegate = device_delegate<void (address_space &, offs_t, u16, u16
using write32_delegate = device_delegate<void (address_space &, offs_t, u32, u32)>;
using write64_delegate = device_delegate<void (address_space &, offs_t, u64, u64)>;
+using write8m_delegate = device_delegate<void (address_space &, offs_t, u8 )>;
+using write16m_delegate = device_delegate<void (address_space &, offs_t, u16)>;
+using write32m_delegate = device_delegate<void (address_space &, offs_t, u32)>;
+using write64m_delegate = device_delegate<void (address_space &, offs_t, u64)>;
+
using write8s_delegate = device_delegate<void (offs_t, u8, u8 )>;
using write16s_delegate = device_delegate<void (offs_t, u16, u16)>;
using write32s_delegate = device_delegate<void (offs_t, u32, u32)>;
@@ -128,6 +143,11 @@ using write16sm_delegate = device_delegate<void (offs_t, u16)>;
using write32sm_delegate = device_delegate<void (offs_t, u32)>;
using write64sm_delegate = device_delegate<void (offs_t, u64)>;
+using write8mo_delegate = device_delegate<void (address_space &, u8 )>;
+using write16mo_delegate = device_delegate<void (address_space &, u16)>;
+using write32mo_delegate = device_delegate<void (address_space &, u32)>;
+using write64mo_delegate = device_delegate<void (address_space &, u64)>;
+
using write8smo_delegate = device_delegate<void (u8 )>;
using write16smo_delegate = device_delegate<void (u16)>;
using write32smo_delegate = device_delegate<void (u32)>;
@@ -177,6 +197,33 @@ inline write64_delegate make_delegate(T &&func, const char *name, const char *ta
template <typename T>
+inline read8m_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<read8m_delegate, std::remove_reference_t<T> > *obj)
+{ return read8m_delegate(func, name, tag, obj); }
+template <typename T>
+inline read16m_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<read16m_delegate, std::remove_reference_t<T> > *obj)
+{ return read16m_delegate(func, name, tag, obj); }
+template <typename T>
+inline read32m_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<read32m_delegate, std::remove_reference_t<T> > *obj)
+{ return read32m_delegate(func, name, tag, obj); }
+template <typename T>
+inline read64m_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<read64m_delegate, std::remove_reference_t<T> > *obj)
+{ return read64m_delegate(func, name, tag, obj); }
+
+template <typename T>
+inline write8m_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<write8m_delegate, std::remove_reference_t<T> > *obj)
+{ return write8m_delegate(func, name, tag, obj); }
+template <typename T>
+inline write16m_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<write16m_delegate, std::remove_reference_t<T> > *obj)
+{ return write16m_delegate(func, name, tag, obj); }
+template <typename T>
+inline write32m_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<write32m_delegate, std::remove_reference_t<T> > *obj)
+{ return write32m_delegate(func, name, tag, obj); }
+template <typename T>
+inline write64m_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<write64m_delegate, std::remove_reference_t<T> > *obj)
+{ return write64m_delegate(func, name, tag, obj); }
+
+
+template <typename T>
inline read8s_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<read8s_delegate, std::remove_reference_t<T> > *obj)
{ return read8s_delegate(func, name, tag, obj); }
template <typename T>
@@ -231,6 +278,33 @@ inline write64sm_delegate make_delegate(T &&func, const char *name, const char *
template <typename T>
+inline read8mo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<read8mo_delegate, std::remove_reference_t<T> > *obj)
+{ return read8mo_delegate(func, name, tag, obj); }
+template <typename T>
+inline read16mo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<read16mo_delegate, std::remove_reference_t<T> > *obj)
+{ return read16mo_delegate(func, name, tag, obj); }
+template <typename T>
+inline read32mo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<read32mo_delegate, std::remove_reference_t<T> > *obj)
+{ return read32mo_delegate(func, name, tag, obj); }
+template <typename T>
+inline read64mo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<read64mo_delegate, std::remove_reference_t<T> > *obj)
+{ return read64mo_delegate(func, name, tag, obj); }
+
+template <typename T>
+inline write8mo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<write8mo_delegate, std::remove_reference_t<T> > *obj)
+{ return write8mo_delegate(func, name, tag, obj); }
+template <typename T>
+inline write16mo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<write16mo_delegate, std::remove_reference_t<T> > *obj)
+{ return write16mo_delegate(func, name, tag, obj); }
+template <typename T>
+inline write32mo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<write32mo_delegate, std::remove_reference_t<T> > *obj)
+{ return write32mo_delegate(func, name, tag, obj); }
+template <typename T>
+inline write64mo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<write64mo_delegate, std::remove_reference_t<T> > *obj)
+{ return write64mo_delegate(func, name, tag, obj); }
+
+
+template <typename T>
inline read8smo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t<read8smo_delegate, std::remove_reference_t<T> > *obj)
{ return read8smo_delegate(func, name, tag, obj); }
template <typename T>
@@ -263,6 +337,10 @@ inline std::enable_if_t<std::is_constructible<read8_delegate, L, const char *>::
{ return read8_delegate(l, name); }
template <typename L>
+inline std::enable_if_t<std::is_constructible<read8m_delegate, L, const char *>::value, read8m_delegate> make_lr8_delegate(L l, const char *name)
+{ return read8m_delegate(l, name); }
+
+template <typename L>
inline std::enable_if_t<std::is_constructible<read8s_delegate, L, const char *>::value, read8s_delegate> make_lr8_delegate(L l, const char *name)
{ return read8s_delegate(l, name); }
@@ -271,6 +349,10 @@ inline std::enable_if_t<std::is_constructible<read8sm_delegate, L, const char *>
{ return read8sm_delegate(l, name); }
template <typename L>
+inline std::enable_if_t<std::is_constructible<read8mo_delegate, L, const char *>::value, read8mo_delegate> make_lr8_delegate(L l, const char *name)
+{ return read8mo_delegate(l, name); }
+
+template <typename L>
inline std::enable_if_t<std::is_constructible<read8smo_delegate, L, const char *>::value, read8smo_delegate> make_lr8_delegate(L l, const char *name)
{ return read8smo_delegate(l, name); }
@@ -279,6 +361,10 @@ inline std::enable_if_t<std::is_constructible<read16_delegate, L, const char *>:
{ return read16_delegate(l, name); }
template <typename L>
+inline std::enable_if_t<std::is_constructible<read16m_delegate, L, const char *>::value, read16m_delegate> make_lr16_delegate(L l, const char *name)
+{ return read16m_delegate(l, name); }
+
+template <typename L>
inline std::enable_if_t<std::is_constructible<read16s_delegate, L, const char *>::value, read16s_delegate> make_lr16_delegate(L l, const char *name)
{ return read16s_delegate(l, name); }
@@ -287,6 +373,10 @@ inline std::enable_if_t<std::is_constructible<read16sm_delegate, L, const char *
{ return read16sm_delegate(l, name); }
template <typename L>
+inline std::enable_if_t<std::is_constructible<read16mo_delegate, L, const char *>::value, read16mo_delegate> make_lr16_delegate(L l, const char *name)
+{ return read16mo_delegate(l, name); }
+
+template <typename L>
inline std::enable_if_t<std::is_constructible<read16smo_delegate, L, const char *>::value, read16smo_delegate> make_lr16_delegate(L l, const char *name)
{ return read16smo_delegate(l, name); }
@@ -295,6 +385,10 @@ inline std::enable_if_t<std::is_constructible<read32_delegate, L, const char *>:
{ return read32_delegate(l, name); }
template <typename L>
+inline std::enable_if_t<std::is_constructible<read32m_delegate, L, const char *>::value, read32m_delegate> make_lr32_delegate(L l, const char *name)
+{ return read32m_delegate(l, name); }
+
+template <typename L>
inline std::enable_if_t<std::is_constructible<read32s_delegate, L, const char *>::value, read32s_delegate> make_lr32_delegate(L l, const char *name)
{ return read32s_delegate(l, name); }
@@ -303,6 +397,10 @@ inline std::enable_if_t<std::is_constructible<read32sm_delegate, L, const char *
{ return read32sm_delegate(l, name); }
template <typename L>
+inline std::enable_if_t<std::is_constructible<read32mo_delegate, L, const char *>::value, read32mo_delegate> make_lr32_delegate(L l, const char *name)
+{ return read32mo_delegate(l, name); }
+
+template <typename L>
inline std::enable_if_t<std::is_constructible<read32smo_delegate, L, const char *>::value, read32smo_delegate> make_lr32_delegate(L l, const char *name)
{ return read32smo_delegate(l, name); }
@@ -311,6 +409,10 @@ inline std::enable_if_t<std::is_constructible<read64_delegate, L, const char *>:
{ return read64_delegate(l, name); }
template <typename L>
+inline std::enable_if_t<std::is_constructible<read64m_delegate, L, const char *>::value, read64m_delegate> make_lr64_delegate(L l, const char *name)
+{ return read64m_delegate(l, name); }
+
+template <typename L>
inline std::enable_if_t<std::is_constructible<read64s_delegate, L, const char *>::value, read64s_delegate> make_lr64_delegate(L l, const char *name)
{ return read64s_delegate(l, name); }
@@ -319,6 +421,10 @@ inline std::enable_if_t<std::is_constructible<read64sm_delegate, L, const char *
{ return read64sm_delegate(l, name); }
template <typename L>
+inline std::enable_if_t<std::is_constructible<read64mo_delegate, L, const char *>::value, read64mo_delegate> make_lr64_delegate(L l, const char *name)
+{ return read64mo_delegate(l, name); }
+
+template <typename L>
inline std::enable_if_t<std::is_constructible<read64smo_delegate, L, const char *>::value, read64smo_delegate> make_lr64_delegate(L l, const char *name)
{ return read64smo_delegate(l, name); }
@@ -328,6 +434,10 @@ inline std::enable_if_t<std::is_constructible<write8_delegate, L, const char *>:
{ return write8_delegate(l, name); }
template <typename L>
+inline std::enable_if_t<std::is_constructible<write8m_delegate, L, const char *>::value, write8m_delegate> make_lw8_delegate(L l, const char *name)
+{ return write8m_delegate(l, name); }
+
+template <typename L>
inline std::enable_if_t<std::is_constructible<write8s_delegate, L, const char *>::value, write8s_delegate> make_lw8_delegate(L l, const char *name)
{ return write8s_delegate(l, name); }
@@ -336,6 +446,10 @@ inline std::enable_if_t<std::is_constructible<write8sm_delegate, L, const char *
{ return write8sm_delegate(l, name); }
template <typename L>
+inline std::enable_if_t<std::is_constructible<write8mo_delegate, L, const char *>::value, write8mo_delegate> make_lw8_delegate(L l, const char *name)
+{ return write8mo_delegate(l, name); }
+
+template <typename L>
inline std::enable_if_t<std::is_constructible<write8smo_delegate, L, const char *>::value, write8smo_delegate> make_lw8_delegate(L l, const char *name)
{ return write8smo_delegate(l, name); }
@@ -344,6 +458,10 @@ inline std::enable_if_t<std::is_constructible<write16_delegate, L, const char *>
{ return write16_delegate(l, name); }
template <typename L>
+inline std::enable_if_t<std::is_constructible<write16m_delegate, L, const char *>::value, write16m_delegate> make_lw16_delegate(L l, const char *name)
+{ return write16m_delegate(l, name); }
+
+template <typename L>
inline std::enable_if_t<std::is_constructible<write16s_delegate, L, const char *>::value, write16s_delegate> make_lw16_delegate(L l, const char *name)
{ return write16s_delegate(l, name); }
@@ -352,6 +470,10 @@ inline std::enable_if_t<std::is_constructible<write16sm_delegate, L, const char
{ return write16sm_delegate(l, name); }
template <typename L>
+inline std::enable_if_t<std::is_constructible<write16mo_delegate, L, const char *>::value, write16mo_delegate> make_lw16_delegate(L l, const char *name)
+{ return write16mo_delegate(l, name); }
+
+template <typename L>
inline std::enable_if_t<std::is_constructible<write16smo_delegate, L, const char *>::value, write16smo_delegate> make_lw16_delegate(L l, const char *name)
{ return write16smo_delegate(l, name); }
@@ -360,6 +482,10 @@ inline std::enable_if_t<std::is_constructible<write32_delegate, L, const char *>
{ return write32_delegate(l, name); }
template <typename L>
+inline std::enable_if_t<std::is_constructible<write32m_delegate, L, const char *>::value, write32m_delegate> make_lw32_delegate(L l, const char *name)
+{ return write32m_delegate(l, name); }
+
+template <typename L>
inline std::enable_if_t<std::is_constructible<write32s_delegate, L, const char *>::value, write32s_delegate> make_lw32_delegate(L l, const char *name)
{ return write32s_delegate(l, name); }
@@ -368,6 +494,10 @@ inline std::enable_if_t<std::is_constructible<write32sm_delegate, L, const char
{ return write32sm_delegate(l, name); }
template <typename L>
+inline std::enable_if_t<std::is_constructible<write32mo_delegate, L, const char *>::value, write32mo_delegate> make_lw32_delegate(L l, const char *name)
+{ return write32mo_delegate(l, name); }
+
+template <typename L>
inline std::enable_if_t<std::is_constructible<write32smo_delegate, L, const char *>::value, write32smo_delegate> make_lw32_delegate(L l, const char *name)
{ return write32smo_delegate(l, name); }
@@ -376,6 +506,10 @@ inline std::enable_if_t<std::is_constructible<write64_delegate, L, const char *>
{ return write64_delegate(l, name); }
template <typename L>
+inline std::enable_if_t<std::is_constructible<write64m_delegate, L, const char *>::value, write64m_delegate> make_lw64_delegate(L l, const char *name)
+{ return write64m_delegate(l, name); }
+
+template <typename L>
inline std::enable_if_t<std::is_constructible<write64s_delegate, L, const char *>::value, write64s_delegate> make_lw64_delegate(L l, const char *name)
{ return write64s_delegate(l, name); }
@@ -384,6 +518,10 @@ inline std::enable_if_t<std::is_constructible<write64sm_delegate, L, const char
{ return write64sm_delegate(l, name); }
template <typename L>
+inline std::enable_if_t<std::is_constructible<write64mo_delegate, L, const char *>::value, write64mo_delegate> make_lw64_delegate(L l, const char *name)
+{ return write64mo_delegate(l, name); }
+
+template <typename L>
inline std::enable_if_t<std::is_constructible<write64smo_delegate, L, const char *>::value, write64smo_delegate> make_lw64_delegate(L l, const char *name)
{ return write64smo_delegate(l, name); }
@@ -1240,6 +1378,19 @@ public:
void install_write_handler(offs_t addrstart, offs_t addrend, write64_delegate whandler, u64 unitmask = 0, int cswidth = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth); }
void install_readwrite_handler(offs_t addrstart, offs_t addrend, read64_delegate rhandler, write64_delegate whandler, u64 unitmask = 0, int cswidth = 0) { install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth); }
+ void install_read_handler(offs_t addrstart, offs_t addrend, read8m_delegate rhandler, u64 unitmask = 0, int cswidth = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth); }
+ void install_write_handler(offs_t addrstart, offs_t addrend, write8m_delegate whandler, u64 unitmask = 0, int cswidth = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth); }
+ void install_readwrite_handler(offs_t addrstart, offs_t addrend, read8m_delegate rhandler, write8m_delegate whandler, u64 unitmask = 0, int cswidth = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth); }
+ void install_read_handler(offs_t addrstart, offs_t addrend, read16m_delegate rhandler, u64 unitmask = 0, int cswidth = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth); }
+ void install_write_handler(offs_t addrstart, offs_t addrend, write16m_delegate whandler, u64 unitmask = 0, int cswidth = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth); }
+ void install_readwrite_handler(offs_t addrstart, offs_t addrend, read16m_delegate rhandler, write16m_delegate whandler, u64 unitmask = 0, int cswidth = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth); }
+ void install_read_handler(offs_t addrstart, offs_t addrend, read32m_delegate rhandler, u64 unitmask = 0, int cswidth = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth); }
+ void install_write_handler(offs_t addrstart, offs_t addrend, write32m_delegate whandler, u64 unitmask = 0, int cswidth = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth); }
+ void install_readwrite_handler(offs_t addrstart, offs_t addrend, read32m_delegate rhandler, write32m_delegate whandler, u64 unitmask = 0, int cswidth = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth); }
+ void install_read_handler(offs_t addrstart, offs_t addrend, read64m_delegate rhandler, u64 unitmask = 0, int cswidth = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth); }
+ void install_write_handler(offs_t addrstart, offs_t addrend, write64m_delegate whandler, u64 unitmask = 0, int cswidth = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth); }
+ void install_readwrite_handler(offs_t addrstart, offs_t addrend, read64m_delegate rhandler, write64m_delegate whandler, u64 unitmask = 0, int cswidth = 0) { install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth); }
+
void install_read_handler(offs_t addrstart, offs_t addrend, read8s_delegate rhandler, u64 unitmask = 0, int cswidth = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth); }
void install_write_handler(offs_t addrstart, offs_t addrend, write8s_delegate whandler, u64 unitmask = 0, int cswidth = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth); }
void install_readwrite_handler(offs_t addrstart, offs_t addrend, read8s_delegate rhandler, write8s_delegate whandler, u64 unitmask = 0, int cswidth = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth); }
@@ -1266,6 +1417,19 @@ public:
void install_write_handler(offs_t addrstart, offs_t addrend, write64sm_delegate whandler, u64 unitmask = 0, int cswidth = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth); }
void install_readwrite_handler(offs_t addrstart, offs_t addrend, read64sm_delegate rhandler, write64sm_delegate whandler, u64 unitmask = 0, int cswidth = 0) { install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth); }
+ void install_read_handler(offs_t addrstart, offs_t addrend, read8mo_delegate rhandler, u64 unitmask = 0, int cswidth = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth); }
+ void install_write_handler(offs_t addrstart, offs_t addrend, write8mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth); }
+ void install_readwrite_handler(offs_t addrstart, offs_t addrend, read8mo_delegate rhandler, write8mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth); }
+ void install_read_handler(offs_t addrstart, offs_t addrend, read16mo_delegate rhandler, u64 unitmask = 0, int cswidth = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth); }
+ void install_write_handler(offs_t addrstart, offs_t addrend, write16mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth); }
+ void install_readwrite_handler(offs_t addrstart, offs_t addrend, read16mo_delegate rhandler, write16mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth); }
+ void install_read_handler(offs_t addrstart, offs_t addrend, read32mo_delegate rhandler, u64 unitmask = 0, int cswidth = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth); }
+ void install_write_handler(offs_t addrstart, offs_t addrend, write32mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth); }
+ void install_readwrite_handler(offs_t addrstart, offs_t addrend, read32mo_delegate rhandler, write32mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth); }
+ void install_read_handler(offs_t addrstart, offs_t addrend, read64mo_delegate rhandler, u64 unitmask = 0, int cswidth = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth); }
+ void install_write_handler(offs_t addrstart, offs_t addrend, write64mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth); }
+ void install_readwrite_handler(offs_t addrstart, offs_t addrend, read64mo_delegate rhandler, write64mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) { install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth); }
+
void install_read_handler(offs_t addrstart, offs_t addrend, read8smo_delegate rhandler, u64 unitmask = 0, int cswidth = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth); }
void install_write_handler(offs_t addrstart, offs_t addrend, write8smo_delegate whandler, u64 unitmask = 0, int cswidth = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth); }
void install_readwrite_handler(offs_t addrstart, offs_t addrend, read8smo_delegate rhandler, write8smo_delegate whandler, u64 unitmask = 0, int cswidth = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth); }
@@ -1293,6 +1457,19 @@ public:
virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64_delegate rhandler, write64_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8m_delegate rhandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8m_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8m_delegate rhandler, write8m_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16m_delegate rhandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16m_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16m_delegate rhandler, write16m_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32m_delegate rhandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32m_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32m_delegate rhandler, write32m_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64m_delegate rhandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64m_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64m_delegate rhandler, write64m_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+
virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8s_delegate rhandler, u64 unitmask = 0, int cswidth = 0) = 0;
virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8s_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8s_delegate rhandler, write8s_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
@@ -1319,6 +1496,19 @@ public:
virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64sm_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64sm_delegate rhandler, write64sm_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8mo_delegate rhandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8mo_delegate rhandler, write8mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16mo_delegate rhandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16mo_delegate rhandler, write16mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32mo_delegate rhandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32mo_delegate rhandler, write32mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64mo_delegate rhandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+ virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64mo_delegate rhandler, write64mo_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
+
virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8smo_delegate rhandler, u64 unitmask = 0, int cswidth = 0) = 0;
virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8smo_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8smo_delegate rhandler, write8smo_delegate whandler, u64 unitmask = 0, int cswidth = 0) = 0;
diff --git a/src/emu/emumem_hedp.cpp b/src/emu/emumem_hedp.cpp
index c0215493193..84b43191d1d 100644
--- a/src/emu/emumem_hedp.cpp
+++ b/src/emu/emumem_hedp.cpp
@@ -16,6 +16,16 @@ template<int Width, int AddrShift, int Endian, typename READ> template<typename
}
template<int Width, int AddrShift, int Endian, typename READ> template<typename R>
+ std::enable_if_t<std::is_same<R, read8m_delegate>::value ||
+ std::is_same<R, read16m_delegate>::value ||
+ std::is_same<R, read32m_delegate>::value ||
+ std::is_same<R, read64m_delegate>::value,
+ typename emu::detail::handler_entry_size<Width>::uX> handler_entry_read_delegate<Width, AddrShift, Endian, READ>::read_impl(offs_t offset, uX mem_mask)
+{
+ return m_delegate(*inh::m_space, ((offset - inh::m_address_base) & inh::m_address_mask) >> (Width + AddrShift));
+}
+
+template<int Width, int AddrShift, int Endian, typename READ> template<typename R>
std::enable_if_t<std::is_same<R, read8s_delegate>::value ||
std::is_same<R, read16s_delegate>::value ||
std::is_same<R, read32s_delegate>::value ||
@@ -36,6 +46,16 @@ template<int Width, int AddrShift, int Endian, typename READ> template<typename
}
template<int Width, int AddrShift, int Endian, typename READ> template<typename R>
+ std::enable_if_t<std::is_same<R, read8mo_delegate>::value ||
+ std::is_same<R, read16mo_delegate>::value ||
+ std::is_same<R, read32mo_delegate>::value ||
+ std::is_same<R, read64mo_delegate>::value,
+ typename emu::detail::handler_entry_size<Width>::uX> handler_entry_read_delegate<Width, AddrShift, Endian, READ>::read_impl(offs_t offset, uX mem_mask)
+{
+ return m_delegate(*inh::m_space);
+}
+
+template<int Width, int AddrShift, int Endian, typename READ> template<typename R>
std::enable_if_t<std::is_same<R, read8smo_delegate>::value ||
std::is_same<R, read16smo_delegate>::value ||
std::is_same<R, read32smo_delegate>::value ||
@@ -66,6 +86,16 @@ template<int Width, int AddrShift, int Endian, typename WRITE> template<typename
}
template<int Width, int AddrShift, int Endian, typename WRITE> template<typename W>
+ std::enable_if_t<std::is_same<W, write8m_delegate>::value ||
+ std::is_same<W, write16m_delegate>::value ||
+ std::is_same<W, write32m_delegate>::value ||
+ std::is_same<W, write64m_delegate>::value,
+ void> handler_entry_write_delegate<Width, AddrShift, Endian, WRITE>::write_impl(offs_t offset, uX data, uX mem_mask)
+{
+ m_delegate(*inh::m_space, ((offset - inh::m_address_base) & inh::m_address_mask) >> (Width + AddrShift), data);
+}
+
+template<int Width, int AddrShift, int Endian, typename WRITE> template<typename W>
std::enable_if_t<std::is_same<W, write8s_delegate>::value ||
std::is_same<W, write16s_delegate>::value ||
std::is_same<W, write32s_delegate>::value ||
@@ -86,6 +116,16 @@ template<int Width, int AddrShift, int Endian, typename WRITE> template<typename
}
template<int Width, int AddrShift, int Endian, typename WRITE> template<typename W>
+ std::enable_if_t<std::is_same<W, write8mo_delegate>::value ||
+ std::is_same<W, write16mo_delegate>::value ||
+ std::is_same<W, write32mo_delegate>::value ||
+ std::is_same<W, write64mo_delegate>::value,
+ void> handler_entry_write_delegate<Width, AddrShift, Endian, WRITE>::write_impl(offs_t offset, uX data, uX mem_mask)
+{
+ m_delegate(*inh::m_space, data);
+}
+
+template<int Width, int AddrShift, int Endian, typename WRITE> template<typename W>
std::enable_if_t<std::is_same<W, write8smo_delegate>::value ||
std::is_same<W, write16smo_delegate>::value ||
std::is_same<W, write32smo_delegate>::value ||
@@ -153,6 +193,29 @@ template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64_dele
template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64_delegate>;
template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64_delegate>;
+template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8m_delegate>;
+template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8m_delegate>;
+template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16m_delegate>;
+template class handler_entry_read_delegate<1, 3, ENDIANNESS_BIG, read16m_delegate>;
+template class handler_entry_read_delegate<1, 0, ENDIANNESS_LITTLE, read16m_delegate>;
+template class handler_entry_read_delegate<1, 0, ENDIANNESS_BIG, read16m_delegate>;
+template class handler_entry_read_delegate<1, -1, ENDIANNESS_LITTLE, read16m_delegate>;
+template class handler_entry_read_delegate<1, -1, ENDIANNESS_BIG, read16m_delegate>;
+template class handler_entry_read_delegate<2, 0, ENDIANNESS_LITTLE, read32m_delegate>;
+template class handler_entry_read_delegate<2, 0, ENDIANNESS_BIG, read32m_delegate>;
+template class handler_entry_read_delegate<2, -1, ENDIANNESS_LITTLE, read32m_delegate>;
+template class handler_entry_read_delegate<2, -1, ENDIANNESS_BIG, read32m_delegate>;
+template class handler_entry_read_delegate<2, -2, ENDIANNESS_LITTLE, read32m_delegate>;
+template class handler_entry_read_delegate<2, -2, ENDIANNESS_BIG, read32m_delegate>;
+template class handler_entry_read_delegate<3, 0, ENDIANNESS_LITTLE, read64m_delegate>;
+template class handler_entry_read_delegate<3, 0, ENDIANNESS_BIG, read64m_delegate>;
+template class handler_entry_read_delegate<3, -1, ENDIANNESS_LITTLE, read64m_delegate>;
+template class handler_entry_read_delegate<3, -1, ENDIANNESS_BIG, read64m_delegate>;
+template class handler_entry_read_delegate<3, -2, ENDIANNESS_LITTLE, read64m_delegate>;
+template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64m_delegate>;
+template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64m_delegate>;
+template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64m_delegate>;
+
template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8s_delegate>;
template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8s_delegate>;
template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16s_delegate>;
@@ -199,6 +262,29 @@ template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64sm_de
template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64sm_delegate>;
template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64sm_delegate>;
+template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8mo_delegate>;
+template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8mo_delegate>;
+template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16mo_delegate>;
+template class handler_entry_read_delegate<1, 3, ENDIANNESS_BIG, read16mo_delegate>;
+template class handler_entry_read_delegate<1, 0, ENDIANNESS_LITTLE, read16mo_delegate>;
+template class handler_entry_read_delegate<1, 0, ENDIANNESS_BIG, read16mo_delegate>;
+template class handler_entry_read_delegate<1, -1, ENDIANNESS_LITTLE, read16mo_delegate>;
+template class handler_entry_read_delegate<1, -1, ENDIANNESS_BIG, read16mo_delegate>;
+template class handler_entry_read_delegate<2, 0, ENDIANNESS_LITTLE, read32mo_delegate>;
+template class handler_entry_read_delegate<2, 0, ENDIANNESS_BIG, read32mo_delegate>;
+template class handler_entry_read_delegate<2, -1, ENDIANNESS_LITTLE, read32mo_delegate>;
+template class handler_entry_read_delegate<2, -1, ENDIANNESS_BIG, read32mo_delegate>;
+template class handler_entry_read_delegate<2, -2, ENDIANNESS_LITTLE, read32mo_delegate>;
+template class handler_entry_read_delegate<2, -2, ENDIANNESS_BIG, read32mo_delegate>;
+template class handler_entry_read_delegate<3, 0, ENDIANNESS_LITTLE, read64mo_delegate>;
+template class handler_entry_read_delegate<3, 0, ENDIANNESS_BIG, read64mo_delegate>;
+template class handler_entry_read_delegate<3, -1, ENDIANNESS_LITTLE, read64mo_delegate>;
+template class handler_entry_read_delegate<3, -1, ENDIANNESS_BIG, read64mo_delegate>;
+template class handler_entry_read_delegate<3, -2, ENDIANNESS_LITTLE, read64mo_delegate>;
+template class handler_entry_read_delegate<3, -2, ENDIANNESS_BIG, read64mo_delegate>;
+template class handler_entry_read_delegate<3, -3, ENDIANNESS_LITTLE, read64mo_delegate>;
+template class handler_entry_read_delegate<3, -3, ENDIANNESS_BIG, read64mo_delegate>;
+
template class handler_entry_read_delegate<0, 0, ENDIANNESS_LITTLE, read8smo_delegate>;
template class handler_entry_read_delegate<0, 0, ENDIANNESS_BIG, read8smo_delegate>;
template class handler_entry_read_delegate<1, 3, ENDIANNESS_LITTLE, read16smo_delegate>;
@@ -245,6 +331,29 @@ template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64_de
template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64_delegate>;
template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64_delegate>;
+template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8m_delegate>;
+template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8m_delegate>;
+template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16m_delegate>;
+template class handler_entry_write_delegate<1, 3, ENDIANNESS_BIG, write16m_delegate>;
+template class handler_entry_write_delegate<1, 0, ENDIANNESS_LITTLE, write16m_delegate>;
+template class handler_entry_write_delegate<1, 0, ENDIANNESS_BIG, write16m_delegate>;
+template class handler_entry_write_delegate<1, -1, ENDIANNESS_LITTLE, write16m_delegate>;
+template class handler_entry_write_delegate<1, -1, ENDIANNESS_BIG, write16m_delegate>;
+template class handler_entry_write_delegate<2, 0, ENDIANNESS_LITTLE, write32m_delegate>;
+template class handler_entry_write_delegate<2, 0, ENDIANNESS_BIG, write32m_delegate>;
+template class handler_entry_write_delegate<2, -1, ENDIANNESS_LITTLE, write32m_delegate>;
+template class handler_entry_write_delegate<2, -1, ENDIANNESS_BIG, write32m_delegate>;
+template class handler_entry_write_delegate<2, -2, ENDIANNESS_LITTLE, write32m_delegate>;
+template class handler_entry_write_delegate<2, -2, ENDIANNESS_BIG, write32m_delegate>;
+template class handler_entry_write_delegate<3, 0, ENDIANNESS_LITTLE, write64m_delegate>;
+template class handler_entry_write_delegate<3, 0, ENDIANNESS_BIG, write64m_delegate>;
+template class handler_entry_write_delegate<3, -1, ENDIANNESS_LITTLE, write64m_delegate>;
+template class handler_entry_write_delegate<3, -1, ENDIANNESS_BIG, write64m_delegate>;
+template class handler_entry_write_delegate<3, -2, ENDIANNESS_LITTLE, write64m_delegate>;
+template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64m_delegate>;
+template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64m_delegate>;
+template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64m_delegate>;
+
template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8s_delegate>;
template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8s_delegate>;
template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16s_delegate>;
@@ -291,6 +400,29 @@ template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64sm_
template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64sm_delegate>;
template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64sm_delegate>;
+template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8mo_delegate>;
+template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8mo_delegate>;
+template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16mo_delegate>;
+template class handler_entry_write_delegate<1, 3, ENDIANNESS_BIG, write16mo_delegate>;
+template class handler_entry_write_delegate<1, 0, ENDIANNESS_LITTLE, write16mo_delegate>;
+template class handler_entry_write_delegate<1, 0, ENDIANNESS_BIG, write16mo_delegate>;
+template class handler_entry_write_delegate<1, -1, ENDIANNESS_LITTLE, write16mo_delegate>;
+template class handler_entry_write_delegate<1, -1, ENDIANNESS_BIG, write16mo_delegate>;
+template class handler_entry_write_delegate<2, 0, ENDIANNESS_LITTLE, write32mo_delegate>;
+template class handler_entry_write_delegate<2, 0, ENDIANNESS_BIG, write32mo_delegate>;
+template class handler_entry_write_delegate<2, -1, ENDIANNESS_LITTLE, write32mo_delegate>;
+template class handler_entry_write_delegate<2, -1, ENDIANNESS_BIG, write32mo_delegate>;
+template class handler_entry_write_delegate<2, -2, ENDIANNESS_LITTLE, write32mo_delegate>;
+template class handler_entry_write_delegate<2, -2, ENDIANNESS_BIG, write32mo_delegate>;
+template class handler_entry_write_delegate<3, 0, ENDIANNESS_LITTLE, write64mo_delegate>;
+template class handler_entry_write_delegate<3, 0, ENDIANNESS_BIG, write64mo_delegate>;
+template class handler_entry_write_delegate<3, -1, ENDIANNESS_LITTLE, write64mo_delegate>;
+template class handler_entry_write_delegate<3, -1, ENDIANNESS_BIG, write64mo_delegate>;
+template class handler_entry_write_delegate<3, -2, ENDIANNESS_LITTLE, write64mo_delegate>;
+template class handler_entry_write_delegate<3, -2, ENDIANNESS_BIG, write64mo_delegate>;
+template class handler_entry_write_delegate<3, -3, ENDIANNESS_LITTLE, write64mo_delegate>;
+template class handler_entry_write_delegate<3, -3, ENDIANNESS_BIG, write64mo_delegate>;
+
template class handler_entry_write_delegate<0, 0, ENDIANNESS_LITTLE, write8smo_delegate>;
template class handler_entry_write_delegate<0, 0, ENDIANNESS_BIG, write8smo_delegate>;
template class handler_entry_write_delegate<1, 3, ENDIANNESS_LITTLE, write16smo_delegate>;
diff --git a/src/emu/emumem_hedp.h b/src/emu/emumem_hedp.h
index af16088f21e..4b21085f7a9 100644
--- a/src/emu/emumem_hedp.h
+++ b/src/emu/emumem_hedp.h
@@ -29,6 +29,13 @@ private:
uX> read_impl(offs_t offset, uX mem_mask);
template<typename R>
+ std::enable_if_t<std::is_same<R, read8m_delegate>::value ||
+ std::is_same<R, read16m_delegate>::value ||
+ std::is_same<R, read32m_delegate>::value ||
+ std::is_same<R, read64m_delegate>::value,
+ uX> read_impl(offs_t offset, uX mem_mask);
+
+ template<typename R>
std::enable_if_t<std::is_same<R, read8s_delegate>::value ||
std::is_same<R, read16s_delegate>::value ||
std::is_same<R, read32s_delegate>::value ||
@@ -43,6 +50,13 @@ private:
uX> read_impl(offs_t offset, uX mem_mask);
template<typename R>
+ std::enable_if_t<std::is_same<R, read8mo_delegate>::value ||
+ std::is_same<R, read16mo_delegate>::value ||
+ std::is_same<R, read32mo_delegate>::value ||
+ std::is_same<R, read64mo_delegate>::value,
+ uX> read_impl(offs_t offset, uX mem_mask);
+
+ template<typename R>
std::enable_if_t<std::is_same<R, read8smo_delegate>::value ||
std::is_same<R, read16smo_delegate>::value ||
std::is_same<R, read32smo_delegate>::value ||
@@ -74,6 +88,13 @@ private:
void> write_impl(offs_t offset, uX data, uX mem_mask);
template<typename W>
+ std::enable_if_t<std::is_same<W, write8m_delegate>::value ||
+ std::is_same<W, write16m_delegate>::value ||
+ std::is_same<W, write32m_delegate>::value ||
+ std::is_same<W, write64m_delegate>::value,
+ void> write_impl(offs_t offset, uX data, uX mem_mask);
+
+ template<typename W>
std::enable_if_t<std::is_same<W, write8s_delegate>::value ||
std::is_same<W, write16s_delegate>::value ||
std::is_same<W, write32s_delegate>::value ||
@@ -88,6 +109,13 @@ private:
void> write_impl(offs_t offset, uX data, uX mem_mask);
template<typename W>
+ std::enable_if_t<std::is_same<W, write8mo_delegate>::value ||
+ std::is_same<W, write16mo_delegate>::value ||
+ std::is_same<W, write32mo_delegate>::value ||
+ std::is_same<W, write64mo_delegate>::value,
+ void> write_impl(offs_t offset, uX data, uX mem_mask);
+
+ template<typename W>
std::enable_if_t<std::is_same<W, write8smo_delegate>::value ||
std::is_same<W, write16smo_delegate>::value ||
std::is_same<W, write32smo_delegate>::value ||
diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp
index c8d9b81b2f1..ddae8e8aeb6 100644
--- a/src/frontend/mame/luaengine.cpp
+++ b/src/frontend/mame/luaengine.cpp
@@ -201,9 +201,11 @@ namespace sol
case AMH_UNMAP:
typestr = "unmap";
break;
- case AMH_DEVICE_DELEGATE_F:
+ case AMH_DEVICE_DELEGATE:
+ case AMH_DEVICE_DELEGATE_M:
case AMH_DEVICE_DELEGATE_S:
case AMH_DEVICE_DELEGATE_SM:
+ case AMH_DEVICE_DELEGATE_MO:
case AMH_DEVICE_DELEGATE_SMO:
typestr = "delegate";
break;