summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/video
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/video')
-rw-r--r--src/devices/video/315_5313.cpp9
-rw-r--r--src/devices/video/315_5313.h6
-rw-r--r--src/devices/video/cdp1861.cpp2
-rw-r--r--src/devices/video/clgd542x.cpp2
-rw-r--r--src/devices/video/crt9021.cpp3
-rw-r--r--src/devices/video/crt9021.h2
-rw-r--r--src/devices/video/crt9028.cpp2
-rw-r--r--src/devices/video/crtc_ega.cpp7
-rw-r--r--src/devices/video/crtc_ega.h6
-rw-r--r--src/devices/video/ef9369.cpp3
-rw-r--r--src/devices/video/ef9369.h12
-rw-r--r--src/devices/video/epic12.cpp14
-rw-r--r--src/devices/video/fixfreq.cpp2
-rw-r--r--src/devices/video/hd44780.cpp3
-rw-r--r--src/devices/video/hd44780.h13
-rw-r--r--src/devices/video/hd63484.cpp7
-rw-r--r--src/devices/video/hd63484.h2
-rw-r--r--src/devices/video/i82730.cpp3
-rw-r--r--src/devices/video/i82730.h7
-rw-r--r--src/devices/video/i8275.cpp3
-rw-r--r--src/devices/video/i8275.h15
-rw-r--r--src/devices/video/mc6845.cpp21
-rw-r--r--src/devices/video/mc6845.h10
-rw-r--r--src/devices/video/mc6847.cpp5
-rw-r--r--src/devices/video/mc6847.h11
-rw-r--r--src/devices/video/nt7534.cpp3
-rw-r--r--src/devices/video/nt7534.h2
-rw-r--r--src/devices/video/pc_vga.cpp3
-rw-r--r--src/devices/video/pc_vga.h4
-rw-r--r--src/devices/video/pcd8544.cpp5
-rw-r--r--src/devices/video/pcd8544.h2
-rw-r--r--src/devices/video/ppu2c0x.cpp12
-rw-r--r--src/devices/video/ppu2c0x.h10
-rw-r--r--src/devices/video/psx.cpp2
-rw-r--r--src/devices/video/scn2674.cpp12
-rw-r--r--src/devices/video/scn2674.h19
-rw-r--r--src/devices/video/sed1520.cpp4
-rw-r--r--src/devices/video/sed1520.h12
-rw-r--r--src/devices/video/tms9928a.cpp2
-rw-r--r--src/devices/video/tms9928a.h2
-rw-r--r--src/devices/video/upd3301.cpp3
-rw-r--r--src/devices/video/upd3301.h13
-rw-r--r--src/devices/video/upd7220.cpp6
-rw-r--r--src/devices/video/upd7220.h47
-rw-r--r--src/devices/video/v9938.cpp2
-rw-r--r--src/devices/video/virge_pci.cpp8
-rw-r--r--src/devices/video/voodoo_pci.cpp4
47 files changed, 128 insertions, 219 deletions
diff --git a/src/devices/video/315_5313.cpp b/src/devices/video/315_5313.cpp
index d664909bfae..891e9ad0328 100644
--- a/src/devices/video/315_5313.cpp
+++ b/src/devices/video/315_5313.cpp
@@ -169,6 +169,9 @@ sega315_5313_device::sega315_5313_device(const machine_config &mconfig, const ch
, m_sndirqline_callback(*this)
, m_lv6irqline_callback(*this)
, m_lv4irqline_callback(*this)
+ , m_32x_scanline_func(*this)
+ , m_32x_interrupt_func(*this)
+ , m_32x_scanline_helper_func(*this)
, m_command_pending(0)
, m_command_part1(0)
, m_command_part2(0)
@@ -283,9 +286,9 @@ void sega315_5313_device::device_start()
m_lv6irqline_callback.resolve_safe();
m_lv4irqline_callback.resolve_safe();
- m_32x_scanline_func.bind_relative_to(*owner());
- m_32x_interrupt_func.bind_relative_to(*owner());
- m_32x_scanline_helper_func.bind_relative_to(*owner());
+ m_32x_scanline_func.resolve();
+ m_32x_interrupt_func.resolve();
+ m_32x_scanline_helper_func.resolve();
m_vram = std::make_unique<u16[]>(0x10000 / 2);
m_cram = std::make_unique<u16[]>(0x80 / 2);
diff --git a/src/devices/video/315_5313.h b/src/devices/video/315_5313.h
index fe68bb9d9a9..72fcd51a6ed 100644
--- a/src/devices/video/315_5313.h
+++ b/src/devices/video/315_5313.h
@@ -37,9 +37,9 @@ public:
template <typename T> void set_ext_palette(T &&tag) { m_ext_palette.set_tag(std::forward<T>(tag)); }
// Temporary solution while 32x VDP mixing and scanline interrupting is moved outside MD VDP
- template <typename... T> void set_md_32x_scanline(T &&... args) { m_32x_scanline_func = md_32x_scanline_delegate(std::forward<T>(args)...); }
- template <typename... T> void set_md_32x_interrupt(T &&... args) { m_32x_interrupt_func = md_32x_interrupt_delegate(std::forward<T>(args)...); }
- template <typename... T> void set_md_32x_scanline_helper(T &&... args) { m_32x_scanline_helper_func = md_32x_scanline_helper_delegate(std::forward<T>(args)...); }
+ template <typename... T> void set_md_32x_scanline(T &&... args) { m_32x_scanline_func.set(std::forward<T>(args)...); }
+ template <typename... T> void set_md_32x_interrupt(T &&... args) { m_32x_interrupt_func.set(std::forward<T>(args)...); }
+ template <typename... T> void set_md_32x_scanline_helper(T &&... args) { m_32x_scanline_helper_func.set(std::forward<T>(args)...); }
int m_use_alt_timing; // use MAME scanline timer instead, render only one scanline to a single line buffer, to be rendered by a partial update call.. experimental
diff --git a/src/devices/video/cdp1861.cpp b/src/devices/video/cdp1861.cpp
index 27f8d0e3729..dfe71100411 100644
--- a/src/devices/video/cdp1861.cpp
+++ b/src/devices/video/cdp1861.cpp
@@ -99,7 +99,7 @@ void cdp1861_device::device_config_complete()
screen().set_raw(clock(), SCREEN_WIDTH, HBLANK_END, HBLANK_START, TOTAL_SCANLINES, SCANLINE_VBLANK_END, SCANLINE_VBLANK_START);
if (!screen().has_screen_update())
- screen().set_screen_update(screen_update_rgb32_delegate(FUNC(cdp1861_device::screen_update), this));
+ screen().set_screen_update(*this, FUNC(cdp1861_device::screen_update));
}
diff --git a/src/devices/video/clgd542x.cpp b/src/devices/video/clgd542x.cpp
index 47b91c8743a..f9bdf1a288a 100644
--- a/src/devices/video/clgd542x.cpp
+++ b/src/devices/video/clgd542x.cpp
@@ -78,7 +78,7 @@ void cirrus_gd5428_device::device_start()
vga.crtc.maximum_scan_line = 1;
// copy over interfaces
- vga.read_dipswitch = read8_delegate(); //read_dipswitch;
+ vga.read_dipswitch.set(nullptr); //read_dipswitch;
vga.svga_intf.seq_regcount = 0x1f;
vga.svga_intf.crtc_regcount = 0x2d;
vga.svga_intf.vram_size = 0x200000;
diff --git a/src/devices/video/crt9021.cpp b/src/devices/video/crt9021.cpp
index a0dabe4d1c3..2ed5680559f 100644
--- a/src/devices/video/crt9021.cpp
+++ b/src/devices/video/crt9021.cpp
@@ -62,6 +62,7 @@ DEFINE_DEVICE_TYPE(CRT9021, crt9021_device, "crt9021", "SMC CRT9021 VAC")
crt9021_device::crt9021_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, CRT9021, tag, owner, clock),
device_video_interface(mconfig, *this),
+ m_display_cb(*this),
m_data(0),
m_ms0(0),
m_ms1(0),
@@ -94,6 +95,8 @@ crt9021_device::crt9021_device(const machine_config &mconfig, const char *tag, d
void crt9021_device::device_start()
{
+ m_display_cb.resolve();
+
// register bitmap
screen().register_screen_bitmap(m_bitmap);
diff --git a/src/devices/video/crt9021.h b/src/devices/video/crt9021.h
index 65de1032a64..a98c76251b0 100644
--- a/src/devices/video/crt9021.h
+++ b/src/devices/video/crt9021.h
@@ -53,7 +53,7 @@ public:
// construction/destruction
crt9021_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <typename... T> void set_display_callback(T &&... args) { m_display_cb = draw_character_delegate(std::forward<T>(args)...); }
+ template <typename... T> void set_display_callback(T &&... args) { m_display_cb.set(std::forward<T>(args)...); }
void write(uint8_t data) { m_data = data; }
DECLARE_WRITE8_MEMBER( write ) { write(data); }
diff --git a/src/devices/video/crt9028.cpp b/src/devices/video/crt9028.cpp
index 07f877e3095..94cc2429e13 100644
--- a/src/devices/video/crt9028.cpp
+++ b/src/devices/video/crt9028.cpp
@@ -132,7 +132,7 @@ void crt9028_device::device_config_complete()
}
if (!screen().has_screen_update())
- screen().set_screen_update(screen_update_rgb32_delegate(FUNC(crt9028_device::screen_update), this));
+ screen().set_screen_update(*this, FUNC(crt9028_device::screen_update));
}
diff --git a/src/devices/video/crtc_ega.cpp b/src/devices/video/crtc_ega.cpp
index 7d03b09f131..7b3641423e5 100644
--- a/src/devices/video/crtc_ega.cpp
+++ b/src/devices/video/crtc_ega.cpp
@@ -23,6 +23,7 @@ DEFINE_DEVICE_TYPE(CRTC_EGA, crtc_ega_device, "crtc_ega", "IBM EGA CRT Controlle
crtc_ega_device::crtc_ega_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, CRTC_EGA, tag, owner, clock), device_video_interface(mconfig, *this, false)
, m_res_out_de_cb(*this), m_res_out_hsync_cb(*this), m_res_out_vsync_cb(*this), m_res_out_vblank_cb(*this)
+ , m_begin_update_cb(*this), m_row_update_cb(*this), m_end_update_cb(*this)
, m_horiz_char_total(0), m_horiz_disp(0), m_horiz_blank_start(0), m_horiz_blank_end(0)
, m_ena_vert_access(0), m_de_skew(0)
, m_horiz_retr_start(0), m_horiz_retr_end(0), m_horiz_retr_skew(0)
@@ -599,9 +600,9 @@ void crtc_ega_device::device_start()
m_res_out_vblank_cb.resolve();
/* bind delegates */
- m_begin_update_cb.bind_relative_to(*owner());
- m_row_update_cb.bind_relative_to(*owner());
- m_end_update_cb.bind_relative_to(*owner());
+ m_begin_update_cb.resolve();
+ m_row_update_cb.resolve();
+ m_end_update_cb.resolve();
/* create the timers */
m_line_timer = timer_alloc(TIMER_LINE);
diff --git a/src/devices/video/crtc_ega.h b/src/devices/video/crtc_ega.h
index 9d03177b494..e5a267bed90 100644
--- a/src/devices/video/crtc_ega.h
+++ b/src/devices/video/crtc_ega.h
@@ -34,9 +34,9 @@ public:
auto res_out_vsync_callback() { return m_res_out_vsync_cb.bind(); }
auto res_out_vblank_callback() { return m_res_out_vblank_cb.bind(); }
- template <typename... T> void set_begin_update_callback(T &&... args) { m_begin_update_cb = begin_update_delegate(std::forward<T>(args)...); }
- template <typename... T> void set_row_update_callback(T &&... args) { m_row_update_cb = row_update_delegate(std::forward<T>(args)...); }
- template <typename... T> void set_end_update_callback(T &&... args) { m_end_update_cb = end_update_delegate(std::forward<T>(args)...); }
+ template <typename... T> void set_begin_update_callback(T &&... args) { m_begin_update_cb.set(std::forward<T>(args)...); }
+ template <typename... T> void set_row_update_callback(T &&... args) { m_row_update_cb.set(std::forward<T>(args)...); }
+ template <typename... T> void set_end_update_callback(T &&... args) { m_end_update_cb.set(std::forward<T>(args)...); }
void config_set_hpixels_per_column(int hpixels_per_column) { m_hpixels_per_column = hpixels_per_column; }
/* select one of the registers for reading or writing */
diff --git a/src/devices/video/ef9369.cpp b/src/devices/video/ef9369.cpp
index fa2e1eb3456..49da6402bf7 100644
--- a/src/devices/video/ef9369.cpp
+++ b/src/devices/video/ef9369.cpp
@@ -30,6 +30,7 @@ DEFINE_DEVICE_TYPE(EF9369, ef9369_device, "ef9369", "Thomson EF9369 Single Chip
ef9369_device::ef9369_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, EF9369, tag, owner, clock)
+ , m_color_update_cb(*this)
, m_address(0)
{
std::fill(m_ca, m_ca + NUMCOLORS, 0);
@@ -45,7 +46,7 @@ ef9369_device::ef9369_device(const machine_config &mconfig, const char *tag, dev
void ef9369_device::device_start()
{
// bind delegate
- m_color_update_cb.bind_relative_to(*owner());
+ m_color_update_cb.resolve();
// register for save states
save_pointer(NAME(m_ca), NUMCOLORS);
diff --git a/src/devices/video/ef9369.h b/src/devices/video/ef9369.h
index ecea48d6122..1e2a1af6f0d 100644
--- a/src/devices/video/ef9369.h
+++ b/src/devices/video/ef9369.h
@@ -46,17 +46,7 @@ public:
ef9369_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
// configuration
- template <typename Object> void set_color_update_callback(Object &&cb) { m_color_update_cb = std::forward<Object>(cb); }
- void set_color_update_callback(color_update_delegate callback) { m_color_update_cb = callback; }
- template <class FunctionClass> void set_color_update_callback(const char *devname,
- void (FunctionClass::*callback)(int, bool, uint8_t, uint8_t, uint8_t), const char *name)
- {
- set_color_update_callback(color_update_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr)));
- }
- template <class FunctionClass> void set_color_update_callback(void (FunctionClass::*callback)(int, bool, uint8_t, uint8_t, uint8_t), const char *name)
- {
- set_color_update_callback(color_update_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
- }
+ template <typename... T> void set_color_update_callback(T &&... args) { m_color_update_cb.set(std::forward<T>(args)...); }
DECLARE_READ8_MEMBER(data_r);
DECLARE_WRITE8_MEMBER(data_w);
diff --git a/src/devices/video/epic12.cpp b/src/devices/video/epic12.cpp
index f4e9a70d352..49c407cb5d0 100644
--- a/src/devices/video/epic12.cpp
+++ b/src/devices/video/epic12.cpp
@@ -933,22 +933,22 @@ void epic12_device::install_handlers(int addr1, int addr2)
{
address_space &space = m_maincpu->space(AS_PROGRAM);
- read32_delegate read;
- write32_delegate write;
+ read32_delegate read(*this);
+ write32_delegate write(*this);
if (m_is_unsafe)
{
printf("using unsafe blit code!\n");
- read = read32_delegate(FUNC(epic12_device::blitter_r_unsafe), this);
- write = write32_delegate(FUNC(epic12_device::blitter_w_unsafe), this);
+ read = read32_delegate(*this, FUNC(epic12_device::blitter_r_unsafe));
+ write = write32_delegate(*this, FUNC(epic12_device::blitter_w_unsafe));
}
else
{
- read = read32_delegate(FUNC(epic12_device::blitter_r), this);
- write = write32_delegate(FUNC(epic12_device::blitter_w), this);
+ read = read32_delegate(*this, FUNC(epic12_device::blitter_r));
+ write = write32_delegate(*this, FUNC(epic12_device::blitter_w));
}
- space.install_readwrite_handler(addr1, addr2, read , write, 0xffffffffffffffffU);
+ space.install_readwrite_handler(addr1, addr2, std::move(read), std::move(write), 0xffffffffffffffffU);
}
u64 epic12_device::fpga_r()
diff --git a/src/devices/video/fixfreq.cpp b/src/devices/video/fixfreq.cpp
index 58eec1722e3..615fe4ce0cf 100644
--- a/src/devices/video/fixfreq.cpp
+++ b/src/devices/video/fixfreq.cpp
@@ -180,7 +180,7 @@ void fixedfreq_device::device_config_complete()
m_monitor.m_vbackporch);
if (!screen().has_screen_update())
- screen().set_screen_update(screen_update_rgb32_delegate(FUNC(fixedfreq_device::screen_update), this));
+ screen().set_screen_update(*this, FUNC(fixedfreq_device::screen_update));
}
void fixedfreq_device::device_start()
diff --git a/src/devices/video/hd44780.cpp b/src/devices/video/hd44780.cpp
index 0c64922aa3f..ac19c97ffcc 100644
--- a/src/devices/video/hd44780.cpp
+++ b/src/devices/video/hd44780.cpp
@@ -55,6 +55,7 @@ hd44780_device::hd44780_device(const machine_config &mconfig, const char *tag, d
hd44780_device::hd44780_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, type, tag, owner, clock)
+ , m_pixel_update_cb(*this)
, m_cgrom(nullptr)
, m_cgrom_region(*this, DEVICE_SELF)
, m_rs_input(0)
@@ -94,7 +95,7 @@ void hd44780_device::device_start()
{
m_cgrom = m_cgrom_region.found() ? m_cgrom_region : memregion("cgrom")->base();
- m_pixel_update_cb.bind_relative_to(*owner());
+ m_pixel_update_cb.resolve();
m_busy_timer = timer_alloc(TIMER_BUSY);
m_blink_timer = timer_alloc(TIMER_BLINKING);
diff --git a/src/devices/video/hd44780.h b/src/devices/video/hd44780.h
index c31cd67b426..ec45d0005d1 100644
--- a/src/devices/video/hd44780.h
+++ b/src/devices/video/hd44780.h
@@ -31,18 +31,7 @@ public:
// static configuration helpers
void set_lcd_size(int lines, int chars) { m_lines = lines; m_chars = chars; }
- template <typename... T> void set_pixel_update_cb(T &&... args) { m_pixel_update_cb = pixel_update_delegate(std::forward<T>(args)...); }
- void set_pixel_update_cb(pixel_update_delegate callback) { m_pixel_update_cb = callback; }
- template <class FunctionClass> void set_pixel_update_cb(const char *devname,
- void (FunctionClass::*callback)(bitmap_ind16 &, u8, u8, u8, u8, int), const char *name)
- {
- set_pixel_update_cb(pixel_update_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr)));
- }
- template <class FunctionClass> void set_pixel_update_cb(
- void (FunctionClass::*callback)(bitmap_ind16 &, u8, u8, u8, u8, int), const char *name)
- {
- set_pixel_update_cb(pixel_update_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
- }
+ template <typename... T> void set_pixel_update_cb(T &&... args) { m_pixel_update_cb.set(std::forward<T>(args)...); }
// device interface
void write(offs_t offset, u8 data);
diff --git a/src/devices/video/hd63484.cpp b/src/devices/video/hd63484.cpp
index 873904d3793..1ae83881fbc 100644
--- a/src/devices/video/hd63484.cpp
+++ b/src/devices/video/hd63484.cpp
@@ -24,10 +24,11 @@
// hd63484_device - constructor
//-------------------------------------------------
-hd63484_device::hd63484_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, HD63484, tag, owner, clock),
+hd63484_device::hd63484_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, HD63484, tag, owner, clock),
device_memory_interface(mconfig, *this),
device_video_interface(mconfig, *this),
+ m_display_cb(*this),
m_auto_configure_screen(true),
m_external_skew(0),
m_ar(0),
@@ -2003,7 +2004,7 @@ WRITE8_MEMBER( hd63484_device::data8_w )
void hd63484_device::device_start()
{
- m_display_cb.bind_relative_to(*owner());
+ m_display_cb.resolve();
register_save_state();
}
diff --git a/src/devices/video/hd63484.h b/src/devices/video/hd63484.h
index 73a321fc117..508579aed73 100644
--- a/src/devices/video/hd63484.h
+++ b/src/devices/video/hd63484.h
@@ -27,7 +27,7 @@ public:
// construction/destruction
hd63484_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <typename... T> void set_display_callback(T &&... args) { m_display_cb = display_delegate(std::forward<T>(args)...); }
+ template <typename... T> void set_display_callback(T &&... args) { m_display_cb.set(std::forward<T>(args)...); }
void set_auto_configure_screen(bool auto_configure_screen) { m_auto_configure_screen = auto_configure_screen; }
void set_external_skew(int skew) { m_external_skew = skew; }
diff --git a/src/devices/video/i82730.cpp b/src/devices/video/i82730.cpp
index 5db1bf4e6a9..eeeedd3b4d1 100644
--- a/src/devices/video/i82730.cpp
+++ b/src/devices/video/i82730.cpp
@@ -58,6 +58,7 @@ i82730_device::i82730_device(const machine_config &mconfig, const char *tag, dev
device_t(mconfig, I82730, tag, owner, clock),
device_video_interface(mconfig, *this),
m_sint_handler(*this),
+ m_update_row_cb(*this),
m_cpu(*this, finder_base::DUMMY_TAG),
m_program(nullptr),
m_row_timer(nullptr),
@@ -101,7 +102,7 @@ void i82730_device::device_start()
m_sint_handler.resolve_safe();
// bind delegates
- m_update_row_cb.bind_relative_to(*owner());
+ m_update_row_cb.resolve();
// allocate row timer
m_row_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(i82730_device::row_update), this));
diff --git a/src/devices/video/i82730.h b/src/devices/video/i82730.h
index 03165358a22..2efc8c0a523 100644
--- a/src/devices/video/i82730.h
+++ b/src/devices/video/i82730.h
@@ -40,12 +40,7 @@ public:
auto sint() { return m_sint_handler.bind(); }
// inline configuration
- void set_update_row_callback(update_row_delegate callback) { m_update_row_cb = callback; }
- template <class FunctionClass> void set_update_row_callback(void (FunctionClass::*callback)(bitmap_rgb32 &, uint16_t *, uint8_t, uint16_t, int)
- , const char *name)
- {
- set_update_row_callback(update_row_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
- }
+ template <typename... T> void set_update_row_callback(T &&... args) { m_update_row_cb.set(std::forward<T>(args)...); }
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
diff --git a/src/devices/video/i8275.cpp b/src/devices/video/i8275.cpp
index 4419d01fad2..ea9a22f498d 100644
--- a/src/devices/video/i8275.cpp
+++ b/src/devices/video/i8275.cpp
@@ -106,6 +106,7 @@ i8275_device::i8275_device(const machine_config &mconfig, device_type type, cons
m_write_hrtc(*this),
m_write_vrtc(*this),
m_write_lc(*this),
+ m_display_cb(*this),
m_refresh_hack(false),
m_status(0),
m_param_idx(0),
@@ -149,12 +150,12 @@ void i8275_device::device_start()
screen().register_screen_bitmap(m_bitmap);
// resolve callbacks
- m_display_cb.bind_relative_to(*owner());
m_write_drq.resolve_safe();
m_write_irq.resolve_safe();
m_write_hrtc.resolve_safe();
m_write_vrtc.resolve_safe();
m_write_lc.resolve_safe();
+ m_display_cb.resolve();
// allocate timers
m_hrtc_on_timer = timer_alloc(TIMER_HRTC_ON);
diff --git a/src/devices/video/i8275.h b/src/devices/video/i8275.h
index 5a9744886c0..b43fcbdefa8 100644
--- a/src/devices/video/i8275.h
+++ b/src/devices/video/i8275.h
@@ -62,20 +62,7 @@ public:
void set_character_width(int value) { m_hpixels_per_column = value; }
void set_refresh_hack(bool hack) { m_refresh_hack = hack; }
- template <typename... T> void set_display_callback(T &&... args) { m_display_cb = draw_character_delegate(std::forward<T>(args)...); }
- void set_display_callback(draw_character_delegate callback) { m_display_cb = callback; }
- template <class FunctionClass> void set_display_callback(const char *devname,
- void (FunctionClass::*callback)(bitmap_rgb32 &, int, int, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t),
- const char *name)
- {
- set_display_callback(draw_character_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr)));
- }
- template <class FunctionClass> void set_display_callback(
- void (FunctionClass::*callback)(bitmap_rgb32 &, int, int, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t),
- const char *name)
- {
- set_display_callback(draw_character_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
- }
+ template <typename... T> void set_display_callback(T &&... args) { m_display_cb.set(std::forward<T>(args)...); }
auto drq_wr_callback() { return m_write_drq.bind(); }
auto irq_wr_callback() { return m_write_irq.bind(); }
diff --git a/src/devices/video/mc6845.cpp b/src/devices/video/mc6845.cpp
index 119297553ef..be0adeefc84 100644
--- a/src/devices/video/mc6845.cpp
+++ b/src/devices/video/mc6845.cpp
@@ -112,6 +112,11 @@ mc6845_device::mc6845_device(const machine_config &mconfig, device_type type, co
m_visarea_adjust_min_y(0),
m_visarea_adjust_max_y(0),
m_hpixels_per_column(0),
+ m_reconfigure_cb(*this),
+ m_begin_update_cb(*this),
+ m_update_row_cb(*this),
+ m_end_update_cb(*this),
+ m_on_update_addr_changed_cb(*this),
m_out_de_cb(*this),
m_out_cur_cb(*this),
m_out_hsync_cb(*this),
@@ -1135,19 +1140,19 @@ void mc6845_device::device_start()
assert(clock() > 0);
assert(m_hpixels_per_column > 0);
+ /* bind delegates */
+ m_reconfigure_cb.resolve();
+ m_begin_update_cb.resolve();
+ m_update_row_cb.resolve();
+ m_end_update_cb.resolve();
+ m_on_update_addr_changed_cb.resolve();
+
/* resolve callbacks */
m_out_de_cb.resolve_safe();
m_out_cur_cb.resolve_safe();
m_out_hsync_cb.resolve_safe();
m_out_vsync_cb.resolve_safe();
- /* bind delegates */
- m_reconfigure_cb.bind_relative_to(*owner());
- m_begin_update_cb.bind_relative_to(*owner());
- m_update_row_cb.bind_relative_to(*owner());
- m_end_update_cb.bind_relative_to(*owner());
- m_on_update_addr_changed_cb.bind_relative_to(*owner());
-
/* create the timers */
m_line_timer = timer_alloc(TIMER_LINE);
m_de_off_timer = timer_alloc(TIMER_DE_OFF);
@@ -1390,7 +1395,7 @@ void mos8563_device::device_start()
m_update_ready_bit = 1;
// default update_row delegate
- m_update_row_cb = update_row_delegate(FUNC(mos8563_device::vdc_update_row), this);
+ m_update_row_cb.set(*this, FUNC(mos8563_device::vdc_update_row));
m_char_blink_state = false;
m_char_blink_count = 0;
diff --git a/src/devices/video/mc6845.h b/src/devices/video/mc6845.h
index f20b83e5eff..46dfd9b19fb 100644
--- a/src/devices/video/mc6845.h
+++ b/src/devices/video/mc6845.h
@@ -72,11 +72,11 @@ public:
}
void set_char_width(int pixels) { m_hpixels_per_column = pixels; }
- template <typename... T> void set_reconfigure_callback(T &&... args) { m_reconfigure_cb = reconfigure_delegate(std::forward<T>(args)...); }
- template <typename... T> void set_begin_update_callback(T &&... args) { m_begin_update_cb = begin_update_delegate(std::forward<T>(args)...); }
- template <typename... T> void set_update_row_callback(T &&... args) { m_update_row_cb = update_row_delegate(std::forward<T>(args)...); }
- template <typename... T> void set_end_update_callback(T &&... args) { m_end_update_cb = end_update_delegate(std::forward<T>(args)...); }
- template <typename... T> void set_on_update_addr_change_callback(T &&... args) { m_on_update_addr_changed_cb = on_update_addr_changed_delegate(std::forward<T>(args)...); }
+ template <typename... T> void set_reconfigure_callback(T &&... args) { m_reconfigure_cb.set(std::forward<T>(args)...); }
+ template <typename... T> void set_begin_update_callback(T &&... args) { m_begin_update_cb.set(std::forward<T>(args)...); }
+ template <typename... T> void set_update_row_callback(T &&... args) { m_update_row_cb.set(std::forward<T>(args)...); }
+ template <typename... T> void set_end_update_callback(T &&... args) { m_end_update_cb.set(std::forward<T>(args)...); }
+ template <typename... T> void set_on_update_addr_change_callback(T &&... args) { m_on_update_addr_changed_cb.set(std::forward<T>(args)...); }
auto out_de_callback() { return m_out_de_cb.bind(); }
auto out_cur_callback() { return m_out_cur_cb.bind(); }
diff --git a/src/devices/video/mc6847.cpp b/src/devices/video/mc6847.cpp
index bc4c8d393ea..e60da56ab2b 100644
--- a/src/devices/video/mc6847.cpp
+++ b/src/devices/video/mc6847.cpp
@@ -135,6 +135,7 @@ mc6847_friend_device::mc6847_friend_device(const machine_config &mconfig, device
, device_video_interface(mconfig, *this)
, m_write_hsync(*this)
, m_write_fsync(*this)
+ , m_charrom_cb(*this)
, m_character_map(fontdata, is_mc6847t1)
, m_tpfs(tpfs)
, m_divider(divider)
@@ -599,7 +600,7 @@ void mc6847_base_device::device_config_complete()
}
if (!screen().has_screen_update())
- screen().set_screen_update(screen_update_rgb32_delegate(FUNC(mc6847_base_device::screen_update), this));
+ screen().set_screen_update(*this, FUNC(mc6847_base_device::screen_update));
}
@@ -617,7 +618,7 @@ void mc6847_base_device::device_start()
/* resolve callbacks */
m_input_cb.resolve_safe(0);
- m_charrom_cb.bind_relative_to(*owner());
+ m_charrom_cb.resolve();
/* set up fixed mode */
setup_fixed_mode();
diff --git a/src/devices/video/mc6847.h b/src/devices/video/mc6847.h
index 8402db86c2e..78a8ad57345 100644
--- a/src/devices/video/mc6847.h
+++ b/src/devices/video/mc6847.h
@@ -54,16 +54,7 @@ public:
auto hsync_wr_callback() { return m_write_hsync.bind(); }
auto fsync_wr_callback() { return m_write_fsync.bind(); }
- template <typename Object> void set_get_char_rom(Object &&cb) { m_charrom_cb = std::forward<Object>(cb); }
- void set_get_char_rom(get_char_rom_delegate cb) { m_charrom_cb = cb; }
- template <class FunctionClass> void set_get_char_rom(const char *devname, uint8_t (FunctionClass::*cb)(uint8_t, int), const char *name)
- {
- set_get_char_rom(get_char_rom_delegate(cb, name, devname, static_cast<FunctionClass *>(nullptr)));
- }
- template <class FunctionClass> void set_get_char_rom(uint8_t (FunctionClass::*cb)(uint8_t, int), const char *name)
- {
- set_get_char_rom(get_char_rom_delegate(cb, name, nullptr, static_cast<FunctionClass *>(nullptr)));
- }
+ template <typename... T> void set_get_char_rom(T &&... args) { m_charrom_cb.set(std::forward<T>(args)...); }
protected:
mc6847_friend_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock,
diff --git a/src/devices/video/nt7534.cpp b/src/devices/video/nt7534.cpp
index cacda7a11d9..a4cb9fb33f7 100644
--- a/src/devices/video/nt7534.cpp
+++ b/src/devices/video/nt7534.cpp
@@ -34,6 +34,7 @@ nt7534_device::nt7534_device(const machine_config &mconfig, const char *tag, dev
nt7534_device::nt7534_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, type, tag, owner, clock)
+ , m_pixel_update_cb(*this)
{
}
@@ -45,6 +46,8 @@ void nt7534_device::device_start()
{
m_busy_timer = timer_alloc(TIMER_BUSY);
+ m_pixel_update_cb.resolve();
+
// state saving
save_item(NAME(m_busy_flag));
save_item(NAME(m_page));
diff --git a/src/devices/video/nt7534.h b/src/devices/video/nt7534.h
index 75390f8acaa..caece0de4d1 100644
--- a/src/devices/video/nt7534.h
+++ b/src/devices/video/nt7534.h
@@ -29,7 +29,7 @@ public:
// construction/destruction
nt7534_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
- template <typename... T> void set_pixel_update_cb(T &&... args) { m_pixel_update_cb = pixel_update_delegate(std::forward<T>(args)...); }
+ template <typename... T> void set_pixel_update_cb(T &&... args) { m_pixel_update_cb.set(std::forward<T>(args)...); }
// device interface
virtual DECLARE_WRITE8_MEMBER(write);
diff --git a/src/devices/video/pc_vga.cpp b/src/devices/video/pc_vga.cpp
index 7e15f1efe5e..cc30d50bae7 100644
--- a/src/devices/video/pc_vga.cpp
+++ b/src/devices/video/pc_vga.cpp
@@ -134,6 +134,7 @@ vga_device::vga_device(const machine_config &mconfig, device_type type, const ch
: device_t(mconfig, type, tag, owner, clock)
, device_video_interface(mconfig, *this)
, device_palette_interface(mconfig, *this)
+ , vga(*this)
{
}
@@ -252,7 +253,7 @@ void vga_device::device_start()
// copy over interfaces
- vga.read_dipswitch = read8_delegate(); //read_dipswitch;
+ vga.read_dipswitch.set(nullptr); //read_dipswitch;
vga.svga_intf.seq_regcount = 0x05;
vga.svga_intf.crtc_regcount = 0x19;
vga.svga_intf.vram_size = 0x100000;
diff --git a/src/devices/video/pc_vga.h b/src/devices/video/pc_vga.h
index 07823707606..22d8ba33a65 100644
--- a/src/devices/video/pc_vga.h
+++ b/src/devices/video/pc_vga.h
@@ -110,8 +110,10 @@ protected:
}
- struct
+ struct vga_t
{
+ vga_t(device_t &owner) : read_dipswitch(owner) { }
+
read8_delegate read_dipswitch;
struct
{
diff --git a/src/devices/video/pcd8544.cpp b/src/devices/video/pcd8544.cpp
index 0cca6742b05..b0592592509 100644
--- a/src/devices/video/pcd8544.cpp
+++ b/src/devices/video/pcd8544.cpp
@@ -31,7 +31,8 @@ DEFINE_DEVICE_TYPE(PCD8544, pcd8544_device, "pcd8544_device", "Philips PCD8544 L
//-------------------------------------------------
pcd8544_device::pcd8544_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- device_t(mconfig, PCD8544, tag, owner, clock)
+ device_t(mconfig, PCD8544, tag, owner, clock),
+ m_screen_update_cb(*this)
{
}
@@ -41,7 +42,7 @@ pcd8544_device::pcd8544_device(const machine_config &mconfig, const char *tag, d
void pcd8544_device::device_start()
{
- m_screen_update_cb.bind_relative_to(*owner());
+ m_screen_update_cb.resolve();
// state saving
save_item(NAME(m_sdin));
diff --git a/src/devices/video/pcd8544.h b/src/devices/video/pcd8544.h
index 069984e9483..6706097a4db 100644
--- a/src/devices/video/pcd8544.h
+++ b/src/devices/video/pcd8544.h
@@ -28,7 +28,7 @@ public:
// construction/destruction
pcd8544_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <typename... T> void set_screen_update_cb(T &&... args) { m_screen_update_cb = screen_update_delegate(std::forward<T>(args)...); }
+ template <typename... T> void set_screen_update_cb(T &&... args) { m_screen_update_cb.set(std::forward<T>(args)...); }
// device interface
DECLARE_WRITE_LINE_MEMBER(sdin_w);
diff --git a/src/devices/video/ppu2c0x.cpp b/src/devices/video/ppu2c0x.cpp
index f0b20856c57..4f2c6c587e7 100644
--- a/src/devices/video/ppu2c0x.cpp
+++ b/src/devices/video/ppu2c0x.cpp
@@ -117,10 +117,10 @@ device_memory_interface::space_config_vector ppu2c0x_device::memory_space_config
void ppu2c0x_device::device_config_complete()
{
/* reset the callbacks */
- m_latch = latch_delegate();
- m_scanline_callback_proc = scanline_delegate();
- m_hblank_callback_proc = hblank_delegate();
- m_vidaccess_callback_proc = vidaccess_delegate();
+ m_scanline_callback_proc.set(nullptr);
+ m_hblank_callback_proc.set(nullptr);
+ m_vidaccess_callback_proc.set(nullptr);
+ m_latch.set(nullptr);
}
ppu2c0x_device::ppu2c0x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
@@ -131,6 +131,9 @@ ppu2c0x_device::ppu2c0x_device(const machine_config &mconfig, device_type type,
, m_space_config("videoram", ENDIANNESS_LITTLE, 8, 17, 0, address_map_constructor(FUNC(ppu2c0x_device::ppu2c0x), this))
, m_cpu(*this, finder_base::DUMMY_TAG)
, m_scanline(0) // reset the scanline count
+ , m_scanline_callback_proc(*this)
+ , m_hblank_callback_proc(*this)
+ , m_vidaccess_callback_proc(*this)
, m_int_callback(*this)
, m_refresh_data(0)
, m_refresh_latch(0)
@@ -146,6 +149,7 @@ ppu2c0x_device::ppu2c0x_device(const machine_config &mconfig, device_type type,
, m_scan_scale(1) // set the scan scale (this is for dual monitor vertical setups)
, m_tilecount(0)
, m_draw_phase(0)
+ , m_latch(*this)
, m_use_sprite_write_limitation(true)
{
for (auto & elem : m_regs)
diff --git a/src/devices/video/ppu2c0x.h b/src/devices/video/ppu2c0x.h
index 78ebef0b2ce..5660876674a 100644
--- a/src/devices/video/ppu2c0x.h
+++ b/src/devices/video/ppu2c0x.h
@@ -96,10 +96,10 @@ public:
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
int get_current_scanline() { return m_scanline; }
- void set_scanline_callback( scanline_delegate &&cb ) { m_scanline_callback_proc = std::move(cb); m_scanline_callback_proc.bind_relative_to(*owner()); }
- void set_hblank_callback( hblank_delegate &&cb ) { m_hblank_callback_proc = std::move(cb); m_hblank_callback_proc.bind_relative_to(*owner()); }
- void set_vidaccess_callback( vidaccess_delegate &&cb ) { m_vidaccess_callback_proc = std::move(cb); m_vidaccess_callback_proc.bind_relative_to(*owner()); }
- void set_scanlines_per_frame( int scanlines ) { m_scanlines_per_frame = scanlines; }
+ template <typename... T> void set_scanline_callback(T &&... args) { m_scanline_callback_proc.set(std::forward<T>(args)...); m_scanline_callback_proc.resolve(); /* FIXME: if this is supposed to be set at config time, it should be resolved on start */ }
+ template <typename... T> void set_hblank_callback(T &&... args) { m_hblank_callback_proc.set(std::forward<T>(args)...); m_hblank_callback_proc.resolve(); /* FIXME: if this is supposed to be set at config time, it should be resolved on start */ }
+ template <typename... T> void set_vidaccess_callback(T &&... args) { m_vidaccess_callback_proc.set(std::forward<T>(args)...); m_vidaccess_callback_proc.resolve(); /* FIXME: if this is supposed to be set at config time, it should be resolved on start */ }
+ void set_scanlines_per_frame(int scanlines) { m_scanlines_per_frame = scanlines; }
// MMC5 has to be able to check this
int is_sprite_8x16() { return m_regs[PPU_CONTROL0] & PPU_CONTROL0_SPRITE_SIZE; }
@@ -107,7 +107,7 @@ public:
int get_tilenum() { return m_tilecount; }
//27/12/2002 (HACK!)
- void set_latch( latch_delegate &&cb ) { m_latch = std::move(cb); m_latch.bind_relative_to(*owner()); }
+ template <typename... T> void set_latch(T &&... args) { m_latch.set(std::forward<T>(args)...); m_latch.resolve(); /* FIXME: if this is supposed to be set at config time, it should be resolved on start */ }
// void update_screen(bitmap_t &bitmap, const rectangle &cliprect);
diff --git a/src/devices/video/psx.cpp b/src/devices/video/psx.cpp
index 471bfc5b50b..6a689edf14f 100644
--- a/src/devices/video/psx.cpp
+++ b/src/devices/video/psx.cpp
@@ -3542,5 +3542,5 @@ void psxgpu_device::device_config_complete()
}
if (!screen().has_screen_update())
- screen().set_screen_update(screen_update_rgb32_delegate(FUNC(psxgpu_device::update_screen), this));
+ screen().set_screen_update(*this, FUNC(psxgpu_device::update_screen));
}
diff --git a/src/devices/video/scn2674.cpp b/src/devices/video/scn2674.cpp
index 1e6cf3d68b5..cc8121a923f 100644
--- a/src/devices/video/scn2674.cpp
+++ b/src/devices/video/scn2674.cpp
@@ -86,6 +86,7 @@ scn2674_device::scn2674_device(const machine_config &mconfig, device_type type,
, m_dbl1(0)
, m_char_buffer(0), m_attr_buffer(0)
, m_linecounter(0), m_address(0), m_start1change(0)
+ , m_display_cb(*this)
, m_scanline_timer(nullptr)
, m_breq_timer(nullptr)
, m_vblank_timer(nullptr)
@@ -97,18 +98,15 @@ scn2674_device::scn2674_device(const machine_config &mconfig, device_type type,
device_memory_interface::space_config_vector scn2674_device::memory_space_config() const
{
- return has_configured_map(1) ? space_config_vector {
- std::make_pair(0, &m_char_space_config),
- std::make_pair(1, &m_attr_space_config)
- } : space_config_vector {
- std::make_pair(0, &m_char_space_config)
- };
+ return has_configured_map(1)
+ ? space_config_vector{ std::make_pair(0, &m_char_space_config), std::make_pair(1, &m_attr_space_config) }
+ : space_config_vector{ std::make_pair(0, &m_char_space_config) };
}
void scn2674_device::device_start()
{
// resolve callbacks
- m_display_cb.bind_relative_to(*owner());
+ m_display_cb.resolve();
m_intr_cb.resolve_safe();
m_breq_cb.resolve_safe();
m_mbc_cb.resolve_safe();
diff --git a/src/devices/video/scn2674.h b/src/devices/video/scn2674.h
index 2b7367eeed0..f3bd19b406a 100644
--- a/src/devices/video/scn2674.h
+++ b/src/devices/video/scn2674.h
@@ -16,8 +16,6 @@ class scn2674_device : public device_t,
public device_memory_interface
{
public:
- scn2674_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
typedef device_delegate<void (bitmap_rgb32 &bitmap, int x, int y, uint8_t linecount, uint8_t charcode, uint8_t attrcode, uint16_t address, bool cursor, bool dw, bool lg, bool ul, bool blink)> draw_character_delegate;
// static configuration
@@ -28,20 +26,9 @@ public:
auto mbc_attr_callback() { return m_mbc_attr_cb.bind(); }
void set_character_width(int value) { m_hpixels_per_column = value; }
- template <class FunctionClass>
- void set_display_callback(void (FunctionClass::*callback)(bitmap_rgb32 &, int, int, uint8_t, uint8_t, uint8_t, uint16_t, bool, bool, bool, bool, bool), const char *name)
- {
- set_display_callback(draw_character_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
- }
- template <class FunctionClass>
- void set_display_callback(const char *devname, void (FunctionClass::*callback)(bitmap_rgb32 &, int, int, uint8_t, uint8_t, uint8_t, uint16_t, bool, bool, bool, bool, bool), const char *name)
- {
- set_display_callback(draw_character_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr)));
- }
- void set_display_callback(draw_character_delegate callback)
- {
- m_display_cb = callback;
- }
+ template <typename... T> void set_display_callback(T &&... args) { m_display_cb.set(std::forward<T>(args)...); }
+
+ scn2674_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
uint8_t read(offs_t offset);
void write(offs_t offset, uint8_t data);
diff --git a/src/devices/video/sed1520.cpp b/src/devices/video/sed1520.cpp
index feca2ed10fd..8573725835f 100644
--- a/src/devices/video/sed1520.cpp
+++ b/src/devices/video/sed1520.cpp
@@ -33,7 +33,7 @@ DEFINE_DEVICE_TYPE(SED1520, sed1520_device, "sed1520", "Epson SED1520")
sed1520_device::sed1520_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, SED1520, tag, owner, clock), m_lcd_on(0), m_busy(0), m_page(0), m_column(0), m_old_column(0), m_start_line(0),
m_adc(0), m_static_drive(0), m_modify_write(false),
- m_screen_update_cb()
+ m_screen_update_cb(*this)
{
}
@@ -44,7 +44,7 @@ sed1520_device::sed1520_device(const machine_config &mconfig, const char *tag, d
void sed1520_device::device_start()
{
- m_screen_update_cb.bind_relative_to(*owner());
+ m_screen_update_cb.resolve();
// state saving
save_item(NAME(m_lcd_on));
diff --git a/src/devices/video/sed1520.h b/src/devices/video/sed1520.h
index 9ca1358713e..2857b978d10 100644
--- a/src/devices/video/sed1520.h
+++ b/src/devices/video/sed1520.h
@@ -33,17 +33,7 @@ public:
sed1520_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
// sconfiguration helpers
- void set_screen_update_cb(screen_update_delegate callback) { m_screen_update_cb = callback; }
- template <class FunctionClass> void set_screen_update_cb(const char *devname,
- uint32_t (FunctionClass::*callback)(bitmap_ind16 &, const rectangle &, uint8_t *, int, int), const char *name)
- {
- set_screen_update_cb(screen_update_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr)));
- }
- template <class FunctionClass> void set_screen_update_cb(
- uint32_t (FunctionClass::*callback)(bitmap_ind16 &, const rectangle &, uint8_t *, int, int), const char *name)
- {
- set_screen_update_cb(screen_update_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
- }
+ template <typename... T> void set_screen_update_cb(T &&... args) { m_screen_update_cb.set(std::forward<T>(args)...); }
// device interface
virtual DECLARE_WRITE8_MEMBER(write);
diff --git a/src/devices/video/tms9928a.cpp b/src/devices/video/tms9928a.cpp
index c068d8b4ce8..129b364e860 100644
--- a/src/devices/video/tms9928a.cpp
+++ b/src/devices/video/tms9928a.cpp
@@ -78,7 +78,7 @@ void tms9928a_device::device_config_complete()
return;
if (!screen().has_screen_update())
- screen().set_screen_update(screen_update_rgb32_delegate(FUNC(tms9928a_device::screen_update), this));
+ screen().set_screen_update(*this, FUNC(tms9928a_device::screen_update));
if (!screen().refresh_attoseconds())
{
diff --git a/src/devices/video/tms9928a.h b/src/devices/video/tms9928a.h
index 72c466d464b..cc5a5192f14 100644
--- a/src/devices/video/tms9928a.h
+++ b/src/devices/video/tms9928a.h
@@ -82,7 +82,7 @@ public:
void register_write(u8 data);
/* update the screen */
- uint32_t screen_update( screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect );
+ uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
bitmap_rgb32 &get_bitmap() { return m_tmpbmp; }
/* RESET pin */
diff --git a/src/devices/video/upd3301.cpp b/src/devices/video/upd3301.cpp
index 07b8a32c99b..166f623dc30 100644
--- a/src/devices/video/upd3301.cpp
+++ b/src/devices/video/upd3301.cpp
@@ -84,6 +84,7 @@ upd3301_device::upd3301_device(const machine_config &mconfig, const char *tag, d
m_write_drq(*this),
m_write_hrtc(*this),
m_write_vrtc(*this),
+ m_display_cb(*this),
m_width(0),
m_status(0),
m_param_count(0),
@@ -115,11 +116,11 @@ void upd3301_device::device_start()
{
screen().register_screen_bitmap(m_bitmap);
// resolve callbacks
- m_display_cb.bind_relative_to(*owner());
m_write_drq.resolve_safe();
m_write_int.resolve_safe();
m_write_hrtc.resolve_safe();
m_write_vrtc.resolve_safe();
+ m_display_cb.resolve();
// allocate timers
m_hrtc_timer = timer_alloc(TIMER_HRTC);
diff --git a/src/devices/video/upd3301.h b/src/devices/video/upd3301.h
index 147c12c5b7d..293aaa91613 100644
--- a/src/devices/video/upd3301.h
+++ b/src/devices/video/upd3301.h
@@ -60,18 +60,7 @@ public:
upd3301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
void set_character_width(int value) { m_width = value; }
- template <typename... T> void set_display_callback(T &&... args) { m_display_cb = draw_character_delegate(std::forward<T>(args)...); }
- void set_display_callback(draw_character_delegate callback) { m_display_cb = callback; }
- template <class FunctionClass> void set_display_callback(const char *devname,
- void (FunctionClass::*callback)(bitmap_rgb32 &, int, int, uint8_t, uint8_t, int, int, int, int, int, int, int), const char *name)
- {
- set_display_callback(draw_character_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr)));
- }
- template <class FunctionClass> void set_display_callback(
- void (FunctionClass::*callback)(bitmap_rgb32 &, int, int, uint8_t, uint8_t, int, int, int, int, int, int, int), const char *name)
- {
- set_display_callback(draw_character_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
- }
+ template <typename... T> void set_display_callback(T &&... args) { m_display_cb.set(std::forward<T>(args)...); }
auto drq_wr_callback() { return m_write_drq.bind(); }
auto int_wr_callback() { return m_write_int.bind(); }
diff --git a/src/devices/video/upd7220.cpp b/src/devices/video/upd7220.cpp
index 50e1cc9bd1c..235a1a99cf6 100644
--- a/src/devices/video/upd7220.cpp
+++ b/src/devices/video/upd7220.cpp
@@ -615,6 +615,8 @@ upd7220_device::upd7220_device(const machine_config &mconfig, const char *tag, d
device_t(mconfig, UPD7220, tag, owner, clock),
device_memory_interface(mconfig, *this),
device_video_interface(mconfig, *this),
+ m_display_cb(*this),
+ m_draw_text_cb(*this),
m_write_drq(*this),
m_write_hsync(*this),
m_write_vsync(*this),
@@ -676,8 +678,8 @@ upd7220_device::upd7220_device(const machine_config &mconfig, const char *tag, d
void upd7220_device::device_start()
{
// resolve callbacks
- m_display_cb.bind_relative_to(*owner());
- m_draw_text_cb.bind_relative_to(*owner());
+ m_display_cb.resolve();
+ m_draw_text_cb.resolve();
m_write_drq.resolve_safe();
m_write_hsync.resolve_safe();
diff --git a/src/devices/video/upd7220.h b/src/devices/video/upd7220.h
index 7c7370c0cd9..d1f8806c6ac 100644
--- a/src/devices/video/upd7220.h
+++ b/src/devices/video/upd7220.h
@@ -56,53 +56,14 @@ class upd7220_device : public device_t,
public device_video_interface
{
public:
- typedef device_delegate<void (bitmap_rgb32 &bitmap, int y, int x, uint32_t address)> display_pixels_delegate;
- typedef device_delegate<void (bitmap_rgb32 &bitmap, uint32_t addr, int y, int wd, int pitch, int lr, int cursor_on, int cursor_addr)> draw_text_delegate;
+ using display_pixels_delegate = device_delegate<void (bitmap_rgb32 &bitmap, int y, int x, uint32_t address)>;
+ using draw_text_delegate = device_delegate<void (bitmap_rgb32 &bitmap, uint32_t addr, int y, int wd, int pitch, int lr, int cursor_on, int cursor_addr)>;
// construction/destruction
upd7220_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- // FIXME: these should be aware of current device for resolving the tag
- template <class FunctionClass>
- void set_display_pixels(void (FunctionClass::*init)(bitmap_rgb32 &, int, int, uint32_t), const char *name)
- {
- m_display_cb = display_pixels_delegate(init, name, nullptr, static_cast<FunctionClass *>(nullptr));
- }
- template <class FunctionClass>
- void set_display_pixels(void (FunctionClass::*init)(bitmap_rgb32 &, int, int, uint32_t) const, const char *name)
- {
- m_display_cb = display_pixels_delegate(init, name, nullptr, static_cast<FunctionClass *>(nullptr));
- }
- template <class FunctionClass>
- void set_display_pixels(const char *devname, void (FunctionClass::*init)(bitmap_rgb32 &, int, int, uint32_t), const char *name)
- {
- m_display_cb = display_pixels_delegate(init, name, devname, static_cast<FunctionClass *>(nullptr));
- }
- template <class FunctionClass>
- void set_display_pixels(const char *devname, void (FunctionClass::*init)(bitmap_rgb32 &, int, int, uint32_t) const, const char *name)
- {
- m_display_cb = display_pixels_delegate(init, name, devname, static_cast<FunctionClass *>(nullptr));
- }
- template <class FunctionClass>
- void set_draw_text(void (FunctionClass::*init)(bitmap_rgb32 &, uint32_t, int, int, int, int, int, int), const char *name)
- {
- m_draw_text_cb = draw_text_delegate(init, name, nullptr, static_cast<FunctionClass *>(nullptr));
- }
- template <class FunctionClass>
- void set_draw_text(void (FunctionClass::*init)(bitmap_rgb32 &, uint32_t, int, int, int, int, int, int) const, const char *name)
- {
- m_draw_text_cb = draw_text_delegate(init, name, nullptr, static_cast<FunctionClass *>(nullptr));
- }
- template <class FunctionClass>
- void set_draw_text(const char *devname, void (FunctionClass::*init)(bitmap_rgb32 &, uint32_t, int, int, int, int, int, int), const char *name)
- {
- m_draw_text_cb = draw_text_delegate(init, name, devname, static_cast<FunctionClass *>(nullptr));
- }
- template <class FunctionClass>
- void set_draw_text(const char *devname, void (FunctionClass::*init)(bitmap_rgb32 &, uint32_t, int, int, int, int, int, int) const, const char *name)
- {
- m_draw_text_cb = draw_text_delegate(init, name, devname, static_cast<FunctionClass *>(nullptr));
- }
+ template <typename... T> void set_display_pixels(T &&... args) { m_display_cb.set(std::forward<T>(args)...); }
+ template <typename... T> void set_draw_text(T &&... args) { m_draw_text_cb.set(std::forward<T>(args)...); }
auto drq_wr_callback() { return m_write_drq.bind(); }
auto hsync_wr_callback() { return m_write_hsync.bind(); }
diff --git a/src/devices/video/v9938.cpp b/src/devices/video/v9938.cpp
index 97c584fddc6..4549dae9e6e 100644
--- a/src/devices/video/v9938.cpp
+++ b/src/devices/video/v9938.cpp
@@ -169,7 +169,7 @@ void v99x8_device::device_config_complete()
(m_pal_config ? VVISIBLE_PAL : VVISIBLE_NTSC) * 2 - 1 - VERTICAL_ADJUST * 2);
if (!screen().has_screen_update())
- screen().set_screen_update(screen_update_rgb32_delegate(FUNC(v99x8_device::screen_update), this));
+ screen().set_screen_update(*this, FUNC(v99x8_device::screen_update));
}
diff --git a/src/devices/video/virge_pci.cpp b/src/devices/video/virge_pci.cpp
index bc5755d3550..c3d55f4cc62 100644
--- a/src/devices/video/virge_pci.cpp
+++ b/src/devices/video/virge_pci.cpp
@@ -251,11 +251,11 @@ void virgedx_pci_device::device_start()
void virge_pci_device::map_extra(uint64_t memory_window_start, uint64_t memory_window_end, uint64_t memory_offset, address_space *memory_space,
uint64_t io_window_start, uint64_t io_window_end, uint64_t io_offset, address_space *io_space)
{
- memory_space->install_readwrite_handler(0xa0000, 0xbffff, read8_delegate(FUNC(virge_pci_device::vram_r),this), write8_delegate(FUNC(virge_pci_device::vram_w),this));
+ memory_space->install_readwrite_handler(0xa0000, 0xbffff, read8_delegate(*this, FUNC(virge_pci_device::vram_r)), write8_delegate(*this, FUNC(virge_pci_device::vram_w)));
- io_space->install_readwrite_handler(0x3b0, 0x3bf, read32_delegate(FUNC(virge_pci_device::vga_3b0_r), this), write32_delegate(FUNC(virge_pci_device::vga_3b0_w), this));
- io_space->install_readwrite_handler(0x3c0, 0x3cf, read32_delegate(FUNC(virge_pci_device::vga_3c0_r), this), write32_delegate(FUNC(virge_pci_device::vga_3c0_w), this));
- io_space->install_readwrite_handler(0x3d0, 0x3df, read32_delegate(FUNC(virge_pci_device::vga_3d0_r), this), write32_delegate(FUNC(virge_pci_device::vga_3d0_w), this));
+ io_space->install_readwrite_handler(0x3b0, 0x3bf, read32_delegate(*this, FUNC(virge_pci_device::vga_3b0_r)), write32_delegate(*this, FUNC(virge_pci_device::vga_3b0_w)));
+ io_space->install_readwrite_handler(0x3c0, 0x3cf, read32_delegate(*this, FUNC(virge_pci_device::vga_3c0_r)), write32_delegate(*this, FUNC(virge_pci_device::vga_3c0_w)));
+ io_space->install_readwrite_handler(0x3d0, 0x3df, read32_delegate(*this, FUNC(virge_pci_device::vga_3d0_r)), write32_delegate(*this, FUNC(virge_pci_device::vga_3d0_w)));
}
void virge_pci_device::device_add_mconfig(machine_config &config)
diff --git a/src/devices/video/voodoo_pci.cpp b/src/devices/video/voodoo_pci.cpp
index 191eaec4bf3..494bd32a5dd 100644
--- a/src/devices/video/voodoo_pci.cpp
+++ b/src/devices/video/voodoo_pci.cpp
@@ -178,7 +178,7 @@ void voodoo_banshee_pci_device::map_extra(uint64_t memory_window_start, uint64_t
// Should really be dependent on voodoo VGAINIT0 bit 8 and IO base + 0xc3 bit 0
uint64_t start = io_offset + 0x3b0;
uint64_t end = io_offset + 0x3df;
- io_space->install_readwrite_handler(start, end, read32_delegate(FUNC(voodoo_pci_device::vga_r), this), write32_delegate(FUNC(voodoo_pci_device::vga_w), this));
+ io_space->install_readwrite_handler(start, end, read32_delegate(*this, FUNC(voodoo_pci_device::vga_r)), write32_delegate(*this, FUNC(voodoo_pci_device::vga_w)));
logerror("%s: map %s at %0*x-%0*x\n", this->tag(), "vga_r/w", 4, uint32_t(start), 4, uint32_t(end));
}
@@ -191,7 +191,7 @@ void voodoo_3_pci_device::map_extra(uint64_t memory_window_start, uint64_t memor
// Should really be dependent on voodoo VGAINIT0 bit 8 and IO base + 0xc3 bit 0
uint64_t start = io_offset + 0x3b0;
uint64_t end = io_offset + 0x3df;
- io_space->install_readwrite_handler(start, end, read32_delegate(FUNC(voodoo_pci_device::vga_r), this), write32_delegate(FUNC(voodoo_pci_device::vga_w), this));
+ io_space->install_readwrite_handler(start, end, read32_delegate(*this, FUNC(voodoo_pci_device::vga_r)), write32_delegate(*this, FUNC(voodoo_pci_device::vga_w)));
logerror("%s: map %s at %0*x-%0*x\n", this->tag(), "vga_r/w", 4, uint32_t(start), 4, uint32_t(end));
}