diff options
Diffstat (limited to 'src/mame/drivers')
-rw-r--r-- | src/mame/drivers/aztarac.c | 4 | ||||
-rw-r--r-- | src/mame/drivers/dcheese.c | 26 | ||||
-rw-r--r-- | src/mame/drivers/mazerbla.c | 8 | ||||
-rw-r--r-- | src/mame/drivers/metro.c | 39 | ||||
-rw-r--r-- | src/mame/drivers/ms32.c | 43 | ||||
-rw-r--r-- | src/mame/drivers/pcxt.c | 8 | ||||
-rw-r--r-- | src/mame/drivers/quakeat.c | 8 | ||||
-rw-r--r-- | src/mame/drivers/seibuspi.c | 8 | ||||
-rw-r--r-- | src/mame/drivers/ssv.c | 26 |
9 files changed, 76 insertions, 94 deletions
diff --git a/src/mame/drivers/aztarac.c b/src/mame/drivers/aztarac.c index 8685378abad..340af9bc7e9 100644 --- a/src/mame/drivers/aztarac.c +++ b/src/mame/drivers/aztarac.c @@ -29,7 +29,7 @@ * *************************************/ -static IRQ_CALLBACK(aztarac_irq_callback) +IRQ_CALLBACK_MEMBER(aztarac_state::aztarac_irq_callback) { return 0xc; } @@ -37,7 +37,7 @@ static IRQ_CALLBACK(aztarac_irq_callback) void aztarac_state::machine_reset() { - machine().device("maincpu")->execute().set_irq_acknowledge_callback(aztarac_irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(aztarac_state::aztarac_irq_callback),this)); } diff --git a/src/mame/drivers/dcheese.c b/src/mame/drivers/dcheese.c index ff6cba335c5..76d48e46057 100644 --- a/src/mame/drivers/dcheese.c +++ b/src/mame/drivers/dcheese.c @@ -47,42 +47,36 @@ * *************************************/ -static void update_irq_state( device_t *cpu ) +void dcheese_state::update_irq_state() { - dcheese_state *state = cpu->machine().driver_data<dcheese_state>(); - int i; for (i = 1; i < 5; i++) - cpu->execute().set_input_line(i, state->m_irq_state[i] ? ASSERT_LINE : CLEAR_LINE); + m_maincpu->set_input_line(i, m_irq_state[i] ? ASSERT_LINE : CLEAR_LINE); } -static IRQ_CALLBACK( irq_callback ) +IRQ_CALLBACK_MEMBER(dcheese_state::irq_callback) { - dcheese_state *state = device->machine().driver_data<dcheese_state>(); - /* auto-ack the IRQ */ - state->m_irq_state[irqline] = 0; - update_irq_state(device); + m_irq_state[irqline] = 0; + update_irq_state(); /* vector is 0x40 + index */ return 0x40 + irqline; } -void dcheese_signal_irq( running_machine &machine, int which ) +void dcheese_state::dcheese_signal_irq(int which ) { - dcheese_state *state = machine.driver_data<dcheese_state>(); - - state->m_irq_state[which] = 1; - update_irq_state(state->m_maincpu); + m_irq_state[which] = 1; + update_irq_state(); } INTERRUPT_GEN_MEMBER(dcheese_state::dcheese_vblank) { logerror("---- VBLANK ----\n"); - dcheese_signal_irq(machine(), 4); + dcheese_signal_irq(4); } @@ -99,7 +93,7 @@ void dcheese_state::machine_start() m_audiocpu = machine().device<cpu_device>("audiocpu"); m_bsmt = machine().device("bsmt"); - m_maincpu->set_irq_acknowledge_callback(irq_callback); + m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(dcheese_state::irq_callback),this)); save_item(NAME(m_irq_state)); save_item(NAME(m_soundlatch_full)); diff --git a/src/mame/drivers/mazerbla.c b/src/mame/drivers/mazerbla.c index 06b36f51fc7..df0e15b0960 100644 --- a/src/mame/drivers/mazerbla.c +++ b/src/mame/drivers/mazerbla.c @@ -149,6 +149,7 @@ public: TIMER_CALLBACK_MEMBER(deferred_ls670_0_w); TIMER_CALLBACK_MEMBER(deferred_ls670_1_w); TIMER_CALLBACK_MEMBER(delayed_sound_w); + IRQ_CALLBACK_MEMBER(irq_callback); }; @@ -1394,7 +1395,7 @@ static const ay8910_interface ay8912_interface_2 = DEVCB_DRIVER_MEMBER(mazerbla_state,gg_led_ctrl_w) }; -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(mazerbla_state::irq_callback) { /* all data lines are tied to +5V via 10K resistors */ /* D1 is set to GND when INT comes from CFB */ @@ -1408,8 +1409,7 @@ static IRQ_CALLBACK(irq_callback) note: 1111 11110 (0xfe) - cannot happen and is not handled by game */ - mazerbla_state *state = device->machine().driver_data<mazerbla_state>(); - return (state->m_zpu_int_vector & ~1); /* D0->GND is performed on CFB board */ + return (m_zpu_int_vector & ~1); /* D0->GND is performed on CFB board */ } /* frequency is 14.318 MHz/16/16/16/16 */ @@ -1493,7 +1493,7 @@ void mazerbla_state::machine_reset() memset(m_lookup_ram, 0, ARRAY_LENGTH(m_lookup_ram)); - machine().device("maincpu")->execute().set_irq_acknowledge_callback(irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(mazerbla_state::irq_callback),this)); } diff --git a/src/mame/drivers/metro.c b/src/mame/drivers/metro.c index 8860657596a..a423d2f7a36 100644 --- a/src/mame/drivers/metro.c +++ b/src/mame/drivers/metro.c @@ -140,15 +140,14 @@ READ16_MEMBER(metro_state::metro_irq_cause_r) /* Update the IRQ state based on all possible causes */ -static void update_irq_state( running_machine &machine ) +void metro_state::update_irq_state() { - metro_state *state = machine.driver_data<metro_state>(); - address_space &space = state->m_maincpu->space(AS_PROGRAM); + address_space &space = m_maincpu->space(AS_PROGRAM); /* Get the pending IRQs (only the enabled ones, e.g. where irq_enable is *0*) */ - UINT16 irq = state->metro_irq_cause_r(space, 0, 0xffff) & ~*state->m_irq_enable; + UINT16 irq = metro_irq_cause_r(space, 0, 0xffff) & ~*m_irq_enable; - if (state->m_irq_line == -1) /* mouja, gakusai, gakusai2, dokyusei, dokyusp */ + if (m_irq_line == -1) /* mouja, gakusai, gakusai2, dokyusei, dokyusp */ { /* This is for games that supply an *IRQ Vector* on the data bus together with an IRQ level for each possible IRQ source */ UINT8 irq_level[8] = { 0 }; @@ -156,10 +155,10 @@ static void update_irq_state( running_machine &machine ) for (i = 0; i < 8; i++) if (BIT(irq, i)) - irq_level[state->m_irq_levels[i] & 7] = 1; + irq_level[m_irq_levels[i] & 7] = 1; for (i = 0; i < 8; i++) - state->m_maincpu->set_input_line(i, irq_level[i] ? ASSERT_LINE : CLEAR_LINE); + m_maincpu->set_input_line(i, irq_level[i] ? ASSERT_LINE : CLEAR_LINE); } else { @@ -167,18 +166,16 @@ static void update_irq_state( running_machine &machine ) then reads the actual source by peeking a register (metro_irq_cause_r) */ int irq_state = (irq ? ASSERT_LINE : CLEAR_LINE); - state->m_maincpu->set_input_line(state->m_irq_line, irq_state); + m_maincpu->set_input_line(m_irq_line, irq_state); } } /* For games that supply an *IRQ Vector* on the data bus */ -static IRQ_CALLBACK( metro_irq_callback ) +IRQ_CALLBACK_MEMBER(metro_state::metro_irq_callback) { - metro_state *state = device->machine().driver_data<metro_state>(); - - // logerror("%s: irq callback returns %04X\n", device->machine().describe_context(), state->m_irq_vectors[int_level]); - return state->m_irq_vectors[irqline] & 0xff; + // logerror("%s: irq callback returns %04X\n", device.machine().describe_context(), m_irq_vectors[int_level]); + return m_irq_vectors[irqline] & 0xff; } @@ -194,19 +191,19 @@ WRITE16_MEMBER(metro_state::metro_irq_cause_w) if (BIT(data, i)) m_requested_int[i] = 0; } - update_irq_state(machine()); + update_irq_state(); } INTERRUPT_GEN_MEMBER(metro_state::metro_vblank_interrupt) { m_requested_int[m_vblank_bit] = 1; - update_irq_state(machine()); + update_irq_state(); } INTERRUPT_GEN_MEMBER(metro_state::metro_periodic_interrupt) { m_requested_int[4] = 1; - update_irq_state(machine()); + update_irq_state(); } TIMER_CALLBACK_MEMBER(metro_state::karatour_irq_callback) @@ -223,13 +220,13 @@ INTERRUPT_GEN_MEMBER(metro_state::karatour_interrupt) machine().scheduler().timer_set(attotime::from_usec(2500), timer_expired_delegate(FUNC(metro_state::karatour_irq_callback),this)); m_requested_int[5] = 1; - update_irq_state(machine()); + update_irq_state(); } TIMER_CALLBACK_MEMBER(metro_state::mouja_irq_callback) { m_requested_int[0] = 1; - update_irq_state(machine()); + update_irq_state(); } WRITE16_MEMBER(metro_state::mouja_irq_timer_ctrl_w) @@ -242,7 +239,7 @@ WRITE16_MEMBER(metro_state::mouja_irq_timer_ctrl_w) INTERRUPT_GEN_MEMBER(metro_state::puzzlet_interrupt) { m_requested_int[m_vblank_bit] = 1; - update_irq_state(machine()); + update_irq_state(); m_maincpu->set_input_line(H8_METRO_TIMER_HACK, HOLD_LINE); } @@ -558,7 +555,7 @@ READ16_MEMBER(metro_state::metro_bankedrom_r) TIMER_CALLBACK_MEMBER(metro_state::metro_blit_done) { m_requested_int[m_blitter_bit] = 1; - update_irq_state(machine()); + update_irq_state(); } INLINE int blt_read( const UINT8 *ROM, const int offs ) @@ -3581,7 +3578,7 @@ MACHINE_START_MEMBER(metro_state,metro) MACHINE_RESET_MEMBER(metro_state,metro) { if (m_irq_line == -1) - machine().device("maincpu")->execute().set_irq_acknowledge_callback(metro_irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(metro_state::metro_irq_callback),this)); } diff --git a/src/mame/drivers/ms32.c b/src/mame/drivers/ms32.c index 918a6788644..10c9a79a60d 100644 --- a/src/mame/drivers/ms32.c +++ b/src/mame/drivers/ms32.c @@ -389,16 +389,14 @@ READ16_MEMBER(ms32_state::ms32_extra_r16) return m_f1superb_extraram_16[offset]; } -static void irq_raise(running_machine &machine, int level); - WRITE32_MEMBER(ms32_state::ms32_irq2_guess_w) { - irq_raise(machine(), 2); + irq_raise(2); } WRITE32_MEMBER(ms32_state::ms32_irq5_guess_w) { - irq_raise(machine(), 5); + irq_raise(5); } static ADDRESS_MAP_START( f1superb_map, AS_PROGRAM, 32, ms32_state ) @@ -1277,38 +1275,35 @@ GFXDECODE_END */ -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(ms32_state::irq_callback) { - ms32_state *state = device->machine().driver_data<ms32_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; } -static void irq_init(running_machine &machine) +void ms32_state::irq_init() { - ms32_state *state = machine.driver_data<ms32_state>(); - state->m_irqreq = 0; - machine.device("maincpu")->execute().set_input_line(0, CLEAR_LINE); - machine.device("maincpu")->execute().set_irq_acknowledge_callback(irq_callback); + m_irqreq = 0; + machine().device("maincpu")->execute().set_input_line(0, CLEAR_LINE); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(ms32_state::irq_callback),this)); } -static void irq_raise(running_machine &machine, int level) +void ms32_state::irq_raise(int level) { - ms32_state *state = machine.driver_data<ms32_state>(); - state->m_irqreq |= (1<<level); - machine.device("maincpu")->execute().set_input_line(0, ASSERT_LINE); + m_irqreq |= (1<<level); + machine().device("maincpu")->execute().set_input_line(0, ASSERT_LINE); } /* TODO: fix this arrangement (derived from old deprecat lib) */ TIMER_DEVICE_CALLBACK_MEMBER(ms32_state::ms32_interrupt) { int scanline = param; - if( scanline == 0) irq_raise(machine(), 10); - if( scanline == 8) irq_raise(machine(), 9); + if( scanline == 0) irq_raise(10); + if( scanline == 8) irq_raise(9); /* hayaosi1 needs at least 12 IRQ 0 per frame to work (see code at FFE02289) kirarast needs it too, at least 8 per frame, but waits for a variable amount 47pi2 needs ?? per frame (otherwise it hangs when you lose) @@ -1317,7 +1312,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(ms32_state::ms32_interrupt) desertwr p47aces */ - if( (scanline % 8) == 0 && scanline <= 224 ) irq_raise(machine(), 0); + if( (scanline % 8) == 0 && scanline <= 224 ) irq_raise(0); } @@ -1359,7 +1354,7 @@ WRITE8_MEMBER(ms32_state::ms32_snd_bank_w) WRITE8_MEMBER(ms32_state::to_main_w) { m_to_main=data; - irq_raise(machine(), 1); + irq_raise(1); } static ADDRESS_MAP_START( ms32_sound_map, AS_PROGRAM, 8, ms32_state ) @@ -1384,7 +1379,7 @@ void ms32_state::machine_reset() machine().root_device().membank("bank1")->set_base(machine().root_device().memregion("maincpu")->base()); machine().root_device().membank("bank4")->set_entry(0); machine().root_device().membank("bank5")->set_entry(1); - irq_init(machine()); + irq_init(); } /********** MACHINE DRIVER **********/ diff --git a/src/mame/drivers/pcxt.c b/src/mame/drivers/pcxt.c index d247c0748c2..57b0e40d94c 100644 --- a/src/mame/drivers/pcxt.c +++ b/src/mame/drivers/pcxt.c @@ -125,6 +125,7 @@ public: DECLARE_DRIVER_INIT(filetto); virtual void machine_reset(); UINT32 screen_update_tetriskr(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + IRQ_CALLBACK_MEMBER(irq_callback); }; UINT32 pcxt_state::screen_update_tetriskr(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) @@ -541,10 +542,9 @@ static const struct pic8259_interface pic8259_2_config = DEVCB_NULL }; -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(pcxt_state::irq_callback) { - pcxt_state *state = device->machine().driver_data<pcxt_state>(); - return pic8259_acknowledge(state->m_pic8259_1); + return pic8259_acknowledge(m_pic8259_1); } static ADDRESS_MAP_START( filetto_map, AS_PROGRAM, 8, pcxt_state ) @@ -716,7 +716,7 @@ void pcxt_state::machine_reset() device_t *speaker = machine().device("speaker"); m_bank = -1; m_lastvalue = -1; - machine().device("maincpu")->execute().set_irq_acknowledge_callback(irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(pcxt_state::irq_callback),this)); m_pc_spkrdata = 0; m_pc_input = 0; diff --git a/src/mame/drivers/quakeat.c b/src/mame/drivers/quakeat.c index 3e06eac5c2b..2c715cec221 100644 --- a/src/mame/drivers/quakeat.c +++ b/src/mame/drivers/quakeat.c @@ -77,6 +77,7 @@ public: virtual void machine_start(); virtual void video_start(); UINT32 screen_update_quake(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + IRQ_CALLBACK_MEMBER(irq_callback); }; @@ -152,15 +153,14 @@ INPUT_PORTS_END /*************************************************************/ -static IRQ_CALLBACK(irq_callback) +IRQ_CALLBACK_MEMBER(quakeat_state::irq_callback) { - quakeat_state *state = device->machine().driver_data<quakeat_state>(); - return pic8259_acknowledge( state->m_pic8259_1); + return pic8259_acknowledge(m_pic8259_1); } void quakeat_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(quakeat_state::irq_callback),this)); m_pic8259_1 = machine().device( "pic8259_1" ); m_pic8259_2 = machine().device( "pic8259_2" ); diff --git a/src/mame/drivers/seibuspi.c b/src/mame/drivers/seibuspi.c index 284f7bf53b5..860fb47f338 100644 --- a/src/mame/drivers/seibuspi.c +++ b/src/mame/drivers/seibuspi.c @@ -1794,7 +1794,7 @@ INTERRUPT_GEN_MEMBER(seibuspi_state::spi_interrupt) device.execute().set_input_line(0, ASSERT_LINE ); } -static IRQ_CALLBACK(spi_irq_callback) +IRQ_CALLBACK_MEMBER(seibuspi_state::spi_irq_callback) { return 0x20; } @@ -1815,7 +1815,7 @@ MACHINE_RESET_MEMBER(seibuspi_state,spi) UINT8 flash_data = rombase[0x1ffffc]; machine().device("soundcpu")->execute().set_input_line(INPUT_LINE_RESET, ASSERT_LINE ); - machine().device("maincpu")->execute().set_irq_acknowledge_callback(spi_irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(seibuspi_state::spi_irq_callback),this)); machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x00000680, 0x00000683, read32_delegate(FUNC(seibuspi_state::sound_fifo_r),this)); machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0x00000688, 0x0000068b, write32_delegate(FUNC(seibuspi_state::z80_prg_fifo_w),this)); @@ -1902,7 +1902,7 @@ MACHINE_RESET_MEMBER(seibuspi_state,sxx2f) machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0x0000068c, 0x0000068f, write32_delegate(FUNC(seibuspi_state::eeprom_w),this)); machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x00000680, 0x00000683, read32_delegate(FUNC(seibuspi_state::sb_coin_r),this)); - machine().device("maincpu")->execute().set_irq_acknowledge_callback(spi_irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(seibuspi_state::spi_irq_callback),this)); m_sb_coin_latch = 0; } @@ -2184,7 +2184,7 @@ DRIVER_INIT_MEMBER(seibuspi_state,rfjet2k) MACHINE_RESET_MEMBER(seibuspi_state,seibu386) { - machine().device("maincpu")->execute().set_irq_acknowledge_callback(spi_irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(seibuspi_state::spi_irq_callback),this)); } static MACHINE_CONFIG_START( seibu386, seibuspi_state ) diff --git a/src/mame/drivers/ssv.c b/src/mame/drivers/ssv.c index 55b1814df5c..63528eb6654 100644 --- a/src/mame/drivers/ssv.c +++ b/src/mame/drivers/ssv.c @@ -176,23 +176,19 @@ Notes: ***************************************************************************/ /* Update the IRQ state based on all possible causes */ -static void update_irq_state(running_machine &machine) +void ssv_state::update_irq_state() { - ssv_state *state = machine.driver_data<ssv_state>(); - - machine.device("maincpu")->execute().set_input_line(0, (state->m_requested_int & state->m_irq_enable)? ASSERT_LINE : CLEAR_LINE); + machine().device("maincpu")->execute().set_input_line(0, (m_requested_int & m_irq_enable)? ASSERT_LINE : CLEAR_LINE); } -static IRQ_CALLBACK(ssv_irq_callback) +IRQ_CALLBACK_MEMBER(ssv_state::ssv_irq_callback) { - ssv_state *state = device->machine().driver_data<ssv_state>(); - int i; for ( i = 0; i <= 7; i++ ) { - if (state->m_requested_int & (1 << i)) + if (m_requested_int & (1 << i)) { - UINT16 vector = state->m_irq_vectors[i * (16/2)] & 7; + UINT16 vector = m_irq_vectors[i * (16/2)] & 7; return vector; } } @@ -205,7 +201,7 @@ WRITE16_MEMBER(ssv_state::ssv_irq_ack_w) m_requested_int &= ~(1 << level); - update_irq_state(machine()); + update_irq_state(); } /* @@ -240,13 +236,13 @@ TIMER_DEVICE_CALLBACK_MEMBER(ssv_state::ssv_interrupt) if (m_interrupt_ultrax) { m_requested_int |= 1 << 1; // needed by ultrax to coin up, breaks cairblad - update_irq_state(machine()); + update_irq_state(); } } else if(scanline == 240) { m_requested_int |= 1 << 3; // vblank - update_irq_state(machine()); + update_irq_state(); } } @@ -257,12 +253,12 @@ TIMER_DEVICE_CALLBACK_MEMBER(ssv_state::gdfs_interrupt) if ((scanline % 64) == 0) { m_requested_int |= 1 << 6; // reads lightgun (4 times for 4 axis) - update_irq_state(machine()); + update_irq_state(); } else if(scanline == 240) { m_requested_int |= 1 << 3; // vblank - update_irq_state(machine()); + update_irq_state(); } } @@ -321,7 +317,7 @@ WRITE16_MEMBER(ssv_state::ssv_lockout_inv_w) void ssv_state::machine_reset() { m_requested_int = 0; - machine().device("maincpu")->execute().set_irq_acknowledge_callback(ssv_irq_callback); + machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(ssv_state::ssv_irq_callback),this)); membank("bank1")->set_base(memregion("user1")->base()); } |