diff options
| author | 2018-08-07 17:38:23 +0200 | |
|---|---|---|
| committer | 2018-08-10 09:47:03 +0200 | |
| commit | e78ca34bac6e5ef1e8ae8deebae9ae8563cb1b04 (patch) | |
| tree | 43143af85faaaf27147359299897627700f583d5 /src/emu/addrmap.cpp | |
| parent | a4c5cb55bb72d0e36cdb74ad14f52a8f332b0699 (diff) | |
memory,devcb: Put capabilities at parity [O. Galibert]
Diffstat (limited to 'src/emu/addrmap.cpp')
| -rw-r--r-- | src/emu/addrmap.cpp | 228 |
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; |
