diff options
70 files changed, 332 insertions, 332 deletions
diff --git a/src/mame/drivers/bnstars.c b/src/mame/drivers/bnstars.c index 8ca40e3888e..f32d197b45a 100644 --- a/src/mame/drivers/bnstars.c +++ b/src/mame/drivers/bnstars.c @@ -163,6 +163,7 @@ public: void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT32 *sprram_top, size_t sprram_size, int region); void irq_init(); void irq_raise(int level); + IRQ_CALLBACK_MEMBER(irq_callback); }; @@ -1325,14 +1326,13 @@ ADDRESS_MAP_END #endif -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(bnstars_state::irq_callback) { - bnstars_state *state = device->machine().driver_data<bnstars_state>(); int i; - for(i=15; i>=0 && !(state->m_irqreq & (1<<i)); i--); - state->m_irqreq &= ~(1<<i); - if(!state->m_irqreq) - device->execute().set_input_line(0, CLEAR_LINE); + for(i=15; i>=0 && !(m_irqreq & (1<<i)); i--); + m_irqreq &= ~(1<<i); + if(!m_irqreq) + device.execute().set_input_line(0, CLEAR_LINE); return i; } @@ -1340,7 +1340,7 @@ void bnstars_state::irq_init() { m_irqreq = 0; machine().device("maincpu")->execute().set_input_line(0, CLEAR_LINE); - machine().device("maincpu")->execute().set_irq_acknowledge_callback(irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(bnstars_state::irq_callback),this)); } void bnstars_state::irq_raise(int level) diff --git a/src/mame/drivers/calchase.c b/src/mame/drivers/calchase.c index 22d0b1c6d6a..dd8918f6dc1 100644 --- a/src/mame/drivers/calchase.c +++ b/src/mame/drivers/calchase.c @@ -181,6 +181,7 @@ public: DECLARE_DRIVER_INIT(calchase); virtual void machine_start(); virtual void machine_reset(); + IRQ_CALLBACK_MEMBER(irq_callback); }; @@ -803,10 +804,9 @@ static INPUT_PORTS_START( calchase ) INPUT_PORTS_END #endif -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(calchase_state::irq_callback) { - calchase_state *state = device->machine().driver_data<calchase_state>(); - return pic8259_acknowledge( state->m_pic8259_1); + return pic8259_acknowledge(m_pic8259_1); } void calchase_state::machine_start() @@ -814,7 +814,7 @@ void calchase_state::machine_start() m_bios_ram = auto_alloc_array(machine(), UINT32, 0x10000/4); m_bios_ext_ram = auto_alloc_array(machine(), UINT32, 0x10000/4); - machine().device("maincpu")->execute().set_irq_acknowledge_callback(irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(calchase_state::irq_callback),this)); m_pit8254 = machine().device( "pit8254" ); m_pic8259_1 = machine().device( "pic8259_1" ); diff --git a/src/mame/drivers/chihiro.c b/src/mame/drivers/chihiro.c index ddf1d264b51..56a5aff573b 100644 --- a/src/mame/drivers/chihiro.c +++ b/src/mame/drivers/chihiro.c @@ -418,6 +418,7 @@ public: DECLARE_READ8_MEMBER(get_slave_ack); DECLARE_WRITE_LINE_MEMBER(chihiro_pit8254_out0_changed); DECLARE_WRITE_LINE_MEMBER(chihiro_pit8254_out2_changed); + IRQ_CALLBACK_MEMBER(irq_callback); }; /* @@ -1575,14 +1576,13 @@ static const struct pic8259_interface chihiro_pic8259_2_config = DEVCB_NULL }; -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(chihiro_state::irq_callback) { - chihiro_state *chst=device->machine().driver_data<chihiro_state>(); int r = 0; - r = pic8259_acknowledge(chst->chihiro_devs.pic8259_2); + r = pic8259_acknowledge(chihiro_devs.pic8259_2); if (r==0) { - r = pic8259_acknowledge(chst->chihiro_devs.pic8259_1); + r = pic8259_acknowledge(chihiro_devs.pic8259_1); } return r; } @@ -1805,7 +1805,7 @@ void chihiro_state::machine_start() smbus_register_device(0x10,smbus_callback_pic16lc); smbus_register_device(0x45,smbus_callback_cx25871); smbus_register_device(0x54,smbus_callback_eeprom); - machine().device("maincpu")->execute().set_irq_acknowledge_callback(irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(chihiro_state::irq_callback),this)); chihiro_devs.pic8259_1 = machine().device( "pic8259_1" ); chihiro_devs.pic8259_2 = machine().device( "pic8259_2" ); chihiro_devs.ide = machine().device( "ide" ); diff --git a/src/mame/drivers/crystal.c b/src/mame/drivers/crystal.c index 7c6e9576c83..75a1bbdd859 100644 --- a/src/mame/drivers/crystal.c +++ b/src/mame/drivers/crystal.c @@ -194,6 +194,7 @@ public: void screen_eof_crystal(screen_device &screen, bool state); INTERRUPT_GEN_MEMBER(crystal_interrupt); TIMER_CALLBACK_MEMBER(Timercb); + IRQ_CALLBACK_MEMBER(icallback); }; static void IntReq( running_machine &machine, int num ) @@ -271,10 +272,9 @@ WRITE32_MEMBER(crystal_state::IntAck_w) m_IntHigh = (data >> 8) & 7; } -static IRQ_CALLBACK( icallback ) +IRQ_CALLBACK_MEMBER(crystal_state::icallback) { - crystal_state *state = device->machine().driver_data<crystal_state>(); - address_space &space = device->memory().space(AS_PROGRAM); + address_space &space = device.memory().space(AS_PROGRAM); UINT32 IntPend = space.read_dword(0x01800c0c); int i; @@ -282,7 +282,7 @@ static IRQ_CALLBACK( icallback ) { if (BIT(IntPend, i)) { - return (state->m_IntHigh << 5) | i; + return (m_IntHigh << 5) | i; } } return 0; //This should never happen @@ -582,7 +582,7 @@ void crystal_state::machine_start() m_ds1302 = machine().device<ds1302_device>("rtc"); m_vr0video = machine().device("vr0"); - machine().device("maincpu")->execute().set_irq_acknowledge_callback(icallback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(crystal_state::icallback),this)); for (i = 0; i < 4; i++) m_Timer[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(crystal_state::Timercb),this), (void*)(FPTR)i); @@ -611,7 +611,7 @@ void crystal_state::machine_reset() memset(m_vidregs, 0, 0x10000); m_FlipCount = 0; m_IntHigh = 0; - machine().device("maincpu")->execute().set_irq_acknowledge_callback(icallback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(crystal_state::icallback),this)); m_Bank = 0; membank("bank1")->set_base(memregion("user1")->base() + 0); m_FlashCmd = 0xff; diff --git a/src/mame/drivers/funkball.c b/src/mame/drivers/funkball.c index ee92a587178..39795324945 100644 --- a/src/mame/drivers/funkball.c +++ b/src/mame/drivers/funkball.c @@ -165,6 +165,7 @@ public: virtual void machine_start(); virtual void machine_reset(); UINT32 screen_update_funkball(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + IRQ_CALLBACK_MEMBER(irq_callback); }; void funkball_state::video_start() @@ -1090,10 +1091,9 @@ static void funkball_set_keyb_int(running_machine &machine, int state) pic8259_ir1_w(drvstate->m_pic8259_1, state); } -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(funkball_state::irq_callback) { - funkball_state *state = device->machine().driver_data<funkball_state>(); - return pic8259_acknowledge( state->m_pic8259_1); + return pic8259_acknowledge(m_pic8259_1); } void funkball_state::machine_start() @@ -1102,7 +1102,7 @@ void funkball_state::machine_start() init_pc_common(machine(), PCCOMMON_KEYBOARD_AT, funkball_set_keyb_int); - m_maincpu->set_irq_acknowledge_callback(irq_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(funkball_state::irq_callback),this)); kbdc8042_init(machine(), &at8042); diff --git a/src/mame/drivers/galgame.c b/src/mame/drivers/galgame.c index 91b595d2adb..f09bf15d209 100644 --- a/src/mame/drivers/galgame.c +++ b/src/mame/drivers/galgame.c @@ -49,6 +49,7 @@ public: virtual void palette_init(); UINT32 screen_update_galaxygame(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(galaxygame_irq); + IRQ_CALLBACK_MEMBER(galaxygame_irq_callback); }; /************************************* @@ -294,9 +295,9 @@ void galaxygame_state::palette_init() palette_set_color(machine(),1,RGB_WHITE); /* white */ } -static IRQ_CALLBACK(galaxygame_irq_callback) +IRQ_CALLBACK_MEMBER(galaxygame_state::galaxygame_irq_callback) { - device->execute().set_input_line(0, CLEAR_LINE); + device.execute().set_input_line(0, CLEAR_LINE); return 0x40; } @@ -316,7 +317,7 @@ void galaxygame_state::machine_reset() m_point_display_list_index = 0; m_interrupt = 0; - machine().device("maincpu")->execute().set_irq_acknowledge_callback(galaxygame_irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(galaxygame_state::galaxygame_irq_callback),this)); } static const struct t11_setup t11_data = diff --git a/src/mame/drivers/gamecstl.c b/src/mame/drivers/gamecstl.c index 2d95ac83f6a..7c4386808bf 100644 --- a/src/mame/drivers/gamecstl.c +++ b/src/mame/drivers/gamecstl.c @@ -120,6 +120,7 @@ public: virtual void machine_reset(); virtual void video_start(); UINT32 screen_update_gamecstl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + IRQ_CALLBACK_MEMBER(irq_callback); }; @@ -602,10 +603,9 @@ static INPUT_PORTS_START(gamecstl) PORT_START("pc_keyboard_7") INPUT_PORTS_END -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(gamecstl_state::irq_callback) { - gamecstl_state *state = device->machine().driver_data<gamecstl_state>(); - return pic8259_acknowledge(state->m_pic8259_1); + return pic8259_acknowledge(m_pic8259_1); } void gamecstl_state::machine_start() @@ -621,7 +621,7 @@ void gamecstl_state::machine_reset() { machine().root_device().membank("bank1")->set_base(machine().root_device().memregion("bios")->base() + 0x30000); - machine().device("maincpu")->execute().set_irq_acknowledge_callback(irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(gamecstl_state::irq_callback),this)); } diff --git a/src/mame/drivers/gammagic.c b/src/mame/drivers/gammagic.c index 6ffee0c690f..9bd26c6c47f 100644 --- a/src/mame/drivers/gammagic.c +++ b/src/mame/drivers/gammagic.c @@ -103,6 +103,7 @@ public: UINT8 m_atapi_data[ATAPI_DATA_SIZE]; DECLARE_DRIVER_INIT(gammagic); + IRQ_CALLBACK_MEMBER(irq_callback); }; //static void atapi_irq(running_machine &machine, int state); @@ -622,16 +623,15 @@ static INPUT_PORTS_START( gammagic ) INPUT_PORTS_END #endif -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(gammagic_state::irq_callback) { - gammagic_state *state = device->machine().driver_data<gammagic_state>(); - return pic8259_acknowledge( state->m_pic8259_1); + return pic8259_acknowledge(m_pic8259_1); } static MACHINE_START(gammagic) { gammagic_state *state = machine.driver_data<gammagic_state>(); - machine.device("maincpu")->execute().set_irq_acknowledge_callback(irq_callback); + machine.device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(gammagic_state::irq_callback),state)); state->m_pit8254 = machine.device( "pit8254" ); state->m_pic8259_1 = machine.device( "pic8259_1" ); diff --git a/src/mame/drivers/jaguar.c b/src/mame/drivers/jaguar.c index c4b46cb61b7..2130c3e52ab 100644 --- a/src/mame/drivers/jaguar.c +++ b/src/mame/drivers/jaguar.c @@ -359,7 +359,7 @@ static DEVICE_IMAGE_LOAD( jaguar ); * *************************************/ -static IRQ_CALLBACK(jaguar_irq_callback) +IRQ_CALLBACK_MEMBER(jaguar_state::jaguar_irq_callback) { return (irqline == 6) ? 0x40 : -1; } @@ -375,7 +375,7 @@ static IRQ_CALLBACK(jaguar_irq_callback) void jaguar_state::machine_reset() { if (!m_is_cojag) - m_main_cpu->set_irq_acknowledge_callback(jaguar_irq_callback); + m_main_cpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(jaguar_state::jaguar_irq_callback),this)); m_protection_check = 0; diff --git a/src/mame/drivers/mediagx.c b/src/mame/drivers/mediagx.c index c095ba528de..cca10f4a754 100644 --- a/src/mame/drivers/mediagx.c +++ b/src/mame/drivers/mediagx.c @@ -199,6 +199,7 @@ public: DECLARE_READ32_MEMBER(speedup10_r); DECLARE_READ32_MEMBER(speedup11_r); TIMER_DEVICE_CALLBACK_MEMBER(sound_timer_callback); + IRQ_CALLBACK_MEMBER(irq_callback); }; // Display controller registers @@ -1047,10 +1048,9 @@ static INPUT_PORTS_START(mediagx) PORT_BIT( 0xf00, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3) INPUT_PORTS_END -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(mediagx_state::irq_callback) { - mediagx_state *state = device->machine().driver_data<mediagx_state>(); - return pic8259_acknowledge( state->m_pic8259_1); + return pic8259_acknowledge(m_pic8259_1); } void mediagx_state::machine_start() @@ -1069,7 +1069,7 @@ void mediagx_state::machine_reset() { UINT8 *rom = memregion("bios")->base(); - machine().device("maincpu")->execute().set_irq_acknowledge_callback(irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(mediagx_state::irq_callback),this)); memcpy(m_bios_ram, rom, 0x40000); machine().device("maincpu")->reset(); diff --git a/src/mame/drivers/midqslvr.c b/src/mame/drivers/midqslvr.c index 7522a8b1a22..a74b5a8a084 100644 --- a/src/mame/drivers/midqslvr.c +++ b/src/mame/drivers/midqslvr.c @@ -98,6 +98,7 @@ public: DECLARE_WRITE_LINE_MEMBER(midqslvr_pic8259_1_set_int_line); virtual void machine_start(); virtual void machine_reset(); + IRQ_CALLBACK_MEMBER(irq_callback); }; @@ -643,10 +644,9 @@ static void midqslvr_set_keyb_int(running_machine &machine, int state) pic8259_ir1_w(drvstate->m_pic8259_1, state); } -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(midqslvr_state::irq_callback) { - midqslvr_state *state = device->machine().driver_data<midqslvr_state>(); - return pic8259_acknowledge( state->m_pic8259_1); + return pic8259_acknowledge(m_pic8259_1); } void midqslvr_state::machine_start() @@ -661,7 +661,7 @@ void midqslvr_state::machine_start() init_pc_common(machine(), PCCOMMON_KEYBOARD_AT, midqslvr_set_keyb_int); - m_maincpu->set_irq_acknowledge_callback(irq_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(midqslvr_state::irq_callback),this)); intel82439tx_init(machine()); kbdc8042_init(machine(), &at8042); diff --git a/src/mame/drivers/model1.c b/src/mame/drivers/model1.c index 7e6f615b9d0..ebe511ac9fe 100644 --- a/src/mame/drivers/model1.c +++ b/src/mame/drivers/model1.c @@ -699,19 +699,17 @@ WRITE16_MEMBER(model1_state::bank_w) -static void irq_raise(running_machine &machine, int level) +void model1_state::irq_raise(int level) { - model1_state *state = machine.driver_data<model1_state>(); // logerror("irq: raising %d\n", level); // irq_status |= (1 << level); - state->m_last_irq = level; - machine.device("maincpu")->execute().set_input_line(0, HOLD_LINE); + m_last_irq = level; + machine().device("maincpu")->execute().set_input_line(0, HOLD_LINE); } -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(model1_state::irq_callback) { - model1_state *state = device->machine().driver_data<model1_state>(); - return state->m_last_irq; + return m_last_irq; } // vf // 1 = fe3ed4 @@ -727,10 +725,10 @@ static IRQ_CALLBACK(irq_callback) // 3 = ff54c // other = ff568/ff574 -static void irq_init(running_machine &machine) +void model1_state::irq_init() { - machine.device("maincpu")->execute().set_input_line(0, CLEAR_LINE); - machine.device("maincpu")->execute().set_irq_acknowledge_callback(irq_callback); + machine().device("maincpu")->execute().set_input_line(0, CLEAR_LINE); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(model1_state::irq_callback),this)); } TIMER_DEVICE_CALLBACK_MEMBER(model1_state::model1_interrupt) @@ -739,11 +737,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(model1_state::model1_interrupt) if (scanline == 384) { - irq_raise(machine(), 1); + irq_raise(1); } else if(scanline == 384/2) { - irq_raise(machine(), m_sound_irq); + irq_raise(m_sound_irq); // if the FIFO has something in it, signal the 68k too if (m_fifo_rptr != m_fifo_wptr) @@ -756,7 +754,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(model1_state::model1_interrupt) MACHINE_RESET_MEMBER(model1_state,model1) { membank("bank1")->set_base(memregion("maincpu")->base() + 0x1000000); - irq_init(machine()); + irq_init(); model1_tgp_reset(machine(), !strcmp(machine().system().name, "swa") || !strcmp(machine().system().name, "wingwar") || !strcmp(machine().system().name, "wingwaru") || !strcmp(machine().system().name, "wingwarj")); if (!strcmp(machine().system().name, "swa")) { @@ -775,7 +773,7 @@ MACHINE_RESET_MEMBER(model1_state,model1) MACHINE_RESET_MEMBER(model1_state,model1_vr) { membank("bank1")->set_base(memregion("maincpu")->base() + 0x1000000); - irq_init(machine()); + irq_init(); model1_vr_tgp_reset(machine()); m_sound_irq = 3; diff --git a/src/mame/drivers/photon.c b/src/mame/drivers/photon.c index 127c459bf55..7a1e6e021cf 100644 --- a/src/mame/drivers/photon.c +++ b/src/mame/drivers/photon.c @@ -38,6 +38,7 @@ public: virtual void video_start(); UINT32 screen_update_photon(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(pk8000_interrupt); + IRQ_CALLBACK_MEMBER(pk8000_irq_callback); }; @@ -191,7 +192,7 @@ INTERRUPT_GEN_MEMBER(photon_state::pk8000_interrupt) device.execute().set_input_line(0, HOLD_LINE); } -static IRQ_CALLBACK(pk8000_irq_callback) +IRQ_CALLBACK_MEMBER(photon_state::pk8000_irq_callback) { return 0xff; } @@ -200,7 +201,7 @@ static IRQ_CALLBACK(pk8000_irq_callback) void photon_state::machine_reset() { pk8000_set_bank(machine(),0); - machine().device("maincpu")->execute().set_irq_acknowledge_callback(pk8000_irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(photon_state::pk8000_irq_callback),this)); } void photon_state::video_start() diff --git a/src/mame/drivers/photoply.c b/src/mame/drivers/photoply.c index 3d362bf820b..10b67e04a3e 100644 --- a/src/mame/drivers/photoply.c +++ b/src/mame/drivers/photoply.c @@ -57,6 +57,7 @@ public: DECLARE_WRITE_LINE_MEMBER(at_pit8254_out2_changed); DECLARE_DRIVER_INIT(photoply); virtual void machine_start(); + IRQ_CALLBACK_MEMBER(irq_callback); }; @@ -226,10 +227,9 @@ static const struct pic8259_interface pic8259_2_config = DEVCB_NULL }; -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(photoply_state::irq_callback) { - photoply_state *state = device->machine().driver_data<photoply_state>(); - return pic8259_acknowledge(state->m_pic8259_1); + return pic8259_acknowledge(m_pic8259_1); } WRITE_LINE_MEMBER(photoply_state::at_pit8254_out0_changed) @@ -342,7 +342,7 @@ static void photoply_set_keyb_int(running_machine &machine, int state) void photoply_state::machine_start() { - machine().device("maincpu")->execute().set_irq_acknowledge_callback(irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(photoply_state::irq_callback),this)); m_pit8253 = machine().device( "pit8254" ); m_pic8259_1 = machine().device( "pic8259_1" ); m_pic8259_2 = machine().device( "pic8259_2" ); diff --git a/src/mame/drivers/queen.c b/src/mame/drivers/queen.c index 9b6325136ba..80cc3e75f0d 100644 --- a/src/mame/drivers/queen.c +++ b/src/mame/drivers/queen.c @@ -90,6 +90,7 @@ public: DECLARE_WRITE_LINE_MEMBER(queen_pic8259_1_set_int_line); virtual void machine_start(); virtual void machine_reset(); + IRQ_CALLBACK_MEMBER(irq_callback); }; @@ -507,10 +508,9 @@ static void queen_set_keyb_int(running_machine &machine, int state) pic8259_ir1_w(drvstate->m_pic8259_1, state); } -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(queen_state::irq_callback) { - queen_state *state = device->machine().driver_data<queen_state>(); - return pic8259_acknowledge( state->m_pic8259_1); + return pic8259_acknowledge(m_pic8259_1); } void queen_state::machine_start() @@ -520,7 +520,7 @@ void queen_state::machine_start() init_pc_common(machine(), PCCOMMON_KEYBOARD_AT, queen_set_keyb_int); - m_maincpu->set_irq_acknowledge_callback(irq_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(queen_state::irq_callback),this)); intel82439tx_init(machine()); kbdc8042_init(machine(), &at8042); diff --git a/src/mame/drivers/rastersp.c b/src/mame/drivers/rastersp.c index 21efdd1317a..7b86a52ab32 100644 --- a/src/mame/drivers/rastersp.c +++ b/src/mame/drivers/rastersp.c @@ -41,8 +41,6 @@ * *************************************/ -static IRQ_CALLBACK( irq_callback ); - class rastersp_state : public driver_device { public: @@ -133,7 +131,7 @@ public: UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void update_irq(UINT32 which, UINT32 state); void upload_palette(UINT32 word1, UINT32 word2); - + IRQ_CALLBACK_MEMBER(irq_callback); protected: // driver_device overrides virtual void machine_reset(); @@ -151,7 +149,7 @@ protected: void rastersp_state::machine_start() { - machine().device("maincpu")->execute().set_irq_acknowledge_callback(irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(rastersp_state::irq_callback),this)); m_nvram8 = auto_alloc_array(machine(), UINT8, NVRAM_SIZE); @@ -358,29 +356,27 @@ UINT32 rastersp_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap * *************************************/ -static IRQ_CALLBACK( irq_callback ) +IRQ_CALLBACK_MEMBER(rastersp_state::irq_callback) { - rastersp_state *state = device->machine().driver_data<rastersp_state>(); - UINT8 vector = 0; - if (state->m_irq_status & (1 << rastersp_state::IRQ_SCSI)) + if (m_irq_status & (1 << IRQ_SCSI)) { vector = 11; } - else if (state->m_irq_status & (1 << rastersp_state::IRQ_DSP)) + else if (m_irq_status & (1 << IRQ_DSP)) { - state->update_irq(rastersp_state::IRQ_DSP, CLEAR_LINE); + update_irq(IRQ_DSP, CLEAR_LINE); vector = 12; } - else if (state->m_irq_status & (1 << rastersp_state::IRQ_VBLANK)) + else if (m_irq_status & (1 << IRQ_VBLANK)) { - state->update_irq(rastersp_state::IRQ_VBLANK, CLEAR_LINE); + update_irq(IRQ_VBLANK, CLEAR_LINE); vector = 13; } else { - fatalerror("Unknown x86 IRQ (m_irq_status = %x)", state->m_irq_status); + fatalerror("Unknown x86 IRQ (m_irq_status = %x)", m_irq_status); } return vector; diff --git a/src/mame/drivers/savquest.c b/src/mame/drivers/savquest.c index d9428cbdf8d..f83935edbf4 100644 --- a/src/mame/drivers/savquest.c +++ b/src/mame/drivers/savquest.c @@ -102,6 +102,7 @@ public: DECLARE_WRITE_LINE_MEMBER(savquest_pic8259_1_set_int_line); virtual void machine_start(); virtual void machine_reset(); + IRQ_CALLBACK_MEMBER(irq_callback); }; // Intel 82439TX System Controller (MXTC) @@ -606,10 +607,9 @@ static void savquest_set_keyb_int(running_machine &machine, int state) pic8259_ir1_w(drvstate->m_pic8259_1, state); } -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(savquest_state::irq_callback) { - savquest_state *state = device->machine().driver_data<savquest_state>(); - return pic8259_acknowledge( state->m_pic8259_1); + return pic8259_acknowledge(m_pic8259_1); } void savquest_state::machine_start() @@ -622,7 +622,7 @@ void savquest_state::machine_start() init_pc_common(machine(), PCCOMMON_KEYBOARD_AT, savquest_set_keyb_int); - m_maincpu->set_irq_acknowledge_callback(irq_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(savquest_state::irq_callback),this)); intel82439tx_init(machine()); kbdc8042_init(machine(), &at8042); diff --git a/src/mame/drivers/su2000.c b/src/mame/drivers/su2000.c index 6b40f05861e..abb8c3f7a73 100644 --- a/src/mame/drivers/su2000.c +++ b/src/mame/drivers/su2000.c @@ -81,6 +81,7 @@ public: DECLARE_READ8_MEMBER(get_slave_ack); virtual void machine_start(); virtual void machine_reset(); + IRQ_CALLBACK_MEMBER(irq_callback); }; @@ -236,10 +237,9 @@ static const struct pit8253_config su2000_pit8254_config = * *************************************/ -static IRQ_CALLBACK( pc_irq_callback ) +IRQ_CALLBACK_MEMBER(su2000_state::irq_callback) { - su2000_state *state = device->machine().driver_data<su2000_state>(); - return pic8259_acknowledge(state->m_pic8259_1); + return pic8259_acknowledge(m_pic8259_1); } @@ -271,7 +271,7 @@ void su2000_state::machine_start() space.install_write_bank(0x100000, ram_limit - 1, "hma_bank"); membank("hma_bank")->set_base(m_pc_ram + 0xa0000); - machine().device("maincpu")->execute().set_irq_acknowledge_callback(pc_irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(su2000_state::irq_callback),this)); init_pc_common(machine(), PCCOMMON_KEYBOARD_AT, su2000_set_keyb_int); diff --git a/src/mame/drivers/taito_l.c b/src/mame/drivers/taito_l.c index a1923ca2b6d..0155962145f 100644 --- a/src/mame/drivers/taito_l.c +++ b/src/mame/drivers/taito_l.c @@ -290,16 +290,15 @@ MACHINE_RESET_MEMBER(taitol_state,horshoes) } -static IRQ_CALLBACK( irq_callback ) +IRQ_CALLBACK_MEMBER(taitol_state::irq_callback) { - taitol_state *state = device->machine().driver_data<taitol_state>(); - return state->m_irq_adr_table[state->m_last_irq_level]; + return m_irq_adr_table[m_last_irq_level]; } TIMER_DEVICE_CALLBACK_MEMBER(taitol_state::vbl_interrupt) { int scanline = param; - m_maincpu->set_irq_acknowledge_callback(irq_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(taitol_state::irq_callback),this)); /* kludge to make plgirls boot */ if (m_maincpu->state_int(Z80_IM) != 2) diff --git a/src/mame/drivers/taitowlf.c b/src/mame/drivers/taitowlf.c index 8dce31fa729..f4880c31ae8 100644 --- a/src/mame/drivers/taitowlf.c +++ b/src/mame/drivers/taitowlf.c @@ -83,6 +83,7 @@ public: virtual void machine_reset(); virtual void palette_init(); UINT32 screen_update_taitowlf(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + IRQ_CALLBACK_MEMBER(irq_callback); }; #if !ENABLE_VGA @@ -532,15 +533,14 @@ static INPUT_PORTS_START(taitowlf) INPUT_PORTS_END #endif -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(taitowlf_state::irq_callback) { - taitowlf_state *state = device->machine().driver_data<taitowlf_state>(); - return pic8259_acknowledge( state->m_pic8259_1); + return pic8259_acknowledge(m_pic8259_1); } void taitowlf_state::machine_start() { - machine().device("maincpu")->execute().set_irq_acknowledge_callback(irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(taitowlf_state::irq_callback),this)); m_pit8254 = machine().device( "pit8254" ); m_pic8259_1 = machine().device( "pic8259_1" ); diff --git a/src/mame/drivers/voyager.c b/src/mame/drivers/voyager.c index d324c3eedcd..0847a8ba8ea 100644 --- a/src/mame/drivers/voyager.c +++ b/src/mame/drivers/voyager.c @@ -69,6 +69,7 @@ public: DECLARE_DRIVER_INIT(voyager); virtual void machine_start(); virtual void machine_reset(); + IRQ_CALLBACK_MEMBER(irq_callback); }; @@ -644,15 +645,14 @@ static INPUT_PORTS_START( voyager ) INPUT_PORTS_END #endif -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(voyager_state::irq_callback) { - voyager_state *state = device->machine().driver_data<voyager_state>(); - return pic8259_acknowledge( state->m_pic8259_1); + return pic8259_acknowledge(m_pic8259_1); } void voyager_state::machine_start() { - machine().device("maincpu")->execute().set_irq_acknowledge_callback(irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(voyager_state::irq_callback),this)); m_pit8254 = machine().device( "pit8254" ); m_pic8259_1 = machine().device( "pic8259_1" ); diff --git a/src/mame/drivers/xtom3d.c b/src/mame/drivers/xtom3d.c index 7c5c122882f..8522d0e06ad 100644 --- a/src/mame/drivers/xtom3d.c +++ b/src/mame/drivers/xtom3d.c @@ -115,6 +115,7 @@ public: DECLARE_WRITE_LINE_MEMBER(xtom3d_pic8259_1_set_int_line); virtual void machine_start(); virtual void machine_reset(); + IRQ_CALLBACK_MEMBER(irq_callback); }; // Intel 82439TX System Controller (MXTC) @@ -635,10 +636,9 @@ static void xtom3d_set_keyb_int(running_machine &machine, int state) pic8259_ir1_w(drvstate->m_pic8259_1, state); } -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(xtom3d_state::irq_callback) { - xtom3d_state *state = device->machine().driver_data<xtom3d_state>(); - return pic8259_acknowledge( state->m_pic8259_1); + return pic8259_acknowledge(m_pic8259_1); } void xtom3d_state::machine_start() @@ -653,7 +653,7 @@ void xtom3d_state::machine_start() init_pc_common(machine(), PCCOMMON_KEYBOARD_AT, xtom3d_set_keyb_int); - m_maincpu->set_irq_acknowledge_callback(irq_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(xtom3d_state::irq_callback),this)); intel82439tx_init(machine()); kbdc8042_init(machine(), &at8042); diff --git a/src/mame/includes/jaguar.h b/src/mame/includes/jaguar.h index 7b044372037..e2f4ace025b 100644 --- a/src/mame/includes/jaguar.h +++ b/src/mame/includes/jaguar.h @@ -214,7 +214,7 @@ public: int quickload(device_image_interface &image, const char *file_type, int quickload_size); void cart_start(); int cart_load(device_image_interface &image); - + IRQ_CALLBACK_MEMBER(jaguar_irq_callback); protected: // timer IDs enum diff --git a/src/mame/includes/megadriv.h b/src/mame/includes/megadriv.h index 708603c1163..5aa60abaf3a 100644 --- a/src/mame/includes/megadriv.h +++ b/src/mame/includes/megadriv.h @@ -121,6 +121,8 @@ public: DECLARE_READ8_MEMBER(megadriv_68k_YM2612_read); DECLARE_WRITE8_MEMBER(megadriv_68k_YM2612_write); + IRQ_CALLBACK_MEMBER(genesis_int_callback); + void megadriv_init_common(); }; class md_boot_state : public md_base_state diff --git a/src/mame/includes/model1.h b/src/mame/includes/model1.h index c400a034caf..fedb0f4c055 100644 --- a/src/mame/includes/model1.h +++ b/src/mame/includes/model1.h @@ -140,6 +140,9 @@ public: UINT32 screen_update_model1(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); void screen_eof_model1(screen_device &screen, bool state); TIMER_DEVICE_CALLBACK_MEMBER(model1_interrupt); + void irq_raise(int level); + void irq_init(); + IRQ_CALLBACK_MEMBER(irq_callback); }; diff --git a/src/mame/includes/taito_l.h b/src/mame/includes/taito_l.h index d248a9279b2..26e27b8fea3 100644 --- a/src/mame/includes/taito_l.h +++ b/src/mame/includes/taito_l.h @@ -122,6 +122,7 @@ public: UINT32 screen_update_taitol(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void screen_eof_taitol(screen_device &screen, bool state); TIMER_DEVICE_CALLBACK_MEMBER(vbl_interrupt); + IRQ_CALLBACK_MEMBER(irq_callback); }; /*----------- defined in video/taito_l.c -----------*/ diff --git a/src/mame/machine/megadriv.c b/src/mame/machine/megadriv.c index 858e17976dc..15c17f99c1b 100644 --- a/src/mame/machine/megadriv.c +++ b/src/mame/machine/megadriv.c @@ -1091,18 +1091,16 @@ void genesis_vdp_lv4irqline_callback_genesis_68k(running_machine &machine, bool } /* Callback when the 68k takes an IRQ */ -static IRQ_CALLBACK(genesis_int_callback) +IRQ_CALLBACK_MEMBER(md_base_state::genesis_int_callback) { - md_base_state *state = device->machine().driver_data<md_base_state>(); - if (irqline==4) { - state->m_vdp->vdp_clear_irq4_pending(); + m_vdp->vdp_clear_irq4_pending(); } if (irqline==6) { - state->m_vdp->vdp_clear_irq6_pending(); + m_vdp->vdp_clear_irq6_pending(); } return (0x60+irqline*4)/4; // vector address @@ -1335,45 +1333,45 @@ static int megadriv_tas_callback(device_t *device) return 0; // writeback not allowed } -static void megadriv_init_common(running_machine &machine) +void md_base_state::megadriv_init_common() { /* Look to see if this system has the standard Sound Z80 */ - _genesis_snd_z80_cpu = machine.device<cpu_device>("genesis_snd_z80"); + _genesis_snd_z80_cpu = machine().device<cpu_device>("genesis_snd_z80"); if (_genesis_snd_z80_cpu != NULL) { //printf("GENESIS Sound Z80 cpu found '%s'\n", _genesis_snd_z80_cpu->tag() ); - genz80.z80_prgram = auto_alloc_array(machine, UINT8, 0x2000); - machine.root_device().membank("bank1")->set_base(genz80.z80_prgram ); + genz80.z80_prgram = auto_alloc_array(machine(), UINT8, 0x2000); + machine().root_device().membank("bank1")->set_base(genz80.z80_prgram ); } /* Look to see if this system has the 32x Master SH2 */ - _32x_master_cpu = machine.device<cpu_device>(_32X_MASTER_TAG); + _32x_master_cpu = machine().device<cpu_device>(_32X_MASTER_TAG); if (_32x_master_cpu != NULL) { printf("32x MASTER SH2 cpu found '%s'\n", _32x_master_cpu->tag() ); } /* Look to see if this system has the 32x Slave SH2 */ - _32x_slave_cpu = machine.device<cpu_device>(_32X_SLAVE_TAG); + _32x_slave_cpu = machine().device<cpu_device>(_32X_SLAVE_TAG); if (_32x_slave_cpu != NULL) { printf("32x SLAVE SH2 cpu found '%s'\n", _32x_slave_cpu->tag() ); } - _svp_cpu = machine.device<cpu_device>("svp"); + _svp_cpu = machine().device<cpu_device>("svp"); if (_svp_cpu != NULL) { printf("SVP (cpu) found '%s'\n", _svp_cpu->tag() ); } - machine.device("maincpu")->execute().set_irq_acknowledge_callback(genesis_int_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(md_base_state::genesis_int_callback),this)); megadriv_backupram = NULL; megadriv_backupram_length = 0; vdp_get_word_from_68k_mem = vdp_get_word_from_68k_mem_default; - m68k_set_tas_callback(machine.device("maincpu"), megadriv_tas_callback); + m68k_set_tas_callback(machine().device("maincpu"), megadriv_tas_callback); // the drivers which need 6 buttons pad set this to 1 in their init befare calling the megadrive init if (megadrive_6buttons_pad) @@ -1394,7 +1392,7 @@ static void megadriv_init_common(running_machine &machine) some games specify a single address, (start 200001, end 200001) this usually means there is serial eeprom instead */ int i; - UINT16 *rom = (UINT16*)machine.root_device().memregion("maincpu")->base(); + UINT16 *rom = (UINT16*)machine().root_device().memregion("maincpu")->base(); mame_printf_debug("DEBUG:: Header: Backup RAM string (ignore for games without)\n"); for (i=0;i<12;i++) @@ -1411,7 +1409,7 @@ static void megadriv_init_common(running_machine &machine) /* if we have an SVP cpu then do some extra initilization for it */ if (_svp_cpu != NULL) { - svp_init(machine); + svp_init(machine()); } @@ -1422,7 +1420,7 @@ DRIVER_INIT_MEMBER(md_base_state,megadriv_c2) genvdp_use_cram = 0; genesis_other_hacks = 0; - megadriv_init_common(machine()); + megadriv_init_common(); megadriv_framerate = 60; } @@ -1433,7 +1431,7 @@ DRIVER_INIT_MEMBER(md_base_state,megadriv) genvdp_use_cram = 1; genesis_other_hacks = 1; - megadriv_init_common(machine()); + megadriv_init_common(); megadriv_framerate = 60; } @@ -1442,7 +1440,7 @@ DRIVER_INIT_MEMBER(md_base_state,megadrij) genvdp_use_cram = 1; genesis_other_hacks = 1; - megadriv_init_common(machine()); + megadriv_init_common(); megadriv_framerate = 60; } @@ -1451,7 +1449,7 @@ DRIVER_INIT_MEMBER(md_base_state,megadrie) genvdp_use_cram = 1; genesis_other_hacks = 1; - megadriv_init_common(machine()); + megadriv_init_common(); megadriv_framerate = 50; } diff --git a/src/mess/drivers/abc1600.c b/src/mess/drivers/abc1600.c index a1ec80f253c..59ee49a3157 100644 --- a/src/mess/drivers/abc1600.c +++ b/src/mess/drivers/abc1600.c @@ -1798,26 +1798,25 @@ static ABC1600BUS_INTERFACE( bus2_intf ) //************************************************************************** //------------------------------------------------- -// IRQ_CALLBACK( abc1600_int_ack ) +// IRQ_CALLBACK_MEMBER( abc1600_int_ack ) //------------------------------------------------- -static IRQ_CALLBACK( abc1600_int_ack ) +IRQ_CALLBACK_MEMBER( abc1600_state::abc1600_int_ack ) { - abc1600_state *state = device->machine().driver_data<abc1600_state>(); int data = 0; switch (irqline) { case M68K_IRQ_2: - data = state->m_cio->intack_r(); + data = m_cio->intack_r(); break; case M68K_IRQ_5: - data = state->m_dart->m1_r(); + data = m_dart->m1_r(); break; case M68K_IRQ_7: - state->m_maincpu->set_input_line(M68K_IRQ_7, CLEAR_LINE); + m_maincpu->set_input_line(M68K_IRQ_7, CLEAR_LINE); data = M68K_INT_ACK_AUTOVECTOR; break; @@ -1834,7 +1833,7 @@ static IRQ_CALLBACK( abc1600_int_ack ) void abc1600_state::machine_start() { // interrupt callback - m_maincpu->set_irq_acknowledge_callback(abc1600_int_ack); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(abc1600_state::abc1600_int_ack),this)); // floppy callbacks m_fdc->setup_intrq_cb(wd_fdc_t::line_cb(FUNC(abc1600_state::fdc_intrq_w), this)); diff --git a/src/mess/drivers/apricot.c b/src/mess/drivers/apricot.c index 2fde5240d0c..4fad7195f14 100644 --- a/src/mess/drivers/apricot.c +++ b/src/mess/drivers/apricot.c @@ -66,6 +66,7 @@ public: virtual void palette_init(); UINT32 screen_update_apricot(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(apricot_sio_irq_w); + IRQ_CALLBACK_MEMBER(apricot_irq_ack); }; @@ -142,10 +143,9 @@ static const z80sio_interface apricot_z80sio_intf = INTERRUPTS ***************************************************************************/ -static IRQ_CALLBACK( apricot_irq_ack ) +IRQ_CALLBACK_MEMBER(apricot_state::apricot_irq_ack) { - apricot_state *state = device->machine().driver_data<apricot_state>(); - return pic8259_acknowledge(state->m_pic); + return pic8259_acknowledge(m_pic); } static const struct pic8259_interface apricot_pic8259_intf = @@ -266,7 +266,7 @@ DRIVER_INIT_MEMBER(apricot_state,apricot) prg.unmap_readwrite(0x40000, 0xeffff); prg.install_ram(0x00000, ram_size - 1, ram); - m_maincpu->set_irq_acknowledge_callback(apricot_irq_ack); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(apricot_state::apricot_irq_ack),this)); m_video_mode = 0; m_display_on = 1; diff --git a/src/mess/drivers/apricotp.c b/src/mess/drivers/apricotp.c index 67ac254119f..b0e34bd263b 100644 --- a/src/mess/drivers/apricotp.c +++ b/src/mess/drivers/apricotp.c @@ -416,11 +416,9 @@ static APRICOT_KEYBOARD_INTERFACE( kb_intf ) // pic8259_interface pic_intf //------------------------------------------------- -static IRQ_CALLBACK( fp_irq_callback ) + IRQ_CALLBACK_MEMBER(fp_state::fp_irq_callback) { - fp_state *state = device->machine().driver_data<fp_state>(); - - return pic8259_acknowledge(state->m_pic); + return pic8259_acknowledge(m_pic); } /* @@ -588,7 +586,7 @@ void fp_state::machine_start() m_fdc->setup_drq_cb(wd_fdc_t::line_cb(FUNC(fp_state::fdc_drq_w), this)); // register CPU IRQ callback - m_maincpu->set_irq_acknowledge_callback(fp_irq_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(fp_state::fp_irq_callback),this)); // allocate memory m_work_ram.allocate(m_ram->size() / 2); diff --git a/src/mess/drivers/atarist.c b/src/mess/drivers/atarist.c index 2a3428ca3e0..beaae222510 100644 --- a/src/mess/drivers/atarist.c +++ b/src/mess/drivers/atarist.c @@ -2114,16 +2114,14 @@ static const centronics_interface centronics_intf = //************************************************************************** //------------------------------------------------- -// IRQ_CALLBACK( atarist_int_ack ) +// IRQ_CALLBACK_MEMBER( atarist_int_ack ) //------------------------------------------------- -static IRQ_CALLBACK( atarist_int_ack ) +IRQ_CALLBACK_MEMBER(st_state::atarist_int_ack) { - st_state *state = device->machine().driver_data<st_state>(); - if (irqline == M68K_IRQ_6) { - return state->m_mfp->get_vector(); + return m_mfp->get_vector(); } return M68K_INT_ACK_AUTOVECTOR; @@ -2199,7 +2197,7 @@ void st_state::machine_start() configure_memory(); // set CPU interrupt callback - m_maincpu->set_irq_acknowledge_callback(atarist_int_ack); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(st_state::atarist_int_ack),this)); // allocate timers m_mouse_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(st_state::st_mouse_tick),this)); @@ -2256,7 +2254,7 @@ void ste_state::machine_start() configure_memory(); /* set CPU interrupt callback */ - m_maincpu->set_irq_acknowledge_callback(atarist_int_ack); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(st_state::atarist_int_ack),this)); /* allocate timers */ m_dmasound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ste_state::atariste_dmasound_tick),this)); @@ -2296,7 +2294,7 @@ void stbook_state::machine_start() } /* set CPU interrupt callback */ - m_maincpu->set_irq_acknowledge_callback(atarist_int_ack); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(st_state::atarist_int_ack),this)); /* register for state saving */ ste_state::state_save(); diff --git a/src/mess/drivers/cbm2.c b/src/mess/drivers/cbm2.c index e9a19c04e3b..76dc65b93b1 100644 --- a/src/mess/drivers/cbm2.c +++ b/src/mess/drivers/cbm2.c @@ -1725,11 +1725,9 @@ static IEEE488_INTERFACE( ieee488_intf ) // pic8259_interface ext_pic_intf //------------------------------------------------- -static IRQ_CALLBACK( pic_irq_callback ) +IRQ_CALLBACK_MEMBER(cbm2_state::pic_irq_callback) { - cbm2_state *state = device->machine().driver_data<cbm2_state>(); - - return pic8259_acknowledge(state->m_ext_pic); + return pic8259_acknowledge(m_ext_pic); } static pic8259_interface ext_pic_intf = @@ -2002,7 +2000,7 @@ MACHINE_START_MEMBER( cbm2_state, cbm2_pal ) MACHINE_START_MEMBER( cbm2_state, cbm2x_ntsc ) { // register CPU IRQ callback - m_ext_cpu->set_irq_acknowledge_callback(pic_irq_callback); + m_ext_cpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(cbm2_state::pic_irq_callback),this)); // allocate memory m_extbuf_ram.allocate(0x800); @@ -2018,7 +2016,7 @@ MACHINE_START_MEMBER( cbm2_state, cbm2x_ntsc ) MACHINE_START_MEMBER( cbm2_state, cbm2x_pal ) { // register CPU IRQ callback - m_ext_cpu->set_irq_acknowledge_callback(pic_irq_callback); + m_ext_cpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(cbm2_state::pic_irq_callback),this)); // allocate memory m_extbuf_ram.allocate(0x800); diff --git a/src/mess/drivers/m20.c b/src/mess/drivers/m20.c index 993c0feb310..78b4ac2a31b 100644 --- a/src/mess/drivers/m20.c +++ b/src/mess/drivers/m20.c @@ -108,6 +108,7 @@ public: DECLARE_FLOPPY_FORMATS( floppy_formats ); void fdc_intrq_w(bool state); + IRQ_CALLBACK_MEMBER(m20_irq_callback); }; @@ -798,12 +799,12 @@ DRIVER_INIT_MEMBER(m20_state,m20) { } -static IRQ_CALLBACK( m20_irq_callback ) +IRQ_CALLBACK_MEMBER(m20_state::m20_irq_callback) { if (! irqline) return 0xff; // NVI, value ignored else - return pic8259_acknowledge(device->machine().device("i8259")); + return pic8259_acknowledge(machine().device("i8259")); } void m20_state::machine_start() @@ -823,7 +824,7 @@ void m20_state::machine_reset() else m_port21 = 0xff; - m_maincpu->set_irq_acknowledge_callback(m20_irq_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(m20_state::m20_irq_callback),this)); m_fd1797->reset(); diff --git a/src/mess/drivers/multi16.c b/src/mess/drivers/multi16.c index 69b0d35cda4..b885ea526c5 100644 --- a/src/mess/drivers/multi16.c +++ b/src/mess/drivers/multi16.c @@ -33,6 +33,7 @@ public: virtual void machine_reset(); virtual void video_start(); UINT32 screen_update_multi16(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + IRQ_CALLBACK_MEMBER(multi16_irq_callback); }; @@ -116,9 +117,9 @@ ADDRESS_MAP_END static INPUT_PORTS_START( multi16 ) INPUT_PORTS_END -static IRQ_CALLBACK(multi16_irq_callback) +IRQ_CALLBACK_MEMBER(multi16_state::multi16_irq_callback) { - return pic8259_acknowledge( device->machine().device("pic8259") ); + return pic8259_acknowledge( machine().device("pic8259") ); } WRITE_LINE_MEMBER( multi16_state::multi16_set_int_line ) @@ -136,7 +137,7 @@ static const struct pic8259_interface multi16_pic8259_config = void multi16_state::machine_start() { - machine().device("maincpu")->execute().set_irq_acknowledge_callback(multi16_irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(multi16_state::multi16_irq_callback),this)); } diff --git a/src/mess/drivers/paso1600.c b/src/mess/drivers/paso1600.c index edc61558ae2..3d152ab4926 100644 --- a/src/mess/drivers/paso1600.c +++ b/src/mess/drivers/paso1600.c @@ -56,6 +56,7 @@ public: virtual void machine_reset(); virtual void video_start(); UINT32 screen_update_paso1600(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + IRQ_CALLBACK_MEMBER(paso1600_irq_callback); }; #define mc6845_h_char_total (m_crtc_vreg[0]) @@ -274,9 +275,9 @@ static MC6845_INTERFACE( mc6845_intf ) NULL /* update address callback */ }; -static IRQ_CALLBACK(paso1600_irq_callback) +IRQ_CALLBACK_MEMBER(paso1600_state::paso1600_irq_callback) { - return pic8259_acknowledge( device->machine().device( "pic8259" ) ); + return pic8259_acknowledge( machine().device( "pic8259" ) ); } WRITE_LINE_MEMBER( paso1600_state::paso1600_set_int_line ) @@ -294,7 +295,7 @@ static const struct pic8259_interface paso1600_pic8259_config = void paso1600_state::machine_start() { - m_maincpu->set_irq_acknowledge_callback(paso1600_irq_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(paso1600_state::paso1600_irq_callback),this)); } diff --git a/src/mess/drivers/pc1512.c b/src/mess/drivers/pc1512.c index 42e4e6c789a..9e8d97e9e15 100644 --- a/src/mess/drivers/pc1512.c +++ b/src/mess/drivers/pc1512.c @@ -911,11 +911,9 @@ static I8237_INTERFACE( dmac_intf ) // pic8259_interface pic_intf //------------------------------------------------- -static IRQ_CALLBACK( pc1512_irq_callback ) +IRQ_CALLBACK_MEMBER(pc1512_state::pc1512_irq_callback) { - pc1512_state *state = device->machine().driver_data<pc1512_state>(); - - return pic8259_acknowledge(state->m_pic); + return pic8259_acknowledge(m_pic); } static const struct pic8259_interface pic_intf = @@ -1099,7 +1097,7 @@ SLOT_INTERFACE_END void pc1512_state::machine_start() { // register CPU IRQ callback - m_maincpu->set_irq_acknowledge_callback(pc1512_irq_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(pc1512_state::pc1512_irq_callback),this)); // set RAM size size_t ram_size = m_ram->size(); @@ -1179,7 +1177,7 @@ void pc1512_state::machine_reset() void pc1640_state::machine_start() { // register CPU IRQ callback - m_maincpu->set_irq_acknowledge_callback(pc1512_irq_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(pc1512_state::pc1512_irq_callback),this)); // state saving save_item(NAME(m_pit1)); diff --git a/src/mess/drivers/pc8801.c b/src/mess/drivers/pc8801.c index 6a3293a647d..f01a21e7cca 100644 --- a/src/mess/drivers/pc8801.c +++ b/src/mess/drivers/pc8801.c @@ -483,6 +483,7 @@ public: DECLARE_WRITE_LINE_MEMBER(pic_enlg_w); DECLARE_READ8_MEMBER(opn_porta_r); DECLARE_READ8_MEMBER(opn_portb_r); + IRQ_CALLBACK_MEMBER(pc8801_irq_callback); }; @@ -2308,12 +2309,11 @@ static I8214_INTERFACE( pic_intf ) DEVCB_DRIVER_LINE_MEMBER(pc8801_state,pic_enlg_w) }; -static IRQ_CALLBACK( pc8801_irq_callback ) +IRQ_CALLBACK_MEMBER(pc8801_state::pc8801_irq_callback) { - pc8801_state *state = device->machine().driver_data<pc8801_state>(); - UINT8 vector = (7 - state->m_pic->a_r()); + UINT8 vector = (7 - m_pic->a_r()); - state->m_int_state &= ~(1<<vector); + m_int_state &= ~(1<<vector); m_maincpu->set_input_line(0,CLEAR_LINE); return vector << 1; @@ -2344,27 +2344,26 @@ INTERRUPT_GEN_MEMBER(pc8801_state::pc8801_vrtc_irq) #include "debugger.h" -static IRQ_CALLBACK( pc8801_irq_callback ) +IRQ_CALLBACK_MEMBER(pc8801_state::pc8801_irq_callback) { - pc8801_state *state = device->machine().driver_data<pc8801_state>(); - if(state->m_sound_irq_latch) + if(m_sound_irq_latch) { - state->m_sound_irq_latch = 0; + m_sound_irq_latch = 0; return 4*2; } - else if(state->m_vrtc_irq_latch) + else if(m_vrtc_irq_latch) { - state->m_vrtc_irq_latch = 0; + m_vrtc_irq_latch = 0; return 1*2; } - else if(state->m_timer_irq_latch) + else if(m_timer_irq_latch) { - state->m_timer_irq_latch = 0; + m_timer_irq_latch = 0; return 2*2; } - printf("IRQ triggered but no vector on the bus! %02x %02x %02x %02x\n",state->m_i8214_irq_level,state->m_sound_irq_latch,state->m_vrtc_irq_latch,state->m_timer_irq_latch); - debugger_break(device->machine()); + printf("IRQ triggered but no vector on the bus! %02x %02x %02x %02x\n",m_i8214_irq_level,m_sound_irq_latch,m_vrtc_irq_latch,m_timer_irq_latch); + debugger_break(machine()); return 4*2; //TODO: mustn't happen } @@ -2412,7 +2411,7 @@ INTERRUPT_GEN_MEMBER(pc8801_state::pc8801_vrtc_irq) void pc8801_state::machine_start() { - m_maincpu->set_irq_acknowledge_callback(pc8801_irq_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(pc8801_state::pc8801_irq_callback),this)); machine().device<upd765a_device>("upd765")->setup_intrq_cb(upd765a_device::line_cb(FUNC(pc8801_state::fdc_irq_w), this)); machine().device<floppy_connector>("upd765:0")->get_device()->set_rpm(300); diff --git a/src/mess/drivers/portfoli.c b/src/mess/drivers/portfoli.c index 9bd5785c70d..dcd54286874 100644 --- a/src/mess/drivers/portfoli.c +++ b/src/mess/drivers/portfoli.c @@ -161,24 +161,22 @@ WRITE8_MEMBER( portfolio_state::sivr_w ) } //------------------------------------------------- -// IRQ_CALLBACK( portfolio_int_ack ) +// IRQ_CALLBACK_MEMBER( portfolio_int_ack ) //------------------------------------------------- -static IRQ_CALLBACK( portfolio_int_ack ) +IRQ_CALLBACK_MEMBER(portfolio_state::portfolio_int_ack) { - portfolio_state *state = device->machine().driver_data<portfolio_state>(); - - UINT8 vector = state->m_sivr; + UINT8 vector = m_sivr; for (int i = 0; i < 4; i++) { - if (BIT(state->m_ip, i)) + if (BIT(m_ip, i)) { // clear interrupt pending bit - state->m_ip &= ~(1 << i); + m_ip &= ~(1 << i); if (i == 3) - vector = state->m_sivr; + vector = m_sivr; else vector = INTERRUPT_VECTOR[i]; @@ -186,7 +184,7 @@ static IRQ_CALLBACK( portfolio_int_ack ) } } - state->check_interrupt(); + check_interrupt(); return vector; } @@ -761,7 +759,7 @@ void portfolio_state::machine_start() address_space &program = m_maincpu->space(AS_PROGRAM); /* set CPU interrupt vector callback */ - m_maincpu->set_irq_acknowledge_callback(portfolio_int_ack); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(portfolio_state::portfolio_int_ack),this)); /* memory expansions */ switch (machine().device<ram_device>(RAM_TAG)->size()) diff --git a/src/mess/drivers/trs80m2.c b/src/mess/drivers/trs80m2.c index 1f19d96be87..8d32366ebe9 100644 --- a/src/mess/drivers/trs80m2.c +++ b/src/mess/drivers/trs80m2.c @@ -723,11 +723,9 @@ static const z80_daisy_config trs80m2_daisy_chain[] = // pic8259_interface pic_intf //------------------------------------------------- -static IRQ_CALLBACK( trs80m16_irq_callback ) +IRQ_CALLBACK_MEMBER(trs80m16_state::trs80m16_irq_callback) { - trs80m16_state *state = device->machine().driver_data<trs80m16_state>(); - - return pic8259_acknowledge(state->m_pic); + return pic8259_acknowledge(m_pic); } static const struct pic8259_interface pic_intf = @@ -775,7 +773,7 @@ void trs80m16_state::machine_start() trs80m2_state::machine_start(); // register CPU IRQ callback - m_maincpu->set_irq_acknowledge_callback(trs80m16_irq_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(trs80m16_state::trs80m16_irq_callback),this)); // register for state saving save_item(NAME(m_ual)); diff --git a/src/mess/drivers/v1050.c b/src/mess/drivers/v1050.c index bb9456c7848..3775fd65d32 100644 --- a/src/mess/drivers/v1050.c +++ b/src/mess/drivers/v1050.c @@ -982,15 +982,13 @@ LEGACY_FLOPPY_OPTIONS_END // Machine Initialization -static IRQ_CALLBACK( v1050_int_ack ) +IRQ_CALLBACK_MEMBER(v1050_state::v1050_int_ack) { - v1050_state *state = device->machine().driver_data<v1050_state>(); - - UINT8 vector = 0xf0 | (state->m_pic->a_r() << 1); + UINT8 vector = 0xf0 | (m_pic->a_r() << 1); //logerror("Interrupt Acknowledge Vector: %02x\n", vector); - state->m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); + m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); return vector; } @@ -1011,7 +1009,7 @@ void v1050_state::machine_start() m_rtc->cs1_w(1); // set CPU interrupt callback - m_maincpu->set_irq_acknowledge_callback(v1050_int_ack); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(v1050_state::v1050_int_ack),this)); // setup memory banking UINT8 *ram = machine().device<ram_device>(RAM_TAG)->pointer(); diff --git a/src/mess/drivers/victor9k.c b/src/mess/drivers/victor9k.c index 9dc949a58d2..9d004652d5e 100644 --- a/src/mess/drivers/victor9k.c +++ b/src/mess/drivers/victor9k.c @@ -915,17 +915,15 @@ static IEEE488_INTERFACE( ieee488_intf ) // Machine Initialization -static IRQ_CALLBACK( victor9k_irq_callback ) +IRQ_CALLBACK_MEMBER(victor9k_state::victor9k_irq_callback) { - victor9k_state *state = device->machine().driver_data<victor9k_state>(); - - return pic8259_acknowledge(state->m_pic); + return pic8259_acknowledge(m_pic); } void victor9k_state::machine_start() { // set interrupt callback - m_maincpu->set_irq_acknowledge_callback(victor9k_irq_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(victor9k_state::victor9k_irq_callback),this)); // memory banking address_space &program = m_maincpu->space(AS_PROGRAM); diff --git a/src/mess/drivers/vidbrain.c b/src/mess/drivers/vidbrain.c index 56667836b91..e5ca3a171d1 100644 --- a/src/mess/drivers/vidbrain.c +++ b/src/mess/drivers/vidbrain.c @@ -482,29 +482,27 @@ static VIDEOBRAIN_EXPANSION_INTERFACE( expansion_intf ) //************************************************************************** //------------------------------------------------- -// IRQ_CALLBACK( vidbrain_int_ack ) +// IRQ_CALLBACK_MEMBER(vidbrain_int_ack) //------------------------------------------------- -static IRQ_CALLBACK( vidbrain_int_ack ) +IRQ_CALLBACK_MEMBER(vidbrain_state::vidbrain_int_ack) { - vidbrain_state *state = device->machine().driver_data<vidbrain_state>(); - - UINT16 vector = state->m_vector; + UINT16 vector = m_vector; - switch (state->m_int_enable) + switch (m_int_enable) { case 1: vector |= 0x80; - state->m_ext_int_latch = 0; + m_ext_int_latch = 0; break; case 3: vector &= ~0x80; - state->m_timer_int_latch = 0; + m_timer_int_latch = 0; break; } - state->interrupt_check(); + interrupt_check(); return vector; } @@ -530,7 +528,7 @@ void vidbrain_state::device_timer(emu_timer &timer, device_timer_id id, int para void vidbrain_state::machine_start() { // register IRQ callback - m_maincpu->set_irq_acknowledge_callback(vidbrain_int_ack); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(vidbrain_state::vidbrain_int_ack),this)); // allocate timers m_timer_ne555 = timer_alloc(TIMER_JOYSTICK); diff --git a/src/mess/drivers/vixen.c b/src/mess/drivers/vixen.c index 70a181910ac..c40d6a991ac 100644 --- a/src/mess/drivers/vixen.c +++ b/src/mess/drivers/vixen.c @@ -727,10 +727,10 @@ void vixen_state::fdc_intrq_w(bool state) //************************************************************************** //------------------------------------------------- -// IRQ_CALLBACK( vixen ) +// IRQ_CALLBACK_MEMBER( vixen_int_ack ) //------------------------------------------------- -static IRQ_CALLBACK( vixen_int_ack ) +IRQ_CALLBACK_MEMBER(vixen_state::vixen_int_ack) { // D0 is pulled low return 0xfe; @@ -744,7 +744,7 @@ static IRQ_CALLBACK( vixen_int_ack ) void vixen_state::machine_start() { // interrupt callback - m_maincpu->set_irq_acknowledge_callback(vixen_int_ack); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(vixen_state::vixen_int_ack),this)); // configure memory banking UINT8 *ram = m_ram->pointer(); diff --git a/src/mess/drivers/wangpc.c b/src/mess/drivers/wangpc.c index 23cf111ef37..c549046192b 100644 --- a/src/mess/drivers/wangpc.c +++ b/src/mess/drivers/wangpc.c @@ -743,11 +743,9 @@ void wangpc_state::check_level2_interrupts() pic8259_ir2_w(m_pic, state); } -static IRQ_CALLBACK( wangpc_irq_callback ) +IRQ_CALLBACK_MEMBER(wangpc_state::wangpc_irq_callback) { - wangpc_state *state = device->machine().driver_data<wangpc_state>(); - - return pic8259_acknowledge(state->m_pic); + return pic8259_acknowledge(m_pic); } static const struct pic8259_interface pic_intf = @@ -1099,7 +1097,7 @@ SLOT_INTERFACE_END void wangpc_state::machine_start() { // register CPU IRQ callback - m_maincpu->set_irq_acknowledge_callback(wangpc_irq_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(wangpc_state::wangpc_irq_callback),this)); // connect serial keyboard m_uart->connect(m_kb); diff --git a/src/mess/drivers/x1.c b/src/mess/drivers/x1.c index c83b02a9fb6..71769713a1a 100644 --- a/src/mess/drivers/x1.c +++ b/src/mess/drivers/x1.c @@ -2347,24 +2347,23 @@ static const cassette_interface x1_cassette_interface = *************************************/ #ifdef UNUSED_FUNCTION -static IRQ_CALLBACK(x1_irq_callback) +IRQ_CALLBACK_MEMBER(x1_state::x1_irq_callback) { - x1_state *state = device->machine().driver_data<x1_state>(); - if(state->m_ctc_irq_flag != 0) + if(m_ctc_irq_flag != 0) { - state->m_ctc_irq_flag = 0; - if(state->m_key_irq_flag == 0) // if no other devices are pulling the IRQ line high - device->execute().set_input_line(0, CLEAR_LINE); - return state->m_irq_vector; + m_ctc_irq_flag = 0; + if(m_key_irq_flag == 0) // if no other devices are pulling the IRQ line high + device.execute().set_input_line(0, CLEAR_LINE); + return m_irq_vector; } - if(state->m_key_irq_flag != 0) + if(m_key_irq_flag != 0) { - state->m_key_irq_flag = 0; - if(state->m_ctc_irq_flag == 0) // if no other devices are pulling the IRQ line high - device->execute().set_input_line(0, CLEAR_LINE); - return state->m_key_irq_vector; + m_key_irq_flag = 0; + if(m_ctc_irq_flag == 0) // if no other devices are pulling the IRQ line high + device.execute().set_input_line(0, CLEAR_LINE); + return m_key_irq_vector; } - return state->m_irq_vector; + return m_irq_vector; } #endif @@ -2442,7 +2441,7 @@ MACHINE_RESET_MEMBER(x1_state,x1) m_io_bank_mode = 0; - //machine().device("x1_cpu")->execute().set_irq_acknowledge_callback(x1_irq_callback); + //machine().device("x1_cpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(x1_state::x1_irq_callback),this)); m_cmt_current_cmd = 0; m_cmt_test = 0; diff --git a/src/mess/drivers/z100.c b/src/mess/drivers/z100.c index ebdce4713cf..5319c1a9510 100644 --- a/src/mess/drivers/z100.c +++ b/src/mess/drivers/z100.c @@ -206,6 +206,7 @@ public: virtual void palette_init(); UINT32 screen_update_z100(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_INPUT_CHANGED_MEMBER(key_stroke); + IRQ_CALLBACK_MEMBER(z100_irq_callback); }; #define mc6845_h_char_total (m_crtc_vreg[0]) @@ -594,9 +595,9 @@ INPUT_PORTS_START( z100 ) PORT_CONFSETTING( 0x01, "Color" ) INPUT_PORTS_END -static IRQ_CALLBACK(z100_irq_callback) +IRQ_CALLBACK_MEMBER(z100_state::z100_irq_callback) { - return pic8259_acknowledge( device->machine().device( "pic8259_master" ) ); + return pic8259_acknowledge( machine().device( "pic8259_master" ) ); } WRITE_LINE_MEMBER( z100_state::z100_pic_irq ) @@ -751,7 +752,7 @@ void z100_state::palette_init() void z100_state::machine_start() { - machine().device("maincpu")->execute().set_irq_acknowledge_callback(z100_irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(z100_state::z100_irq_callback),this)); m_mc6845 = machine().device<mc6845_device>("crtc"); } diff --git a/src/mess/includes/abc1600.h b/src/mess/includes/abc1600.h index 8ea6dc1f1bf..f86e0454233 100644 --- a/src/mess/includes/abc1600.h +++ b/src/mess/includes/abc1600.h @@ -157,6 +157,8 @@ public: DECLARE_WRITE8_MEMBER( cio_pc_w ); DECLARE_WRITE_LINE_MEMBER( nmi_w ); + + IRQ_CALLBACK_MEMBER( abc1600_int_ack ); void fdc_intrq_w(bool state); void fdc_drq_w(bool state); diff --git a/src/mess/includes/amstrad.h b/src/mess/includes/amstrad.h index d798ec69147..2720ce2b78b 100644 --- a/src/mess/includes/amstrad.h +++ b/src/mess/includes/amstrad.h @@ -189,6 +189,8 @@ public: void aleste_interrupt(bool state); DECLARE_FLOPPY_FORMATS( floppy_formats ); + + IRQ_CALLBACK_MEMBER(amstrad_cpu_acknowledge_int); }; diff --git a/src/mess/includes/apricotp.h b/src/mess/includes/apricotp.h index 824573a8ee4..5dc56708fde 100644 --- a/src/mess/includes/apricotp.h +++ b/src/mess/includes/apricotp.h @@ -112,6 +112,7 @@ public: // video state optional_shared_ptr<UINT16> m_video_ram; UINT8 m_video; + IRQ_CALLBACK_MEMBER(fp_irq_callback); }; diff --git a/src/mess/includes/atarist.h b/src/mess/includes/atarist.h index 576cfccd35c..ed86ac27c99 100644 --- a/src/mess/includes/atarist.h +++ b/src/mess/includes/atarist.h @@ -315,6 +315,7 @@ public: TIMER_CALLBACK_MEMBER(atarist_shifter_tick); TIMER_CALLBACK_MEMBER(atarist_glue_tick); TIMER_CALLBACK_MEMBER(atarist_blitter_tick); + IRQ_CALLBACK_MEMBER(atarist_int_ack); }; class megast_state : public st_state @@ -370,7 +371,7 @@ public: TIMER_CALLBACK_MEMBER(atariste_dmasound_tick); TIMER_CALLBACK_MEMBER(atariste_microwire_tick); - + void dmasound_set_state(int level); void dmasound_tick(); void microwire_shift(); diff --git a/src/mess/includes/bk.h b/src/mess/includes/bk.h index faafa357e5a..81bc7758c6e 100644 --- a/src/mess/includes/bk.h +++ b/src/mess/includes/bk.h @@ -38,6 +38,7 @@ public: virtual void video_start(); UINT32 screen_update_bk0010(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(keyboard_callback); + IRQ_CALLBACK_MEMBER(bk0010_irq_callback); }; #endif /* BK_H_ */ diff --git a/src/mess/includes/cbm2.h b/src/mess/includes/cbm2.h index ceb37b07d30..a2447eadd2c 100644 --- a/src/mess/includes/cbm2.h +++ b/src/mess/includes/cbm2.h @@ -206,6 +206,8 @@ public: DECLARE_READ8_MEMBER( ext_cia_pb_r ); DECLARE_WRITE8_MEMBER( ext_cia_pb_w ); + IRQ_CALLBACK_MEMBER(pic_irq_callback); + // memory state int m_dramon; int m_busen1; diff --git a/src/mess/includes/compis.h b/src/mess/includes/compis.h index e5a4b319dad..2ae2e7cea0a 100644 --- a/src/mess/includes/compis.h +++ b/src/mess/includes/compis.h @@ -187,6 +187,8 @@ public: INTERRUPT_GEN_MEMBER(compis_vblank_int); TIMER_CALLBACK_MEMBER(internal_timer_int); TIMER_CALLBACK_MEMBER(dma_timer_callback); + IRQ_CALLBACK_MEMBER(int_callback); + IRQ_CALLBACK_MEMBER(compis_irq_callback); }; diff --git a/src/mess/includes/mc80.h b/src/mess/includes/mc80.h index c55a5b327ad..bacbdfbb980 100644 --- a/src/mess/includes/mc80.h +++ b/src/mess/includes/mc80.h @@ -46,6 +46,8 @@ public: UINT32 screen_update_mc8030(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_DEVICE_CALLBACK_MEMBER(mc8020_kbd); DECLARE_WRITE_LINE_MEMBER(ctc_z2_w); + IRQ_CALLBACK_MEMBER(mc8020_irq_callback); + IRQ_CALLBACK_MEMBER(mc8030_irq_callback); }; diff --git a/src/mess/includes/pc1512.h b/src/mess/includes/pc1512.h index 23548dccf3d..bc3395a7e1e 100644 --- a/src/mess/includes/pc1512.h +++ b/src/mess/includes/pc1512.h @@ -160,6 +160,7 @@ public: DECLARE_INPUT_CHANGED_MEMBER( mouse_x_changed ); DECLARE_INPUT_CHANGED_MEMBER( mouse_y_changed ); DECLARE_FLOPPY_FORMATS( floppy_formats ); + IRQ_CALLBACK_MEMBER(pc1512_irq_callback); // system status register int m_pit1; diff --git a/src/mess/includes/portfoli.h b/src/mess/includes/portfoli.h index 15a920f1d23..fcf1a41e2ac 100644 --- a/src/mess/includes/portfoli.h +++ b/src/mess/includes/portfoli.h @@ -111,6 +111,7 @@ public: TIMER_DEVICE_CALLBACK_MEMBER(system_tick); TIMER_DEVICE_CALLBACK_MEMBER(counter_tick); DECLARE_READ8_MEMBER(hd61830_rd_r); + IRQ_CALLBACK_MEMBER(portfolio_int_ack); }; #endif diff --git a/src/mess/includes/rmnimbus.h b/src/mess/includes/rmnimbus.h index 027a24dec7d..97afcbf348b 100644 --- a/src/mess/includes/rmnimbus.h +++ b/src/mess/includes/rmnimbus.h @@ -467,4 +467,5 @@ public: DECLARE_WRITE_LINE_MEMBER(nimbus_scsi_msg_w); DECLARE_WRITE_LINE_MEMBER(nimbus_scsi_req_w); void nimbus_scsi_linechange( UINT8 mask, UINT8 state ); + IRQ_CALLBACK_MEMBER(int_callback); }; diff --git a/src/mess/includes/trs80m2.h b/src/mess/includes/trs80m2.h index 565e5aba530..390128c2d5c 100644 --- a/src/mess/includes/trs80m2.h +++ b/src/mess/includes/trs80m2.h @@ -125,7 +125,7 @@ public: int m_rtc_int; int m_enable_rtc_int; - TIMER_DEVICE_CALLBACK_MEMBER(ctc_tick); + TIMER_DEVICE_CALLBACK_MEMBER(ctc_tick); }; class trs80m16_state : public trs80m2_state @@ -144,6 +144,8 @@ public: DECLARE_WRITE8_MEMBER( ual_w ); DECLARE_WRITE8_MEMBER( tcl_w ); + + IRQ_CALLBACK_MEMBER(trs80m16_irq_callback); UINT16 m_ual; UINT8 m_limit[2]; diff --git a/src/mess/includes/v1050.h b/src/mess/includes/v1050.h index aec7cb536c2..c0fb3025ec6 100644 --- a/src/mess/includes/v1050.h +++ b/src/mess/includes/v1050.h @@ -184,6 +184,7 @@ public: DECLARE_WRITE8_MEMBER(m6502_ppi_pc_w); DECLARE_WRITE8_MEMBER(misc_ppi_pb_w); DECLARE_READ8_MEMBER(misc_ppi_pc_r); + IRQ_CALLBACK_MEMBER(v1050_int_ack); }; //----------- defined in video/v1050.c ----------- diff --git a/src/mess/includes/victor9k.h b/src/mess/includes/victor9k.h index 726f37589c4..b8a4958be87 100644 --- a/src/mess/includes/victor9k.h +++ b/src/mess/includes/victor9k.h @@ -127,6 +127,7 @@ public: int m_side; /* selected side */ DECLARE_WRITE_LINE_MEMBER(mux_serial_b_w); DECLARE_WRITE_LINE_MEMBER(mux_serial_a_w); + IRQ_CALLBACK_MEMBER(victor9k_irq_callback); }; #endif diff --git a/src/mess/includes/vidbrain.h b/src/mess/includes/vidbrain.h index 654a2f5e754..bd99b1f4730 100644 --- a/src/mess/includes/vidbrain.h +++ b/src/mess/includes/vidbrain.h @@ -97,6 +97,8 @@ public: DECLARE_WRITE_LINE_MEMBER( ext_int_w ); DECLARE_WRITE_LINE_MEMBER( hblank_w ); + IRQ_CALLBACK_MEMBER(vidbrain_int_ack); + void interrupt_check(); // F3853 SMI state diff --git a/src/mess/includes/vixen.h b/src/mess/includes/vixen.h index d2443e360f4..9bb48bc6a40 100644 --- a/src/mess/includes/vixen.h +++ b/src/mess/includes/vixen.h @@ -133,6 +133,7 @@ public: DECLARE_DRIVER_INIT(vixen); TIMER_DEVICE_CALLBACK_MEMBER(vsync_tick); + IRQ_CALLBACK_MEMBER(vixen_int_ack); }; #endif diff --git a/src/mess/includes/wangpc.h b/src/mess/includes/wangpc.h index 176dbed3c9a..ee23d971eba 100644 --- a/src/mess/includes/wangpc.h +++ b/src/mess/includes/wangpc.h @@ -165,6 +165,8 @@ public: DECLARE_WRITE_LINE_MEMBER( bus_irq2_w ); DECLARE_FLOPPY_FORMATS( floppy_formats ); + + IRQ_CALLBACK_MEMBER(wangpc_irq_callback); void fdc_irq(bool state); void fdc_drq(bool state); diff --git a/src/mess/machine/amstrad.c b/src/mess/machine/amstrad.c index 1a004c9ab39..0977c48c463 100644 --- a/src/mess/machine/amstrad.c +++ b/src/mess/machine/amstrad.c @@ -2670,28 +2670,27 @@ READ8_MEMBER(amstrad_state::amstrad_psg_porta_read) /* called when cpu acknowledges int */ /* reset top bit of interrupt line counter */ /* this ensures that the next interrupt is no closer than 32 lines */ -static IRQ_CALLBACK(amstrad_cpu_acknowledge_int) +IRQ_CALLBACK_MEMBER(amstrad_state::amstrad_cpu_acknowledge_int) { - amstrad_state *state = device->machine().driver_data<amstrad_state>(); // DMA interrupts can be automatically cleared if bit 0 of &6805 is set to 0 - if( state->m_asic.enabled && state->m_plus_irq_cause != 0x06 && state->m_asic.dma_clear & 0x01) + if( m_asic.enabled && m_plus_irq_cause != 0x06 && m_asic.dma_clear & 0x01) { - logerror("IRQ: Not cleared, IRQ was called by DMA [%i]\n",state->m_plus_irq_cause); - state->m_asic.ram[0x2c0f] &= ~0x80; // not a raster interrupt, so this bit is reset - return (state->m_asic.ram[0x2805] & 0xf8) | state->m_plus_irq_cause; + logerror("IRQ: Not cleared, IRQ was called by DMA [%i]\n",m_plus_irq_cause); + m_asic.ram[0x2c0f] &= ~0x80; // not a raster interrupt, so this bit is reset + return (m_asic.ram[0x2805] & 0xf8) | m_plus_irq_cause; } - device->machine().device("maincpu")->execute().set_input_line(0, CLEAR_LINE); - state->m_gate_array.hsync_counter &= 0x1F; - if ( state->m_asic.enabled ) + machine().device("maincpu")->execute().set_input_line(0, CLEAR_LINE); + m_gate_array.hsync_counter &= 0x1F; + if ( m_asic.enabled ) { - if(state->m_plus_irq_cause == 6) // bit 7 is set "if last interrupt acknowledge cycle was caused by a raster interrupt" - state->m_asic.ram[0x2c0f] |= 0x80; + if(m_plus_irq_cause == 6) // bit 7 is set "if last interrupt acknowledge cycle was caused by a raster interrupt" + m_asic.ram[0x2c0f] |= 0x80; else { - state->m_asic.ram[0x2c0f] &= ~0x80; - state->m_asic.ram[0x2c0f] &= (0x40 >> state->m_plus_irq_cause/2); + m_asic.ram[0x2c0f] &= ~0x80; + m_asic.ram[0x2c0f] &= (0x40 >> m_plus_irq_cause/2); } - return (state->m_asic.ram[0x2805] & 0xf8) | state->m_plus_irq_cause; + return (m_asic.ram[0x2805] & 0xf8) | m_plus_irq_cause; } return 0xFF; } @@ -2898,7 +2897,7 @@ static void amstrad_common_init(running_machine &machine) (const UINT8*)amstrad_cycle_table_ex); /* Juergen is a cool dude! */ - state->m_maincpu->set_irq_acknowledge_callback(amstrad_cpu_acknowledge_int); + state->m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(amstrad_state::amstrad_cpu_acknowledge_int),state)); } TIMER_CALLBACK_MEMBER(amstrad_state::cb_set_resolution) diff --git a/src/mess/machine/bk.c b/src/mess/machine/bk.c index a99f8c92f96..f87f1c2a5c2 100644 --- a/src/mess/machine/bk.c +++ b/src/mess/machine/bk.c @@ -70,16 +70,15 @@ void bk_state::machine_start() machine().scheduler().timer_pulse(attotime::from_hz(2400), timer_expired_delegate(FUNC(bk_state::keyboard_callback),this)); } -static IRQ_CALLBACK(bk0010_irq_callback) +IRQ_CALLBACK_MEMBER(bk_state::bk0010_irq_callback) { - bk_state *state = device->machine().driver_data<bk_state>(); - device->execute().set_input_line(0, CLEAR_LINE); - return state->m_key_irq_vector; + device.execute().set_input_line(0, CLEAR_LINE); + return m_key_irq_vector; } void bk_state::machine_reset() { - machine().device("maincpu")->execute().set_irq_acknowledge_callback(bk0010_irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(bk_state::bk0010_irq_callback),this)); m_kbd_state = 0; m_scrool = 01330; diff --git a/src/mess/machine/compis.c b/src/mess/machine/compis.c index e0a2274c86e..88de15f4bdc 100644 --- a/src/mess/machine/compis.c +++ b/src/mess/machine/compis.c @@ -345,39 +345,38 @@ WRITE16_MEMBER( compis_state::compis_usart_w ) * 80186 interrupt controller * *************************************/ -static IRQ_CALLBACK(int_callback) +IRQ_CALLBACK_MEMBER(compis_state::int_callback) { - compis_state *state = device->machine().driver_data<compis_state>(); if (LOG_INTERRUPTS) - logerror("(%f) **** Acknowledged interrupt vector %02X\n", device->machine().time().as_double(), state->m_i186.intr.poll_status & 0x1f); + logerror("(%f) **** Acknowledged interrupt vector %02X\n", machine().time().as_double(), m_i186.intr.poll_status & 0x1f); /* clear the interrupt */ - device->execute().set_input_line(0, CLEAR_LINE); - state->m_i186.intr.pending = 0; + device.execute().set_input_line(0, CLEAR_LINE); + m_i186.intr.pending = 0; /* clear the request and set the in-service bit */ #if LATCH_INTS - state->m_i186.intr.request &= ~state->m_i186.intr.ack_mask; + m_i186.intr.request &= ~m_i186.intr.ack_mask; #else - state->m_i186.intr.request &= ~(state->m_i186.intr.ack_mask & 0x0f); + m_i186.intr.request &= ~(m_i186.intr.ack_mask & 0x0f); #endif - state->m_i186.intr.in_service |= state->m_i186.intr.ack_mask; - if (state->m_i186.intr.ack_mask == 0x0001) + m_i186.intr.in_service |= m_i186.intr.ack_mask; + if (m_i186.intr.ack_mask == 0x0001) { - switch (state->m_i186.intr.poll_status & 0x1f) + switch (m_i186.intr.poll_status & 0x1f) { - case 0x08: state->m_i186.intr.status &= ~0x01; break; - case 0x12: state->m_i186.intr.status &= ~0x02; break; - case 0x13: state->m_i186.intr.status &= ~0x04; break; + case 0x08: m_i186.intr.status &= ~0x01; break; + case 0x12: m_i186.intr.status &= ~0x02; break; + case 0x13: m_i186.intr.status &= ~0x04; break; } } - state->m_i186.intr.ack_mask = 0; + m_i186.intr.ack_mask = 0; /* a request no longer pending */ - state->m_i186.intr.poll_status &= ~0x8000; + m_i186.intr.poll_status &= ~0x8000; /* return the vector */ - return state->m_i186.intr.poll_status & 0x1f; + return m_i186.intr.poll_status & 0x1f; } @@ -819,7 +818,7 @@ READ16_MEMBER( compis_state::compis_i186_internal_port_r ) case 0x12: if (LOG_PORTS) logerror("%05X:read 80186 interrupt poll\n", m_maincpu->pc()); if (m_i186.intr.poll_status & 0x8000) - int_callback(machine().device("maincpu"), 0); + int_callback(*machine().device("maincpu"), 0); return m_i186.intr.poll_status; case 0x13: @@ -1152,7 +1151,7 @@ WRITE16_MEMBER( compis_state::compis_i186_internal_port_w ) /* we need to do this at a time when the I86 context is swapped in */ /* this register is generally set once at startup and never again, so it's a good */ /* time to set it up */ - m_maincpu->set_irq_acknowledge_callback(int_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(compis_state::int_callback),this)); break; case 0x60: @@ -1293,16 +1292,15 @@ const struct pic8259_interface compis_pic8259_slave_config = }; -static IRQ_CALLBACK( compis_irq_callback ) +IRQ_CALLBACK_MEMBER(compis_state::compis_irq_callback) { - compis_state *state = device->machine().driver_data<compis_state>(); - return pic8259_acknowledge(state->m_8259m); + return pic8259_acknowledge(m_8259m); } DRIVER_INIT_MEMBER(compis_state,compis) { - machine().device("maincpu")->execute().set_irq_acknowledge_callback(compis_irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(compis_state::compis_irq_callback),this)); memset (&m_compis, 0, sizeof (m_compis) ); } @@ -1324,7 +1322,7 @@ void compis_state::machine_reset() compis_keyb_init(this); /* OSP PIC 8259 */ - m_maincpu->set_irq_acknowledge_callback(compis_irq_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(compis_state::compis_irq_callback),this)); } /*-------------------------------------------------------------------------*/ diff --git a/src/mess/machine/mc80.c b/src/mess/machine/mc80.c index 72b8eb50284..355856cc87d 100644 --- a/src/mess/machine/mc80.c +++ b/src/mess/machine/mc80.c @@ -13,14 +13,14 @@ /* Implementation for MC80.2x */ /*****************************************************************************/ -static IRQ_CALLBACK( mc8020_irq_callback ) +IRQ_CALLBACK_MEMBER(mc80_state::mc8020_irq_callback) { return 0x00; } MACHINE_RESET_MEMBER(mc80_state,mc8020) { - machine().device("maincpu")->execute().set_irq_acknowledge_callback(mc8020_irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(mc80_state::mc8020_irq_callback),this)); } WRITE_LINE_MEMBER( mc80_state::ctc_z0_w ) @@ -107,14 +107,14 @@ WRITE8_MEMBER( mc80_state::mc8030_eprom_prog_w ) { } -static IRQ_CALLBACK( mc8030_irq_callback ) +IRQ_CALLBACK_MEMBER(mc80_state::mc8030_irq_callback ) { return 0x20; } MACHINE_RESET_MEMBER(mc80_state,mc8030) { - machine().device("maincpu")->execute().set_irq_acknowledge_callback(mc8030_irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(mc80_state::mc8030_irq_callback),this)); } READ8_MEMBER( mc80_state::zve_port_a_r ) diff --git a/src/mess/machine/rmnimbus.c b/src/mess/machine/rmnimbus.c index b38f6269827..3852016dcc6 100644 --- a/src/mess/machine/rmnimbus.c +++ b/src/mess/machine/rmnimbus.c @@ -194,67 +194,66 @@ static void mouse_js_reset(running_machine &machine); * 80186 interrupt controller * *************************************/ -static IRQ_CALLBACK(int_callback) +IRQ_CALLBACK_MEMBER(rmnimbus_state::int_callback) { - rmnimbus_state *state = device->machine().driver_data<rmnimbus_state>(); UINT8 vector; UINT16 old; UINT16 oldreq; if (LOG_INTERRUPTS) - logerror("(%f) **** Acknowledged interrupt vector %02X\n", device->machine().time().as_double(), state->m_i186.intr.poll_status & 0x1f); + logerror("(%f) **** Acknowledged interrupt vector %02X\n", machine().time().as_double(), m_i186.intr.poll_status & 0x1f); /* clear the interrupt */ - device->execute().set_input_line(0, CLEAR_LINE); - state->m_i186.intr.pending = 0; + device.execute().set_input_line(0, CLEAR_LINE); + m_i186.intr.pending = 0; - oldreq=state->m_i186.intr.request; + oldreq=m_i186.intr.request; /* clear the request and set the in-service bit */ #if LATCH_INTS - state->m_i186.intr.request &= ~state->m_i186.intr.ack_mask; + m_i186.intr.request &= ~m_i186.intr.ack_mask; #else - state->m_i186.intr.request &= ~(state->m_i186.intr.ack_mask & 0x0f); + m_i186.intr.request &= ~(m_i186.intr.ack_mask & 0x0f); #endif - if((LOG_INTERRUPTS) && (state->m_i186.intr.request!=oldreq)) - logerror("i186.intr.request changed from %02X to %02X\n",oldreq,state->m_i186.intr.request); + if((LOG_INTERRUPTS) && (m_i186.intr.request!=oldreq)) + logerror("i186.intr.request changed from %02X to %02X\n",oldreq,m_i186.intr.request); - old=state->m_i186.intr.in_service; + old=m_i186.intr.in_service; - state->m_i186.intr.in_service |= state->m_i186.intr.ack_mask; + m_i186.intr.in_service |= m_i186.intr.ack_mask; - if((LOG_INTERRUPTS) && (state->m_i186.intr.in_service!=old)) - logerror("i186.intr.in_service changed from %02X to %02X\n",old,state->m_i186.intr.in_service); + if((LOG_INTERRUPTS) && (m_i186.intr.in_service!=old)) + logerror("i186.intr.in_service changed from %02X to %02X\n",old,m_i186.intr.in_service); - if (state->m_i186.intr.ack_mask == 0x0001) + if (m_i186.intr.ack_mask == 0x0001) { - switch (state->m_i186.intr.poll_status & 0x1f) + switch (m_i186.intr.poll_status & 0x1f) { - case 0x08: state->m_i186.intr.status &= ~0x01; break; - case 0x12: state->m_i186.intr.status &= ~0x02; break; - case 0x13: state->m_i186.intr.status &= ~0x04; break; + case 0x08: m_i186.intr.status &= ~0x01; break; + case 0x12: m_i186.intr.status &= ~0x02; break; + case 0x13: m_i186.intr.status &= ~0x04; break; } } - state->m_i186.intr.ack_mask = 0; + m_i186.intr.ack_mask = 0; /* a request no longer pending */ - state->m_i186.intr.poll_status &= ~0x8000; + m_i186.intr.poll_status &= ~0x8000; /* return the vector */ - switch(state->m_i186.intr.poll_status & 0x1F) + switch(m_i186.intr.poll_status & 0x1F) { - case 0x0C : vector=(state->m_i186.intr.ext[0] & EXTINT_CTRL_CASCADE) ? state->m_i186.intr.ext_vector[0] : (state->m_i186.intr.poll_status & 0x1f); break; - case 0x0D : vector=(state->m_i186.intr.ext[1] & EXTINT_CTRL_CASCADE) ? state->m_i186.intr.ext_vector[1] : (state->m_i186.intr.poll_status & 0x1f); break; + case 0x0C : vector=(m_i186.intr.ext[0] & EXTINT_CTRL_CASCADE) ? m_i186.intr.ext_vector[0] : (m_i186.intr.poll_status & 0x1f); break; + case 0x0D : vector=(m_i186.intr.ext[1] & EXTINT_CTRL_CASCADE) ? m_i186.intr.ext_vector[1] : (m_i186.intr.poll_status & 0x1f); break; default : - vector=state->m_i186.intr.poll_status & 0x1f; break; + vector=m_i186.intr.poll_status & 0x1f; break; } if (LOG_INTERRUPTS) { - logerror("i186.intr.ext[0]=%04X i186.intr.ext[1]=%04X\n",state->m_i186.intr.ext[0],state->m_i186.intr.ext[1]); - logerror("Ext vectors : %02X %02X\n",state->m_i186.intr.ext_vector[0],state->m_i186.intr.ext_vector[1]); - logerror("Int %02X Calling vector %02X\n",state->m_i186.intr.poll_status,vector); + logerror("i186.intr.ext[0]=%04X i186.intr.ext[1]=%04X\n",m_i186.intr.ext[0],m_i186.intr.ext[1]); + logerror("Ext vectors : %02X %02X\n",m_i186.intr.ext_vector[0],m_i186.intr.ext_vector[1]); + logerror("Int %02X Calling vector %02X\n",m_i186.intr.poll_status,vector); } return vector; @@ -855,7 +854,7 @@ READ16_MEMBER(rmnimbus_state::nimbus_i186_internal_port_r) case 0x12: if (LOG_PORTS) logerror("%05X:read 80186 interrupt poll\n", space.device().safe_pc()); if (m_i186.intr.poll_status & 0x8000) - int_callback(machine().device(MAINCPU_TAG), 0); + int_callback(*machine().device(MAINCPU_TAG), 0); return m_i186.intr.poll_status; case 0x13: @@ -1167,7 +1166,7 @@ WRITE16_MEMBER(rmnimbus_state::nimbus_i186_internal_port_w) /* we need to do this at a time when the I86 context is swapped in */ /* this register is generally set once at startup and never again, so it's a good */ /* time to set it up */ - space.device().execute().set_irq_acknowledge_callback(int_callback); + space.device().execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(rmnimbus_state::int_callback),this)); break; case 0x60: diff --git a/src/mess/machine/tf20.c b/src/mess/machine/tf20.c index 61088b58fe6..7bc2096a57c 100644 --- a/src/mess/machine/tf20.c +++ b/src/mess/machine/tf20.c @@ -182,7 +182,7 @@ void epson_tf20_device::device_start() m_timer_serial = timer_alloc(0, NULL); m_timer_tc = timer_alloc(1, NULL); - m_cpu->set_irq_acknowledge_callback(irq_callback); + m_cpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(epson_tf20_device::irq_callback),this)); m_fd0 = subdevice<floppy_connector>("5a:0")->get_device(); m_fd1 = subdevice<floppy_connector>("5a:1")->get_device(); @@ -237,7 +237,7 @@ void epson_tf20_device::device_timer(emu_timer &timer, device_timer_id id, int p // irq vector callback //------------------------------------------------- -IRQ_CALLBACK( epson_tf20_device::irq_callback ) +IRQ_CALLBACK_MEMBER( epson_tf20_device::irq_callback ) { return 0x00; } diff --git a/src/mess/machine/tf20.h b/src/mess/machine/tf20.h index a799fe7bf42..6b98cd01487 100644 --- a/src/mess/machine/tf20.h +++ b/src/mess/machine/tf20.h @@ -42,7 +42,7 @@ public: DECLARE_READ8_MEMBER( rom_disable_r ); DECLARE_READ8_MEMBER( upd765_tc_r ); DECLARE_WRITE8_MEMBER( fdc_control_w ); - static IRQ_CALLBACK( irq_callback ); + IRQ_CALLBACK_MEMBER( irq_callback ); void fdc_irq(bool state); |