summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/addrmap.cpp
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 /src/emu/addrmap.cpp
parenta4c5cb55bb72d0e36cdb74ad14f52a8f332b0699 (diff)
memory,devcb: Put capabilities at parity [O. Galibert]
Diffstat (limited to 'src/emu/addrmap.cpp')
-rw-r--r--src/emu/addrmap.cpp228
1 files changed, 210 insertions, 18 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;