From c4a9a22eb192eacdce350549c0e5523a7994ce83 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Tue, 11 Apr 2023 22:53:35 +1000 Subject: Encourage use of read/write delegate creator helpers (demo on Game Boy cartridges). (#11091) This makes it simpler to install read-write handlers, as you don't need to think about the "smo" suffixes. --- src/devices/bus/gameboy/camera.cpp | 14 +- src/devices/bus/gameboy/gbck003.cpp | 8 +- src/devices/bus/gameboy/huc1.cpp | 10 +- src/devices/bus/gameboy/huc3.cpp | 18 +-- src/devices/bus/gameboy/liebao.cpp | 8 +- src/devices/bus/gameboy/mbc.cpp | 52 +++---- src/devices/bus/gameboy/mbc2.cpp | 8 +- src/devices/bus/gameboy/mbc3.cpp | 12 +- src/devices/bus/gameboy/mbc6.cpp | 22 +-- src/devices/bus/gameboy/mbc7.cpp | 20 +-- src/devices/bus/gameboy/mmm01.cpp | 8 +- src/devices/bus/gameboy/ntnew.cpp | 6 +- src/devices/bus/gameboy/rom.cpp | 40 +++--- src/devices/bus/gameboy/slmulti.cpp | 12 +- src/devices/bus/gameboy/tama5.cpp | 6 +- src/emu/addrmap.h | 34 ++--- src/emu/emumem.h | 265 ++++++++++++++++-------------------- src/emu/emumem_aspace.cpp | 168 +---------------------- src/emu/emumem_hea.h | 4 +- src/emu/emumem_hedp.cpp | 24 ++-- src/emu/emumem_hedp.h | 8 +- src/emu/emumem_hedr.h | 2 +- src/emu/emumem_hedr.ipp | 6 +- src/emu/emumem_hedw.h | 2 +- src/emu/emumem_hem.cpp | 12 +- src/emu/emumem_hem.h | 8 +- src/emu/emumem_hep.h | 4 +- src/emu/emumem_het.cpp | 6 +- src/emu/emumem_het.h | 4 +- src/emu/emumem_heu.cpp | 10 +- src/emu/emumem_heu.h | 4 +- src/emu/emumem_heun.cpp | 12 +- src/emu/emumem_heun.h | 8 +- src/emu/emumem_hws.cpp | 18 +-- src/emu/emumem_hws.h | 12 +- src/emu/emumem_mud.cpp | 4 +- src/emu/emumem_mud.h | 2 +- src/emu/emumem_mview.cpp | 171 +---------------------- src/mame/apple/bandit.cpp | 20 +-- 39 files changed, 352 insertions(+), 700 deletions(-) diff --git a/src/devices/bus/gameboy/camera.cpp b/src/devices/bus/gameboy/camera.cpp index baa03572af4..8325f9df943 100644 --- a/src/devices/bus/gameboy/camera.cpp +++ b/src/devices/bus/gameboy/camera.cpp @@ -328,19 +328,19 @@ std::error_condition camera_device::load(std::string &message) // install memory map control handlers cart_space()->install_write_handler( 0x0000, 0x1fff, - write8smo_delegate(*this, FUNC(camera_device::enable_ram))); + emu::rw_delegate(*this, FUNC(camera_device::enable_ram))); cart_space()->install_write_handler( 0x2000, 0x3fff, - write8smo_delegate(*this, FUNC(camera_device::bank_switch_rom))); + emu::rw_delegate(*this, FUNC(camera_device::bank_switch_rom))); cart_space()->install_write_handler( 0x4000, 0x5fff, - write8smo_delegate(*this, FUNC(camera_device::bank_switch_ram))); + emu::rw_delegate(*this, FUNC(camera_device::bank_switch_ram))); // put RAM through trampolines so it can be locked when necessary cart_space()->install_readwrite_handler( 0xa000, 0xbfff, - read8sm_delegate(*this, FUNC(camera_device::read_ram)), - write8sm_delegate(*this, FUNC(camera_device::write_ram))); + emu::rw_delegate(*this, FUNC(camera_device::read_ram)), + emu::rw_delegate(*this, FUNC(camera_device::write_ram))); // camera control overlays cartridge RAM cart_space()->install_view( @@ -348,10 +348,10 @@ std::error_condition camera_device::load(std::string &message) m_view_cam); m_view_cam[0].install_read_handler( 0xa000, 0xa07f, 0x0000, 0x1f80, 0x0000, - read8sm_delegate(*this, FUNC(camera_device::read_camera))); + emu::rw_delegate(*this, FUNC(camera_device::read_camera))); m_view_cam[0].install_write_handler( 0xa000, 0xa005, 0x0000, 0x1f80, 0x0000, - write8sm_delegate(*this, FUNC(camera_device::write_camera))); + emu::rw_delegate(*this, FUNC(camera_device::write_camera))); m_view_cam[0].install_writeonly( 0xa006, 0xa035, 0x1f80, &m_threshold[0][0][0]); diff --git a/src/devices/bus/gameboy/gbck003.cpp b/src/devices/bus/gameboy/gbck003.cpp index 7142d4dd6e5..515331b1c69 100644 --- a/src/devices/bus/gameboy/gbck003.cpp +++ b/src/devices/bus/gameboy/gbck003.cpp @@ -125,16 +125,16 @@ std::error_condition gbck003_device::load(std::string &message) // install bank switch handlers cart_space()->install_write_handler( 0x2000, 0x3fff, - write8smo_delegate(*this, FUNC(gbck003_device::bank_switch_inner))); + emu::rw_delegate(*this, FUNC(gbck003_device::bank_switch_inner))); cart_space()->install_write_handler( 0x7b00, 0x7b00, - write8smo_delegate(*this, FUNC(gbck003_device::bank_switch_outer))); + emu::rw_delegate(*this, FUNC(gbck003_device::bank_switch_outer))); cart_space()->install_write_handler( 0x7b01, 0x7b01, - write8smo_delegate(*this, FUNC(gbck003_device::bank_set_mux))); + emu::rw_delegate(*this, FUNC(gbck003_device::bank_set_mux))); cart_space()->install_write_handler( 0x7b02, 0x7b02, - write8smo_delegate(*this, FUNC(gbck003_device::exit_config_mode))); + emu::rw_delegate(*this, FUNC(gbck003_device::exit_config_mode))); // set initial power-on state set_bank_rom_low(0); diff --git a/src/devices/bus/gameboy/huc1.cpp b/src/devices/bus/gameboy/huc1.cpp index 5cb100b256f..71c937cef95 100644 --- a/src/devices/bus/gameboy/huc1.cpp +++ b/src/devices/bus/gameboy/huc1.cpp @@ -106,22 +106,22 @@ std::error_condition huc1_device::load(std::string &message) // install memory controller handlers cart_space()->install_write_handler( 0x0000, 0x1fff, - write8smo_delegate(*this, FUNC(huc1_device::infrared_select))); + emu::rw_delegate(*this, FUNC(huc1_device::infrared_select))); cart_space()->install_write_handler( 0x2000, 0x3fff, - write8smo_delegate(*this, FUNC(huc1_device::bank_switch_fine))); + emu::rw_delegate(*this, FUNC(huc1_device::bank_switch_fine))); cart_space()->install_write_handler( 0x4000, 0x5fff, - write8smo_delegate(*this, FUNC(huc1_device::bank_switch_coarse))); + emu::rw_delegate(*this, FUNC(huc1_device::bank_switch_coarse))); // install infrared handlers cart_space()->install_view(0xa000, 0xbfff, m_view_ir); m_view_ir[0].install_read_handler( 0xa000, 0xbfff, - read8mo_delegate(*this, FUNC(huc1_device::read_ir))); + emu::rw_delegate(*this, FUNC(huc1_device::read_ir))); m_view_ir[0].install_write_handler( 0xa000, 0xbfff, - write8smo_delegate(*this, FUNC(huc1_device::write_ir))); + emu::rw_delegate(*this, FUNC(huc1_device::write_ir))); // all good return std::error_condition(); diff --git a/src/devices/bus/gameboy/huc3.cpp b/src/devices/bus/gameboy/huc3.cpp index 338a7615e38..99c5950fe59 100644 --- a/src/devices/bus/gameboy/huc3.cpp +++ b/src/devices/bus/gameboy/huc3.cpp @@ -314,33 +314,33 @@ std::error_condition huc3_device::load(std::string &message) // install memory controller handlers cart_space()->install_write_handler( 0x0000, 0x1fff, - write8smo_delegate(*this, FUNC(huc3_device::io_select))); + emu::rw_delegate(*this, FUNC(huc3_device::io_select))); cart_space()->install_write_handler( 0x2000, 0x3fff, - write8smo_delegate(*this, FUNC(huc3_device::bank_switch_fine))); + emu::rw_delegate(*this, FUNC(huc3_device::bank_switch_fine))); cart_space()->install_write_handler( 0x4000, 0x5fff, - write8smo_delegate(*this, FUNC(huc3_device::bank_switch_coarse))); + emu::rw_delegate(*this, FUNC(huc3_device::bank_switch_coarse))); // install I/O handlers m_view_io[2].install_write_handler( 0xa000, 0xbfff, - write8smo_delegate(*this, FUNC(huc3_device::write_command))); + emu::rw_delegate(*this, FUNC(huc3_device::write_command))); m_view_io[3].install_read_handler( 0xa000, 0xbfff, - read8mo_delegate(*this, FUNC(huc3_device::read_command))); + emu::rw_delegate(*this, FUNC(huc3_device::read_command))); m_view_io[4].install_read_handler( 0xa000, 0xbfff, - read8mo_delegate(*this, FUNC(huc3_device::read_status))); + emu::rw_delegate(*this, FUNC(huc3_device::read_status))); m_view_io[4].install_write_handler( 0xa000, 0xbfff, - write8smo_delegate(*this, FUNC(huc3_device::write_control))); + emu::rw_delegate(*this, FUNC(huc3_device::write_control))); m_view_io[5].install_read_handler( 0xa000, 0xbfff, - read8mo_delegate(*this, FUNC(huc3_device::read_ir))); + emu::rw_delegate(*this, FUNC(huc3_device::read_ir))); m_view_io[5].install_write_handler( 0xa000, 0xbfff, - write8smo_delegate(*this, FUNC(huc3_device::write_ir))); + emu::rw_delegate(*this, FUNC(huc3_device::write_ir))); // all good return std::error_condition(); diff --git a/src/devices/bus/gameboy/liebao.cpp b/src/devices/bus/gameboy/liebao.cpp index 796214ece63..7916f5fc5d0 100644 --- a/src/devices/bus/gameboy/liebao.cpp +++ b/src/devices/bus/gameboy/liebao.cpp @@ -74,16 +74,16 @@ std::error_condition liebao_device::load(std::string &message) // install handlers cart_space()->install_write_handler( 0x0000, 0x1fff, - write8sm_delegate(*this, FUNC(liebao_device::enable_ram))); + emu::rw_delegate(*this, FUNC(liebao_device::enable_ram))); cart_space()->install_write_handler( 0x2000, 0x2fff, - write8sm_delegate(*this, FUNC(liebao_device::bank_switch_rom))); + emu::rw_delegate(*this, FUNC(liebao_device::bank_switch_rom))); cart_space()->install_write_handler( 0x4000, 0x5fff, - write8smo_delegate(*this, FUNC(liebao_device::bank_switch_ram))); + emu::rw_delegate(*this, FUNC(liebao_device::bank_switch_ram))); cart_space()->install_write_handler( 0x7000, 0x7fff, - write8sm_delegate(*this, FUNC(liebao_device::bank_switch_rom_high))); + emu::rw_delegate(*this, FUNC(liebao_device::bank_switch_rom_high))); // all good return std::error_condition(); diff --git a/src/devices/bus/gameboy/mbc.cpp b/src/devices/bus/gameboy/mbc.cpp index 508a37c2fa7..2db965839ad 100644 --- a/src/devices/bus/gameboy/mbc.cpp +++ b/src/devices/bus/gameboy/mbc.cpp @@ -178,16 +178,16 @@ public: // install handlers cart_space()->install_write_handler( 0x0000, 0x1fff, - write8smo_delegate(*this, FUNC(mbc5_device_base::enable_ram))); + emu::rw_delegate(*this, FUNC(mbc5_device_base::enable_ram))); cart_space()->install_write_handler( 0x2000, 0x2fff, - write8smo_delegate(*this, FUNC(mbc5_device_base::bank_switch_fine_low))); + emu::rw_delegate(*this, FUNC(mbc5_device_base::bank_switch_fine_low))); cart_space()->install_write_handler( 0x3000, 0x3fff, - write8smo_delegate(*this, FUNC(mbc5_device_base::bank_switch_fine_high))); + emu::rw_delegate(*this, FUNC(mbc5_device_base::bank_switch_fine_high))); cart_space()->install_write_handler( 0x4000, 0x5fff, - write8smo_delegate(*this, FUNC(mbc5_device_base::bank_switch_coarse))); + emu::rw_delegate(*this, FUNC(mbc5_device_base::bank_switch_coarse))); // all good return std::error_condition(); @@ -249,7 +249,7 @@ public: // intercept ROM reads for logo spoofing cart_space()->install_read_handler( 0x0000, 0x7fff, - read8sm_delegate(*this, FUNC(mbc5_logo_spoof_device_base::read_rom))); + emu::rw_delegate(*this, FUNC(mbc5_logo_spoof_device_base::read_rom))); // all good return std::error_condition(); @@ -415,19 +415,19 @@ class mbc5_scrambled_device_base : public mbc5_logo_spoof_device_base // bank numbers and ROM contents are scrambled for protection cart_space()->install_read_handler( 0x0000, 0x3fff, - read8sm_delegate(*this, FUNC(mbc5_scrambled_device_base::read_rom_low))); + emu::rw_delegate(*this, FUNC(mbc5_scrambled_device_base::read_rom_low))); cart_space()->install_read_handler( 0x4000, 0x7fff, - read8sm_delegate(*this, FUNC(mbc5_scrambled_device_base::read_rom_high))); + emu::rw_delegate(*this, FUNC(mbc5_scrambled_device_base::read_rom_high))); cart_space()->install_write_handler( 0x2000, 0x2000, 0x0000, 0x0f00, 0x0000, - write8smo_delegate(*this, FUNC(mbc5_scrambled_device_base::bank_switch_fine_low_scrambled))); + emu::rw_delegate(*this, FUNC(mbc5_scrambled_device_base::bank_switch_fine_low_scrambled))); cart_space()->install_write_handler( 0x2001, 0x2001, 0x0000, 0x0f00, 0x0000, - write8smo_delegate(*this, FUNC(mbc5_scrambled_device_base::set_data_scramble))); + emu::rw_delegate(*this, FUNC(mbc5_scrambled_device_base::set_data_scramble))); cart_space()->install_write_handler( 0x2080, 0x2080, 0x0000, 0x0f00, 0x0000, - write8smo_delegate(*this, FUNC(mbc5_scrambled_device_base::set_bank_scramble))); + emu::rw_delegate(*this, FUNC(mbc5_scrambled_device_base::set_bank_scramble))); // all good return std::error_condition(); @@ -563,16 +563,16 @@ public: // install handlers cart_space()->install_write_handler( 0x0000, 0x1fff, - write8smo_delegate(*this, FUNC(mbc1_device::enable_ram))); + emu::rw_delegate(*this, FUNC(mbc1_device::enable_ram))); cart_space()->install_write_handler( 0x2000, 0x3fff, - write8smo_delegate(*this, FUNC(mbc1_device::bank_switch_fine))); + emu::rw_delegate(*this, FUNC(mbc1_device::bank_switch_fine))); cart_space()->install_write_handler( 0x4000, 0x5fff, - write8smo_delegate(*this, FUNC(mbc1_device::bank_switch_coarse))); + emu::rw_delegate(*this, FUNC(mbc1_device::bank_switch_coarse))); cart_space()->install_write_handler( 0x6000, 0x7fff, - write8smo_delegate(*this, FUNC(mbc1_device::bank_low_mask))); + emu::rw_delegate(*this, FUNC(mbc1_device::bank_low_mask))); // all good return std::error_condition(); @@ -775,7 +775,7 @@ public: { cart_space()->install_write_handler( 0x4000, 0x5fff, - write8smo_delegate(*this, FUNC(mbc5_device::bank_switch_coarse))); + emu::rw_delegate(*this, FUNC(mbc5_device::bank_switch_coarse))); } // all good @@ -939,19 +939,19 @@ public: // bank numbers and ROM contents are scrambled for protection cart_space()->install_read_handler( 0x0000, 0x3fff, - read8sm_delegate(*this, FUNC(sintax_device::read_rom_low))); + emu::rw_delegate(*this, FUNC(sintax_device::read_rom_low))); cart_space()->install_read_handler( 0x4000, 0x7fff, - read8sm_delegate(*this, FUNC(sintax_device::read_rom_high))); + emu::rw_delegate(*this, FUNC(sintax_device::read_rom_high))); cart_space()->install_write_handler( 0x2000, 0x2fff, - write8smo_delegate(*this, FUNC(sintax_device::bank_switch_fine_low_scrambled))); + emu::rw_delegate(*this, FUNC(sintax_device::bank_switch_fine_low_scrambled))); cart_space()->install_write_handler( 0x5000, 0x5fff, - write8smo_delegate(*this, FUNC(sintax_device::set_scramble_mode))); + emu::rw_delegate(*this, FUNC(sintax_device::set_scramble_mode))); cart_space()->install_write_handler( 0x7000, 0x70ff, 0x0000, 0x0f00, 0x0000, - write8sm_delegate(*this, FUNC(sintax_device::set_xor))); + emu::rw_delegate(*this, FUNC(sintax_device::set_xor))); // all good return std::error_condition(); @@ -1205,13 +1205,13 @@ public: // install handlers cart_space()->install_write_handler( 0x0000, 0x1fff, - write8smo_delegate(*this, FUNC(ngbchk_device::enable_ram))); + emu::rw_delegate(*this, FUNC(ngbchk_device::enable_ram))); cart_space()->install_write_handler( 0x2000, 0x3fff, - write8smo_delegate(*this, FUNC(ngbchk_device::bank_switch_fine))); + emu::rw_delegate(*this, FUNC(ngbchk_device::bank_switch_fine))); cart_space()->install_write_handler( 0x4000, 0x5fff, - write8smo_delegate(*this, FUNC(ngbchk_device::bank_switch_coarse))); + emu::rw_delegate(*this, FUNC(ngbchk_device::bank_switch_coarse))); // install protection over the top of high ROM bank cart_space()->install_view( @@ -1219,7 +1219,7 @@ public: m_view_prot); m_view_prot[0].install_read_handler( 0x4000, 0x4fff, 0x0ff0, 0x0000, 0x0000, - read8sm_delegate(*this, FUNC(ngbchk_device::protection))); + emu::rw_delegate(*this, FUNC(ngbchk_device::protection))); m_view_prot[0].unmap_read(0x5000, 0x7fff); // all good @@ -1358,10 +1358,10 @@ public: // install handlers with protection emulation cart_space()->install_read_handler( 0x0000, 0x7fff, - read8sm_delegate(*this, FUNC(vf001_device::read_rom))); + emu::rw_delegate(*this, FUNC(vf001_device::read_rom))); cart_space()->install_write_handler( 0x6000, 0x700f, 0x100f, 0x0000, 0x0000, - write8sm_delegate(*this, FUNC(vf001_device::prot_cmd))); + emu::rw_delegate(*this, FUNC(vf001_device::prot_cmd))); // all good return std::error_condition(); diff --git a/src/devices/bus/gameboy/mbc2.cpp b/src/devices/bus/gameboy/mbc2.cpp index f8942363305..8b108501cfb 100644 --- a/src/devices/bus/gameboy/mbc2.cpp +++ b/src/devices/bus/gameboy/mbc2.cpp @@ -133,16 +133,16 @@ std::error_condition mbc2_device::load(std::string &message) install_rom(); cart_space()->install_read_handler( 0xa000, 0xa1ff, 0x0000, 0x1e00, 0x0000, - read8m_delegate(*this, FUNC(mbc2_device::ram_mbc_read))); + emu::rw_delegate(*this, FUNC(mbc2_device::ram_mbc_read))); cart_space()->install_write_handler( 0xa000, 0xa1ff, 0x0000, 0x1e00, 0x0000, - write8sm_delegate(*this, FUNC(mbc2_device::ram_mbc_write))); + emu::rw_delegate(*this, FUNC(mbc2_device::ram_mbc_write))); cart_space()->install_write_handler( 0x0000, 0x00ff, 0x0000, 0x3e00, 0x0000, - write8smo_delegate(*this, FUNC(mbc2_device::ram_mbc_enable))); + emu::rw_delegate(*this, FUNC(mbc2_device::ram_mbc_enable))); cart_space()->install_write_handler( 0x0100, 0x01ff, 0x0000, 0x3e00, 0x0000, - write8smo_delegate(*this, FUNC(mbc2_device::bank_rom_switch))); + emu::rw_delegate(*this, FUNC(mbc2_device::bank_rom_switch))); // load battery backup if appropriate if (nvramregion) diff --git a/src/devices/bus/gameboy/mbc3.cpp b/src/devices/bus/gameboy/mbc3.cpp index b3d5dd59e00..1b567138498 100644 --- a/src/devices/bus/gameboy/mbc3.cpp +++ b/src/devices/bus/gameboy/mbc3.cpp @@ -331,24 +331,24 @@ std::error_condition mbc3_device_base::install_memory( // install bank switching handlers cart_space()->install_write_handler( 0x0000, 0x1fff, - write8smo_delegate(*this, FUNC(mbc3_device_base::enable_ram_rtc))); + emu::rw_delegate(*this, FUNC(mbc3_device_base::enable_ram_rtc))); cart_space()->install_write_handler( 0x2000, 0x3fff, - write8smo_delegate(*this, FUNC(mbc3_device_base::bank_switch_fine))); + emu::rw_delegate(*this, FUNC(mbc3_device_base::bank_switch_fine))); cart_space()->install_write_handler( 0x4000, 0x5fff, - write8smo_delegate(*this, FUNC(mbc3_device_base::select_ram_rtc))); + emu::rw_delegate(*this, FUNC(mbc3_device_base::select_ram_rtc))); cart_space()->install_write_handler( 0x6000, 0x7fff, - write8smo_delegate(*this, FUNC(mbc3_device_base::latch_rtc))); + emu::rw_delegate(*this, FUNC(mbc3_device_base::latch_rtc))); // install real-time clock handlers m_view_ram[1].install_read_handler( 0xa000, 0xbfff, - read8mo_delegate(*this, FUNC(mbc3_device_base::read_rtc))); + emu::rw_delegate(*this, FUNC(mbc3_device_base::read_rtc))); m_view_ram[1].install_write_handler( 0xa000, 0xbfff, - write8smo_delegate(*this, FUNC(mbc3_device_base::write_rtc))); + emu::rw_delegate(*this, FUNC(mbc3_device_base::write_rtc))); // if real-time clock crystal is present, start it ticking if (m_has_rtc_xtal) diff --git a/src/devices/bus/gameboy/mbc6.cpp b/src/devices/bus/gameboy/mbc6.cpp index 322619dd9d6..46fcc9a0f07 100644 --- a/src/devices/bus/gameboy/mbc6.cpp +++ b/src/devices/bus/gameboy/mbc6.cpp @@ -156,35 +156,35 @@ std::error_condition mbc6_device::load(std::string &message) // install memory controller handlers cart_space()->install_write_handler( 0x0000, 0x03ff, - write8smo_delegate(*this, FUNC(mbc6_device::enable_ram))); + emu::rw_delegate(*this, FUNC(mbc6_device::enable_ram))); cart_space()->install_write_handler( 0x0400, 0x07ff, - write8smo_delegate(*this, FUNC(mbc6_device::bank_switch_ram<0>))); + emu::rw_delegate(*this, FUNC(mbc6_device::bank_switch_ram<0>))); cart_space()->install_write_handler( 0x0800, 0x0bff, - write8smo_delegate(*this, FUNC(mbc6_device::bank_switch_ram<1>))); + emu::rw_delegate(*this, FUNC(mbc6_device::bank_switch_ram<1>))); cart_space()->install_write_handler( 0x0c00, 0x0fff, - write8smo_delegate(*this, FUNC(mbc6_device::enable_flash))); + emu::rw_delegate(*this, FUNC(mbc6_device::enable_flash))); cart_space()->install_write_handler( 0x1000, 0x1000, // TODO: what range does this actually respond to? - write8smo_delegate(*this, FUNC(mbc6_device::enable_flash_write))); + emu::rw_delegate(*this, FUNC(mbc6_device::enable_flash_write))); cart_space()->install_write_handler( 0x2000, 0x27ff, 0x0000, 0x0000, 0x1000, - write8sm_delegate(*this, FUNC(mbc6_device::bank_switch_rom))); + emu::rw_delegate(*this, FUNC(mbc6_device::bank_switch_rom))); cart_space()->install_write_handler( 0x2800, 0x2fff, 0x0000, 0x0000, 0x1000, - write8sm_delegate(*this, FUNC(mbc6_device::select_flash))); + emu::rw_delegate(*this, FUNC(mbc6_device::select_flash))); // install Flash handlers m_view_rom_low[1].install_readwrite_handler( 0x4000, 0x5fff, - read8sm_delegate(*this, FUNC(mbc6_device::read_flash<0>)), - write8sm_delegate(*this, FUNC(mbc6_device::write_flash<0>))); + emu::rw_delegate(*this, FUNC(mbc6_device::read_flash<0>)), + emu::rw_delegate(*this, FUNC(mbc6_device::write_flash<0>))); m_view_rom_high[1].install_readwrite_handler( 0x6000, 0x7fff, - read8sm_delegate(*this, FUNC(mbc6_device::read_flash<1>)), - write8sm_delegate(*this, FUNC(mbc6_device::write_flash<1>))); + emu::rw_delegate(*this, FUNC(mbc6_device::read_flash<1>)), + emu::rw_delegate(*this, FUNC(mbc6_device::write_flash<1>))); // all good return std::error_condition(); diff --git a/src/devices/bus/gameboy/mbc7.cpp b/src/devices/bus/gameboy/mbc7.cpp index 2c4a225d61f..ccf034f337b 100644 --- a/src/devices/bus/gameboy/mbc7.cpp +++ b/src/devices/bus/gameboy/mbc7.cpp @@ -168,35 +168,35 @@ std::error_condition mbc7_device_base::load(std::string &message) install_rom(); cart_space()->install_write_handler( 0x0000, 0x1fff, - write8smo_delegate(*this, NAME((&mbc7_device_base::enable_io<0, 0x0a, 0x0f>)))); + emu::rw_delegate(*this, NAME((&mbc7_device_base::enable_io<0, 0x0a, 0x0f>)))); cart_space()->install_write_handler( 0x2000, 0x3fff, - write8smo_delegate(*this, FUNC(mbc7_device_base::bank_rom_switch))); + emu::rw_delegate(*this, FUNC(mbc7_device_base::bank_rom_switch))); cart_space()->install_write_handler( 0x4000, 0x5fff, - write8smo_delegate(*this, NAME((&mbc7_device_base::enable_io<1, 0x40, 0xff>)))); + emu::rw_delegate(*this, NAME((&mbc7_device_base::enable_io<1, 0x40, 0xff>)))); cart_space()->install_view( 0xa000, 0xafff, m_view_io); m_view_io[0].install_write_handler( 0xa000, 0xa00f, 0x0000, 0x0f00, 0x0000, - write8smo_delegate(*this, FUNC(mbc7_device_base::clear_accel))); + emu::rw_delegate(*this, FUNC(mbc7_device_base::clear_accel))); m_view_io[0].install_write_handler( 0xa010, 0xa01f, 0x0000, 0x0f00, 0x0000, - write8smo_delegate(*this, FUNC(mbc7_device_base::acquire_accel))); + emu::rw_delegate(*this, FUNC(mbc7_device_base::acquire_accel))); m_view_io[0].install_read_handler( 0xa020, 0xa03f, 0x0000, 0x0f00, 0x0000, - read8sm_delegate(*this, FUNC(mbc7_device_base::read_accel<0>))); + emu::rw_delegate(*this, FUNC(mbc7_device_base::read_accel<0>))); m_view_io[0].install_read_handler( 0xa040, 0xa05f, 0x0000, 0x0f00, 0x0000, - read8sm_delegate(*this, FUNC(mbc7_device_base::read_accel<1>))); + emu::rw_delegate(*this, FUNC(mbc7_device_base::read_accel<1>))); m_view_io[0].install_read_handler( 0xa060, 0xa07f, 0x0000, 0x0f00, 0x0000, - read8sm_delegate(*this, FUNC(mbc7_device_base::read_unknown))); + emu::rw_delegate(*this, FUNC(mbc7_device_base::read_unknown))); m_view_io[0].install_readwrite_handler( 0xa080, 0xa08f, 0x0000, 0x0f00, 0x0000, - read8smo_delegate(*this, FUNC(mbc7_device_base::read_eeprom)), - write8smo_delegate(*this, FUNC(mbc7_device_base::write_eeprom))); + emu::rw_delegate(*this, FUNC(mbc7_device_base::read_eeprom)), + emu::rw_delegate(*this, FUNC(mbc7_device_base::write_eeprom))); // all good return std::error_condition(); diff --git a/src/devices/bus/gameboy/mmm01.cpp b/src/devices/bus/gameboy/mmm01.cpp index b4f41b1cfa0..65bf84acbb7 100644 --- a/src/devices/bus/gameboy/mmm01.cpp +++ b/src/devices/bus/gameboy/mmm01.cpp @@ -176,16 +176,16 @@ std::error_condition mmm01_device::load(std::string &message) // install memory controller handlers cart_space()->install_write_handler( 0x0000, 0x1fff, - write8smo_delegate(*this, FUNC(mmm01_device::enable_ram))); + emu::rw_delegate(*this, FUNC(mmm01_device::enable_ram))); cart_space()->install_write_handler( 0x2000, 0x3fff, - write8smo_delegate(*this, FUNC(mmm01_device::bank_switch_fine))); + emu::rw_delegate(*this, FUNC(mmm01_device::bank_switch_fine))); cart_space()->install_write_handler( 0x4000, 0x5fff, - write8smo_delegate(*this, FUNC(mmm01_device::bank_switch_coarse))); + emu::rw_delegate(*this, FUNC(mmm01_device::bank_switch_coarse))); cart_space()->install_write_handler( 0x6000, 0x6fff, - write8smo_delegate(*this, FUNC(mmm01_device::enable_bank_low_mid))); + emu::rw_delegate(*this, FUNC(mmm01_device::enable_bank_low_mid))); // all good return std::error_condition(); diff --git a/src/devices/bus/gameboy/ntnew.cpp b/src/devices/bus/gameboy/ntnew.cpp index e669e107231..fa54065bf2e 100644 --- a/src/devices/bus/gameboy/ntnew.cpp +++ b/src/devices/bus/gameboy/ntnew.cpp @@ -81,13 +81,13 @@ std::error_condition ntnew_device::load(std::string &message) // install handlers cart_space()->install_write_handler( 0x0000, 0x1fff, - write8sm_delegate(*this, FUNC(ntnew_device::enable_ram))); + emu::rw_delegate(*this, FUNC(ntnew_device::enable_ram))); cart_space()->install_write_handler( 0x2000, 0x2fff, - write8sm_delegate(*this, FUNC(ntnew_device::bank_switch_rom))); + emu::rw_delegate(*this, FUNC(ntnew_device::bank_switch_rom))); cart_space()->install_write_handler( 0x4000, 0x5fff, - write8smo_delegate(*this, FUNC(ntnew_device::bank_switch_ram))); + emu::rw_delegate(*this, FUNC(ntnew_device::bank_switch_ram))); // all good return std::error_condition(); diff --git a/src/devices/bus/gameboy/rom.cpp b/src/devices/bus/gameboy/rom.cpp index e2bb928524f..c3c7ab0e347 100644 --- a/src/devices/bus/gameboy/rom.cpp +++ b/src/devices/bus/gameboy/rom.cpp @@ -84,9 +84,9 @@ protected: void install_bank_switch_handlers() ATTR_COLD { // A5, A3 and A2 are not connected to the controller (effective address mask 0xffd3) - cart_space()->install_write_handler(0x0000, 0x1fff, write8smo_delegate(*this, FUNC(sachen_mmc_device_base::bank_rom_switch_outer))); - cart_space()->install_write_handler(0x2000, 0x3fff, write8smo_delegate(*this, FUNC(sachen_mmc_device_base::bank_rom_switch_inner))); - cart_space()->install_write_handler(0x4000, 0x5fff, write8smo_delegate(*this, FUNC(sachen_mmc_device_base::bank_rom_mux))); + cart_space()->install_write_handler(0x0000, 0x1fff, emu::rw_delegate(*this, FUNC(sachen_mmc_device_base::bank_rom_switch_outer))); + cart_space()->install_write_handler(0x2000, 0x3fff, emu::rw_delegate(*this, FUNC(sachen_mmc_device_base::bank_rom_switch_inner))); + cart_space()->install_write_handler(0x4000, 0x5fff, emu::rw_delegate(*this, FUNC(sachen_mmc_device_base::bank_rom_mux))); } u8 rom_read(offs_t offset, bool spoof) @@ -459,8 +459,8 @@ public: logerror("Installing banked ROM at 0x0000-0x3FFF and 0x4000-0x7FFF\n"); cart_space()->install_read_bank(0x0000, 0x3fff, m_bank_rom_low); cart_space()->install_read_bank(0x4000, 0x7fff, m_bank_rom_high); - cart_space()->install_write_handler(0x0001, 0x0001, write8smo_delegate(*this, FUNC(megaduck_banked_device::bank_rom_switch_high))); - cart_space()->install_write_handler(0xb000, 0xb000, write8smo_delegate(*this, FUNC(megaduck_banked_device::bank_rom_switch))); + cart_space()->install_write_handler(0x0001, 0x0001, emu::rw_delegate(*this, FUNC(megaduck_banked_device::bank_rom_switch_high))); + cart_space()->install_write_handler(0xb000, 0xb000, emu::rw_delegate(*this, FUNC(megaduck_banked_device::bank_rom_switch))); } else if (*fixedbank) { @@ -468,14 +468,14 @@ public: logerror("Installing fixed ROM at 0x0000-0x3FFF and banked ROM at 0x4000-0x7FFF\n"); cart_space()->install_rom(0x0000, 0x3fff, base); cart_space()->install_read_bank(0x4000, 0x7fff, m_bank_rom_high); - cart_space()->install_write_handler(0x0001, 0x0001, write8smo_delegate(*this, FUNC(megaduck_banked_device::bank_rom_switch_high))); + cart_space()->install_write_handler(0x0001, 0x0001, emu::rw_delegate(*this, FUNC(megaduck_banked_device::bank_rom_switch_high))); } else { // banked ROM at 0x0000-0x7fff logerror("Installing banked ROM at 0x0000-0x7FFF\n"); cart_space()->install_read_bank(0x0000, 0x7fff, m_bank_rom_low); - cart_space()->install_write_handler(0xb000, 0xb000, write8smo_delegate(*this, FUNC(megaduck_banked_device::bank_rom_switch_low))); + cart_space()->install_write_handler(0xb000, 0xb000, emu::rw_delegate(*this, FUNC(megaduck_banked_device::bank_rom_switch_low))); } // all good @@ -588,7 +588,7 @@ public: install_ram(); // install bank switch handler - cart_space()->install_write_handler(0x0000, 0x7fff, write8sm_delegate(*this, FUNC(m161_device::bank_rom_switch))); + cart_space()->install_write_handler(0x0000, 0x7fff, emu::rw_delegate(*this, FUNC(m161_device::bank_rom_switch))); // all good return std::error_condition(); @@ -648,7 +648,7 @@ public: set_bank_rom(0); // install bank switch handler - cart_space()->install_write_handler(0x0000, 0x3fff, write8sm_delegate(*this, FUNC(wisdom_device::bank_rom_switch))); + cart_space()->install_write_handler(0x0000, 0x3fff, emu::rw_delegate(*this, FUNC(wisdom_device::bank_rom_switch))); // all good return std::error_condition(); @@ -685,7 +685,7 @@ public: install_ram(); // install bank switch handler - cart_space()->install_write_handler(0x2000, 0x2000, write8smo_delegate(*this, FUNC(yong_device::bank_rom_switch))); + cart_space()->install_write_handler(0x2000, 0x2000, emu::rw_delegate(*this, FUNC(yong_device::bank_rom_switch))); // all good return std::error_condition(); @@ -730,7 +730,7 @@ public: install_ram(); // install bank switch handler - cart_space()->install_write_handler(0x2000, 0x3fff, write8smo_delegate(*this, FUNC(rockman8_device::bank_rom_switch))); + cart_space()->install_write_handler(0x2000, 0x3fff, emu::rw_delegate(*this, FUNC(rockman8_device::bank_rom_switch))); // all good return std::error_condition(); @@ -796,8 +796,8 @@ public: install_ram(); // install bank switch handler - cart_space()->install_write_handler(0x2000, 0x2fff, write8smo_delegate(*this, FUNC(sm3sp_device::bank_rom_switch))); - cart_space()->install_write_handler(0x5000, 0x5fff, write8smo_delegate(*this, FUNC(sm3sp_device::bank_rom_mode))); + cart_space()->install_write_handler(0x2000, 0x2fff, emu::rw_delegate(*this, FUNC(sm3sp_device::bank_rom_switch))); + cart_space()->install_write_handler(0x5000, 0x5fff, emu::rw_delegate(*this, FUNC(sm3sp_device::bank_rom_mode))); // all good return std::error_condition(); @@ -912,7 +912,7 @@ public: // actually install ROM and bank switch handlers logerror("Installing banked ROM at 0x0000-0x3FFF and 0x4000-0x7FFF\n"); - cart_space()->install_read_handler(0x0000, 0x7fff, read8sm_delegate(*this, FUNC(sachen_mmc1_device::read_rom))); + cart_space()->install_read_handler(0x0000, 0x7fff, emu::rw_delegate(*this, FUNC(sachen_mmc1_device::read_rom))); install_bank_switch_handlers(); // all good @@ -975,7 +975,7 @@ public: // actually install ROM and bank switch handlers logerror("Installing banked ROM at 0x0000-0x3FFF and 0x4000-0x7FFF\n"); - cart_space()->install_read_handler(0x0000, 0x7fff, read8sm_delegate(*this, FUNC(sachen_mmc2_device::read_rom))); + cart_space()->install_read_handler(0x0000, 0x7fff, emu::rw_delegate(*this, FUNC(sachen_mmc2_device::read_rom))); install_bank_switch_handlers(); // all good @@ -1015,9 +1015,9 @@ public: // actually install ROM and bank switch handlers logerror("Installing banked ROM at 0x0000-0x3FFF and 0x4000-0x7FFF\n"); - cart_space()->install_read_handler(0x0000, 0x7fff, read8sm_delegate(*this, FUNC(rocket_device::read_rom))); - cart_space()->install_write_handler(0x3f00, 0x3f00, write8smo_delegate(*this, FUNC(rocket_device::bank_rom_switch_fine))); - cart_space()->install_write_handler(0x3fc0, 0x3fc0, write8smo_delegate(*this, FUNC(rocket_device::bank_rom_switch_coarse))); + cart_space()->install_read_handler(0x0000, 0x7fff, emu::rw_delegate(*this, FUNC(rocket_device::read_rom))); + cart_space()->install_write_handler(0x3f00, 0x3f00, emu::rw_delegate(*this, FUNC(rocket_device::bank_rom_switch_fine))); + cart_space()->install_write_handler(0x3fc0, 0x3fc0, emu::rw_delegate(*this, FUNC(rocket_device::bank_rom_switch_coarse))); // all good return std::error_condition(); @@ -1089,8 +1089,8 @@ public: install_ram(); // install bank switch handlers - cart_space()->install_write_handler(0x2080, 0x2080, write8smo_delegate(*this, FUNC(lasama_device::ctrl_2080_w))); - cart_space()->install_write_handler(0x6000, 0x6000, write8smo_delegate(*this, FUNC(lasama_device::ctrl_6000_w))); + cart_space()->install_write_handler(0x2080, 0x2080, emu::rw_delegate(*this, FUNC(lasama_device::ctrl_2080_w))); + cart_space()->install_write_handler(0x6000, 0x6000, emu::rw_delegate(*this, FUNC(lasama_device::ctrl_6000_w))); // all good return std::error_condition(); diff --git a/src/devices/bus/gameboy/slmulti.cpp b/src/devices/bus/gameboy/slmulti.cpp index a2d4686b047..b5e824829d8 100644 --- a/src/devices/bus/gameboy/slmulti.cpp +++ b/src/devices/bus/gameboy/slmulti.cpp @@ -199,13 +199,13 @@ std::error_condition slmulti_device::load(std::string &message) // install memory mapping control handlers cart_space()->install_write_handler( 0x0000, 0x1fff, - write8smo_delegate(*this, FUNC(slmulti_device::enable_ram))); + emu::rw_delegate(*this, FUNC(slmulti_device::enable_ram))); cart_space()->install_write_handler( 0x2000, 0x3fff, - write8smo_delegate(*this, FUNC(slmulti_device::bank_switch_rom_fine))); + emu::rw_delegate(*this, FUNC(slmulti_device::bank_switch_rom_fine))); cart_space()->install_write_handler( 0x4000, 0x5fff, - write8smo_delegate(*this, FUNC(slmulti_device::bank_switch_ram))); + emu::rw_delegate(*this, FUNC(slmulti_device::bank_switch_ram))); // configuration mode and MBC5 mode partially overlay the normal handlers cart_space()->install_view( @@ -215,15 +215,15 @@ std::error_condition slmulti_device::load(std::string &message) // this is for MBC5 games m_view_ctrl[0].install_write_handler( 0x3000, 0x3fff, - write8smo_delegate(*this, FUNC(slmulti_device::bank_switch_rom_coarse))); + emu::rw_delegate(*this, FUNC(slmulti_device::bank_switch_rom_coarse))); // install configuration handlers over the top m_view_ctrl[1].install_write_handler( 0x5000, 0x5fff, - write8smo_delegate(*this, FUNC(slmulti_device::set_config_cmd))); + emu::rw_delegate(*this, FUNC(slmulti_device::set_config_cmd))); m_view_ctrl[1].install_write_handler( 0x7000, 0x7fff, - write8smo_delegate(*this, FUNC(slmulti_device::do_config_cmd))); + emu::rw_delegate(*this, FUNC(slmulti_device::do_config_cmd))); // do this here - the menu program apparently does a system reset to get into DMG mode m_view_ctrl.select(1); diff --git a/src/devices/bus/gameboy/tama5.cpp b/src/devices/bus/gameboy/tama5.cpp index da20671fd2a..b00db830b9e 100644 --- a/src/devices/bus/gameboy/tama5.cpp +++ b/src/devices/bus/gameboy/tama5.cpp @@ -146,9 +146,9 @@ std::error_condition tama5_device::load(std::string &message) install_rom(); // install I/O - cart_space()->install_read_handler(0xa000, 0xa000, 0x0000, 0x1fff, 0x0000, read8mo_delegate(*this, FUNC(tama5_device::data_r))); - cart_space()->install_write_handler(0xa000, 0xa000, 0x0000, 0x1ffe, 0x0000, write8smo_delegate(*this, FUNC(tama5_device::data_w))); - cart_space()->install_write_handler(0xa001, 0xa001, 0x0000, 0x1ffe, 0x0000, write8smo_delegate(*this, FUNC(tama5_device::command_w))); + cart_space()->install_read_handler(0xa000, 0xa000, 0x0000, 0x1fff, 0x0000, emu::rw_delegate(*this, FUNC(tama5_device::data_r))); + cart_space()->install_write_handler(0xa000, 0xa000, 0x0000, 0x1ffe, 0x0000, emu::rw_delegate(*this, FUNC(tama5_device::data_w))); + cart_space()->install_write_handler(0xa001, 0xa001, 0x0000, 0x1ffe, 0x0000, emu::rw_delegate(*this, FUNC(tama5_device::command_w))); // all good return std::error_condition(); diff --git a/src/emu/addrmap.h b/src/emu/addrmap.h index cdf9ef5351e..bee03100229 100644 --- a/src/emu/addrmap.h +++ b/src/emu/addrmap.h @@ -269,15 +269,15 @@ public: // implicit base -> delegate converter template address_map_entry &r(Ret (T::*read)(Params...), const char *read_name) - { return r(emu::detail::make_delegate(*make_pointer(m_devbase), read, read_name)); } + { return r(emu::rw_delegate(*make_pointer(m_devbase), read, read_name)); } template address_map_entry &w(Ret (T::*write)(Params...), const char *write_name) - { return w(emu::detail::make_delegate(*make_pointer(m_devbase), write, write_name)); } + { return w(emu::rw_delegate(*make_pointer(m_devbase), write, write_name)); } template address_map_entry &rw(RetR (T::*read)(ParamsR...), const char *read_name, RetW (U::*write)(ParamsW...), const char *write_name) - { return r(emu::detail::make_delegate(*make_pointer(m_devbase), read, read_name)).w(emu::detail::make_delegate(*make_pointer(m_devbase), write, write_name)); } + { return r(emu::rw_delegate(*make_pointer(m_devbase), read, read_name)).w(emu::rw_delegate(*make_pointer(m_devbase), write, write_name)); } template address_map_entry &m(Ret (T::*map)(Params...), const char *map_name) @@ -287,15 +287,15 @@ public: // device tag -> delegate converter template address_map_entry &r(const char *tag, Ret (T::*read)(Params...), const char *read_name) - { return r(emu::detail::make_delegate(m_devbase, tag, read, read_name)); } + { return r(emu::rw_delegate(m_devbase, tag, read, read_name)); } template address_map_entry &w(const char *tag, Ret (T::*write)(Params...), const char *write_name) - { return w(emu::detail::make_delegate(m_devbase, tag, write, write_name)); } + { return w(emu::rw_delegate(m_devbase, tag, write, write_name)); } template address_map_entry &rw(const char *tag, RetR (T::*read)(ParamsR...), const char *read_name, RetW (U::*write)(ParamsW...), const char *write_name) - { return r(emu::detail::make_delegate(m_devbase, tag, read, read_name)).w(emu::detail::make_delegate(m_devbase, tag, write, write_name)); } + { return r(emu::rw_delegate(m_devbase, tag, read, read_name)).w(emu::rw_delegate(m_devbase, tag, write, write_name)); } template address_map_entry &m(const char *tag, Ret (T::*map)(Params...), const char *map_name) @@ -305,15 +305,15 @@ public: // device reference -> delegate converter template address_map_entry &r(T &obj, Ret (U::*read)(Params...), const char *read_name) - { return r(emu::detail::make_delegate(*make_pointer(obj), read, read_name)); } + { return r(emu::rw_delegate(*make_pointer(obj), read, read_name)); } template address_map_entry &w(T &obj, Ret (U::*write)(Params...), const char *write_name) - { return w(emu::detail::make_delegate(*make_pointer(obj), write, write_name)); } + { return w(emu::rw_delegate(*make_pointer(obj), write, write_name)); } template address_map_entry &rw(T &obj, RetR (U::*read)(ParamsR...), const char *read_name, RetW (V::*write)(ParamsW...), const char *write_name) - { return r(emu::detail::make_delegate(*make_pointer(obj), read, read_name)).w(emu::detail::make_delegate(make_pointer(obj), write, write_name)); } + { return r(emu::rw_delegate(*make_pointer(obj), read, read_name)).w(emu::rw_delegate(make_pointer(obj), write, write_name)); } template address_map_entry &m(T &obj, Ret (U::*map)(Params...), const char *map_name) @@ -324,39 +324,39 @@ public: template address_map_entry &r(device_finder &finder, Ret (U::*read)(Params...), const char *read_name) { device_t &device(find_device(finder)); - return r(emu::detail::make_delegate(device, DEVICE_SELF, read, read_name)); + return r(emu::rw_delegate(device, DEVICE_SELF, read, read_name)); } template address_map_entry &r(const device_finder &finder, Ret (U::*read)(Params...), const char *read_name) { device_t &device(find_device(finder)); - return r(emu::detail::make_delegate(device, DEVICE_SELF, read, read_name)); + return r(emu::rw_delegate(device, DEVICE_SELF, read, read_name)); } template address_map_entry &w(device_finder &finder, Ret (U::*write)(Params...), const char *write_name) { device_t &device(find_device(finder)); - return w(emu::detail::make_delegate(device, DEVICE_SELF, write, write_name)); + return w(emu::rw_delegate(device, DEVICE_SELF, write, write_name)); } template address_map_entry &w(const device_finder &finder, Ret (U::*write)(Params...), const char *write_name) { device_t &device(find_device(finder)); - return w(emu::detail::make_delegate(device, DEVICE_SELF, write, write_name)); + return w(emu::rw_delegate(device, DEVICE_SELF, write, write_name)); } template address_map_entry &rw(device_finder &finder, RetR (U::*read)(ParamsR...), const char *read_name, RetW (V::*write)(ParamsW...), const char *write_name) { device_t &device(find_device(finder)); - return r(emu::detail::make_delegate(device, DEVICE_SELF, read, read_name)) - .w(emu::detail::make_delegate(device, DEVICE_SELF, write, write_name)); + return r(emu::rw_delegate(device, DEVICE_SELF, read, read_name)) + .w(emu::rw_delegate(device, DEVICE_SELF, write, write_name)); } template address_map_entry &rw(const device_finder &finder, RetR (U::*read)(ParamsR...), const char *read_name, RetW (V::*write)(ParamsW...), const char *write_name) { device_t &device(find_device(finder)); - return r(emu::detail::make_delegate(device, DEVICE_SELF, read, read_name)) - .w(emu::detail::make_delegate(device, DEVICE_SELF, write, write_name)); + return r(emu::rw_delegate(device, DEVICE_SELF, read, read_name)) + .w(emu::rw_delegate(device, DEVICE_SELF, write, write_name)); } template diff --git a/src/emu/emumem.h b/src/emu/emumem.h index 7fa9f3481ff..43dc0b4a94c 100644 --- a/src/emu/emumem.h +++ b/src/emu/emumem.h @@ -181,7 +181,7 @@ using ws_delay_delegate = device_delegate; namespace emu::detail { -// TODO: replace with std::void_t when we move to C++17 +// TODO: work out why this doesn't work with clang and/or libc++ void_t but works with this C++14 work-alike template struct void_wrapper { using type = void; }; template using void_t = typename void_wrapper::type; @@ -249,15 +249,6 @@ template using rw_delegate_type_t = typename rw_delegate_type::t template using rw_delegate_device_class_t = typename rw_delegate_type::device_class; -template -inline rw_delegate_type_t make_delegate(device_t &base, char const *tag, T &&func, char const *name) -{ return rw_delegate_type_t(base, tag, std::forward(func), name); } - -template -inline rw_delegate_type_t make_delegate(rw_delegate_device_class_t &object, T &&func, char const *name) -{ return rw_delegate_type_t(object, std::forward(func), name); } - - template inline std::enable_if_t::value, read8_delegate> make_lr8_delegate(device_t &owner, L &&l, const char *name) { return read8_delegate(owner, std::forward(l), name); } @@ -452,14 +443,69 @@ inline std::enable_if_t(l), name); } +// =====================-> delegate -> Width + +template struct handler_width; +template inline constexpr int handler_width_v = handler_width::value; +template <> struct handler_width { static inline constexpr int value = 0; }; +template <> struct handler_width { static inline constexpr int value = 0; }; +template <> struct handler_width { static inline constexpr int value = 0; }; +template <> struct handler_width { static inline constexpr int value = 0; }; +template <> struct handler_width { static inline constexpr int value = 0; }; +template <> struct handler_width { static inline constexpr int value = 0; }; +template <> struct handler_width { static inline constexpr int value = 0; }; +template <> struct handler_width { static inline constexpr int value = 0; }; +template <> struct handler_width { static inline constexpr int value = 0; }; +template <> struct handler_width { static inline constexpr int value = 0; }; +template <> struct handler_width { static inline constexpr int value = 0; }; +template <> struct handler_width { static inline constexpr int value = 0; }; +template <> struct handler_width { static inline constexpr int value = 1; }; +template <> struct handler_width { static inline constexpr int value = 1; }; +template <> struct handler_width { static inline constexpr int value = 1; }; +template <> struct handler_width { static inline constexpr int value = 1; }; +template <> struct handler_width { static inline constexpr int value = 1; }; +template <> struct handler_width { static inline constexpr int value = 1; }; +template <> struct handler_width { static inline constexpr int value = 1; }; +template <> struct handler_width { static inline constexpr int value = 1; }; +template <> struct handler_width { static inline constexpr int value = 1; }; +template <> struct handler_width { static inline constexpr int value = 1; }; +template <> struct handler_width { static inline constexpr int value = 1; }; +template <> struct handler_width { static inline constexpr int value = 1; }; +template <> struct handler_width { static inline constexpr int value = 2; }; +template <> struct handler_width { static inline constexpr int value = 2; }; +template <> struct handler_width { static inline constexpr int value = 2; }; +template <> struct handler_width { static inline constexpr int value = 2; }; +template <> struct handler_width { static inline constexpr int value = 2; }; +template <> struct handler_width { static inline constexpr int value = 2; }; +template <> struct handler_width { static inline constexpr int value = 2; }; +template <> struct handler_width { static inline constexpr int value = 2; }; +template <> struct handler_width { static inline constexpr int value = 2; }; +template <> struct handler_width { static inline constexpr int value = 2; }; +template <> struct handler_width { static inline constexpr int value = 2; }; +template <> struct handler_width { static inline constexpr int value = 2; }; +template <> struct handler_width { static inline constexpr int value = 3; }; +template <> struct handler_width { static inline constexpr int value = 3; }; +template <> struct handler_width { static inline constexpr int value = 3; }; +template <> struct handler_width { static inline constexpr int value = 3; }; +template <> struct handler_width { static inline constexpr int value = 3; }; +template <> struct handler_width { static inline constexpr int value = 3; }; +template <> struct handler_width { static inline constexpr int value = 3; }; +template <> struct handler_width { static inline constexpr int value = 3; }; +template <> struct handler_width { static inline constexpr int value = 3; }; +template <> struct handler_width { static inline constexpr int value = 3; }; +template <> struct handler_width { static inline constexpr int value = 3; }; +template <> struct handler_width { static inline constexpr int value = 3; }; + + // =====================-> Width -> types -template struct handler_entry_size {}; -template<> struct handler_entry_size<0> { using uX = u8; }; -template<> struct handler_entry_size<1> { using uX = u16; }; -template<> struct handler_entry_size<2> { using uX = u32; }; -template<> struct handler_entry_size<3> { using uX = u64; }; +template struct handler_entry_size; +template using handler_entry_size_t = typename handler_entry_size::type; +template<> struct handler_entry_size<0> { using type = u8; }; +template<> struct handler_entry_size<1> { using type = u16; }; +template<> struct handler_entry_size<2> { using type = u32; }; +template<> struct handler_entry_size<3> { using type = u64; }; // =====================-> Address segmentation for the search tree @@ -507,6 +553,19 @@ private: } // namespace emu::detail +namespace emu { + +template +inline detail::rw_delegate_type_t rw_delegate(device_t &base, char const *tag, T &&func, char const *name) +{ return detail::rw_delegate_type_t(base, tag, std::forward(func), name); } + +template +inline detail::rw_delegate_type_t rw_delegate(detail::rw_delegate_device_class_t &object, T &&func, char const *name) +{ return detail::rw_delegate_type_t(object, std::forward(func), name); } + +} // namespace emu + + // ======================> memory_units_descritor forwards declaration template class memory_units_descriptor; @@ -607,7 +666,7 @@ protected: template class handler_entry_read : public handler_entry { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; static constexpr u32 NATIVE_MASK = Width + AddrShift >= 0 ? make_bitmask(Width + AddrShift) : 0; @@ -682,7 +741,7 @@ public: template class handler_entry_write : public handler_entry { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; static constexpr u32 NATIVE_MASK = Width + AddrShift >= 0 ? make_bitmask(Width + AddrShift) : 0; @@ -783,10 +842,10 @@ constexpr offs_t memory_offset_to_byte(offs_t offset, int AddrShift) { return Ad // ======================> generic read/write decomposition routines // generic direct read -template typename emu::detail::handler_entry_size::uX memory_read_generic(T rop, offs_t address, typename emu::detail::handler_entry_size::uX mask) +template emu::detail::handler_entry_size_t memory_read_generic(T rop, offs_t address, emu::detail::handler_entry_size_t mask) { - using TargetType = typename emu::detail::handler_entry_size::uX; - using NativeType = typename emu::detail::handler_entry_size::uX; + using TargetType = emu::detail::handler_entry_size_t; + using NativeType = emu::detail::handler_entry_size_t; constexpr u32 TARGET_BYTES = 1 << TargetWidth; constexpr u32 TARGET_BITS = 8 * TARGET_BYTES; @@ -917,9 +976,9 @@ template void memory_write_generic(T wop, offs_t address, typename emu::detail::handler_entry_size::uX data, typename emu::detail::handler_entry_size::uX mask) +template void memory_write_generic(T wop, offs_t address, emu::detail::handler_entry_size_t data, emu::detail::handler_entry_size_t mask) { - using NativeType = typename emu::detail::handler_entry_size::uX; + using NativeType = emu::detail::handler_entry_size_t; constexpr u32 TARGET_BYTES = 1 << TargetWidth; constexpr u32 TARGET_BITS = 8 * TARGET_BYTES; @@ -1041,10 +1100,10 @@ template std::pair::uX, u16> memory_read_generic_flags(TF ropf, offs_t address, typename emu::detail::handler_entry_size::uX mask) +template std::pair, u16> memory_read_generic_flags(TF ropf, offs_t address, emu::detail::handler_entry_size_t mask) { - using TargetType = typename emu::detail::handler_entry_size::uX; - using NativeType = typename emu::detail::handler_entry_size::uX; + using TargetType = emu::detail::handler_entry_size_t; + using NativeType = emu::detail::handler_entry_size_t; constexpr u32 TARGET_BYTES = 1 << TargetWidth; constexpr u32 TARGET_BITS = 8 * TARGET_BYTES; @@ -1180,9 +1239,9 @@ template u16 memory_write_generic_flags(TF wopf, offs_t address, typename emu::detail::handler_entry_size::uX data, typename emu::detail::handler_entry_size::uX mask) +template u16 memory_write_generic_flags(TF wopf, offs_t address, emu::detail::handler_entry_size_t data, emu::detail::handler_entry_size_t mask) { - using NativeType = typename emu::detail::handler_entry_size::uX; + using NativeType = emu::detail::handler_entry_size_t; constexpr u32 TARGET_BYTES = 1 << TargetWidth; constexpr u32 TARGET_BITS = 8 * TARGET_BYTES; @@ -1311,9 +1370,9 @@ template u16 lookup_memory_read_generic_flags(TF lropf, offs_t address, typename emu::detail::handler_entry_size::uX mask) +template u16 lookup_memory_read_generic_flags(TF lropf, offs_t address, emu::detail::handler_entry_size_t mask) { - using NativeType = typename emu::detail::handler_entry_size::uX; + using NativeType = emu::detail::handler_entry_size_t; constexpr u32 TARGET_BYTES = 1 << TargetWidth; constexpr u32 TARGET_BITS = 8 * TARGET_BYTES; @@ -1444,9 +1503,9 @@ template u16 lookup_memory_write_generic_flags(TF lwopf, offs_t address, typename emu::detail::handler_entry_size::uX mask) +template u16 lookup_memory_write_generic_flags(TF lwopf, offs_t address, emu::detail::handler_entry_size_t mask) { - using NativeType = typename emu::detail::handler_entry_size::uX; + using NativeType = emu::detail::handler_entry_size_t; constexpr u32 TARGET_BYTES = 1 << TargetWidth; constexpr u32 TARGET_BITS = 8 * TARGET_BYTES; @@ -1576,41 +1635,41 @@ template Direct dispatching -template typename emu::detail::handler_entry_size::uX dispatch_read(offs_t mask, offs_t offset, typename emu::detail::handler_entry_size::uX mem_mask, const handler_entry_read *const *dispatch) +template emu::detail::handler_entry_size_t dispatch_read(offs_t mask, offs_t offset, emu::detail::handler_entry_size_t mem_mask, const handler_entry_read *const *dispatch) { static constexpr u32 LowBits = emu::detail::handler_entry_dispatch_level_to_lowbits(Level, Width, AddrShift); return dispatch[(offset & mask) >> LowBits]->read(offset, mem_mask); } -template void dispatch_write(offs_t mask, offs_t offset, typename emu::detail::handler_entry_size::uX data, typename emu::detail::handler_entry_size::uX mem_mask, const handler_entry_write *const *dispatch) +template void dispatch_write(offs_t mask, offs_t offset, emu::detail::handler_entry_size_t data, emu::detail::handler_entry_size_t mem_mask, const handler_entry_write *const *dispatch) { static constexpr u32 LowBits = emu::detail::handler_entry_dispatch_level_to_lowbits(Level, Width, AddrShift); return dispatch[(offset & mask) >> LowBits]->write(offset, data, mem_mask); } -template std::pair::uX, u16> dispatch_read_flags(offs_t mask, offs_t offset, typename emu::detail::handler_entry_size::uX mem_mask, const handler_entry_read *const *dispatch) +template std::pair, u16> dispatch_read_flags(offs_t mask, offs_t offset, emu::detail::handler_entry_size_t mem_mask, const handler_entry_read *const *dispatch) { static constexpr u32 LowBits = emu::detail::handler_entry_dispatch_level_to_lowbits(Level, Width, AddrShift); return dispatch[(offset & mask) >> LowBits]->read_flags(offset, mem_mask); } -template u16 dispatch_write_flags(offs_t mask, offs_t offset, typename emu::detail::handler_entry_size::uX data, typename emu::detail::handler_entry_size::uX mem_mask, const handler_entry_write *const *dispatch) +template u16 dispatch_write_flags(offs_t mask, offs_t offset, emu::detail::handler_entry_size_t data, emu::detail::handler_entry_size_t mem_mask, const handler_entry_write *const *dispatch) { static constexpr u32 LowBits = emu::detail::handler_entry_dispatch_level_to_lowbits(Level, Width, AddrShift); return dispatch[(offset & mask) >> LowBits]->write_flags(offset, data, mem_mask); } -template u16 dispatch_lookup_read_flags(offs_t mask, offs_t offset, typename emu::detail::handler_entry_size::uX mem_mask, const handler_entry_read *const *dispatch) +template u16 dispatch_lookup_read_flags(offs_t mask, offs_t offset, emu::detail::handler_entry_size_t mem_mask, const handler_entry_read *const *dispatch) { static constexpr u32 LowBits = emu::detail::handler_entry_dispatch_level_to_lowbits(Level, Width, AddrShift); return dispatch[(offset & mask) >> LowBits]->lookup_flags(offset, mem_mask); } -template u16 dispatch_lookup_write_flags(offs_t mask, offs_t offset, typename emu::detail::handler_entry_size::uX mem_mask, const handler_entry_write *const *dispatch) +template u16 dispatch_lookup_write_flags(offs_t mask, offs_t offset, emu::detail::handler_entry_size_t mem_mask, const handler_entry_write *const *dispatch) { static constexpr u32 LowBits = emu::detail::handler_entry_dispatch_level_to_lowbits(Level, Width, AddrShift); return dispatch[(offset & mask) >> LowBits]->lookup_flags(offset, mem_mask); @@ -1618,14 +1677,14 @@ template u16 dispatch_lookup_write_flags(of -template typename emu::detail::handler_entry_size::uX dispatch_read_interruptible(offs_t mask, offs_t offset, typename emu::detail::handler_entry_size::uX mem_mask, const handler_entry_read *const *dispatch) +template emu::detail::handler_entry_size_t dispatch_read_interruptible(offs_t mask, offs_t offset, emu::detail::handler_entry_size_t mem_mask, const handler_entry_read *const *dispatch) { static constexpr u32 LowBits = emu::detail::handler_entry_dispatch_level_to_lowbits(Level, Width, AddrShift); return dispatch[(offset & mask) >> LowBits]->read_interruptible(offset, mem_mask); } -template void dispatch_write_interruptible(offs_t mask, offs_t offset, typename emu::detail::handler_entry_size::uX data, typename emu::detail::handler_entry_size::uX mem_mask, const handler_entry_write *const *dispatch) +template void dispatch_write_interruptible(offs_t mask, offs_t offset, emu::detail::handler_entry_size_t data, emu::detail::handler_entry_size_t mem_mask, const handler_entry_write *const *dispatch) { static constexpr u32 LowBits = emu::detail::handler_entry_dispatch_level_to_lowbits(Level, Width, AddrShift); return dispatch[(offset & mask) >> LowBits]->write_interruptible(offset, data, mem_mask); @@ -1642,7 +1701,7 @@ template class memory_ { friend class ::address_space; - using NativeType = typename emu::detail::handler_entry_size::uX; + using NativeType = emu::detail::handler_entry_size_t; static constexpr u32 NATIVE_BYTES = 1 << Width; static constexpr u32 NATIVE_MASK = Width + AddrShift >= 0 ? (1 << (Width + AddrShift)) - 1 : 0; @@ -1804,7 +1863,7 @@ template class memory_access_cach { friend class ::address_space; - using NativeType = typename emu::detail::handler_entry_size::uX; + using NativeType = emu::detail::handler_entry_size_t; static constexpr u32 NATIVE_BYTES = 1 << Width; static constexpr u32 NATIVE_MASK = Width + AddrShift >= 0 ? (1 << (Width + AddrShift)) - 1 : 0; @@ -2160,162 +2219,78 @@ public: virtual void install_readwrite_after_delay(offs_t addrstart, offs_t addrend, offs_t addrmirror, ws_delay_delegate ws) = 0; // install new-style delegate handlers (short form) - void install_read_handler(offs_t addrstart, offs_t addrend, read8_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write8_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read8_delegate rhandler, write8_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read16_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write16_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read16_delegate rhandler, write16_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read32_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write32_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read32_delegate rhandler, write32_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read64_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write64_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read64_delegate rhandler, write64_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - - void install_read_handler(offs_t addrstart, offs_t addrend, read8m_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write8m_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read8m_delegate rhandler, write8m_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read16m_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write16m_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read16m_delegate rhandler, write16m_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read32m_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write32m_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read32m_delegate rhandler, write32m_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read64m_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write64m_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read64m_delegate rhandler, write64m_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - - void install_read_handler(offs_t addrstart, offs_t addrend, read8s_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write8s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read8s_delegate rhandler, write8s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read16s_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write16s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read16s_delegate rhandler, write16s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read32s_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write32s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read32s_delegate rhandler, write32s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read64s_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write64s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read64s_delegate rhandler, write64s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - - void install_read_handler(offs_t addrstart, offs_t addrend, read8sm_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write8sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read8sm_delegate rhandler, write8sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read16sm_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write16sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read16sm_delegate rhandler, write16sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read32sm_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write32sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read32sm_delegate rhandler, write32sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read64sm_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write64sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read64sm_delegate rhandler, write64sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - - void install_read_handler(offs_t addrstart, offs_t addrend, read8mo_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write8mo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read8mo_delegate rhandler, write8mo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read16mo_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write16mo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read16mo_delegate rhandler, write16mo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read32mo_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write32mo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read32mo_delegate rhandler, write32mo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read64mo_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write64mo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read64mo_delegate rhandler, write64mo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - - void install_read_handler(offs_t addrstart, offs_t addrend, read8smo_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write8smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read8smo_delegate rhandler, write8smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read16smo_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write16smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read16smo_delegate rhandler, write16smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read32smo_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write32smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read32smo_delegate rhandler, write32smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } - void install_read_handler(offs_t addrstart, offs_t addrend, read64smo_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask, cswidth, flags); } - void install_write_handler(offs_t addrstart, offs_t addrend, write64smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask, cswidth, flags); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read64smo_delegate rhandler, write64smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) { install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask, cswidth, flags); } + template + void install_read_handler(offs_t addrstart, offs_t addrend, R &&rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) + { install_read_handler(addrstart, addrend, 0, 0, 0, std::forward(rhandler), unitmask, cswidth, flags); } + template + void install_write_handler(offs_t addrstart, offs_t addrend, W &&whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) + { install_write_handler(addrstart, addrend, 0, 0, 0, std::forward(whandler), unitmask, cswidth, flags); } + template + void install_readwrite_handler(offs_t addrstart, offs_t addrend, R &&rhandler, W &&whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) + { install_readwrite_handler(addrstart, addrend, 0, 0, 0, std::forward(rhandler), std::forward(whandler), unitmask, cswidth, flags); } // install new-style delegate handlers (with mirror/mask) virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; - virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8_delegate rhandler, write8_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; - virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16_delegate rhandler, write16_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; - virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32_delegate rhandler, write32_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 0) = 0; virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16s_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; - virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16s_delegate rhandler, write16s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32s_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; - virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32s_delegate rhandler, write32s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64s_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; - virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64s_delegate rhandler, write64s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8sm_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; - virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8sm_delegate rhandler, write8sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16sm_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; - virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16sm_delegate rhandler, write16sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32sm_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; - virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32sm_delegate rhandler, write32sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64sm_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 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, u16 flags = 0) = 0; virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16smo_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; - virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16smo_delegate rhandler, write16smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32smo_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; - virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32smo_delegate rhandler, write32smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64smo_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; virtual void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; - virtual void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64smo_delegate rhandler, write64smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) = 0; + + template + void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, R &&rhandler, W &&whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) + { + static_assert(emu::detail::handler_width_v > == emu::detail::handler_width_v >, "handler widths do not match"); + install_read_handler(addrstart, addrend, addrmask, addrmirror, addrselect, std::forward(rhandler), unitmask, cswidth, flags); + install_write_handler(addrstart, addrend, addrmask, addrmirror, addrselect, std::forward(whandler), unitmask, cswidth, flags); + } protected: virtual void unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, u16 flags, read_or_write readorwrite, bool quiet) = 0; @@ -2787,9 +2762,9 @@ private: template -typename emu::detail::handler_entry_size::uX +emu::detail::handler_entry_size_t emu::detail::memory_access_cache:: -read_native(offs_t address, typename emu::detail::handler_entry_size::uX mask) +read_native(offs_t address, emu::detail::handler_entry_size_t mask) { address &= m_addrmask; check_address_r(address); @@ -2798,7 +2773,7 @@ read_native(offs_t address, typename emu::detail::handler_entry_size::uX template void emu::detail::memory_access_cache:: -write_native(offs_t address, typename emu::detail::handler_entry_size::uX data, typename emu::detail::handler_entry_size::uX mask) +write_native(offs_t address, emu::detail::handler_entry_size_t data, emu::detail::handler_entry_size_t mask) { address &= m_addrmask; check_address_w(address); diff --git a/src/emu/emumem_aspace.cpp b/src/emu/emumem_aspace.cpp index e6d385cb7d5..b0d00d6fca8 100644 --- a/src/emu/emumem_aspace.cpp +++ b/src/emu/emumem_aspace.cpp @@ -49,58 +49,7 @@ template static void VPRINTF(Format &&, Pa // CONSTANTS //************************************************************************** -namespace { - -template struct handler_width; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -} // anonymous namespace +using emu::detail::handler_width_v; //************************************************************************** @@ -113,7 +62,7 @@ template <> struct handler_width { static constexpr int val template class address_space_specific : public address_space { - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; using NativeType = uX; using this_type = address_space_specific; @@ -155,151 +104,103 @@ public: { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8_delegate rhandler, write8_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16_delegate rhandler, write16_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32_delegate rhandler, write32_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16s_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16s_delegate rhandler, write16s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32s_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32s_delegate rhandler, write32s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64s_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64s_delegate rhandler, write64s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8sm_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8sm_delegate rhandler, write8sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16sm_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16sm_delegate rhandler, write16sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32sm_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32sm_delegate rhandler, write32sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64sm_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16smo_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16smo_delegate rhandler, write16smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32smo_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32smo_delegate rhandler, write32smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64smo_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64smo_delegate rhandler, write64smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } using address_space::install_read_tap; using address_space::install_write_tap; @@ -527,7 +428,7 @@ private: osd_printf_error("Binding error while installing read handler %s for range 0x%X-0x%X mask 0x%X mirror 0x%X select 0x%X umask 0x%X\n", handler_r.name(), addrstart, addrend, addrmask, addrmirror, addrselect, unitmask); throw; } - install_read_handler_helper::value>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, handler_r); + install_read_handler_helper >(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, handler_r); } template @@ -538,24 +439,7 @@ private: osd_printf_error("Binding error while installing write handler %s for range 0x%X-0x%X mask 0x%X mirror 0x%X select 0x%X umask 0x%X\n", handler_w.name(), addrstart, addrend, addrmask, addrmirror, addrselect, unitmask); throw; } - install_write_handler_helper::value>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, handler_w); - } - - template - void install_readwrite_handler_impl(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, u64 unitmask, int cswidth, u16 flags, READ &handler_r, WRITE &handler_w) - { - static_assert(handler_width::value == handler_width::value, "handler widths do not match"); - try { handler_r.resolve(); } - catch (const binding_type_exception &) { - osd_printf_error("Binding error while installing read handler %s for range 0x%X-0x%X mask 0x%X mirror 0x%X select 0x%X umask 0x%X\n", handler_r.name(), addrstart, addrend, addrmask, addrmirror, addrselect, unitmask); - throw; - } - try { handler_w.resolve(); } - catch (const binding_type_exception &) { - osd_printf_error("Binding error while installing write handler %s for range 0x%X-0x%X mask 0x%X mirror 0x%X select 0x%X umask 0x%X\n", handler_w.name(), addrstart, addrend, addrmask, addrmirror, addrselect, unitmask); - throw; - } - install_readwrite_handler_helper::value>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, handler_r, handler_w); + install_write_handler_helper >(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, handler_w); } template @@ -622,50 +506,6 @@ private: invalidate_caches(read_or_write::WRITE); } } - - template - void install_readwrite_handler_helper(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, u64 unitmask, int cswidth, u16 flags, - const READ &handler_r, - const WRITE &handler_w) - { - if constexpr (Width < AccessWidth) { - fatalerror("install_readwrite_handler: cannot install a %d-wide handler in a %d-wide bus", 8 << AccessWidth, 8 << Width); - } else { - VPRINTF("address_space::install_readwrite_handler(%*x-%*x mask=%*x mirror=%*x, space width=%d, handler width=%d, %s, %s, %*x)\n", - m_addrchars, addrstart, m_addrchars, addrend, - m_addrchars, addrmask, m_addrchars, addrmirror, - 8 << Width, 8 << AccessWidth, - handler_r.name(), handler_w.name(), data_width() / 4, unitmask); - - offs_t nstart, nend, nmask, nmirror; - u64 nunitmask; - int ncswidth; - check_optimize_all("install_readwrite_handler", 8 << AccessWidth, addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, nstart, nend, nmask, nmirror, nunitmask, ncswidth); - - if constexpr (Width == AccessWidth) { - auto hand_r = new handler_entry_read_delegate (this, flags, handler_r); - hand_r->set_address_info(nstart, nmask); - m_root_read ->populate(nstart, nend, nmirror, hand_r); - - auto hand_w = new handler_entry_write_delegate(this, flags, handler_w); - hand_w->set_address_info(nstart, nmask); - m_root_write->populate(nstart, nend, nmirror, hand_w); - } else { - auto hand_r = new handler_entry_read_delegate (this, flags, handler_r); - memory_units_descriptor descriptor(AccessWidth, Endian, hand_r, nstart, nend, nmask, nunitmask, ncswidth); - hand_r->set_address_info(descriptor.get_handler_start(), descriptor.get_handler_mask()); - m_root_read ->populate_mismatched(nstart, nend, nmirror, descriptor); - hand_r->unref(); - - auto hand_w = new handler_entry_write_delegate(this, flags, handler_w); - descriptor.set_subunit_handler(hand_w); - hand_w->set_address_info(descriptor.get_handler_start(), descriptor.get_handler_mask()); - m_root_write->populate_mismatched(nstart, nend, nmirror, descriptor); - hand_w->unref(); - } - invalidate_caches(read_or_write::READWRITE); - } - } }; diff --git a/src/emu/emumem_hea.h b/src/emu/emumem_hea.h index e8308a73960..9ee6f8c8a1e 100644 --- a/src/emu/emumem_hea.h +++ b/src/emu/emumem_hea.h @@ -8,7 +8,7 @@ template class handler_entry_read_address : public handler_entry_read { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_read_address(address_space *space, u32 flags) : handler_entry_read(space, flags) {} ~handler_entry_read_address() = default; @@ -25,7 +25,7 @@ protected: template class handler_entry_write_address : public handler_entry_write { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; static constexpr u32 NATIVE_MASK = Width + AddrShift >= 0 ? (1 << (Width + AddrShift)) - 1 : 0; diff --git a/src/emu/emumem_hedp.cpp b/src/emu/emumem_hedp.cpp index 3c0596433bd..b053f84c592 100644 --- a/src/emu/emumem_hedp.cpp +++ b/src/emu/emumem_hedp.cpp @@ -10,7 +10,7 @@ template template 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) const + emu::detail::handler_entry_size_t > handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) const { return m_delegate(*this->m_space, ((offset - this->m_address_base) & this->m_address_mask) >> (Width + AddrShift), mem_mask); } @@ -20,7 +20,7 @@ template template 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) const + emu::detail::handler_entry_size_t > handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) const { return m_delegate(*this->m_space, ((offset - this->m_address_base) & this->m_address_mask) >> (Width + AddrShift)); } @@ -30,7 +30,7 @@ template template 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) const + emu::detail::handler_entry_size_t > handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) const { return m_delegate(((offset - this->m_address_base) & this->m_address_mask) >> (Width + AddrShift), mem_mask); } @@ -40,7 +40,7 @@ template template 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) const + emu::detail::handler_entry_size_t > handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) const { return m_delegate(((offset - this->m_address_base) & this->m_address_mask) >> (Width + AddrShift)); } @@ -50,7 +50,7 @@ template template 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) const + emu::detail::handler_entry_size_t > handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) const { return m_delegate(*this->m_space); } @@ -60,22 +60,22 @@ template template 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) const + emu::detail::handler_entry_size_t > handler_entry_read_delegate::read_impl(offs_t offset, uX mem_mask) const { return m_delegate(); } -template typename emu::detail::handler_entry_size::uX handler_entry_read_delegate::read(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_delegate::read(offs_t offset, uX mem_mask) const { return read_impl(offset, mem_mask); } -template typename emu::detail::handler_entry_size::uX handler_entry_read_delegate::read_interruptible(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_delegate::read_interruptible(offs_t offset, uX mem_mask) const { return read_impl(offset, mem_mask); } -template std::pair::uX, u16> handler_entry_read_delegate::read_flags(offs_t offset, uX mem_mask) const +template std::pair, u16> handler_entry_read_delegate::read_flags(offs_t offset, uX mem_mask) const { return std::pair(read_impl(offset, mem_mask), this->m_flags); } @@ -179,17 +179,17 @@ template std::string handler_entry_wri -template typename emu::detail::handler_entry_size::uX handler_entry_read_ioport::read(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_ioport::read(offs_t offset, uX mem_mask) const { return m_port->read(); } -template typename emu::detail::handler_entry_size::uX handler_entry_read_ioport::read_interruptible(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_ioport::read_interruptible(offs_t offset, uX mem_mask) const { return m_port->read(); } -template std::pair::uX, u16> handler_entry_read_ioport::read_flags(offs_t offset, uX mem_mask) const +template std::pair, u16> handler_entry_read_ioport::read_flags(offs_t offset, uX mem_mask) const { return std::pair(m_port->read(), this->m_flags); } diff --git a/src/emu/emumem_hedp.h b/src/emu/emumem_hedp.h index f320d5a3b27..6b8563bd5b5 100644 --- a/src/emu/emumem_hedp.h +++ b/src/emu/emumem_hedp.h @@ -12,7 +12,7 @@ template class handler_entry_read_delegate : public handler_entry_read_address { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_read_delegate(address_space *space, u16 flags, const READ &delegate) : handler_entry_read_address(space, flags), m_delegate(delegate) {} ~handler_entry_read_delegate() = default; @@ -73,7 +73,7 @@ private: template class handler_entry_write_delegate : public handler_entry_write_address { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_write_delegate(address_space *space, u16 flags, const WRITE &delegate) : handler_entry_write_address(space, flags), m_delegate(delegate) {} ~handler_entry_write_delegate() = default; @@ -139,7 +139,7 @@ private: template class handler_entry_read_ioport : public handler_entry_read { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_read_ioport(address_space *space, u16 flags, ioport_port *port) : handler_entry_read(space, flags), m_port(port) {} ~handler_entry_read_ioport() = default; @@ -158,7 +158,7 @@ private: template class handler_entry_write_ioport : public handler_entry_write { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_write_ioport(address_space *space, u16 flags, ioport_port *port) : handler_entry_write(space, flags), m_port(port) {} ~handler_entry_write_ioport() = default; diff --git a/src/emu/emumem_hedr.h b/src/emu/emumem_hedr.h index 8c06dabfd25..e1e9aa98743 100644 --- a/src/emu/emumem_hedr.h +++ b/src/emu/emumem_hedr.h @@ -13,7 +13,7 @@ template class handler_entry_read_dispatch : public handler_entry_read { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; using mapping = typename handler_entry_read::mapping; handler_entry_read_dispatch(address_space *space, const handler_entry::range &init, handler_entry_read *handler); diff --git a/src/emu/emumem_hedr.ipp b/src/emu/emumem_hedr.ipp index 4ddf2d8ede1..9994f251897 100644 --- a/src/emu/emumem_hedr.ipp +++ b/src/emu/emumem_hedr.ipp @@ -127,17 +127,17 @@ template void handler_entry_read_dispatc } } -template typename emu::detail::handler_entry_size::uX handler_entry_read_dispatch::read(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_dispatch::read(offs_t offset, uX mem_mask) const { return dispatch_read(HIGHMASK, offset, mem_mask, m_a_dispatch); } -template typename emu::detail::handler_entry_size::uX handler_entry_read_dispatch::read_interruptible(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_dispatch::read_interruptible(offs_t offset, uX mem_mask) const { return dispatch_read_interruptible(HIGHMASK, offset, mem_mask, m_a_dispatch); } -template std::pair::uX, u16> handler_entry_read_dispatch::read_flags(offs_t offset, uX mem_mask) const +template std::pair, u16> handler_entry_read_dispatch::read_flags(offs_t offset, uX mem_mask) const { return dispatch_read_flags(HIGHMASK, offset, mem_mask, m_a_dispatch); } diff --git a/src/emu/emumem_hedw.h b/src/emu/emumem_hedw.h index aa1cb654e37..130293a73a4 100644 --- a/src/emu/emumem_hedw.h +++ b/src/emu/emumem_hedw.h @@ -13,7 +13,7 @@ template class handler_entry_write_dispatch : public handler_entry_write { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; using mapping = typename handler_entry_write::mapping; handler_entry_write_dispatch(address_space *space, const handler_entry::range &init, handler_entry_write *handler); diff --git a/src/emu/emumem_hem.cpp b/src/emu/emumem_hem.cpp index ac0e2d06d69..e69206d7653 100644 --- a/src/emu/emumem_hem.cpp +++ b/src/emu/emumem_hem.cpp @@ -5,17 +5,17 @@ #include "emumem_hea.h" #include "emumem_hem.h" -template typename emu::detail::handler_entry_size::uX handler_entry_read_memory::read(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_memory::read(offs_t offset, uX mem_mask) const { return m_base[((offset - this->m_address_base) & this->m_address_mask) >> (Width + AddrShift)]; } -template typename emu::detail::handler_entry_size::uX handler_entry_read_memory::read_interruptible(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_memory::read_interruptible(offs_t offset, uX mem_mask) const { return m_base[((offset - this->m_address_base) & this->m_address_mask) >> (Width + AddrShift)]; } -template std::pair::uX, u16> handler_entry_read_memory::read_flags(offs_t offset, uX mem_mask) const +template std::pair, u16> handler_entry_read_memory::read_flags(offs_t offset, uX mem_mask) const { return std::pair(m_base[((offset - this->m_address_base) & this->m_address_mask) >> (Width + AddrShift)], this->m_flags); } @@ -90,17 +90,17 @@ template std::string handler_entry_write_memory typename emu::detail::handler_entry_size::uX handler_entry_read_memory_bank::read(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_memory_bank::read(offs_t offset, uX mem_mask) const { return static_cast(m_bank.base())[((offset - this->m_address_base) & this->m_address_mask) >> (Width + AddrShift)]; } -template typename emu::detail::handler_entry_size::uX handler_entry_read_memory_bank::read_interruptible(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_memory_bank::read_interruptible(offs_t offset, uX mem_mask) const { return static_cast(m_bank.base())[((offset - this->m_address_base) & this->m_address_mask) >> (Width + AddrShift)]; } -template std::pair::uX, u16> handler_entry_read_memory_bank::read_flags(offs_t offset, uX mem_mask) const +template std::pair, u16> handler_entry_read_memory_bank::read_flags(offs_t offset, uX mem_mask) const { return std::pair(static_cast(m_bank.base())[((offset - this->m_address_base) & this->m_address_mask) >> (Width + AddrShift)], this->m_flags); } diff --git a/src/emu/emumem_hem.h b/src/emu/emumem_hem.h index 3eb082ca773..d4c8c145860 100644 --- a/src/emu/emumem_hem.h +++ b/src/emu/emumem_hem.h @@ -12,7 +12,7 @@ template class handler_entry_read_memory : public handler_entry_read_address { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_read_memory(address_space *space, u16 flags, void *base) : handler_entry_read_address(space, flags), m_base(reinterpret_cast(base)) {} ~handler_entry_read_memory() = default; @@ -32,7 +32,7 @@ private: template class handler_entry_write_memory : public handler_entry_write_address { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_write_memory(address_space *space, u16 flags, void *base) : handler_entry_write_address(space, flags), m_base(reinterpret_cast(base)) {} ~handler_entry_write_memory() = default; @@ -57,7 +57,7 @@ private: template class handler_entry_read_memory_bank : public handler_entry_read_address { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_read_memory_bank(address_space *space, u16 flags, memory_bank &bank) : handler_entry_read_address(space, flags), m_bank(bank) {} ~handler_entry_read_memory_bank() = default; @@ -77,7 +77,7 @@ private: template class handler_entry_write_memory_bank : public handler_entry_write_address { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_write_memory_bank(address_space *space, u16 flags, memory_bank &bank) : handler_entry_write_address(space, flags), m_bank(bank) {} ~handler_entry_write_memory_bank() = default; diff --git a/src/emu/emumem_hep.h b/src/emu/emumem_hep.h index c5022f8b91e..bc8616cea2b 100644 --- a/src/emu/emumem_hep.h +++ b/src/emu/emumem_hep.h @@ -8,7 +8,7 @@ template class handler_entry_read_passthrough : public handler_entry_read { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_read_passthrough(address_space *space, emu::detail::memory_passthrough_handler_impl &mph, u32 prio) : handler_entry_read(space, handler_entry::f_pt(prio)), m_mph(mph), m_next(nullptr) {} ~handler_entry_read_passthrough(); @@ -29,7 +29,7 @@ protected: template class handler_entry_write_passthrough : public handler_entry_write { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_write_passthrough(address_space *space, emu::detail::memory_passthrough_handler_impl &mph, u32 prio) : handler_entry_write(space, handler_entry::f_pt(prio)), m_mph(mph), m_next(nullptr) {} ~handler_entry_write_passthrough(); diff --git a/src/emu/emumem_het.cpp b/src/emu/emumem_het.cpp index decc2432bc9..23349659a48 100644 --- a/src/emu/emumem_het.cpp +++ b/src/emu/emumem_het.cpp @@ -5,7 +5,7 @@ #include "emumem_hep.h" #include "emumem_het.h" -template typename emu::detail::handler_entry_size::uX handler_entry_read_tap::read(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_tap::read(offs_t offset, uX mem_mask) const { this->ref(); @@ -16,7 +16,7 @@ template typename emu::detail::handler_entry_size typename emu::detail::handler_entry_size::uX handler_entry_read_tap::read_interruptible(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_tap::read_interruptible(offs_t offset, uX mem_mask) const { this->ref(); @@ -27,7 +27,7 @@ template typename emu::detail::handler_entry_size std::pair::uX, u16> handler_entry_read_tap::read_flags(offs_t offset, uX mem_mask) const +template std::pair, u16> handler_entry_read_tap::read_flags(offs_t offset, uX mem_mask) const { this->ref(); diff --git a/src/emu/emumem_het.h b/src/emu/emumem_het.h index 8b13d1ed743..97650c6cbe3 100644 --- a/src/emu/emumem_het.h +++ b/src/emu/emumem_het.h @@ -12,7 +12,7 @@ template class handler_entry_read_tap : public handler_entry_read_passthrough { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_read_tap(address_space *space, emu::detail::memory_passthrough_handler_impl &mph, std::string name, std::function tap) : handler_entry_read_passthrough(space, mph, 4), m_name(name), m_tap(std::move(tap)) {} ~handler_entry_read_tap() = default; @@ -36,7 +36,7 @@ protected: template class handler_entry_write_tap : public handler_entry_write_passthrough { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_write_tap(address_space *space, emu::detail::memory_passthrough_handler_impl &mph, std::string name, std::function tap) : handler_entry_write_passthrough(space, mph, 4), m_name(name), m_tap(std::move(tap)) {} ~handler_entry_write_tap() = default; diff --git a/src/emu/emumem_heu.cpp b/src/emu/emumem_heu.cpp index ffed8ed16a4..ada5d56d63a 100644 --- a/src/emu/emumem_heu.cpp +++ b/src/emu/emumem_heu.cpp @@ -75,7 +75,7 @@ template void handler_entry_read_units typename emu::detail::handler_entry_size::uX handler_entry_read_units::read(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_units::read(offs_t offset, uX mem_mask) const { this->ref(); @@ -104,12 +104,12 @@ template typename emu::detail::handler_entry_size typename emu::detail::handler_entry_size::uX handler_entry_read_units::read_interruptible(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_units::read_interruptible(offs_t offset, uX mem_mask) const { return read(offset, mem_mask); } -template std::pair::uX, u16> handler_entry_read_units::read_flags(offs_t offset, uX mem_mask) const +template std::pair, u16> handler_entry_read_units::read_flags(offs_t offset, uX mem_mask) const { this->ref(); @@ -171,7 +171,7 @@ template u16 handler_entry_read_units std::string handler_entry_read_units::m2r(typename emu::detail::handler_entry_size::uX mask) +template std::string handler_entry_read_units::m2r(emu::detail::handler_entry_size_t mask) { constexpr u32 mbits = 8*sizeof(uX); u32 start, end; @@ -354,7 +354,7 @@ template u16 handler_entry_write_units std::string handler_entry_write_units::m2r(typename emu::detail::handler_entry_size::uX mask) +template std::string handler_entry_write_units::m2r(emu::detail::handler_entry_size_t mask) { constexpr u32 mbits = 8*sizeof(uX); u32 start, end; diff --git a/src/emu/emumem_heu.h b/src/emu/emumem_heu.h index 51fbae30f65..8573cc4e334 100644 --- a/src/emu/emumem_heu.h +++ b/src/emu/emumem_heu.h @@ -12,7 +12,7 @@ template class handler_entry_read_units : public handler_entry_read { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_read_units(const memory_units_descriptor &descriptor, u8 ukey, address_space *space); handler_entry_read_units(const memory_units_descriptor &descriptor, u8 ukey, const handler_entry_read_units *src); @@ -56,7 +56,7 @@ private: template class handler_entry_write_units : public handler_entry_write { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_write_units(const memory_units_descriptor &descriptor, u8 ukey, address_space *space); handler_entry_write_units(const memory_units_descriptor &descriptor, u8 ukey, const handler_entry_write_units *src); diff --git a/src/emu/emumem_heun.cpp b/src/emu/emumem_heun.cpp index 17e6d4dcf4b..5157c2c35df 100644 --- a/src/emu/emumem_heun.cpp +++ b/src/emu/emumem_heun.cpp @@ -5,7 +5,7 @@ #include "emumem_hea.h" #include "emumem_heun.h" -template typename emu::detail::handler_entry_size::uX handler_entry_read_unmapped::read(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_unmapped::read(offs_t offset, uX mem_mask) const { if (this->m_space->log_unmap() && !this->m_space->m_manager.machine().side_effects_disabled()) this->m_space->device().logerror(this->m_space->is_octal() @@ -17,7 +17,7 @@ template typename emu::detail::handler_entry_sizem_space->unmap(); } -template typename emu::detail::handler_entry_size::uX handler_entry_read_unmapped::read_interruptible(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_unmapped::read_interruptible(offs_t offset, uX mem_mask) const { if (this->m_space->log_unmap() && !this->m_space->m_manager.machine().side_effects_disabled()) this->m_space->device().logerror(this->m_space->is_octal() @@ -29,7 +29,7 @@ template typename emu::detail::handler_entry_sizem_space->unmap(); } -template std::pair::uX, u16> handler_entry_read_unmapped::read_flags(offs_t offset, uX mem_mask) const +template std::pair, u16> handler_entry_read_unmapped::read_flags(offs_t offset, uX mem_mask) const { if (this->m_space->log_unmap() && !this->m_space->m_manager.machine().side_effects_disabled()) this->m_space->device().logerror(this->m_space->is_octal() @@ -116,17 +116,17 @@ template std::string handler_entry_write_unmapped typename emu::detail::handler_entry_size::uX handler_entry_read_nop::read(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_nop::read(offs_t offset, uX mem_mask) const { return this->m_space->unmap(); } -template typename emu::detail::handler_entry_size::uX handler_entry_read_nop::read_interruptible(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_nop::read_interruptible(offs_t offset, uX mem_mask) const { return this->m_space->unmap(); } -template std::pair::uX, u16> handler_entry_read_nop::read_flags(offs_t offset, uX mem_mask) const +template std::pair, u16> handler_entry_read_nop::read_flags(offs_t offset, uX mem_mask) const { return std::pair(this->m_space->unmap(), this->m_flags); } diff --git a/src/emu/emumem_heun.h b/src/emu/emumem_heun.h index dc6507a3542..69a97e84f37 100644 --- a/src/emu/emumem_heun.h +++ b/src/emu/emumem_heun.h @@ -12,7 +12,7 @@ template class handler_entry_read_unmapped : public handler_entry_read { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_read_unmapped(address_space *space, u16 flags) : handler_entry_read(space, handler_entry::F_UNMAP | flags) {} ~handler_entry_read_unmapped() = default; @@ -28,7 +28,7 @@ public: template class handler_entry_write_unmapped : public handler_entry_write { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_write_unmapped(address_space *space, u16 flags) : handler_entry_write(space, handler_entry::F_UNMAP | flags) {} ~handler_entry_write_unmapped() = default; @@ -50,7 +50,7 @@ public: template class handler_entry_read_nop : public handler_entry_read { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_read_nop(address_space *space, u16 flags) : handler_entry_read(space, flags) {} ~handler_entry_read_nop() = default; @@ -66,7 +66,7 @@ public: template class handler_entry_write_nop : public handler_entry_write { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_write_nop(address_space *space, u16 flags) : handler_entry_write(space, flags) {} ~handler_entry_write_nop() = default; diff --git a/src/emu/emumem_hws.cpp b/src/emu/emumem_hws.cpp index 39d22e971b1..9aae20d9f4c 100644 --- a/src/emu/emumem_hws.cpp +++ b/src/emu/emumem_hws.cpp @@ -5,12 +5,12 @@ #include "emumem_hep.h" #include "emumem_hws.h" -template typename emu::detail::handler_entry_size::uX handler_entry_read_before_time::read(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_before_time::read(offs_t offset, uX mem_mask) const { return this->m_next->read(offset, mem_mask); } -template typename emu::detail::handler_entry_size::uX handler_entry_read_before_time::read_interruptible(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_before_time::read_interruptible(offs_t offset, uX mem_mask) const { u64 tc = m_cpu.total_cycles(); u64 ac = m_ws(offset, tc); @@ -24,7 +24,7 @@ template typename emu::detail::handler_entry_sizem_next->read_interruptible(offset, mem_mask); } -template std::pair::uX, u16> handler_entry_read_before_time::read_flags(offs_t offset, uX mem_mask) const +template std::pair, u16> handler_entry_read_before_time::read_flags(offs_t offset, uX mem_mask) const { return this->m_next->read_flags(offset, mem_mask); } @@ -116,12 +116,12 @@ template class handler_entry_write_before_time<3, -3>; -template typename emu::detail::handler_entry_size::uX handler_entry_read_before_delay::read(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_before_delay::read(offs_t offset, uX mem_mask) const { return this->m_next->read(offset, mem_mask); } -template typename emu::detail::handler_entry_size::uX handler_entry_read_before_delay::read_interruptible(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_before_delay::read_interruptible(offs_t offset, uX mem_mask) const { if(m_cpu.access_before_delay(m_ws(offset), this)) return 0; @@ -129,7 +129,7 @@ template typename emu::detail::handler_entry_sizem_next->read_interruptible(offset, mem_mask); } -template std::pair::uX, u16> handler_entry_read_before_delay::read_flags(offs_t offset, uX mem_mask) const +template std::pair, u16> handler_entry_read_before_delay::read_flags(offs_t offset, uX mem_mask) const { return this->m_next->read_flags(offset, mem_mask); } @@ -215,19 +215,19 @@ template class handler_entry_write_before_delay<3, -3>; -template typename emu::detail::handler_entry_size::uX handler_entry_read_after_delay::read(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_after_delay::read(offs_t offset, uX mem_mask) const { return this->m_next->read(offset, mem_mask); } -template typename emu::detail::handler_entry_size::uX handler_entry_read_after_delay::read_interruptible(offs_t offset, uX mem_mask) const +template emu::detail::handler_entry_size_t handler_entry_read_after_delay::read_interruptible(offs_t offset, uX mem_mask) const { auto r = this->m_next->read_interruptible(offset, mem_mask); m_cpu.access_after_delay(m_ws(offset)); return r; } -template std::pair::uX, u16> handler_entry_read_after_delay::read_flags(offs_t offset, uX mem_mask) const +template std::pair, u16> handler_entry_read_after_delay::read_flags(offs_t offset, uX mem_mask) const { return this->m_next->read_flags(offset, mem_mask); } diff --git a/src/emu/emumem_hws.h b/src/emu/emumem_hws.h index de35633f66d..baaad6c7a07 100644 --- a/src/emu/emumem_hws.h +++ b/src/emu/emumem_hws.h @@ -14,7 +14,7 @@ template class handler_entry_read_before_time : public handler_entry_read_passthrough { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_read_before_time(address_space *space, emu::detail::memory_passthrough_handler_impl &mph, const ws_time_delegate &ws) : handler_entry_read_passthrough(space, mph, 13), m_ws(ws), m_cpu(downcast(space->device())) {} ~handler_entry_read_before_time() = default; @@ -38,7 +38,7 @@ protected: template class handler_entry_write_before_time : public handler_entry_write_passthrough { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_write_before_time(address_space *space, emu::detail::memory_passthrough_handler_impl &mph, const ws_time_delegate &ws) : handler_entry_write_passthrough(space, mph, 13), m_ws(ws), m_cpu(downcast(space->device())) {} ~handler_entry_write_before_time() = default; @@ -64,7 +64,7 @@ protected: template class handler_entry_read_before_delay : public handler_entry_read_passthrough { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_read_before_delay(address_space *space, emu::detail::memory_passthrough_handler_impl &mph, const ws_delay_delegate &ws) : handler_entry_read_passthrough(space, mph, 13), m_ws(ws), m_cpu(downcast(space->device())) {} ~handler_entry_read_before_delay() = default; @@ -88,7 +88,7 @@ protected: template class handler_entry_write_before_delay : public handler_entry_write_passthrough { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_write_before_delay(address_space *space, emu::detail::memory_passthrough_handler_impl &mph, const ws_delay_delegate &ws) : handler_entry_write_passthrough(space, mph, 11), m_ws(ws), m_cpu(downcast(space->device())) {} ~handler_entry_write_before_delay() = default; @@ -114,7 +114,7 @@ protected: template class handler_entry_read_after_delay : public handler_entry_read_passthrough { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_read_after_delay(address_space *space, emu::detail::memory_passthrough_handler_impl &mph, const ws_delay_delegate &ws) : handler_entry_read_passthrough(space, mph, 9), m_ws(ws), m_cpu(downcast(space->device())) {} ~handler_entry_read_after_delay() = default; @@ -138,7 +138,7 @@ protected: template class handler_entry_write_after_delay : public handler_entry_write_passthrough { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; handler_entry_write_after_delay(address_space *space, emu::detail::memory_passthrough_handler_impl &mph, const ws_delay_delegate &ws) : handler_entry_write_passthrough(space, mph, 9), m_ws(ws), m_cpu(downcast(space->device())) {} ~handler_entry_write_after_delay() = default; diff --git a/src/emu/emumem_mud.cpp b/src/emu/emumem_mud.cpp index b8fed565eea..4c52b5a1301 100644 --- a/src/emu/emumem_mud.cpp +++ b/src/emu/emumem_mud.cpp @@ -35,7 +35,7 @@ template<> u8 mask_to_ukey(u64 mask) (mask & 0x00000000000000ff ? 0x01 : 0x00); } -template memory_units_descriptor::memory_units_descriptor(u8 access_width, endianness_t access_endian, handler_entry *handler, offs_t addrstart, offs_t addrend, offs_t mask, typename emu::detail::handler_entry_size::uX unitmask, int cswidth) : m_handler(handler), m_access_width(access_width), m_access_endian(access_endian) +template memory_units_descriptor::memory_units_descriptor(u8 access_width, endianness_t access_endian, handler_entry *handler, offs_t addrstart, offs_t addrend, offs_t mask, emu::detail::handler_entry_size_t unitmask, int cswidth) : m_handler(handler), m_access_width(access_width), m_access_endian(access_endian) { u32 bits_per_access = 8 << access_width; constexpr u32 NATIVE_MASK = Width + AddrShift >= 0 ? make_bitmask(Width + AddrShift) : 0; @@ -86,7 +86,7 @@ template memory_units_descriptor::me generate(m_keymap[i], unitmask, umasks[i], cswidth, bits_per_access, base_shift, shift, active_count); } -template void memory_units_descriptor::generate(u8 ukey, typename emu::detail::handler_entry_size::uX gumask, typename emu::detail::handler_entry_size::uX umask, u32 cswidth, u32 bits_per_access, u8 base_shift, s8 shift, u32 active_count) +template void memory_units_descriptor::generate(u8 ukey, emu::detail::handler_entry_size_t gumask, emu::detail::handler_entry_size_t umask, u32 cswidth, u32 bits_per_access, u8 base_shift, s8 shift, u32 active_count) { auto &entries = m_entries_for_key[ukey]; diff --git a/src/emu/emumem_mud.h b/src/emu/emumem_mud.h index 12c8cf92eb5..4a8b6509aa0 100644 --- a/src/emu/emumem_mud.h +++ b/src/emu/emumem_mud.h @@ -5,7 +5,7 @@ template class memory_units_descriptor { public: - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; struct entry { uX m_amask; diff --git a/src/emu/emumem_mview.cpp b/src/emu/emumem_mview.cpp index 6b1b6064e91..2456cadc7f9 100644 --- a/src/emu/emumem_mview.cpp +++ b/src/emu/emumem_mview.cpp @@ -38,58 +38,7 @@ template static void VPRINTF(Format &&fmt, template static void VPRINTF(Format &&, Params &&...) {} #endif -namespace { - -template struct handler_width; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 0; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 1; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 2; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -template <> struct handler_width { static constexpr int value = 3; }; -} // anonymous namespace +using emu::detail::handler_width_v; address_map_entry &memory_view::memory_view_entry::operator()(offs_t start, offs_t end) { @@ -99,7 +48,7 @@ address_map_entry &memory_view::memory_view_entry::operator()(offs_t start, offs template class memory_view_entry_specific : public memory_view::memory_view_entry { - using uX = typename emu::detail::handler_entry_size::uX; + using uX = emu::detail::handler_entry_size_t; using NativeType = uX; // constants describing the native size @@ -154,151 +103,103 @@ public: { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8_delegate rhandler, write8_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16_delegate rhandler, write16_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32_delegate rhandler, write32_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16s_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16s_delegate rhandler, write16s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32s_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32s_delegate rhandler, write32s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64s_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64s_delegate rhandler, write64s_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8sm_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8sm_delegate rhandler, write8sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16sm_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16sm_delegate rhandler, write16sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32sm_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32sm_delegate rhandler, write32sm_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64sm_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } 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, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } 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, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - 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, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16smo_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16smo_delegate rhandler, write16smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32smo_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32smo_delegate rhandler, write32smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64smo_delegate rhandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_read_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler); } void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override { install_write_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, whandler); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64smo_delegate rhandler, write64smo_delegate whandler, u64 unitmask = 0, int cswidth = 0, u16 flags = 0) override - { install_readwrite_handler_impl(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, rhandler, whandler); } template void install_read_handler_impl(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, u64 unitmask, int cswidth, u16 flags, READ &handler_r) @@ -308,7 +209,7 @@ public: osd_printf_error("Binding error while installing read handler %s for range 0x%X-0x%X mask 0x%X mirror 0x%X select 0x%X umask 0x%X\n", handler_r.name(), addrstart, addrend, addrmask, addrmirror, addrselect, unitmask); throw; } - install_read_handler_helper::value>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, handler_r); + install_read_handler_helper >(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, handler_r); } template @@ -319,24 +220,7 @@ public: osd_printf_error("Binding error while installing write handler %s for range 0x%X-0x%X mask 0x%X mirror 0x%X select 0x%X umask 0x%X\n", handler_w.name(), addrstart, addrend, addrmask, addrmirror, addrselect, unitmask); throw; } - install_write_handler_helper::value>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, handler_w); - } - - template - void install_readwrite_handler_impl(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, u64 unitmask, int cswidth, u16 flags, READ &handler_r, WRITE &handler_w) - { - static_assert(handler_width::value == handler_width::value, "handler widths do not match"); - try { handler_r.resolve(); } - catch (const binding_type_exception &) { - osd_printf_error("Binding error while installing read handler %s for range 0x%X-0x%X mask 0x%X mirror 0x%X select 0x%X umask 0x%X\n", handler_r.name(), addrstart, addrend, addrmask, addrmirror, addrselect, unitmask); - throw; - } - try { handler_w.resolve(); } - catch (const binding_type_exception &) { - osd_printf_error("Binding error while installing write handler %s for range 0x%X-0x%X mask 0x%X mirror 0x%X select 0x%X umask 0x%X\n", handler_w.name(), addrstart, addrend, addrmask, addrmirror, addrselect, unitmask); - throw; - } - install_readwrite_handler_helper::value>(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, handler_r, handler_w); + install_write_handler_helper >(addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, flags, handler_w); } template @@ -409,53 +293,6 @@ public: invalidate_caches(read_or_write::WRITE); } } - - template - void install_readwrite_handler_helper(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, u64 unitmask, int cswidth, u16 flags, - const READ &handler_r, - const WRITE &handler_w) - { - if constexpr (Width < AccessWidth) { - fatalerror("install_readwrite_handler: cannot install a %d-wide handler in a %d-wide bus", 8 << AccessWidth, 8 << Width); - } else { - VPRINTF("memory_view::install_readwrite_handler(%*x-%*x mask=%*x mirror=%*x, space width=%d, handler width=%d, %s, %s, %*x)\n", - m_addrchars, addrstart, m_addrchars, addrend, - m_addrchars, addrmask, m_addrchars, addrmirror, - 8 << Width, 8 << AccessWidth, - handler_r.name(), handler_w.name(), data_width() / 4, unitmask); - - r()->select_u(m_id); - w()->select_u(m_id); - - offs_t nstart, nend, nmask, nmirror; - u64 nunitmask; - int ncswidth; - check_optimize_all("install_readwrite_handler", 8 << AccessWidth, addrstart, addrend, addrmask, addrmirror, addrselect, unitmask, cswidth, nstart, nend, nmask, nmirror, nunitmask, ncswidth); - - if constexpr (Width == AccessWidth) { - auto hand_r = new handler_entry_read_delegate (m_view.m_space, flags, handler_r); - hand_r->set_address_info(nstart, nmask); - r() ->populate(nstart, nend, nmirror, hand_r); - - auto hand_w = new handler_entry_write_delegate(m_view.m_space, flags, handler_w); - hand_w->set_address_info(nstart, nmask); - w()->populate(nstart, nend, nmirror, hand_w); - } else { - auto hand_r = new handler_entry_read_delegate (m_view.m_space, flags, handler_r); - memory_units_descriptor descriptor(AccessWidth, endianness(), hand_r, nstart, nend, nmask, nunitmask, ncswidth); - hand_r->set_address_info(descriptor.get_handler_start(), descriptor.get_handler_mask()); - r() ->populate_mismatched(nstart, nend, nmirror, descriptor); - hand_r->unref(); - - auto hand_w = new handler_entry_write_delegate(m_view.m_space, flags, handler_w); - descriptor.set_subunit_handler(hand_w); - hand_w->set_address_info(descriptor.get_handler_start(), descriptor.get_handler_mask()); - w()->populate_mismatched(nstart, nend, nmirror, descriptor); - hand_w->unref(); - } - invalidate_caches(read_or_write::READWRITE); - } - } }; namespace { diff --git a/src/mame/apple/bandit.cpp b/src/mame/apple/bandit.cpp index 79341a45a96..ee2008417b3 100644 --- a/src/mame/apple/bandit.cpp +++ b/src/mame/apple/bandit.cpp @@ -66,31 +66,31 @@ void bandit_host_device::device_start() status = 0x0080; revision = 0; - m_cpu_space->install_read_handler(0x80000000, 0xefffffff, read32s_delegate(*this, FUNC(bandit_host_device::pci_memory_r<0x80000000>))); - m_cpu_space->install_write_handler(0x80000000, 0xefffffff, write32s_delegate(*this, FUNC(bandit_host_device::pci_memory_w<0x80000000>))); + m_cpu_space->install_read_handler(0x80000000, 0xefffffff, emu::rw_delegate(*this, FUNC(bandit_host_device::pci_memory_r<0x80000000>))); + m_cpu_space->install_write_handler(0x80000000, 0xefffffff, emu::rw_delegate(*this, FUNC(bandit_host_device::pci_memory_w<0x80000000>))); // TODO: PCI I/O space is at Fn000000-Fn7FFFFF, but it's unclear where in the PCI space that maps to switch (m_dev_offset) { case 0: - m_cpu_space->install_read_handler(0xf1000000, 0xf1ffffff, read32s_delegate(*this, FUNC(bandit_host_device::pci_memory_r<0xf1000000>))); - m_cpu_space->install_write_handler(0xf1000000, 0xf1ffffff, write32s_delegate(*this, FUNC(bandit_host_device::pci_memory_w<0xf1000000>))); + m_cpu_space->install_read_handler(0xf1000000, 0xf1ffffff, emu::rw_delegate(*this, FUNC(bandit_host_device::pci_memory_r<0xf1000000>))); + m_cpu_space->install_write_handler(0xf1000000, 0xf1ffffff, emu::rw_delegate(*this, FUNC(bandit_host_device::pci_memory_w<0xf1000000>))); break; case 1: - m_cpu_space->install_read_handler(0xf3000000, 0xf3ffffff, read32s_delegate(*this, FUNC(bandit_host_device::pci_memory_r<0xf3000000>))); - m_cpu_space->install_write_handler(0xf3000000, 0xf3ffffff, write32s_delegate(*this, FUNC(bandit_host_device::pci_memory_w<0xf3000000>))); + m_cpu_space->install_read_handler(0xf3000000, 0xf3ffffff, emu::rw_delegate(*this, FUNC(bandit_host_device::pci_memory_r<0xf3000000>))); + m_cpu_space->install_write_handler(0xf3000000, 0xf3ffffff, emu::rw_delegate(*this, FUNC(bandit_host_device::pci_memory_w<0xf3000000>))); break; case 2: - m_cpu_space->install_read_handler(0xf5000000, 0xf5ffffff, read32s_delegate(*this, FUNC(bandit_host_device::pci_memory_r<0xf5000000>))); - m_cpu_space->install_write_handler(0xf5000000, 0xf5ffffff, write32s_delegate(*this, FUNC(bandit_host_device::pci_memory_w<0xf5000000>))); + m_cpu_space->install_read_handler(0xf5000000, 0xf5ffffff, emu::rw_delegate(*this, FUNC(bandit_host_device::pci_memory_r<0xf5000000>))); + m_cpu_space->install_write_handler(0xf5000000, 0xf5ffffff, emu::rw_delegate(*this, FUNC(bandit_host_device::pci_memory_w<0xf5000000>))); break; case 3: - m_cpu_space->install_read_handler(0xf7000000, 0xf7ffffff, read32s_delegate(*this, FUNC(bandit_host_device::pci_memory_r<0xf7000000>))); - m_cpu_space->install_write_handler(0xf7000000, 0xf7ffffff, write32s_delegate(*this, FUNC(bandit_host_device::pci_memory_w<0xf7000000>))); + m_cpu_space->install_read_handler(0xf7000000, 0xf7ffffff, emu::rw_delegate(*this, FUNC(bandit_host_device::pci_memory_r<0xf7000000>))); + m_cpu_space->install_write_handler(0xf7000000, 0xf7ffffff, emu::rw_delegate(*this, FUNC(bandit_host_device::pci_memory_w<0xf7000000>))); break; } -- cgit v1.2.3