diff --git a/src/emu/addrmap.h b/src/emu/addrmap.h index 5a256c735fe..03d325f2372 100644 --- a/src/emu/addrmap.h +++ b/src/emu/addrmap.h @@ -231,35 +231,77 @@ public: // device finder -> delegate converter template address_map_entry &r(device_finder &finder, Ret (U::*read)(Params...), const char *read_name) - { const std::pair target(finder.finder_target()); device_t &device(*target.first.subdevice(target.second)); return r(emu::detail::make_delegate(read, read_name, device.tag(), make_pointer(device))); } + { + const std::pair target(finder.finder_target()); + device_t *device(target.first.subdevice(target.second)); + assert(device != nullptr); + return r(emu::detail::make_delegate(read, read_name, device->tag(), make_pointer(*device))); + } template address_map_entry &r(const device_finder &finder, Ret (U::*read)(Params...), const char *read_name) - { const std::pair target(finder.finder_target()); device_t &device(*target.first.subdevice(target.second)); return r(emu::detail::make_delegate(read, read_name, device.tag(), make_pointer(device))); } + { + const std::pair target(finder.finder_target()); + device_t *device(target.first.subdevice(target.second)); + assert(device != nullptr); + return r(emu::detail::make_delegate(read, read_name, device->tag(), make_pointer(*device))); + } template address_map_entry &w(device_finder &finder, Ret (U::*write)(Params...), const char *write_name) - { const std::pair target(finder.finder_target()); device_t &device(*target.first.subdevice(target.second)); return w(emu::detail::make_delegate(write, write_name, device.tag(), make_pointer(device))); } + { + const std::pair target(finder.finder_target()); + device_t *device(target.first.subdevice(target.second)); + assert(device != nullptr); + return w(emu::detail::make_delegate(write, write_name, device->tag(), make_pointer(*device))); + } template address_map_entry &w(const device_finder &finder, Ret (U::*write)(Params...), const char *write_name) - { const std::pair target(finder.finder_target()); device_t &device(*target.first.subdevice(target.second)); return w(emu::detail::make_delegate(write, write_name, device.tag(), make_pointer(device))); } + { + const std::pair target(finder.finder_target()); + device_t *device(target.first.subdevice(target.second)); + assert(device != nullptr); + return w(emu::detail::make_delegate(write, write_name, device->tag(), make_pointer(*device))); + } template address_map_entry &rw(device_finder &finder, RetR (U::*read)(ParamsR...), const char *read_name, RetW (V::*write)(ParamsW...), const char *write_name) - { const std::pair target(finder.finder_target()); device_t &device(*target.first.subdevice(target.second)); return r(emu::detail::make_delegate(read, read_name, device.tag(), make_pointer(device))).w(emu::detail::make_delegate(write, write_name, device.tag(), make_pointer(device))); } + { + const std::pair target(finder.finder_target()); + device_t *device(target.first.subdevice(target.second)); + assert(device != nullptr); + return r(emu::detail::make_delegate(read, read_name, device->tag(), make_pointer(*device))) + .w(emu::detail::make_delegate(write, write_name, device->tag(), make_pointer(*device))); + } 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) - { const std::pair target(finder.finder_target()); device_t &device(*target.first.subdevice(target.second)); return r(emu::detail::make_delegate(read, read_name, device.tag(), make_pointer(device))).w(emu::detail::make_delegate(write, write_name, device.tag(), make_pointer(device))); } + { + const std::pair target(finder.finder_target()); + device_t *device(target.first.subdevice(target.second)); + assert(device != nullptr); + return r(emu::detail::make_delegate(read, read_name, device->tag(), make_pointer(*device))) + .w(emu::detail::make_delegate(write, write_name, device->tag(), make_pointer(*device))); + } template address_map_entry &m(device_finder &finder, Ret (U::*map)(Params...), const char *map_name) - { const std::pair target(finder.finder_target()); device_t &device(*target.first.subdevice(target.second)); return m(&device, make_delegate(map, map_name, make_pointer(device))); } + { + const std::pair target(finder.finder_target()); + device_t *device(target.first.subdevice(target.second)); + assert(device != nullptr); + return m(device, make_delegate(map, map_name, make_pointer(*device))); + } template address_map_entry &m(const device_finder &finder, Ret (U::*map)(Params...), const char *map_name) - { const std::pair target(finder.finder_target()); device_t &device(*target.first.subdevice(target.second)); return m(make_delegate(map, map_name, make_pointer(device))); } + { + const std::pair target(finder.finder_target()); + device_t *device(target.first.subdevice(target.second)); + assert(device != nullptr); + return m(make_delegate(map, map_name, make_pointer(*device))); + } // lambda -> delegate converter