diff --git a/src/emu/video/i8275x.h b/src/emu/video/i8275x.h index b6ce829b266..bd72b29dcff 100644 --- a/src/emu/video/i8275x.h +++ b/src/emu/video/i8275x.h @@ -45,18 +45,24 @@ // INTERFACE CONFIGURATION MACROS //************************************************************************** -#define MCFG_I8275_ADD(_tag, _clock, _hpixels_per_column, _display_func, _drq) \ +#define MCFG_I8275_ADD(_tag, _clock, _hpixels_per_column, _display_func) \ MCFG_DEVICE_ADD(_tag, I8275x, _clock) \ downcast(device)->set_hpixels_per_column(_hpixels_per_column); \ - downcast(device)->set_display_func(_display_func); \ - downcast(device)->set_drq_callback(DEVCB2_##_drq); + downcast(device)->set_display_func(_display_func); + + +#define MCFG_I8275_DRQ_CALLBACK(_write) \ + devcb = &i8275x_device::set_drq_wr_callback(*device, DEVCB2_##_write); + +#define MCFG_I8275_IRQ_CALLBACK(_write) \ + devcb = &i8275x_device::set_irq_wr_callback(*device, DEVCB2_##_write); + +#define MCFG_I8275_HRTC_CALLBACK(_write) \ + devcb = &i8275x_device::set_hrtc_wr_callback(*device, DEVCB2_##_write); + +#define MCFG_I8275_VRTC_CALLBACK(_write) \ + devcb = &i8275x_device::set_vrtc_wr_callback(*device, DEVCB2_##_write); -#define MCFG_I8275_IRQ_CALLBACK(_irq) \ - downcast(device)->set_irq_callback(DEVCB2_##_irq); -#define MCFG_I8275_HRTC_CALLBACK(_hrtc) \ - downcast(device)->set_hrtc_callback(DEVCB2_##_hrtc); -#define MCFG_I8275_VRTC_CALLBACK(_vrtc) \ - downcast(device)->set_vrtc_callback(DEVCB2_##_vrtc); @@ -82,13 +88,14 @@ public: // construction/destruction i8275x_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - template void set_irq_callback(_irq irq) { m_write_irq.set_callback(irq); } - template void set_drq_callback(_drq drq) { m_write_drq.set_callback(drq); } - template void set_hrtc_callback(_hrtc hrtc) { m_write_hrtc.set_callback(hrtc); } - template void set_vrtc_callback(_vrtc vrtc) { m_write_vrtc.set_callback(vrtc); } void set_hpixels_per_column(int hpixels_per_column) { m_hpixels_per_column = hpixels_per_column; } void set_display_func(i8275_display_pixels_func func) { m_display_pixels = func; } + template static devcb2_base &set_drq_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_drq.set_callback(object); } + template static devcb2_base &set_irq_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_irq.set_callback(object); } + template static devcb2_base &set_hrtc_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_hrtc.set_callback(object); } + template static devcb2_base &set_vrtc_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_vrtc.set_callback(object); } + DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); diff --git a/src/mess/drivers/wicat.c b/src/mess/drivers/wicat.c index 73490078456..ab2d84d3b58 100644 --- a/src/mess/drivers/wicat.c +++ b/src/mess/drivers/wicat.c @@ -887,7 +887,8 @@ static MACHINE_CONFIG_START( wicat, wicat_state ) MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette") - MCFG_I8275_ADD("video",XTAL_19_6608MHz/8,9,wicat_display_pixels,DEVWRITELINE("videodma",am9517a_device, dreq0_w)) + MCFG_I8275_ADD("video",XTAL_19_6608MHz/8,9,wicat_display_pixels) + MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE("videodma",am9517a_device, dreq0_w)) MCFG_I8275_IRQ_CALLBACK(WRITELINE(wicat_state,crtc_cb)) MCFG_VIDEO_SET_SCREEN("screen") diff --git a/src/mess/drivers/zorba.c b/src/mess/drivers/zorba.c index e0f6935ab21..b0ecf6e0d7c 100644 --- a/src/mess/drivers/zorba.c +++ b/src/mess/drivers/zorba.c @@ -394,7 +394,8 @@ static MACHINE_CONFIG_START( zorba, zorba_state ) MCFG_PIT8253_CLK1(XTAL_24MHz / 3) /* Timer 1: ? */ MCFG_PIT8253_CLK2(XTAL_24MHz / 3) /* Timer 2: ? */ - MCFG_I8275_ADD("crtc", XTAL_14_31818MHz/7, 8, zorba_update_chr, DEVWRITELINE("dma", z80dma_device, rdy_w)) + MCFG_I8275_ADD("crtc", XTAL_14_31818MHz/7, 8, zorba_update_chr) + MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE("dma", z80dma_device, rdy_w)) MCFG_I8275_IRQ_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) MCFG_FD1793x_ADD("fdc", XTAL_24MHz / 24) MCFG_FLOPPY_DRIVE_ADD("fdc:0", zorba_floppies, "525dd", floppy_image_device::default_floppy_formats) diff --git a/src/mess/video/mikromik.c b/src/mess/video/mikromik.c index d2f4fe1a700..c9950113f87 100644 --- a/src/mess/video/mikromik.c +++ b/src/mess/video/mikromik.c @@ -114,7 +114,8 @@ MACHINE_CONFIG_FRAGMENT( mm1m6_video ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", mm1) MCFG_PALETTE_ADD_MONOCHROME_GREEN_HIGHLIGHT("palette") - MCFG_I8275_ADD(I8275_TAG, XTAL_18_720MHz/8, 8, crtc_display_pixels, DEVWRITELINE(I8237_TAG, am9517a_device, dreq0_w)) + MCFG_I8275_ADD(I8275_TAG, XTAL_18_720MHz/8, 8, crtc_display_pixels) + MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE(I8237_TAG, am9517a_device, dreq0_w)) MCFG_VIDEO_SET_SCREEN(SCREEN_TAG) MCFG_DEVICE_ADD(UPD7220_TAG, UPD7220, XTAL_18_720MHz/8)