diff --git a/src/mame/drivers/segag80r.cpp b/src/mame/drivers/segag80r.cpp index e964523a73a..83d34bef13b 100644 --- a/src/mame/drivers/segag80r.cpp +++ b/src/mame/drivers/segag80r.cpp @@ -156,6 +156,7 @@ INPUT_CHANGED_MEMBER(segag80r_state::service_switch) void segag80r_state::machine_start() { + m_vblank_latch_clear_timer = timer_alloc(TIMER_VBLANK_LATCH_CLEAR); /* register for save states */ } diff --git a/src/mame/includes/exidy440.h b/src/mame/includes/exidy440.h index 832c56512ac..185ad52e7ab 100644 --- a/src/mame/includes/exidy440.h +++ b/src/mame/includes/exidy440.h @@ -48,6 +48,8 @@ public: uint8_t m_firq_select; uint8_t m_palettebank_io; uint8_t m_palettebank_vis; + emu_timer *m_beam_firq_timer; + emu_timer *m_collide_firq_timer; DECLARE_WRITE8_MEMBER(bankram_w); DECLARE_READ8_MEMBER(exidy440_input_port_3_r); DECLARE_READ8_MEMBER(sound_command_ack_r); diff --git a/src/mame/includes/segag80r.h b/src/mame/includes/segag80r.h index 55943ead060..796b79c40c8 100644 --- a/src/mame/includes/segag80r.h +++ b/src/mame/includes/segag80r.h @@ -158,6 +158,7 @@ public: protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + emu_timer *m_vblank_latch_clear_timer; }; diff --git a/src/mame/video/exidy440.cpp b/src/mame/video/exidy440.cpp index 0a5e8580699..5420a665b26 100644 --- a/src/mame/video/exidy440.cpp +++ b/src/mame/video/exidy440.cpp @@ -50,6 +50,9 @@ VIDEO_START_MEMBER(exidy440_state,exidy440) /* allocate a buffer for palette RAM */ m_local_paletteram = std::make_unique(512 * 2); memset(m_local_paletteram.get(), 0, 512 * 2); + + m_collide_firq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(exidy440_state::collide_firq_callback), this)); + m_beam_firq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(exidy440_state::beam_firq_callback), this)); } @@ -349,7 +352,7 @@ void exidy440_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, c /* check the collisions bit */ if (check_collision && (palette[2 * pen] & 0x80) && (count++ < 128)) - screen.machine().scheduler().timer_set(screen.time_until_pos(yoffs, currx), timer_expired_delegate(FUNC(exidy440_state::collide_firq_callback), this), currx); + m_collide_firq_timer->adjust(screen.time_until_pos(yoffs, currx), currx); } currx++; @@ -362,7 +365,7 @@ void exidy440_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, c /* check the collisions bit */ if (check_collision && (palette[2 * pen] & 0x80) && (count++ < 128)) - screen.machine().scheduler().timer_set(screen.time_until_pos(yoffs, currx), timer_expired_delegate(FUNC(exidy440_state::collide_firq_callback), this), currx); + m_collide_firq_timer->adjust(screen.time_until_pos(yoffs, currx), currx); } currx++; } @@ -430,7 +433,7 @@ uint32_t exidy440_state::screen_update_exidy440(screen_device &screen, bitmap_in attotime time = screen.time_until_pos(beamy, beamx) - increment * 6; for (i = 0; i <= 12; i++) { - machine().scheduler().timer_set(time, timer_expired_delegate(FUNC(exidy440_state::beam_firq_callback),this), beamx); + m_beam_firq_timer->adjust(time, beamx); time += increment; } } diff --git a/src/mame/video/segag80r.cpp b/src/mame/video/segag80r.cpp index 908da5a53a1..cc831db8dab 100644 --- a/src/mame/video/segag80r.cpp +++ b/src/mame/video/segag80r.cpp @@ -39,7 +39,7 @@ void segag80r_state::vblank_latch_set() /* set a timer to mimic the 555 timer that drives the EDGINT signal */ /* the 555 is run in monostable mode with R=56000 and C=1000pF */ m_vblank_latch = 1; - timer_set(PERIOD_OF_555_MONOSTABLE(CAP_P(1000), RES_K(56)), TIMER_VBLANK_LATCH_CLEAR); + m_vblank_latch_clear_timer->adjust(PERIOD_OF_555_MONOSTABLE(CAP_P(1000), RES_K(56))); /* latch the current flip state at the same time */ m_video_flip = m_video_control & 1;