diff --git a/src/emu/machine/pic8259.c b/src/emu/machine/pic8259.c index 17710a22123..24cc25fd297 100644 --- a/src/emu/machine/pic8259.c +++ b/src/emu/machine/pic8259.c @@ -33,7 +33,7 @@ typedef struct pic8259 pic8259_t; struct pic8259 { - const struct pic8259_interface *intf; + devcb_resolved_write_line out_int_func; emu_timer *timer; @@ -103,13 +103,13 @@ static TIMER_CALLBACK( pic8259_timerproc ) { if (LOG_GENERAL) logerror("pic8259_timerproc(): PIC triggering IRQ #%d\n", irq); - if ( ! ( pic8259->ocw3 & 0x04 ) && pic8259->intf->set_int_line) - pic8259->intf->set_int_line(device, 1); + if (!BIT(pic8259->ocw3, 2)) + devcb_call_write_line(&pic8259->out_int_func, 1); return; } } - if ( ! ( pic8259->ocw3 & 0x04 ) && pic8259->intf->set_int_line) - pic8259->intf->set_int_line(device, 0); + if (!BIT(pic8259->ocw3, 2)) + devcb_call_write_line(&pic8259->out_int_func, 0); } @@ -398,12 +398,17 @@ WRITE8_DEVICE_HANDLER( pic8259_w ) -static DEVICE_START( pic8259 ) { +static DEVICE_START( pic8259 ) +{ pic8259_t *pic8259 = get_safe_token(device); + const struct pic8259_interface *intf = (const struct pic8259_interface *)device->baseconfig().static_config; - pic8259->intf = (const struct pic8259_interface *)device->baseconfig().static_config; + assert(intf != NULL); pic8259->timer = timer_alloc( device->machine, pic8259_timerproc, (void *)device ); + + /* resolve callbacks */ + devcb_resolve_write_line(&pic8259->out_int_func, &intf->out_int_func, device); } diff --git a/src/emu/machine/pic8259.h b/src/emu/machine/pic8259.h index c763f4573ac..ffd31331a68 100644 --- a/src/emu/machine/pic8259.h +++ b/src/emu/machine/pic8259.h @@ -25,19 +25,18 @@ #ifndef __PIC8259_H__ #define __PIC8259_H__ +#include "devcb.h" + #define PIC8259 DEVICE_GET_INFO_NAME(pic8259) /*************************************************************************** TYPE DEFINITIONS ***************************************************************************/ -typedef void (*pic8259_set_int_line_func)(running_device *device, int interrupt); -#define PIC8259_SET_INT_LINE(name) void name(running_device *device, int interrupt) - - -struct pic8259_interface { +struct pic8259_interface +{ /* Called when int line changes */ - pic8259_set_int_line_func set_int_line; + devcb_write_line out_int_func; }; diff --git a/src/mame/drivers/calchase.c b/src/mame/drivers/calchase.c index 720f9819741..203608a6015 100644 --- a/src/mame/drivers/calchase.c +++ b/src/mame/drivers/calchase.c @@ -573,23 +573,19 @@ static MACHINE_START(calchase) * *************************************************************/ -static PIC8259_SET_INT_LINE( calchase_pic8259_1_set_int_line ) { - cputag_set_input_line(device->machine, "maincpu", 0, interrupt ? HOLD_LINE : CLEAR_LINE); +static WRITE_LINE_DEVICE_HANDLER( calchase_pic8259_1_set_int_line ) +{ + cputag_set_input_line(device->machine, "maincpu", 0, state ? HOLD_LINE : CLEAR_LINE); } - -static PIC8259_SET_INT_LINE( calchase_pic8259_2_set_int_line ) { - pic8259_ir2_w(calchase_devices.pic8259_1, interrupt); -} - - -static const struct pic8259_interface calchase_pic8259_1_config = { - calchase_pic8259_1_set_int_line +static const struct pic8259_interface calchase_pic8259_1_config = +{ + DEVCB_LINE(calchase_pic8259_1_set_int_line) }; - -static const struct pic8259_interface calchase_pic8259_2_config = { - calchase_pic8259_2_set_int_line +static const struct pic8259_interface calchase_pic8259_2_config = +{ + DEVCB_DEVICE_LINE("pic8259_1", pic8259_ir2_w) }; diff --git a/src/mame/drivers/gamecstl.c b/src/mame/drivers/gamecstl.c index c5be32195dc..f21a1cf6c7b 100644 --- a/src/mame/drivers/gamecstl.c +++ b/src/mame/drivers/gamecstl.c @@ -615,25 +615,19 @@ static MACHINE_RESET(gamecstl) * *************************************************************/ -static PIC8259_SET_INT_LINE( gamecstl_pic8259_1_set_int_line ) +static WRITE_LINE_DEVICE_HANDLER( gamecstl_pic8259_1_set_int_line ) { - cputag_set_input_line(device->machine, "maincpu", 0, interrupt ? HOLD_LINE : CLEAR_LINE); + cputag_set_input_line(device->machine, "maincpu", 0, state ? HOLD_LINE : CLEAR_LINE); } - -static PIC8259_SET_INT_LINE( gamecstl_pic8259_2_set_int_line ) +static const struct pic8259_interface gamecstl_pic8259_1_config = { - pic8259_ir2_w(gamecstl_devices.pic8259_1, interrupt); -} - - -static const struct pic8259_interface gamecstl_pic8259_1_config = { - gamecstl_pic8259_1_set_int_line + DEVCB_LINE(gamecstl_pic8259_1_set_int_line) }; - -static const struct pic8259_interface gamecstl_pic8259_2_config = { - gamecstl_pic8259_2_set_int_line +static const struct pic8259_interface gamecstl_pic8259_2_config = +{ + DEVCB_DEVICE_LINE("pic8259_1", pic8259_ir2_w) }; diff --git a/src/mame/drivers/mediagx.c b/src/mame/drivers/mediagx.c index c3f7019a3ba..749c3bbb668 100644 --- a/src/mame/drivers/mediagx.c +++ b/src/mame/drivers/mediagx.c @@ -992,25 +992,19 @@ static MACHINE_RESET(mediagx) * *************************************************************/ -static PIC8259_SET_INT_LINE( mediagx_pic8259_1_set_int_line ) +static WRITE_LINE_DEVICE_HANDLER( mediagx_pic8259_1_set_int_line ) { - cputag_set_input_line(device->machine, "maincpu", 0, interrupt ? HOLD_LINE : CLEAR_LINE); + cputag_set_input_line(device->machine, "maincpu", 0, state ? HOLD_LINE : CLEAR_LINE); } - -static PIC8259_SET_INT_LINE( mediagx_pic8259_2_set_int_line ) +static const struct pic8259_interface mediagx_pic8259_1_config = { - pic8259_ir2_w(mediagx_devices.pic8259_1, interrupt); -} - - -static const struct pic8259_interface mediagx_pic8259_1_config = { - mediagx_pic8259_1_set_int_line + DEVCB_LINE(mediagx_pic8259_1_set_int_line) }; - -static const struct pic8259_interface mediagx_pic8259_2_config = { - mediagx_pic8259_2_set_int_line +static const struct pic8259_interface mediagx_pic8259_2_config = +{ + DEVCB_DEVICE_LINE("pic8259_1", pic8259_ir2_w) }; diff --git a/src/mame/drivers/pcat_dyn.c b/src/mame/drivers/pcat_dyn.c index ccd99d62978..73d42f2b20e 100644 --- a/src/mame/drivers/pcat_dyn.c +++ b/src/mame/drivers/pcat_dyn.c @@ -231,22 +231,19 @@ static I8237_INTERFACE( dma8237_2_config ) 8259 IRQ controller ******************/ -static PIC8259_SET_INT_LINE( pic8259_1_set_int_line ) +static WRITE_LINE_DEVICE_HANDLER( pic8259_1_set_int_line ) { - cputag_set_input_line(device->machine, "maincpu", 0, interrupt ? HOLD_LINE : CLEAR_LINE); + cputag_set_input_line(device->machine, "maincpu", 0, state ? HOLD_LINE : CLEAR_LINE); } -static const struct pic8259_interface pic8259_1_config = { - pic8259_1_set_int_line +static const struct pic8259_interface pic8259_1_config = +{ + DEVCB_LINE(pic8259_1_set_int_line) }; -static PIC8259_SET_INT_LINE( pic8259_2_set_int_line ) +static const struct pic8259_interface pic8259_2_config = { - pic8259_ir2_w(pcat_dyn_devices.pic8259_1, interrupt); -} - -static const struct pic8259_interface pic8259_2_config = { - pic8259_2_set_int_line + DEVCB_DEVICE_LINE("pic8259_1", pic8259_ir2_w) }; static IRQ_CALLBACK(irq_callback) diff --git a/src/mame/drivers/pcat_nit.c b/src/mame/drivers/pcat_nit.c index 132c3d5e76c..afed55d4c19 100644 --- a/src/mame/drivers/pcat_nit.c +++ b/src/mame/drivers/pcat_nit.c @@ -294,22 +294,19 @@ static I8237_INTERFACE( dma8237_2_config ) 8259 IRQ controller ******************/ -static PIC8259_SET_INT_LINE( pic8259_1_set_int_line ) +static WRITE_LINE_DEVICE_HANDLER( pic8259_1_set_int_line ) { - cputag_set_input_line(device->machine, "maincpu", 0, interrupt ? HOLD_LINE : CLEAR_LINE); + cputag_set_input_line(device->machine, "maincpu", 0, state ? HOLD_LINE : CLEAR_LINE); } -static const struct pic8259_interface pic8259_1_config = { - pic8259_1_set_int_line +static const struct pic8259_interface pic8259_1_config = +{ + DEVCB_LINE(pic8259_1_set_int_line) }; -static PIC8259_SET_INT_LINE( pic8259_2_set_int_line ) +static const struct pic8259_interface pic8259_2_config = { - pic8259_ir2_w(streetg2_devices.pic8259_1, interrupt); -} - -static const struct pic8259_interface pic8259_2_config = { - pic8259_2_set_int_line + DEVCB_DEVICE_LINE("pic8259_1", pic8259_ir2_w) }; static IRQ_CALLBACK(irq_callback) diff --git a/src/mame/drivers/pcxt.c b/src/mame/drivers/pcxt.c index 13e3214fb47..04aa0b088a4 100644 --- a/src/mame/drivers/pcxt.c +++ b/src/mame/drivers/pcxt.c @@ -644,20 +644,19 @@ static I8237_INTERFACE( dma8237_1_config ) 8259 IRQ controller ******************/ -static PIC8259_SET_INT_LINE( pic8259_1_set_int_line ) { - cputag_set_input_line(device->machine, "maincpu", 0, interrupt ? HOLD_LINE : CLEAR_LINE); +static WRITE_LINE_DEVICE_HANDLER( pic8259_1_set_int_line ) +{ + cputag_set_input_line(device->machine, "maincpu", 0, state ? HOLD_LINE : CLEAR_LINE); } -static const struct pic8259_interface pic8259_1_config = { - pic8259_1_set_int_line +static const struct pic8259_interface pic8259_1_config = +{ + DEVCB_LINE(pic8259_1_set_int_line) }; -static PIC8259_SET_INT_LINE( pic8259_2_set_int_line ) { - pic8259_ir2_w(filetto_devices.pic8259_1, interrupt); -} - -static const struct pic8259_interface pic8259_2_config = { - pic8259_2_set_int_line +static const struct pic8259_interface pic8259_2_config = +{ + DEVCB_DEVICE_LINE("pic8259_1", pic8259_ir2_w) }; static IRQ_CALLBACK(irq_callback) diff --git a/src/mame/drivers/photoply.c b/src/mame/drivers/photoply.c index 273cfc8e9a5..71c200e6062 100644 --- a/src/mame/drivers/photoply.c +++ b/src/mame/drivers/photoply.c @@ -225,22 +225,19 @@ static I8237_INTERFACE( dma8237_2_config ) 8259 IRQ controller ******************/ -static PIC8259_SET_INT_LINE( pic8259_1_set_int_line ) +static WRITE_LINE_DEVICE_HANDLER( pic8259_1_set_int_line ) { - cputag_set_input_line(device->machine, "maincpu", 0, interrupt ? HOLD_LINE : CLEAR_LINE); + cputag_set_input_line(device->machine, "maincpu", 0, state ? HOLD_LINE : CLEAR_LINE); } -static const struct pic8259_interface pic8259_1_config = { - pic8259_1_set_int_line +static const struct pic8259_interface pic8259_1_config = +{ + DEVCB_LINE(pic8259_1_set_int_line) }; -static PIC8259_SET_INT_LINE( pic8259_2_set_int_line ) +static const struct pic8259_interface pic8259_2_config = { - pic8259_ir2_w(photoply_devices.pic8259_1, interrupt); -} - -static const struct pic8259_interface pic8259_2_config = { - pic8259_2_set_int_line + DEVCB_DEVICE_LINE("pic8259_1", pic8259_ir2_w) }; static IRQ_CALLBACK(irq_callback) diff --git a/src/mame/drivers/quakeat.c b/src/mame/drivers/quakeat.c index 8af509dbfa9..454f9424d8d 100644 --- a/src/mame/drivers/quakeat.c +++ b/src/mame/drivers/quakeat.c @@ -105,25 +105,19 @@ ADDRESS_MAP_END * *************************************************************/ -static PIC8259_SET_INT_LINE( quakeat_pic8259_1_set_int_line ) +static WRITE_LINE_DEVICE_HANDLER( quakeat_pic8259_1_set_int_line ) { - cputag_set_input_line(device->machine, "maincpu", 0, interrupt ? HOLD_LINE : CLEAR_LINE); + cputag_set_input_line(device->machine, "maincpu", 0, state ? HOLD_LINE : CLEAR_LINE); } - -static PIC8259_SET_INT_LINE( quakeat_pic8259_2_set_int_line ) +static const struct pic8259_interface quakeat_pic8259_1_config = { - pic8259_ir2_w(quakeat_devices.pic8259_1, interrupt); -} - - -static const struct pic8259_interface quakeat_pic8259_1_config = { - quakeat_pic8259_1_set_int_line + DEVCB_LINE(quakeat_pic8259_1_set_int_line) }; - -static const struct pic8259_interface quakeat_pic8259_2_config = { - quakeat_pic8259_2_set_int_line +static const struct pic8259_interface quakeat_pic8259_2_config = +{ + DEVCB_DEVICE_LINE("pic8259_1", pic8259_ir2_w) }; /*************************************************************/ diff --git a/src/mame/drivers/taitowlf.c b/src/mame/drivers/taitowlf.c index 5c208291ffe..094e05e04b2 100644 --- a/src/mame/drivers/taitowlf.c +++ b/src/mame/drivers/taitowlf.c @@ -556,25 +556,19 @@ static MACHINE_RESET(taitowlf) * *************************************************************/ -static PIC8259_SET_INT_LINE( taitowlf_pic8259_1_set_int_line ) +static WRITE_LINE_DEVICE_HANDLER( taitowlf_pic8259_1_set_int_line ) { - cputag_set_input_line(device->machine, "maincpu", 0, interrupt ? HOLD_LINE : CLEAR_LINE); + cputag_set_input_line(device->machine, "maincpu", 0, state ? HOLD_LINE : CLEAR_LINE); } - -static PIC8259_SET_INT_LINE( taitowlf_pic8259_2_set_int_line ) +static const struct pic8259_interface taitowlf_pic8259_1_config = { - pic8259_ir2_w(taitowlf_devices.pic8259_1, interrupt); -} - - -static const struct pic8259_interface taitowlf_pic8259_1_config = { - taitowlf_pic8259_1_set_int_line + DEVCB_LINE(taitowlf_pic8259_1_set_int_line) }; - -static const struct pic8259_interface taitowlf_pic8259_2_config = { - taitowlf_pic8259_2_set_int_line +static const struct pic8259_interface taitowlf_pic8259_2_config = +{ + DEVCB_DEVICE_LINE("pic8259_1", pic8259_ir2_w) };