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; template class devcb_read; template class devcb_read; @@ -21,36 +22,108 @@ template class devcb_read8::delegate_builder; template class devcb_read8::delegate_builder; template class devcb_read8::delegate_builder; template class devcb_read8::delegate_builder; +template class devcb_read8::delegate_builder; +template class devcb_read8::delegate_builder; +template class devcb_read8::delegate_builder; +template class devcb_read8::delegate_builder; +template class devcb_read8::delegate_builder; +template class devcb_read8::delegate_builder; +template class devcb_read8::delegate_builder; +template class devcb_read8::delegate_builder; +template class devcb_read8::delegate_builder; +template class devcb_read8::delegate_builder; +template class devcb_read8::delegate_builder; +template class devcb_read8::delegate_builder; template class devcb_read8::delegate_builder; template class devcb_read16::delegate_builder; template class devcb_read16::delegate_builder; template class devcb_read16::delegate_builder; template class devcb_read16::delegate_builder; +template class devcb_read16::delegate_builder; +template class devcb_read16::delegate_builder; +template class devcb_read16::delegate_builder; +template class devcb_read16::delegate_builder; +template class devcb_read16::delegate_builder; +template class devcb_read16::delegate_builder; +template class devcb_read16::delegate_builder; +template class devcb_read16::delegate_builder; +template class devcb_read16::delegate_builder; +template class devcb_read16::delegate_builder; +template class devcb_read16::delegate_builder; +template class devcb_read16::delegate_builder; template class devcb_read16::delegate_builder; template class devcb_read32::delegate_builder; template class devcb_read32::delegate_builder; template class devcb_read32::delegate_builder; template class devcb_read32::delegate_builder; +template class devcb_read32::delegate_builder; +template class devcb_read32::delegate_builder; +template class devcb_read32::delegate_builder; +template class devcb_read32::delegate_builder; +template class devcb_read32::delegate_builder; +template class devcb_read32::delegate_builder; +template class devcb_read32::delegate_builder; +template class devcb_read32::delegate_builder; +template class devcb_read32::delegate_builder; +template class devcb_read32::delegate_builder; +template class devcb_read32::delegate_builder; +template class devcb_read32::delegate_builder; template class devcb_read32::delegate_builder; template class devcb_read64::delegate_builder; template class devcb_read64::delegate_builder; template class devcb_read64::delegate_builder; template class devcb_read64::delegate_builder; +template class devcb_read64::delegate_builder; +template class devcb_read64::delegate_builder; +template class devcb_read64::delegate_builder; +template class devcb_read64::delegate_builder; +template class devcb_read64::delegate_builder; +template class devcb_read64::delegate_builder; +template class devcb_read64::delegate_builder; +template class devcb_read64::delegate_builder; +template class devcb_read64::delegate_builder; +template class devcb_read64::delegate_builder; +template class devcb_read64::delegate_builder; +template class devcb_read64::delegate_builder; template class devcb_read64::delegate_builder; template class devcb_read_line::delegate_builder; template class devcb_read_line::delegate_builder; template class devcb_read_line::delegate_builder; template class devcb_read_line::delegate_builder; +template class devcb_read_line::delegate_builder; +template class devcb_read_line::delegate_builder; +template class devcb_read_line::delegate_builder; +template class devcb_read_line::delegate_builder; +template class devcb_read_line::delegate_builder; +template class devcb_read_line::delegate_builder; +template class devcb_read_line::delegate_builder; +template class devcb_read_line::delegate_builder; +template class devcb_read_line::delegate_builder; +template class devcb_read_line::delegate_builder; +template class devcb_read_line::delegate_builder; +template class devcb_read_line::delegate_builder; template class devcb_read_line::delegate_builder; template class devcb_read8::creator_impl >; template class devcb_read8::creator_impl >; template class devcb_read8::creator_impl >; template class devcb_read8::creator_impl >; +template class devcb_read8::creator_impl >; +template class devcb_read8::creator_impl >; +template class devcb_read8::creator_impl >; +template class devcb_read8::creator_impl >; +template class devcb_read8::creator_impl >; +template class devcb_read8::creator_impl >; +template class devcb_read8::creator_impl >; +template class devcb_read8::creator_impl >; +template class devcb_read8::creator_impl >; +template class devcb_read8::creator_impl >; +template class devcb_read8::creator_impl >; +template class devcb_read8::creator_impl >; template class devcb_read8::creator_impl >; template class devcb_read8::creator_impl; @@ -58,6 +131,18 @@ template class devcb_read16::creator_impl >; template class devcb_read16::creator_impl >; template class devcb_read16::creator_impl >; +template class devcb_read16::creator_impl >; +template class devcb_read16::creator_impl >; +template class devcb_read16::creator_impl >; +template class devcb_read16::creator_impl >; +template class devcb_read16::creator_impl >; +template class devcb_read16::creator_impl >; +template class devcb_read16::creator_impl >; +template class devcb_read16::creator_impl >; +template class devcb_read16::creator_impl >; +template class devcb_read16::creator_impl >; +template class devcb_read16::creator_impl >; +template class devcb_read16::creator_impl >; template class devcb_read16::creator_impl >; template class devcb_read16::creator_impl; @@ -65,6 +150,18 @@ template class devcb_read32::creator_impl >; template class devcb_read32::creator_impl >; template class devcb_read32::creator_impl >; +template class devcb_read32::creator_impl >; +template class devcb_read32::creator_impl >; +template class devcb_read32::creator_impl >; +template class devcb_read32::creator_impl >; +template class devcb_read32::creator_impl >; +template class devcb_read32::creator_impl >; +template class devcb_read32::creator_impl >; +template class devcb_read32::creator_impl >; +template class devcb_read32::creator_impl >; +template class devcb_read32::creator_impl >; +template class devcb_read32::creator_impl >; +template class devcb_read32::creator_impl >; template class devcb_read32::creator_impl >; template class devcb_read32::creator_impl; @@ -72,6 +169,18 @@ template class devcb_read64::creator_impl >; template class devcb_read64::creator_impl >; template class devcb_read64::creator_impl >; +template class devcb_read64::creator_impl >; +template class devcb_read64::creator_impl >; +template class devcb_read64::creator_impl >; +template class devcb_read64::creator_impl >; +template class devcb_read64::creator_impl >; +template class devcb_read64::creator_impl >; +template class devcb_read64::creator_impl >; +template class devcb_read64::creator_impl >; +template class devcb_read64::creator_impl >; +template class devcb_read64::creator_impl >; +template class devcb_read64::creator_impl >; +template class devcb_read64::creator_impl >; template class devcb_read64::creator_impl >; template class devcb_read64::creator_impl; @@ -79,6 +188,18 @@ template class devcb_read_line::creator_impl >; template class devcb_read_line::creator_impl >; template class devcb_read_line::creator_impl >; +template class devcb_read_line::creator_impl >; +template class devcb_read_line::creator_impl >; +template class devcb_read_line::creator_impl >; +template class devcb_read_line::creator_impl >; +template class devcb_read_line::creator_impl >; +template class devcb_read_line::creator_impl >; +template class devcb_read_line::creator_impl >; +template class devcb_read_line::creator_impl >; +template class devcb_read_line::creator_impl >; +template class devcb_read_line::creator_impl >; +template class devcb_read_line::creator_impl >; +template class devcb_read_line::creator_impl >; template class devcb_read_line::creator_impl >; template class devcb_read_line::creator_impl; @@ -92,36 +213,108 @@ template class devcb_write8::delegate_builder; template class devcb_write8::delegate_builder; template class devcb_write8::delegate_builder; template class devcb_write8::delegate_builder; +template class devcb_write8::delegate_builder; +template class devcb_write8::delegate_builder; +template class devcb_write8::delegate_builder; +template class devcb_write8::delegate_builder; +template class devcb_write8::delegate_builder; +template class devcb_write8::delegate_builder; +template class devcb_write8::delegate_builder; +template class devcb_write8::delegate_builder; +template class devcb_write8::delegate_builder; +template class devcb_write8::delegate_builder; +template class devcb_write8::delegate_builder; +template class devcb_write8::delegate_builder; template class devcb_write8::delegate_builder; template class devcb_write16::delegate_builder; template class devcb_write16::delegate_builder; template class devcb_write16::delegate_builder; template class devcb_write16::delegate_builder; +template class devcb_write16::delegate_builder; +template class devcb_write16::delegate_builder; +template class devcb_write16::delegate_builder; +template class devcb_write16::delegate_builder; +template class devcb_write16::delegate_builder; +template class devcb_write16::delegate_builder; +template class devcb_write16::delegate_builder; +template class devcb_write16::delegate_builder; +template class devcb_write16::delegate_builder; +template class devcb_write16::delegate_builder; +template class devcb_write16::delegate_builder; +template class devcb_write16::delegate_builder; template class devcb_write16::delegate_builder; template class devcb_write32::delegate_builder; template class devcb_write32::delegate_builder; template class devcb_write32::delegate_builder; template class devcb_write32::delegate_builder; +template class devcb_write32::delegate_builder; +template class devcb_write32::delegate_builder; +template class devcb_write32::delegate_builder; +template class devcb_write32::delegate_builder; +template class devcb_write32::delegate_builder; +template class devcb_write32::delegate_builder; +template class devcb_write32::delegate_builder; +template class devcb_write32::delegate_builder; +template class devcb_write32::delegate_builder; +template class devcb_write32::delegate_builder; +template class devcb_write32::delegate_builder; +template class devcb_write32::delegate_builder; template class devcb_write32::delegate_builder; template class devcb_write64::delegate_builder; template class devcb_write64::delegate_builder; template class devcb_write64::delegate_builder; template class devcb_write64::delegate_builder; +template class devcb_write64::delegate_builder; +template class devcb_write64::delegate_builder; +template class devcb_write64::delegate_builder; +template class devcb_write64::delegate_builder; +template class devcb_write64::delegate_builder; +template class devcb_write64::delegate_builder; +template class devcb_write64::delegate_builder; +template class devcb_write64::delegate_builder; +template class devcb_write64::delegate_builder; +template class devcb_write64::delegate_builder; +template class devcb_write64::delegate_builder; +template class devcb_write64::delegate_builder; template class devcb_write64::delegate_builder; template class devcb_write_line::delegate_builder; template class devcb_write_line::delegate_builder; template class devcb_write_line::delegate_builder; template class devcb_write_line::delegate_builder; +template class devcb_write_line::delegate_builder; +template class devcb_write_line::delegate_builder; +template class devcb_write_line::delegate_builder; +template class devcb_write_line::delegate_builder; +template class devcb_write_line::delegate_builder; +template class devcb_write_line::delegate_builder; +template class devcb_write_line::delegate_builder; +template class devcb_write_line::delegate_builder; +template class devcb_write_line::delegate_builder; +template class devcb_write_line::delegate_builder; +template class devcb_write_line::delegate_builder; +template class devcb_write_line::delegate_builder; template class devcb_write_line::delegate_builder; template class devcb_write8::creator_impl >; template class devcb_write8::creator_impl >; template class devcb_write8::creator_impl >; template class devcb_write8::creator_impl >; +template class devcb_write8::creator_impl >; +template class devcb_write8::creator_impl >; +template class devcb_write8::creator_impl >; +template class devcb_write8::creator_impl >; +template class devcb_write8::creator_impl >; +template class devcb_write8::creator_impl >; +template class devcb_write8::creator_impl >; +template class devcb_write8::creator_impl >; +template class devcb_write8::creator_impl >; +template class devcb_write8::creator_impl >; +template class devcb_write8::creator_impl >; +template class devcb_write8::creator_impl >; template class devcb_write8::creator_impl >; template class devcb_write8::creator_impl; template class devcb_write8::creator_impl; @@ -134,6 +327,18 @@ template class devcb_write16::creator_impl >; template class devcb_write16::creator_impl >; template class devcb_write16::creator_impl >; +template class devcb_write16::creator_impl >; +template class devcb_write16::creator_impl >; +template class devcb_write16::creator_impl >; +template class devcb_write16::creator_impl >; +template class devcb_write16::creator_impl >; +template class devcb_write16::creator_impl >; +template class devcb_write16::creator_impl >; +template class devcb_write16::creator_impl >; +template class devcb_write16::creator_impl >; +template class devcb_write16::creator_impl >; +template class devcb_write16::creator_impl >; +template class devcb_write16::creator_impl >; template class devcb_write16::creator_impl >; template class devcb_write16::creator_impl; template class devcb_write16::creator_impl; @@ -146,6 +351,18 @@ template class devcb_write32::creator_impl >; template class devcb_write32::creator_impl >; template class devcb_write32::creator_impl >; +template class devcb_write32::creator_impl >; +template class devcb_write32::creator_impl >; +template class devcb_write32::creator_impl >; +template class devcb_write32::creator_impl >; +template class devcb_write32::creator_impl >; +template class devcb_write32::creator_impl >; +template class devcb_write32::creator_impl >; +template class devcb_write32::creator_impl >; +template class devcb_write32::creator_impl >; +template class devcb_write32::creator_impl >; +template class devcb_write32::creator_impl >; +template class devcb_write32::creator_impl >; template class devcb_write32::creator_impl >; template class devcb_write32::creator_impl; template class devcb_write32::creator_impl; @@ -158,6 +375,18 @@ template class devcb_write64::creator_impl >; template class devcb_write64::creator_impl >; template class devcb_write64::creator_impl >; +template class devcb_write64::creator_impl >; +template class devcb_write64::creator_impl >; +template class devcb_write64::creator_impl >; +template class devcb_write64::creator_impl >; +template class devcb_write64::creator_impl >; +template class devcb_write64::creator_impl >; +template class devcb_write64::creator_impl >; +template class devcb_write64::creator_impl >; +template class devcb_write64::creator_impl >; +template class devcb_write64::creator_impl >; +template class devcb_write64::creator_impl >; +template class devcb_write64::creator_impl >; template class devcb_write64::creator_impl >; template class devcb_write64::creator_impl; template class devcb_write64::creator_impl; @@ -170,6 +399,18 @@ template class devcb_write_line::creator_impl >; template class devcb_write_line::creator_impl >; template class devcb_write_line::creator_impl >; +template class devcb_write_line::creator_impl >; +template class devcb_write_line::creator_impl >; +template class devcb_write_line::creator_impl >; +template class devcb_write_line::creator_impl >; +template class devcb_write_line::creator_impl >; +template class devcb_write_line::creator_impl >; +template class devcb_write_line::creator_impl >; +template class devcb_write_line::creator_impl >; +template class devcb_write_line::creator_impl >; +template class devcb_write_line::creator_impl >; +template class devcb_write_line::creator_impl >; +template class devcb_write_line::creator_impl >; template class devcb_write_line::creator_impl >; template class devcb_write_line::creator_impl; template class devcb_write_line::creator_impl; 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 struct read_line_device_class { }; template struct write_line_device_class { }; -template -struct read_line_device_class::value> > { using type = T; }; -template -struct read_line_device_class::value> > { using type = T; }; -template -struct read_line_device_class::value> > { using type = T; }; -template -struct read_line_device_class::value> > { using type = T; }; - -template -struct write_line_device_class::value> > { using type = T; }; -template -struct write_line_device_class::value> > { using type = T; }; -template -struct write_line_device_class::value> > { using type = T; }; -template -struct write_line_device_class::value> > { using type = T; }; - -template using read_line_device_class_t = typename read_line_device_class::type; -template using write_line_device_class_t = typename write_line_device_class::type; - template -inline read_line_delegate make_delegate(T &&func, char const *name, char const *tag, read_line_device_class_t > *obj) +inline read_line_delegate make_delegate(T &&func, char const *name, char const *tag, rw_device_class_t > *obj) { return read_line_delegate(func, name, tag, obj); } template -inline write_line_delegate make_delegate(T &&func, char const *name, char const *tag, write_line_device_class_t > *obj) +inline write_line_delegate make_delegate(T &&func, char const *name, char const *tag, rw_device_class_t > *obj) { return write_line_delegate(func, name, tag, obj); } } } // namespace emu::detail @@ -210,11 +189,35 @@ protected: template struct delegate_type > > > { using type = read16_delegate; using device_class = emu::detail::rw_device_class_t >; }; template struct delegate_type > > > { using type = read32_delegate; using device_class = emu::detail::rw_device_class_t >; }; template struct delegate_type > > > { using type = read64_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = read8s_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = read16s_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = read32s_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = read64s_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = read8sm_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = read16sm_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = read32sm_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = read64sm_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = read8smo_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = read16smo_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = read32smo_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = read64smo_delegate; using device_class = emu::detail::rw_device_class_t >; }; template struct delegate_type > > > { using type = read_line_delegate; using device_class = emu::detail::rw_device_class_t >; }; template struct delegate_type > > > { using type = write8_delegate; using device_class = emu::detail::rw_device_class_t >; }; template struct delegate_type > > > { using type = write16_delegate; using device_class = emu::detail::rw_device_class_t >; }; template struct delegate_type > > > { using type = write32_delegate; using device_class = emu::detail::rw_device_class_t >; }; template struct delegate_type > > > { using type = write64_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = write8s_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = write16s_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = write32s_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = write64s_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = write8sm_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = write16sm_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = write32sm_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = write64sm_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = write8smo_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = write16smo_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = write32smo_delegate; using device_class = emu::detail::rw_device_class_t >; }; + template struct delegate_type > > > { using type = write64smo_delegate; using device_class = emu::detail::rw_device_class_t >; }; template struct delegate_type > > > { using type = write_line_delegate; using device_class = emu::detail::rw_device_class_t >; }; template using delegate_type_t = typename delegate_type::type; template using delegate_device_class_t = typename delegate_type::device_class; @@ -334,6 +337,18 @@ protected: template struct is_read_method > > > { static constexpr bool value = true; }; template struct is_read_method > > > { static constexpr bool value = true; }; template struct is_read_method > > > { static constexpr bool value = true; }; + template struct is_read_method > > > { static constexpr bool value = true; }; + template struct is_read_method > > > { static constexpr bool value = true; }; + template struct is_read_method > > > { static constexpr bool value = true; }; + template struct is_read_method > > > { static constexpr bool value = true; }; + template struct is_read_method > > > { static constexpr bool value = true; }; + template struct is_read_method > > > { static constexpr bool value = true; }; + template struct is_read_method > > > { static constexpr bool value = true; }; + template struct is_read_method > > > { static constexpr bool value = true; }; + template struct is_read_method > > > { static constexpr bool value = true; }; + template struct is_read_method > > > { static constexpr bool value = true; }; + template struct is_read_method > > > { static constexpr bool value = true; }; + template struct is_read_method > > > { static constexpr bool value = true; }; template struct is_read_method > > > { static constexpr bool value = true; }; // Invoking read callbacks @@ -350,6 +365,18 @@ protected: template struct delegate_traits { static constexpr u16 default_mask = ~u16(0); }; template struct delegate_traits { static constexpr u32 default_mask = ~u32(0); }; template struct delegate_traits { static constexpr u64 default_mask = ~u64(0); }; + template struct delegate_traits { static constexpr u8 default_mask = ~u8(0); }; + template struct delegate_traits { static constexpr u16 default_mask = ~u16(0); }; + template struct delegate_traits { static constexpr u32 default_mask = ~u32(0); }; + template struct delegate_traits { static constexpr u64 default_mask = ~u64(0); }; + template struct delegate_traits { static constexpr u8 default_mask = ~u8(0); }; + template struct delegate_traits { static constexpr u16 default_mask = ~u16(0); }; + template struct delegate_traits { static constexpr u32 default_mask = ~u32(0); }; + template struct delegate_traits { static constexpr u64 default_mask = ~u64(0); }; + template struct delegate_traits { static constexpr u8 default_mask = ~u8(0); }; + template struct delegate_traits { static constexpr u16 default_mask = ~u16(0); }; + template struct delegate_traits { static constexpr u32 default_mask = ~u32(0); }; + template struct delegate_traits { static constexpr u64 default_mask = ~u64(0); }; template struct delegate_traits { static constexpr unsigned default_mask = 1U; }; using devcb_base::devcb_base; @@ -384,11 +411,23 @@ protected: template struct is_write_method > > > { static constexpr bool value = true; }; template struct is_write_method > > > { static constexpr bool value = true; }; template struct is_write_method > > > { static constexpr bool value = true; }; + template struct is_write_method > > > { static constexpr bool value = true; }; + template struct is_write_method > > > { static constexpr bool value = true; }; + template struct is_write_method > > > { static constexpr bool value = true; }; + template struct is_write_method > > > { static constexpr bool value = true; }; + template struct is_write_method > > > { static constexpr bool value = true; }; + template struct is_write_method > > > { static constexpr bool value = true; }; + template struct is_write_method > > > { static constexpr bool value = true; }; + template struct is_write_method > > > { static constexpr bool value = true; }; + template struct is_write_method > > > { static constexpr bool value = true; }; + template struct is_write_method > > > { static constexpr bool value = true; }; + template struct is_write_method > > > { static constexpr bool value = true; }; + template struct is_write_method > > > { static constexpr bool value = true; }; template struct is_write_method > > > { static constexpr bool value = true; }; // Invoking write callbacks template static std::enable_if_t::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t mem_mask) { return cb(space, offset, data, mem_mask); } - template static std::enable_if_t::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t mem_mask) { return cb(space, data, offset); } + template static std::enable_if_t::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t mem_mask) { return cb(space, offset, data); } template static std::enable_if_t::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t mem_mask) { return cb(offset, data, mem_mask); } template static std::enable_if_t::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t mem_mask) { return cb(offset, data); } template static std::enable_if_t::value> invoke_write(T const &cb, address_space &space, offs_t &offset, Input data, std::make_unsigned_t mem_mask) { return cb(space, data); } @@ -400,6 +439,18 @@ protected: template struct delegate_traits { using input_t = u16; static constexpr u16 default_mask = ~u16(0); }; template struct delegate_traits { using input_t = u32; static constexpr u32 default_mask = ~u32(0); }; template struct delegate_traits { using input_t = u64; static constexpr u64 default_mask = ~u64(0); }; + template struct delegate_traits { using input_t = u8; static constexpr u8 default_mask = ~u8(0); }; + template struct delegate_traits { using input_t = u16; static constexpr u16 default_mask = ~u16(0); }; + template struct delegate_traits { using input_t = u32; static constexpr u32 default_mask = ~u32(0); }; + template struct delegate_traits { using input_t = u64; static constexpr u64 default_mask = ~u64(0); }; + template struct delegate_traits { using input_t = u8; static constexpr u8 default_mask = ~u8(0); }; + template struct delegate_traits { using input_t = u16; static constexpr u16 default_mask = ~u16(0); }; + template struct delegate_traits { using input_t = u32; static constexpr u32 default_mask = ~u32(0); }; + template struct delegate_traits { using input_t = u64; static constexpr u64 default_mask = ~u64(0); }; + template struct delegate_traits { using input_t = u8; static constexpr u8 default_mask = ~u8(0); }; + template struct delegate_traits { using input_t = u16; static constexpr u16 default_mask = ~u16(0); }; + template struct delegate_traits { using input_t = u32; static constexpr u32 default_mask = ~u32(0); }; + template struct delegate_traits { using input_t = u64; static constexpr u64 default_mask = ~u64(0); }; template struct delegate_traits { 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; extern template class devcb_read8::delegate_builder; extern template class devcb_read8::delegate_builder; extern template class devcb_read8::delegate_builder; +extern template class devcb_read8::delegate_builder; +extern template class devcb_read8::delegate_builder; +extern template class devcb_read8::delegate_builder; +extern template class devcb_read8::delegate_builder; +extern template class devcb_read8::delegate_builder; +extern template class devcb_read8::delegate_builder; +extern template class devcb_read8::delegate_builder; +extern template class devcb_read8::delegate_builder; +extern template class devcb_read8::delegate_builder; +extern template class devcb_read8::delegate_builder; +extern template class devcb_read8::delegate_builder; +extern template class devcb_read8::delegate_builder; extern template class devcb_read8::delegate_builder; extern template class devcb_read16::delegate_builder; extern template class devcb_read16::delegate_builder; extern template class devcb_read16::delegate_builder; extern template class devcb_read16::delegate_builder; +extern template class devcb_read16::delegate_builder; +extern template class devcb_read16::delegate_builder; +extern template class devcb_read16::delegate_builder; +extern template class devcb_read16::delegate_builder; +extern template class devcb_read16::delegate_builder; +extern template class devcb_read16::delegate_builder; +extern template class devcb_read16::delegate_builder; +extern template class devcb_read16::delegate_builder; +extern template class devcb_read16::delegate_builder; +extern template class devcb_read16::delegate_builder; +extern template class devcb_read16::delegate_builder; +extern template class devcb_read16::delegate_builder; extern template class devcb_read16::delegate_builder; extern template class devcb_read32::delegate_builder; extern template class devcb_read32::delegate_builder; extern template class devcb_read32::delegate_builder; extern template class devcb_read32::delegate_builder; +extern template class devcb_read32::delegate_builder; +extern template class devcb_read32::delegate_builder; +extern template class devcb_read32::delegate_builder; +extern template class devcb_read32::delegate_builder; +extern template class devcb_read32::delegate_builder; +extern template class devcb_read32::delegate_builder; +extern template class devcb_read32::delegate_builder; +extern template class devcb_read32::delegate_builder; +extern template class devcb_read32::delegate_builder; +extern template class devcb_read32::delegate_builder; +extern template class devcb_read32::delegate_builder; +extern template class devcb_read32::delegate_builder; extern template class devcb_read32::delegate_builder; extern template class devcb_read64::delegate_builder; extern template class devcb_read64::delegate_builder; extern template class devcb_read64::delegate_builder; extern template class devcb_read64::delegate_builder; +extern template class devcb_read64::delegate_builder; +extern template class devcb_read64::delegate_builder; +extern template class devcb_read64::delegate_builder; +extern template class devcb_read64::delegate_builder; +extern template class devcb_read64::delegate_builder; +extern template class devcb_read64::delegate_builder; +extern template class devcb_read64::delegate_builder; +extern template class devcb_read64::delegate_builder; +extern template class devcb_read64::delegate_builder; +extern template class devcb_read64::delegate_builder; +extern template class devcb_read64::delegate_builder; +extern template class devcb_read64::delegate_builder; extern template class devcb_read64::delegate_builder; extern template class devcb_read_line::delegate_builder; extern template class devcb_read_line::delegate_builder; extern template class devcb_read_line::delegate_builder; extern template class devcb_read_line::delegate_builder; +extern template class devcb_read_line::delegate_builder; +extern template class devcb_read_line::delegate_builder; +extern template class devcb_read_line::delegate_builder; +extern template class devcb_read_line::delegate_builder; +extern template class devcb_read_line::delegate_builder; +extern template class devcb_read_line::delegate_builder; +extern template class devcb_read_line::delegate_builder; +extern template class devcb_read_line::delegate_builder; +extern template class devcb_read_line::delegate_builder; +extern template class devcb_read_line::delegate_builder; +extern template class devcb_read_line::delegate_builder; +extern template class devcb_read_line::delegate_builder; extern template class devcb_read_line::delegate_builder; extern template class devcb_read8::creator_impl >; extern template class devcb_read8::creator_impl >; extern template class devcb_read8::creator_impl >; extern template class devcb_read8::creator_impl >; +extern template class devcb_read8::creator_impl >; +extern template class devcb_read8::creator_impl >; +extern template class devcb_read8::creator_impl >; +extern template class devcb_read8::creator_impl >; +extern template class devcb_read8::creator_impl >; +extern template class devcb_read8::creator_impl >; +extern template class devcb_read8::creator_impl >; +extern template class devcb_read8::creator_impl >; +extern template class devcb_read8::creator_impl >; +extern template class devcb_read8::creator_impl >; +extern template class devcb_read8::creator_impl >; +extern template class devcb_read8::creator_impl >; extern template class devcb_read8::creator_impl >; extern template class devcb_read8::creator_impl; @@ -2566,6 +2689,18 @@ extern template class devcb_read16::creator_impl >; extern template class devcb_read16::creator_impl >; extern template class devcb_read16::creator_impl >; +extern template class devcb_read16::creator_impl >; +extern template class devcb_read16::creator_impl >; +extern template class devcb_read16::creator_impl >; +extern template class devcb_read16::creator_impl >; +extern template class devcb_read16::creator_impl >; +extern template class devcb_read16::creator_impl >; +extern template class devcb_read16::creator_impl >; +extern template class devcb_read16::creator_impl >; +extern template class devcb_read16::creator_impl >; +extern template class devcb_read16::creator_impl >; +extern template class devcb_read16::creator_impl >; +extern template class devcb_read16::creator_impl >; extern template class devcb_read16::creator_impl >; extern template class devcb_read16::creator_impl; @@ -2573,6 +2708,18 @@ extern template class devcb_read32::creator_impl >; extern template class devcb_read32::creator_impl >; extern template class devcb_read32::creator_impl >; +extern template class devcb_read32::creator_impl >; +extern template class devcb_read32::creator_impl >; +extern template class devcb_read32::creator_impl >; +extern template class devcb_read32::creator_impl >; +extern template class devcb_read32::creator_impl >; +extern template class devcb_read32::creator_impl >; +extern template class devcb_read32::creator_impl >; +extern template class devcb_read32::creator_impl >; +extern template class devcb_read32::creator_impl >; +extern template class devcb_read32::creator_impl >; +extern template class devcb_read32::creator_impl >; +extern template class devcb_read32::creator_impl >; extern template class devcb_read32::creator_impl >; extern template class devcb_read32::creator_impl; @@ -2580,6 +2727,18 @@ extern template class devcb_read64::creator_impl >; extern template class devcb_read64::creator_impl >; extern template class devcb_read64::creator_impl >; +extern template class devcb_read64::creator_impl >; +extern template class devcb_read64::creator_impl >; +extern template class devcb_read64::creator_impl >; +extern template class devcb_read64::creator_impl >; +extern template class devcb_read64::creator_impl >; +extern template class devcb_read64::creator_impl >; +extern template class devcb_read64::creator_impl >; +extern template class devcb_read64::creator_impl >; +extern template class devcb_read64::creator_impl >; +extern template class devcb_read64::creator_impl >; +extern template class devcb_read64::creator_impl >; +extern template class devcb_read64::creator_impl >; extern template class devcb_read64::creator_impl >; extern template class devcb_read64::creator_impl; @@ -2587,6 +2746,18 @@ extern template class devcb_read_line::creator_impl >; extern template class devcb_read_line::creator_impl >; extern template class devcb_read_line::creator_impl >; +extern template class devcb_read_line::creator_impl >; +extern template class devcb_read_line::creator_impl >; +extern template class devcb_read_line::creator_impl >; +extern template class devcb_read_line::creator_impl >; +extern template class devcb_read_line::creator_impl >; +extern template class devcb_read_line::creator_impl >; +extern template class devcb_read_line::creator_impl >; +extern template class devcb_read_line::creator_impl >; +extern template class devcb_read_line::creator_impl >; +extern template class devcb_read_line::creator_impl >; +extern template class devcb_read_line::creator_impl >; +extern template class devcb_read_line::creator_impl >; extern template class devcb_read_line::creator_impl >; extern template class devcb_read_line::creator_impl; @@ -2600,36 +2771,108 @@ extern template class devcb_write8::delegate_builder; extern template class devcb_write8::delegate_builder; extern template class devcb_write8::delegate_builder; extern template class devcb_write8::delegate_builder; +extern template class devcb_write8::delegate_builder; +extern template class devcb_write8::delegate_builder; +extern template class devcb_write8::delegate_builder; +extern template class devcb_write8::delegate_builder; +extern template class devcb_write8::delegate_builder; +extern template class devcb_write8::delegate_builder; +extern template class devcb_write8::delegate_builder; +extern template class devcb_write8::delegate_builder; +extern template class devcb_write8::delegate_builder; +extern template class devcb_write8::delegate_builder; +extern template class devcb_write8::delegate_builder; +extern template class devcb_write8::delegate_builder; extern template class devcb_write8::delegate_builder; extern template class devcb_write16::delegate_builder; extern template class devcb_write16::delegate_builder; extern template class devcb_write16::delegate_builder; extern template class devcb_write16::delegate_builder; +extern template class devcb_write16::delegate_builder; +extern template class devcb_write16::delegate_builder; +extern template class devcb_write16::delegate_builder; +extern template class devcb_write16::delegate_builder; +extern template class devcb_write16::delegate_builder; +extern template class devcb_write16::delegate_builder; +extern template class devcb_write16::delegate_builder; +extern template class devcb_write16::delegate_builder; +extern template class devcb_write16::delegate_builder; +extern template class devcb_write16::delegate_builder; +extern template class devcb_write16::delegate_builder; +extern template class devcb_write16::delegate_builder; extern template class devcb_write16::delegate_builder; extern template class devcb_write32::delegate_builder; extern template class devcb_write32::delegate_builder; extern template class devcb_write32::delegate_builder; extern template class devcb_write32::delegate_builder; +extern template class devcb_write32::delegate_builder; +extern template class devcb_write32::delegate_builder; +extern template class devcb_write32::delegate_builder; +extern template class devcb_write32::delegate_builder; +extern template class devcb_write32::delegate_builder; +extern template class devcb_write32::delegate_builder; +extern template class devcb_write32::delegate_builder; +extern template class devcb_write32::delegate_builder; +extern template class devcb_write32::delegate_builder; +extern template class devcb_write32::delegate_builder; +extern template class devcb_write32::delegate_builder; +extern template class devcb_write32::delegate_builder; extern template class devcb_write32::delegate_builder; extern template class devcb_write64::delegate_builder; extern template class devcb_write64::delegate_builder; extern template class devcb_write64::delegate_builder; extern template class devcb_write64::delegate_builder; +extern template class devcb_write64::delegate_builder; +extern template class devcb_write64::delegate_builder; +extern template class devcb_write64::delegate_builder; +extern template class devcb_write64::delegate_builder; +extern template class devcb_write64::delegate_builder; +extern template class devcb_write64::delegate_builder; +extern template class devcb_write64::delegate_builder; +extern template class devcb_write64::delegate_builder; +extern template class devcb_write64::delegate_builder; +extern template class devcb_write64::delegate_builder; +extern template class devcb_write64::delegate_builder; +extern template class devcb_write64::delegate_builder; extern template class devcb_write64::delegate_builder; extern template class devcb_write_line::delegate_builder; extern template class devcb_write_line::delegate_builder; extern template class devcb_write_line::delegate_builder; extern template class devcb_write_line::delegate_builder; +extern template class devcb_write_line::delegate_builder; +extern template class devcb_write_line::delegate_builder; +extern template class devcb_write_line::delegate_builder; +extern template class devcb_write_line::delegate_builder; +extern template class devcb_write_line::delegate_builder; +extern template class devcb_write_line::delegate_builder; +extern template class devcb_write_line::delegate_builder; +extern template class devcb_write_line::delegate_builder; +extern template class devcb_write_line::delegate_builder; +extern template class devcb_write_line::delegate_builder; +extern template class devcb_write_line::delegate_builder; +extern template class devcb_write_line::delegate_builder; extern template class devcb_write_line::delegate_builder; extern template class devcb_write8::creator_impl >; extern template class devcb_write8::creator_impl >; extern template class devcb_write8::creator_impl >; extern template class devcb_write8::creator_impl >; +extern template class devcb_write8::creator_impl >; +extern template class devcb_write8::creator_impl >; +extern template class devcb_write8::creator_impl >; +extern template class devcb_write8::creator_impl >; +extern template class devcb_write8::creator_impl >; +extern template class devcb_write8::creator_impl >; +extern template class devcb_write8::creator_impl >; +extern template class devcb_write8::creator_impl >; +extern template class devcb_write8::creator_impl >; +extern template class devcb_write8::creator_impl >; +extern template class devcb_write8::creator_impl >; +extern template class devcb_write8::creator_impl >; extern template class devcb_write8::creator_impl >; extern template class devcb_write8::creator_impl; extern template class devcb_write8::creator_impl; @@ -2642,6 +2885,18 @@ extern template class devcb_write16::creator_impl >; extern template class devcb_write16::creator_impl >; extern template class devcb_write16::creator_impl >; +extern template class devcb_write16::creator_impl >; +extern template class devcb_write16::creator_impl >; +extern template class devcb_write16::creator_impl >; +extern template class devcb_write16::creator_impl >; +extern template class devcb_write16::creator_impl >; +extern template class devcb_write16::creator_impl >; +extern template class devcb_write16::creator_impl >; +extern template class devcb_write16::creator_impl >; +extern template class devcb_write16::creator_impl >; +extern template class devcb_write16::creator_impl >; +extern template class devcb_write16::creator_impl >; +extern template class devcb_write16::creator_impl >; extern template class devcb_write16::creator_impl >; extern template class devcb_write16::creator_impl; extern template class devcb_write16::creator_impl; @@ -2654,6 +2909,18 @@ extern template class devcb_write32::creator_impl >; extern template class devcb_write32::creator_impl >; extern template class devcb_write32::creator_impl >; +extern template class devcb_write32::creator_impl >; +extern template class devcb_write32::creator_impl >; +extern template class devcb_write32::creator_impl >; +extern template class devcb_write32::creator_impl >; +extern template class devcb_write32::creator_impl >; +extern template class devcb_write32::creator_impl >; +extern template class devcb_write32::creator_impl >; +extern template class devcb_write32::creator_impl >; +extern template class devcb_write32::creator_impl >; +extern template class devcb_write32::creator_impl >; +extern template class devcb_write32::creator_impl >; +extern template class devcb_write32::creator_impl >; extern template class devcb_write32::creator_impl >; extern template class devcb_write32::creator_impl; extern template class devcb_write32::creator_impl; @@ -2666,6 +2933,18 @@ extern template class devcb_write64::creator_impl >; extern template class devcb_write64::creator_impl >; extern template class devcb_write64::creator_impl >; +extern template class devcb_write64::creator_impl >; +extern template class devcb_write64::creator_impl >; +extern template class devcb_write64::creator_impl >; +extern template class devcb_write64::creator_impl >; +extern template class devcb_write64::creator_impl >; +extern template class devcb_write64::creator_impl >; +extern template class devcb_write64::creator_impl >; +extern template class devcb_write64::creator_impl >; +extern template class devcb_write64::creator_impl >; +extern template class devcb_write64::creator_impl >; +extern template class devcb_write64::creator_impl >; +extern template class devcb_write64::creator_impl >; extern template class devcb_write64::creator_impl >; extern template class devcb_write64::creator_impl; extern template class devcb_write64::creator_impl; @@ -2678,6 +2957,18 @@ extern template class devcb_write_line::creator_impl >; extern template class devcb_write_line::creator_impl >; extern template class devcb_write_line::creator_impl >; +extern template class devcb_write_line::creator_impl >; +extern template class devcb_write_line::creator_impl >; +extern template class devcb_write_line::creator_impl >; +extern template class devcb_write_line::creator_impl >; +extern template class devcb_write_line::creator_impl >; +extern template class devcb_write_line::creator_impl >; +extern template class devcb_write_line::creator_impl >; +extern template class devcb_write_line::creator_impl >; +extern template class devcb_write_line::creator_impl >; +extern template class devcb_write_line::creator_impl >; +extern template class devcb_write_line::creator_impl >; +extern template class devcb_write_line::creator_impl >; extern template class devcb_write_line::creator_impl >; extern template class devcb_write_line::creator_impl; extern template class devcb_write_line::creator_impl; 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 void address_space_speci install_readwrite_handler_helper<0>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler); } +template void address_space_specific::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 void address_space_specific::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 void address_space_specific::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 void address_space_specific::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 void address_space_speci install_readwrite_handler_helper<0>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler); } +template void address_space_specific::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 void address_space_specific::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 void address_space_specific::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 void address_space_specific::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 void address_space_speci install_readwrite_handler_helper<1>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler); } +template void address_space_specific::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 void address_space_specific::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 void address_space_specific::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 void address_space_specific::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 void address_space_speci install_readwrite_handler_helper<1>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler); } +template void address_space_specific::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 void address_space_specific::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 void address_space_specific::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 void address_space_speci install_readwrite_handler_helper<2>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler); } +template void address_space_specific::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 void address_space_specific::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 void address_space_specific::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 void address_space_specific::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 void address_space_speci install_readwrite_handler_helper<2>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler); } +template void address_space_specific::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 void address_space_specific::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 void address_space_specific::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 void address_space_specific::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 void address_space_speci install_readwrite_handler_helper<3>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler); } +template void address_space_specific::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 void address_space_specific::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 void address_space_specific::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 void address_space_specific::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 void address_space_speci install_readwrite_handler_helper<3>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, rhandler, whandler); } +template void address_space_specific::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 void address_space_specific::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 void address_space_specific::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 void address_space_specific::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; using read32_delegate = device_delegate; using read64_delegate = device_delegate; +using read8m_delegate = device_delegate; +using read16m_delegate = device_delegate; +using read32m_delegate = device_delegate; +using read64m_delegate = device_delegate; + using read8s_delegate = device_delegate; using read16s_delegate = device_delegate; using read32s_delegate = device_delegate; @@ -104,6 +109,11 @@ using read16sm_delegate = device_delegate; using read32sm_delegate = device_delegate; using read64sm_delegate = device_delegate; +using read8mo_delegate = device_delegate; +using read16mo_delegate = device_delegate; +using read32mo_delegate = device_delegate; +using read64mo_delegate = device_delegate; + using read8smo_delegate = device_delegate; using read16smo_delegate = device_delegate; using read32smo_delegate = device_delegate; @@ -118,6 +128,11 @@ using write16_delegate = device_delegate; using write64_delegate = device_delegate; +using write8m_delegate = device_delegate; +using write16m_delegate = device_delegate; +using write32m_delegate = device_delegate; +using write64m_delegate = device_delegate; + using write8s_delegate = device_delegate; using write16s_delegate = device_delegate; using write32s_delegate = device_delegate; @@ -128,6 +143,11 @@ using write16sm_delegate = device_delegate; using write32sm_delegate = device_delegate; using write64sm_delegate = device_delegate; +using write8mo_delegate = device_delegate; +using write16mo_delegate = device_delegate; +using write32mo_delegate = device_delegate; +using write64mo_delegate = device_delegate; + using write8smo_delegate = device_delegate; using write16smo_delegate = device_delegate; using write32smo_delegate = device_delegate; @@ -176,6 +196,33 @@ inline write64_delegate make_delegate(T &&func, const char *name, const char *ta { return write64_delegate(func, name, tag, obj); } +template +inline read8m_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) +{ return read8m_delegate(func, name, tag, obj); } +template +inline read16m_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) +{ return read16m_delegate(func, name, tag, obj); } +template +inline read32m_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) +{ return read32m_delegate(func, name, tag, obj); } +template +inline read64m_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) +{ return read64m_delegate(func, name, tag, obj); } + +template +inline write8m_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) +{ return write8m_delegate(func, name, tag, obj); } +template +inline write16m_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) +{ return write16m_delegate(func, name, tag, obj); } +template +inline write32m_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) +{ return write32m_delegate(func, name, tag, obj); } +template +inline write64m_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) +{ return write64m_delegate(func, name, tag, obj); } + + template inline read8s_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) { return read8s_delegate(func, name, tag, obj); } @@ -230,6 +277,33 @@ inline write64sm_delegate make_delegate(T &&func, const char *name, const char * { return write64sm_delegate(func, name, tag, obj); } +template +inline read8mo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) +{ return read8mo_delegate(func, name, tag, obj); } +template +inline read16mo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) +{ return read16mo_delegate(func, name, tag, obj); } +template +inline read32mo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) +{ return read32mo_delegate(func, name, tag, obj); } +template +inline read64mo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) +{ return read64mo_delegate(func, name, tag, obj); } + +template +inline write8mo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) +{ return write8mo_delegate(func, name, tag, obj); } +template +inline write16mo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) +{ return write16mo_delegate(func, name, tag, obj); } +template +inline write32mo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) +{ return write32mo_delegate(func, name, tag, obj); } +template +inline write64mo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) +{ return write64mo_delegate(func, name, tag, obj); } + + template inline read8smo_delegate make_delegate(T &&func, const char *name, const char *tag, rw_device_class_t > *obj) { return read8smo_delegate(func, name, tag, obj); } @@ -262,6 +336,10 @@ template inline std::enable_if_t::value, read8_delegate> make_lr8_delegate(L l, const char *name) { return read8_delegate(l, name); } +template +inline std::enable_if_t::value, read8m_delegate> make_lr8_delegate(L l, const char *name) +{ return read8m_delegate(l, name); } + template inline std::enable_if_t::value, read8s_delegate> make_lr8_delegate(L l, const char *name) { return read8s_delegate(l, name); } @@ -270,6 +348,10 @@ template inline std::enable_if_t::value, read8sm_delegate> make_lr8_delegate(L l, const char *name) { return read8sm_delegate(l, name); } +template +inline std::enable_if_t::value, read8mo_delegate> make_lr8_delegate(L l, const char *name) +{ return read8mo_delegate(l, name); } + template inline std::enable_if_t::value, read8smo_delegate> make_lr8_delegate(L l, const char *name) { return read8smo_delegate(l, name); } @@ -278,6 +360,10 @@ template inline std::enable_if_t::value, read16_delegate> make_lr16_delegate(L l, const char *name) { return read16_delegate(l, name); } +template +inline std::enable_if_t::value, read16m_delegate> make_lr16_delegate(L l, const char *name) +{ return read16m_delegate(l, name); } + template inline std::enable_if_t::value, read16s_delegate> make_lr16_delegate(L l, const char *name) { return read16s_delegate(l, name); } @@ -286,6 +372,10 @@ template inline std::enable_if_t::value, read16sm_delegate> make_lr16_delegate(L l, const char *name) { return read16sm_delegate(l, name); } +template +inline std::enable_if_t::value, read16mo_delegate> make_lr16_delegate(L l, const char *name) +{ return read16mo_delegate(l, name); } + template inline std::enable_if_t::value, read16smo_delegate> make_lr16_delegate(L l, const char *name) { return read16smo_delegate(l, name); } @@ -294,6 +384,10 @@ template inline std::enable_if_t::value, read32_delegate> make_lr32_delegate(L l, const char *name) { return read32_delegate(l, name); } +template +inline std::enable_if_t::value, read32m_delegate> make_lr32_delegate(L l, const char *name) +{ return read32m_delegate(l, name); } + template inline std::enable_if_t::value, read32s_delegate> make_lr32_delegate(L l, const char *name) { return read32s_delegate(l, name); } @@ -302,6 +396,10 @@ template inline std::enable_if_t::value, read32sm_delegate> make_lr32_delegate(L l, const char *name) { return read32sm_delegate(l, name); } +template +inline std::enable_if_t::value, read32mo_delegate> make_lr32_delegate(L l, const char *name) +{ return read32mo_delegate(l, name); } + template inline std::enable_if_t::value, read32smo_delegate> make_lr32_delegate(L l, const char *name) { return read32smo_delegate(l, name); } @@ -310,6 +408,10 @@ template inline std::enable_if_t::value, read64_delegate> make_lr64_delegate(L l, const char *name) { return read64_delegate(l, name); } +template +inline std::enable_if_t::value, read64m_delegate> make_lr64_delegate(L l, const char *name) +{ return read64m_delegate(l, name); } + template inline std::enable_if_t::value, read64s_delegate> make_lr64_delegate(L l, const char *name) { return read64s_delegate(l, name); } @@ -318,6 +420,10 @@ template inline std::enable_if_t::value, read64sm_delegate> make_lr64_delegate(L l, const char *name) { return read64sm_delegate(l, name); } +template +inline std::enable_if_t::value, read64mo_delegate> make_lr64_delegate(L l, const char *name) +{ return read64mo_delegate(l, name); } + template inline std::enable_if_t::value, read64smo_delegate> make_lr64_delegate(L l, const char *name) { return read64smo_delegate(l, name); } @@ -327,6 +433,10 @@ template inline std::enable_if_t::value, write8_delegate> make_lw8_delegate(L l, const char *name) { return write8_delegate(l, name); } +template +inline std::enable_if_t::value, write8m_delegate> make_lw8_delegate(L l, const char *name) +{ return write8m_delegate(l, name); } + template inline std::enable_if_t::value, write8s_delegate> make_lw8_delegate(L l, const char *name) { return write8s_delegate(l, name); } @@ -335,6 +445,10 @@ template inline std::enable_if_t::value, write8sm_delegate> make_lw8_delegate(L l, const char *name) { return write8sm_delegate(l, name); } +template +inline std::enable_if_t::value, write8mo_delegate> make_lw8_delegate(L l, const char *name) +{ return write8mo_delegate(l, name); } + template inline std::enable_if_t::value, write8smo_delegate> make_lw8_delegate(L l, const char *name) { return write8smo_delegate(l, name); } @@ -343,6 +457,10 @@ template inline std::enable_if_t::value, write16_delegate> make_lw16_delegate(L l, const char *name) { return write16_delegate(l, name); } +template +inline std::enable_if_t::value, write16m_delegate> make_lw16_delegate(L l, const char *name) +{ return write16m_delegate(l, name); } + template inline std::enable_if_t::value, write16s_delegate> make_lw16_delegate(L l, const char *name) { return write16s_delegate(l, name); } @@ -351,6 +469,10 @@ template inline std::enable_if_t::value, write16sm_delegate> make_lw16_delegate(L l, const char *name) { return write16sm_delegate(l, name); } +template +inline std::enable_if_t::value, write16mo_delegate> make_lw16_delegate(L l, const char *name) +{ return write16mo_delegate(l, name); } + template inline std::enable_if_t::value, write16smo_delegate> make_lw16_delegate(L l, const char *name) { return write16smo_delegate(l, name); } @@ -359,6 +481,10 @@ template inline std::enable_if_t::value, write32_delegate> make_lw32_delegate(L l, const char *name) { return write32_delegate(l, name); } +template +inline std::enable_if_t::value, write32m_delegate> make_lw32_delegate(L l, const char *name) +{ return write32m_delegate(l, name); } + template inline std::enable_if_t::value, write32s_delegate> make_lw32_delegate(L l, const char *name) { return write32s_delegate(l, name); } @@ -367,6 +493,10 @@ template inline std::enable_if_t::value, write32sm_delegate> make_lw32_delegate(L l, const char *name) { return write32sm_delegate(l, name); } +template +inline std::enable_if_t::value, write32mo_delegate> make_lw32_delegate(L l, const char *name) +{ return write32mo_delegate(l, name); } + template inline std::enable_if_t::value, write32smo_delegate> make_lw32_delegate(L l, const char *name) { return write32smo_delegate(l, name); } @@ -375,6 +505,10 @@ template inline std::enable_if_t::value, write64_delegate> make_lw64_delegate(L l, const char *name) { return write64_delegate(l, name); } +template +inline std::enable_if_t::value, write64m_delegate> make_lw64_delegate(L l, const char *name) +{ return write64m_delegate(l, name); } + template inline std::enable_if_t::value, write64s_delegate> make_lw64_delegate(L l, const char *name) { return write64s_delegate(l, name); } @@ -383,6 +517,10 @@ template inline std::enable_if_t::value, write64sm_delegate> make_lw64_delegate(L l, const char *name) { return write64sm_delegate(l, name); } +template +inline std::enable_if_t::value, write64mo_delegate> make_lw64_delegate(L l, const char *name) +{ return write64mo_delegate(l, name); } + template inline std::enable_if_t::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 @@ -15,6 +15,16 @@ template template> (Width + AddrShift), mem_mask); } +template template + std::enable_if_t::value || + std::is_same::value || + std::is_same::value || + std::is_same::value, + typename emu::detail::handler_entry_size::uX> handler_entry_read_delegate::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 template std::enable_if_t::value || std::is_same::value || @@ -35,6 +45,16 @@ template template> (Width + AddrShift)); } +template template + std::enable_if_t::value || + std::is_same::value || + std::is_same::value || + std::is_same::value, + typename emu::detail::handler_entry_size::uX> handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) +{ + return m_delegate(*inh::m_space); +} + template template std::enable_if_t::value || std::is_same::value || @@ -65,6 +85,16 @@ template template> (Width + AddrShift), data, mem_mask); } +template template + std::enable_if_t::value || + std::is_same::value || + std::is_same::value || + std::is_same::value, + void> handler_entry_write_delegate::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 template std::enable_if_t::value || std::is_same::value || @@ -85,6 +115,16 @@ template template> (Width + AddrShift), data); } +template template + std::enable_if_t::value || + std::is_same::value || + std::is_same::value || + std::is_same::value, + void> handler_entry_write_delegate::write_impl(offs_t offset, uX data, uX mem_mask) +{ + m_delegate(*inh::m_space, data); +} + template template std::enable_if_t::value || std::is_same::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 @@ -28,6 +28,13 @@ private: std::is_same::value, uX> read_impl(offs_t offset, uX mem_mask); + template + std::enable_if_t::value || + std::is_same::value || + std::is_same::value || + std::is_same::value, + uX> read_impl(offs_t offset, uX mem_mask); + template std::enable_if_t::value || std::is_same::value || @@ -42,6 +49,13 @@ private: std::is_same::value, uX> read_impl(offs_t offset, uX mem_mask); + template + std::enable_if_t::value || + std::is_same::value || + std::is_same::value || + std::is_same::value, + uX> read_impl(offs_t offset, uX mem_mask); + template std::enable_if_t::value || std::is_same::value || @@ -73,6 +87,13 @@ private: std::is_same::value, void> write_impl(offs_t offset, uX data, uX mem_mask); + template + std::enable_if_t::value || + std::is_same::value || + std::is_same::value || + std::is_same::value, + void> write_impl(offs_t offset, uX data, uX mem_mask); + template std::enable_if_t::value || std::is_same::value || @@ -87,6 +108,13 @@ private: std::is_same::value, void> write_impl(offs_t offset, uX data, uX mem_mask); + template + std::enable_if_t::value || + std::is_same::value || + std::is_same::value || + std::is_same::value, + void> write_impl(offs_t offset, uX data, uX mem_mask); + template std::enable_if_t::value || std::is_same::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;