diff --git a/src/devices/bus/a2bus/a2mcms.cpp b/src/devices/bus/a2bus/a2mcms.cpp index 1ef164aff4196..4bc0316668384 100644 --- a/src/devices/bus/a2bus/a2mcms.cpp +++ b/src/devices/bus/a2bus/a2mcms.cpp @@ -238,7 +238,7 @@ void mcms_device::device_reset() m_enabled = false; } -void mcms_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void mcms_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { if (tid == 0) { diff --git a/src/devices/bus/a2bus/a2mcms.h b/src/devices/bus/a2bus/a2mcms.h index 487c6ddb7a79d..77c00024e99a0 100644 --- a/src/devices/bus/a2bus/a2mcms.h +++ b/src/devices/bus/a2bus/a2mcms.h @@ -40,7 +40,7 @@ class mcms_device : public device_t, public device_sound_interface // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/devices/bus/a2bus/a2parprn.cpp b/src/devices/bus/a2bus/a2parprn.cpp index c1ec975d1fbcf..b687f126f3552 100644 --- a/src/devices/bus/a2bus/a2parprn.cpp +++ b/src/devices/bus/a2bus/a2parprn.cpp @@ -179,7 +179,7 @@ ioport_constructor a2bus_parprn_device::device_input_ports() const void a2bus_parprn_device::device_start() { - m_strobe_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(a2bus_parprn_device::update_strobe), this)); + m_strobe_timer = timer_alloc(*this, FUNC(a2bus_parprn_device::update_strobe)); save_item(NAME(m_next_strobe)); save_item(NAME(m_ack_latch)); diff --git a/src/devices/bus/a2bus/a2pic.cpp b/src/devices/bus/a2bus/a2pic.cpp index 6833e1f6d63f3..b4890a67423fd 100644 --- a/src/devices/bus/a2bus/a2pic.cpp +++ b/src/devices/bus/a2bus/a2pic.cpp @@ -67,7 +67,6 @@ a2bus_pic_device::a2bus_pic_device(machine_config const &mconfig, char const *ta m_input_sw1(*this, "SW1"), m_input_x(*this, "X"), m_prom(*this, "prom"), - m_strobe_timer(nullptr), m_firmware_base(0x0000U), m_data_latch(0x00U), m_autostrobe_disable(0U), @@ -88,7 +87,7 @@ a2bus_pic_device::a2bus_pic_device(machine_config const &mconfig, char const *ta INPUT_CHANGED_MEMBER(a2bus_pic_device::sw1_strobe) { - m_printer_conn->write_strobe(BIT(m_input_sw1->read(), 3) ^ (m_strobe_timer->enabled() ? 0U : 1U)); + m_printer_conn->write_strobe(BIT(m_input_sw1->read(), 3) ^ (m_strobe_timer.enabled() ? 0U : 1U)); } @@ -181,21 +180,19 @@ void a2bus_pic_device::write_c0nx(u8 offset, u8 data) { // latch output data and start strobe if autostrobe is enabled LOG("Latch data %02X\n", data); - machine().scheduler().synchronize( - timer_expired_delegate(FUNC(a2bus_pic_device::data_write), this), - unsigned(data) | (1 << 8) | ((m_autostrobe_disable ? 0 : 1) << 9)); + m_data_write.synchronize(unsigned(data) | (1 << 8) | ((m_autostrobe_disable ? 0 : 1) << 9)); } else { // just start strobe if autostrobe is enabled LOG("Output disabled, not latching data\n"); if (!m_autostrobe_disable) - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_pic_device::data_write), this), 1 << 9); + m_data_write.synchronize(1 << 9); } break; case 2U: - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_pic_device::data_write), this), 1 << 9); + m_data_write.synchronize(1 << 9); break; case 5U: @@ -276,7 +273,12 @@ ioport_constructor a2bus_pic_device::device_input_ports() const void a2bus_pic_device::device_start() { - m_strobe_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(a2bus_pic_device::release_strobe), this)); + m_strobe_timer.init(*this, FUNC(a2bus_pic_device::release_strobe)); + m_set_ack_in.init(*this, FUNC(a2bus_pic_device::set_ack_in)); + m_set_perror_in.init(*this, FUNC(a2bus_pic_device::set_perror_in)); + m_set_select_in.init(*this, FUNC(a2bus_pic_device::set_select_in)); + m_set_fault_in.init(*this, FUNC(a2bus_pic_device::set_fault_in)); + m_data_write.init(*this, FUNC(a2bus_pic_device::data_write)); m_firmware_base = 0x0100U; m_data_latch = 0xffU; @@ -306,7 +308,7 @@ void a2bus_pic_device::device_reset() m_printer_out->write(0x00U); } - m_printer_conn->write_strobe(BIT(sw1, 3) ^ (m_strobe_timer->enabled() ? 0U : 1U)); + m_printer_conn->write_strobe(BIT(sw1, 3) ^ (m_strobe_timer.enabled() ? 0U : 1U)); reset_mode(); } @@ -319,25 +321,25 @@ void a2bus_pic_device::device_reset() WRITE_LINE_MEMBER(a2bus_pic_device::ack_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_pic_device::set_ack_in), this), state ? 1 : 0); + m_set_ack_in.synchronize(state ? 1 : 0); } WRITE_LINE_MEMBER(a2bus_pic_device::perror_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_pic_device::set_perror_in), this), state ? 1 : 0); + m_set_perror_in.synchronize(state ? 1 : 0); } WRITE_LINE_MEMBER(a2bus_pic_device::select_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_pic_device::set_select_in), this), state ? 1 : 0); + m_set_select_in.synchronize(state ? 1 : 0); } WRITE_LINE_MEMBER(a2bus_pic_device::fault_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_pic_device::set_fault_in), this), state ? 1 : 0); + m_set_fault_in.synchronize(state ? 1 : 0); } @@ -419,7 +421,7 @@ void a2bus_pic_device::data_write(void *ptr, s32 param) ioport_value const sw1(m_input_sw1->read()); unsigned const cycles(15U - ((sw1 & 0x07U) << 1)); int const state(BIT(sw1, 3)); - if (!m_strobe_timer->enabled()) + if (!m_strobe_timer.enabled()) { LOG("Output /STROBE=%d for %u cycles\n", state, cycles); clear_ack_latch(); @@ -429,7 +431,7 @@ void a2bus_pic_device::data_write(void *ptr, s32 param) { LOG("Adjust /STROBE=%d remaining to %u cycles\n", state, cycles); } - m_strobe_timer->adjust(attotime::from_ticks(cycles * 7, clock())); + m_strobe_timer.adjust(attotime::from_ticks(cycles * 7, clock())); } } @@ -453,7 +455,7 @@ void a2bus_pic_device::reset_mode() void a2bus_pic_device::set_ack_latch() { - if (m_strobe_timer->enabled()) + if (m_strobe_timer.enabled()) { LOG("Active strobe prevents acknowledge latch from being set\n"); } diff --git a/src/devices/bus/a2bus/a2pic.h b/src/devices/bus/a2bus/a2pic.h index 80a0a247027b0..3e2ed9d9d4005 100644 --- a/src/devices/bus/a2bus/a2pic.h +++ b/src/devices/bus/a2bus/a2pic.h @@ -110,7 +110,12 @@ class a2bus_pic_device : public device_t, public device_a2bus_card_interface required_ioport m_input_sw1; required_ioport m_input_x; required_region_ptr m_prom; - emu_timer * m_strobe_timer; + persistent_timer m_strobe_timer; + transient_timer_factory m_set_ack_in; + transient_timer_factory m_set_perror_in; + transient_timer_factory m_set_select_in; + transient_timer_factory m_set_fault_in; + transient_timer_factory m_data_write; u16 m_firmware_base; // controlled by SW6 u8 m_data_latch; // 9B diff --git a/src/devices/bus/a2bus/agat840k_hle.cpp b/src/devices/bus/a2bus/agat840k_hle.cpp index 6d8cbc97d0a37..06b893d1b5974 100644 --- a/src/devices/bus/a2bus/agat840k_hle.cpp +++ b/src/devices/bus/a2bus/agat840k_hle.cpp @@ -226,7 +226,7 @@ void a2bus_agat840k_hle_device::device_reset() m_mxcs &= ~MXCSR_TR; } -void a2bus_agat840k_hle_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void a2bus_agat840k_hle_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/a2bus/agat840k_hle.h b/src/devices/bus/a2bus/agat840k_hle.h index f5aba6818dc15..a96e05a33493c 100644 --- a/src/devices/bus/a2bus/agat840k_hle.h +++ b/src/devices/bus/a2bus/agat840k_hle.h @@ -55,7 +55,7 @@ class a2bus_agat840k_hle_device: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/bus/a2bus/agat_fdc.cpp b/src/devices/bus/a2bus/agat_fdc.cpp index 6867b4ef6d51c..1ae3efad638fb 100644 --- a/src/devices/bus/a2bus/agat_fdc.cpp +++ b/src/devices/bus/a2bus/agat_fdc.cpp @@ -162,7 +162,7 @@ void a2bus_agat_fdc_device::device_reset() m_timer_lss->adjust(attotime::from_msec(10), 0, attotime::from_msec(10)); } -void a2bus_agat_fdc_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void a2bus_agat_fdc_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/a2bus/agat_fdc.h b/src/devices/bus/a2bus/agat_fdc.h index b2f0e72adff0c..2215fcdd6b14d 100644 --- a/src/devices/bus/a2bus/agat_fdc.h +++ b/src/devices/bus/a2bus/agat_fdc.h @@ -49,7 +49,7 @@ class a2bus_agat_fdc_device: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/bus/a2bus/corvfdc02.cpp b/src/devices/bus/a2bus/corvfdc02.cpp index 0afb2de8aed56..3753cd9c9242c 100644 --- a/src/devices/bus/a2bus/corvfdc02.cpp +++ b/src/devices/bus/a2bus/corvfdc02.cpp @@ -118,7 +118,7 @@ void a2bus_corvfdc02_device::device_reset() m_timer->adjust(attotime::never); } -void a2bus_corvfdc02_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void a2bus_corvfdc02_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_fdc->tc_w(true); m_fdc->tc_w(false); diff --git a/src/devices/bus/a2bus/corvfdc02.h b/src/devices/bus/a2bus/corvfdc02.h index 6f196bda67b94..e20d7ea87b957 100644 --- a/src/devices/bus/a2bus/corvfdc02.h +++ b/src/devices/bus/a2bus/corvfdc02.h @@ -35,7 +35,7 @@ class a2bus_corvfdc02_device: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/bus/a2bus/grappler.cpp b/src/devices/bus/a2bus/grappler.cpp index e842acb21a6ed..cf515504adf29 100644 --- a/src/devices/bus/a2bus/grappler.cpp +++ b/src/devices/bus/a2bus/grappler.cpp @@ -134,6 +134,10 @@ void a2bus_grappler_device_base::device_add_mconfig(machine_config &config) void a2bus_grappler_device_base::device_start() { + m_set_busy_in.init(*this, FUNC(a2bus_grappler_device_base::set_busy_in)); + m_set_pe_in.init(*this, FUNC(a2bus_grappler_device_base::set_pe_in)); + m_set_slct_in.init(*this, FUNC(a2bus_grappler_device_base::set_slct_in)); + save_item(NAME(m_rom_bank)); save_item(NAME(m_busy_in)); save_item(NAME(m_pe_in)); @@ -161,19 +165,19 @@ void a2bus_grappler_device_base::set_rom_bank(u16 rom_bank) WRITE_LINE_MEMBER(a2bus_grappler_device_base::busy_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device_base::set_busy_in), this), state ? 1 : 0); + m_set_busy_in.synchronize(state ? 1 : 0); } WRITE_LINE_MEMBER(a2bus_grappler_device_base::pe_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device_base::set_pe_in), this), state ? 1 : 0); + m_set_pe_in.synchronize(state ? 1 : 0); } WRITE_LINE_MEMBER(a2bus_grappler_device_base::slct_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device_base::set_slct_in), this), state ? 1 : 0); + m_set_slct_in.synchronize(state ? 1 : 0); } @@ -238,9 +242,9 @@ u8 a2bus_grappler_device::read_c0nx(u8 offset) if (!machine().side_effects_disabled()) { if (BIT(offset, 1)) // A1 - assert strobe - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device::set_strobe), this), 0); + m_set_strobe.synchronize(0); else if (BIT(offset, 2)) // A2 - release strobe - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device::set_strobe), this), 1); + m_set_strobe.synchronize(1); } if (BIT(offset, 0)) // A0 - printer status @@ -264,12 +268,12 @@ void a2bus_grappler_device::write_c0nx(u8 offset, u8 data) LOG("Write C0n%01X=%02X\n", offset, data); if (BIT(offset, 0)) // A0 - write data - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device::set_data), this), int(unsigned(data))); + m_set_data.synchronize(int(unsigned(data))); if (BIT(offset, 1)) // A1 - assert strobe - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device::set_strobe), this), 0); + m_set_strobe.synchronize(0); else if (BIT(offset, 2)) // A2 - release strobe - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device::set_strobe), this), 1); + m_set_strobe.synchronize(1); } @@ -308,6 +312,10 @@ void a2bus_grappler_device::device_start() { a2bus_grappler_device_base::device_start(); + m_set_data.init(*this, FUNC(a2bus_grappler_device::set_data)); + m_set_strobe.init(*this, FUNC(a2bus_grappler_device::set_strobe));; + m_set_ack_in.init(*this, FUNC(a2bus_grappler_device::set_ack_in));; + save_item(NAME(m_strobe)); save_item(NAME(m_ack_latch)); save_item(NAME(m_ack_in)); @@ -316,7 +324,7 @@ void a2bus_grappler_device::device_start() void a2bus_grappler_device::device_reset() { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device::set_strobe), this), 1); + m_set_strobe.synchronize(1); } @@ -327,7 +335,7 @@ void a2bus_grappler_device::device_reset() WRITE_LINE_MEMBER(a2bus_grappler_device::ack_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grappler_device::set_ack_in), this), state ? 1 : 0); + m_set_ack_in.synchronize(state ? 1 : 0); } @@ -418,6 +426,8 @@ void a2bus_grapplerplus_device_base::device_start() { a2bus_grappler_device_base::device_start(); + m_set_ack_in.init(*this, FUNC(a2bus_grapplerplus_device_base::set_ack_in)); + save_item(NAME(m_ack_latch)); save_item(NAME(m_ack_in)); } @@ -488,7 +498,7 @@ void a2bus_grapplerplus_device_base::write_cnxx(u8 offset, u8 data) WRITE_LINE_MEMBER(a2bus_grapplerplus_device_base::ack_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_grapplerplus_device_base::set_ack_in), this), state ? 1 : 0); + m_set_ack_in.synchronize(state ? 1 : 0); } @@ -780,6 +790,10 @@ void a2bus_buf_grapplerplus_device::device_start() m_ram = std::make_unique(0x10000); + m_set_buf_data.init(*this, FUNC(a2bus_buf_grapplerplus_device::set_buf_data)); + m_set_buf_ack_in.init(*this, FUNC(a2bus_buf_grapplerplus_device::set_buf_ack_in)); + m_clear_ibusy.init(*this, FUNC(a2bus_buf_grapplerplus_device::clear_ibusy)); + save_pointer(NAME(m_ram), 0x10000); save_item(NAME(m_ram_row)); save_item(NAME(m_ram_mask)); @@ -848,7 +862,7 @@ void a2bus_buf_grapplerplus_device::data_latched(u8 data) m_ibusy = 1U; // these signals cross executable device domains - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_buf_grapplerplus_device::set_buf_data), this), int(unsigned(data))); + m_set_buf_data.synchronize(int(unsigned(data))); m_mcu->set_input_line(MCS48_INPUT_IRQ, ASSERT_LINE); } @@ -860,7 +874,7 @@ void a2bus_buf_grapplerplus_device::data_latched(u8 data) DECLARE_WRITE_LINE_MEMBER(a2bus_buf_grapplerplus_device::buf_ack_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_buf_grapplerplus_device::set_buf_ack_in), this), state ? 1 : 0); + m_set_buf_ack_in.synchronize(state ? 1 : 0); } @@ -955,7 +969,7 @@ u8 a2bus_buf_grapplerplus_device::mcu_bus_r() { LOG("Read data latch %02X\n", m_data_latch); result &= m_data_latch; - machine().scheduler().synchronize(timer_expired_delegate(FUNC(a2bus_buf_grapplerplus_device::clear_ibusy), this)); + m_clear_ibusy.synchronize(); m_mcu->set_input_line(MCS48_INPUT_IRQ, CLEAR_LINE); ack_w(0); ack_w(1); diff --git a/src/devices/bus/a2bus/grappler.h b/src/devices/bus/a2bus/grappler.h index 8e3857414dad7..dc1b79387c9b4 100644 --- a/src/devices/bus/a2bus/grappler.h +++ b/src/devices/bus/a2bus/grappler.h @@ -99,6 +99,10 @@ class a2bus_grappler_device_base : public device_t, public device_a2bus_card_int u8 m_busy_in; // printer connector pin 21 (synchronised) u8 m_pe_in; // printer connector pin 23 (synchronised) u8 m_slct_in; // printer connector pin 25 (synchronised) + + transient_timer_factory m_set_busy_in; + transient_timer_factory m_set_pe_in; + transient_timer_factory m_set_slct_in; }; @@ -132,6 +136,10 @@ class a2bus_grappler_device : public a2bus_grappler_device_base u8 m_strobe; // U3 (pin 4) u8 m_ack_latch; // U3 (pin 13) u8 m_ack_in; // printer connector pin 19 (synchronised) + + transient_timer_factory m_set_data; + transient_timer_factory m_set_strobe; + transient_timer_factory m_set_ack_in; }; @@ -173,6 +181,8 @@ class a2bus_grapplerplus_device_base : public a2bus_grappler_device_base u8 m_ack_latch; // U2C (pin 9) u8 m_ack_in; // printer connector pin 19 (synchronised) + + transient_timer_factory m_set_ack_in; }; @@ -262,6 +272,10 @@ class a2bus_buf_grapplerplus_device : public a2bus_grapplerplus_device_base u8 m_ibusy; // U12 u8 m_buf_ack_latch; // U12 u8 m_buf_ack_in; // printer connector pin 19 (synchronised) + + transient_timer_factory m_set_buf_data; + transient_timer_factory m_set_buf_ack_in; + transient_timer_factory m_clear_ibusy; }; diff --git a/src/devices/bus/a2bus/transwarp.cpp b/src/devices/bus/a2bus/transwarp.cpp index 3c2c976c229da..cf3d078840fd0 100644 --- a/src/devices/bus/a2bus/transwarp.cpp +++ b/src/devices/bus/a2bus/transwarp.cpp @@ -187,7 +187,7 @@ void a2bus_transwarp_device::device_reset() } } -void a2bus_transwarp_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void a2bus_transwarp_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (m_bIn1MHzMode) { diff --git a/src/devices/bus/a2bus/transwarp.h b/src/devices/bus/a2bus/transwarp.h index 998a1807fcdd5..37afe3f221a8a 100644 --- a/src/devices/bus/a2bus/transwarp.h +++ b/src/devices/bus/a2bus/transwarp.h @@ -33,7 +33,7 @@ class a2bus_transwarp_device: virtual void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual const tiny_rom_entry *device_rom_region() const override; // overrides of standard a2bus slot functions diff --git a/src/devices/bus/a2bus/uniprint.cpp b/src/devices/bus/a2bus/uniprint.cpp index f98e2a44a45bb..54e154b2bd351 100644 --- a/src/devices/bus/a2bus/uniprint.cpp +++ b/src/devices/bus/a2bus/uniprint.cpp @@ -160,7 +160,7 @@ ioport_constructor a2bus_uniprint_device::device_input_ports() const void a2bus_uniprint_device::device_start() { - m_strobe_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(a2bus_uniprint_device::update_strobe), this)); + m_strobe_timer = timer_alloc(*this, FUNC(a2bus_uniprint_device::update_strobe)); m_next_strobe = 1U; diff --git a/src/devices/bus/a800/cassette.cpp b/src/devices/bus/a800/cassette.cpp index 6a409611bbbe8..ef985239bf66a 100644 --- a/src/devices/bus/a800/cassette.cpp +++ b/src/devices/bus/a800/cassette.cpp @@ -82,7 +82,7 @@ WRITE_LINE_MEMBER( a8sio_cassette_device::motor_w ) } } -void a8sio_cassette_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void a8sio_cassette_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/a800/cassette.h b/src/devices/bus/a800/cassette.h index 17c45a9880bac..68603d3f89650 100644 --- a/src/devices/bus/a800/cassette.h +++ b/src/devices/bus/a800/cassette.h @@ -36,7 +36,7 @@ class a8sio_cassette_device virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; required_device m_cassette; diff --git a/src/devices/bus/abckb/abc77.cpp b/src/devices/bus/abckb/abc77.cpp index 5d0760a58c37a..617bf20e09fa4 100644 --- a/src/devices/bus/abckb/abc77.cpp +++ b/src/devices/bus/abckb/abc77.cpp @@ -472,7 +472,7 @@ void abc77_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void abc77_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void abc77_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/abckb/abc77.h b/src/devices/bus/abckb/abc77.h index 1d79f374f90e5..63c7dff9df463 100644 --- a/src/devices/bus/abckb/abc77.h +++ b/src/devices/bus/abckb/abc77.h @@ -40,7 +40,7 @@ class abc77_device : public device_t, public abc_keyboard_interface // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/bus/abckb/abc800kb.cpp b/src/devices/bus/abckb/abc800kb.cpp index c69515eafbde4..e6a4a66e88344 100644 --- a/src/devices/bus/abckb/abc800kb.cpp +++ b/src/devices/bus/abckb/abc800kb.cpp @@ -362,7 +362,7 @@ void abc800_keyboard_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void abc800_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void abc800_keyboard_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { serial_clock(); } diff --git a/src/devices/bus/abckb/abc800kb.h b/src/devices/bus/abckb/abc800kb.h index f076beeb102bc..817623e66291b 100644 --- a/src/devices/bus/abckb/abc800kb.h +++ b/src/devices/bus/abckb/abc800kb.h @@ -38,7 +38,7 @@ class abc800_keyboard_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/bus/abckb/abc99.cpp b/src/devices/bus/abckb/abc99.cpp index 461bbaa0ffd65..db850380a579b 100644 --- a/src/devices/bus/abckb/abc99.cpp +++ b/src/devices/bus/abckb/abc99.cpp @@ -539,7 +539,7 @@ void abc99_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void abc99_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void abc99_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/abckb/abc99.h b/src/devices/bus/abckb/abc99.h index 8adb348d6c5e6..e96070ac1fd96 100644 --- a/src/devices/bus/abckb/abc99.h +++ b/src/devices/bus/abckb/abc99.h @@ -37,7 +37,7 @@ class abc99_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/bus/amiga/keyboard/mitsumi.cpp b/src/devices/bus/amiga/keyboard/mitsumi.cpp index 038d8bb72d7df..1e0218ab5e050 100644 --- a/src/devices/bus/amiga/keyboard/mitsumi.cpp +++ b/src/devices/bus/amiga/keyboard/mitsumi.cpp @@ -209,8 +209,8 @@ class mitsumi_watchdog_keyboard_base : public mitsumi_keyboard_base { mitsumi_keyboard_base::device_start(); - m_wd_timeout = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mitsumi_watchdog_keyboard_base::wd_timeout), this)); - m_wd_pulse = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mitsumi_watchdog_keyboard_base::wd_pulse), this)); + m_wd_timeout = timer_alloc(*this, FUNC(mitsumi_watchdog_keyboard_base::wd_timeout)); + m_wd_pulse = timer_alloc(*this, FUNC(mitsumi_watchdog_keyboard_base::wd_pulse)); m_pd7 = 0x01U; @@ -284,7 +284,7 @@ class a500_keyboard_base : public mitsumi_watchdog_keyboard_base { mitsumi_watchdog_keyboard_base::device_start(); - m_reset_pulse = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(a500_keyboard_base::reset_pulse), this)); + m_reset_pulse = timer_alloc(*this, FUNC(a500_keyboard_base::reset_pulse)); m_reset_active = 0U; @@ -344,7 +344,7 @@ class a600_keyboard_base : public mitsumi_keyboard_base { mitsumi_keyboard_base::device_start(); - m_reset_pulse = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(a600_keyboard_base::reset_pulse), this)); + m_reset_pulse = timer_alloc(*this, FUNC(a600_keyboard_base::reset_pulse)); m_reset_trigger = 0U; m_reset_active = 0U; diff --git a/src/devices/bus/astrocde/lightpen.cpp b/src/devices/bus/astrocde/lightpen.cpp index 07c5c7480ee54..d8e6e1cc0863a 100644 --- a/src/devices/bus/astrocde/lightpen.cpp +++ b/src/devices/bus/astrocde/lightpen.cpp @@ -42,7 +42,7 @@ void astrocade_lightpen_device::device_reset() m_retrigger = false; } -void astrocade_lightpen_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void astrocade_lightpen_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_TRIGGER) { diff --git a/src/devices/bus/astrocde/lightpen.h b/src/devices/bus/astrocde/lightpen.h index a0863d5d3e819..6b9e0c4ec9917 100644 --- a/src/devices/bus/astrocde/lightpen.h +++ b/src/devices/bus/astrocde/lightpen.h @@ -29,7 +29,7 @@ class astrocade_lightpen_device : public device_t, virtual void device_start() override; virtual void device_reset() override; virtual ioport_constructor device_input_ports() const override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; static const device_timer_id TIMER_TRIGGER = 0; diff --git a/src/devices/bus/ata/atahle.cpp b/src/devices/bus/ata/atahle.cpp index de38c9dd71eb8..a3606112e7706 100644 --- a/src/devices/bus/ata/atahle.cpp +++ b/src/devices/bus/ata/atahle.cpp @@ -150,7 +150,7 @@ void ata_hle_device::soft_reset() start_busy(DIAGNOSTIC_TIME, PARAM_DIAGNOSTIC); } -void ata_hle_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ata_hle_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/bus/ata/atahle.h b/src/devices/bus/ata/atahle.h index 176d45e8e2b83..f445beabdae89 100644 --- a/src/devices/bus/ata/atahle.h +++ b/src/devices/bus/ata/atahle.h @@ -35,7 +35,7 @@ class ata_hle_device : public device_t, public device_ata_interface virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void set_irq(int state); void set_dmarq(int state); diff --git a/src/devices/bus/bbc/1mhzbus/m5000.cpp b/src/devices/bus/bbc/1mhzbus/m5000.cpp index 1844de74a0d00..d1b14169f313a 100644 --- a/src/devices/bus/bbc/1mhzbus/m5000.cpp +++ b/src/devices/bus/bbc/1mhzbus/m5000.cpp @@ -303,7 +303,7 @@ void htmusic_device::device_reset() #define INVERT(c) (BIT(CTL(c), 4)) #define PAN(c) (CTL(c) & 0x0f) -void htmusic_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void htmusic_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // 4-bit channel select uint8_t channel = (m_counter >> 3) & 0x0f; diff --git a/src/devices/bus/bbc/1mhzbus/m5000.h b/src/devices/bus/bbc/1mhzbus/m5000.h index d2507ab4abe41..d7cbfc8d34397 100644 --- a/src/devices/bus/bbc/1mhzbus/m5000.h +++ b/src/devices/bus/bbc/1mhzbus/m5000.h @@ -41,7 +41,7 @@ class htmusic_device : public device_t, public device_sound_interface void ram_w(offs_t offset, uint8_t data) { m_wave_ram[offset & 0x7ff] = data; } - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; protected: // device-level overrides diff --git a/src/devices/bus/bbc/userport/pointer.cpp b/src/devices/bus/bbc/userport/pointer.cpp index d8272766d98b8..445f526a548d3 100644 --- a/src/devices/bus/bbc/userport/pointer.cpp +++ b/src/devices/bus/bbc/userport/pointer.cpp @@ -151,7 +151,7 @@ bbc_tracker_device::bbc_tracker_device(const machine_config &mconfig, const char void bbc_pointer_device::device_start() { - m_pointer_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bbc_pointer_device::pointer_poll), this)); + m_pointer_timer = timer_alloc(*this, FUNC(bbc_pointer_device::pointer_poll)); m_pointer_timer->adjust(attotime::zero, 0, attotime::from_hz(1400)); } diff --git a/src/devices/bus/c64/c128_partner.cpp b/src/devices/bus/c64/c128_partner.cpp index 808926d858387..21f24c54a7cf1 100644 --- a/src/devices/bus/c64/c128_partner.cpp +++ b/src/devices/bus/c64/c128_partner.cpp @@ -130,7 +130,7 @@ void c128_partner_cartridge_device::device_reset() // device_timer - //------------------------------------------------- -void c128_partner_cartridge_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void c128_partner_cartridge_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (m_ls74_cd) { diff --git a/src/devices/bus/c64/c128_partner.h b/src/devices/bus/c64/c128_partner.h index da9065311228d..854abe5896cc0 100644 --- a/src/devices/bus/c64/c128_partner.h +++ b/src/devices/bus/c64/c128_partner.h @@ -39,7 +39,7 @@ class c128_partner_cartridge_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_c64_expansion_card_interface overrides virtual uint8_t c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override; diff --git a/src/devices/bus/c64/epyx_fast_load.cpp b/src/devices/bus/c64/epyx_fast_load.cpp index 4dced91c76a6f..51d7e0930b81d 100644 --- a/src/devices/bus/c64/epyx_fast_load.cpp +++ b/src/devices/bus/c64/epyx_fast_load.cpp @@ -70,7 +70,7 @@ void c64_epyx_fast_load_cartridge_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void c64_epyx_fast_load_cartridge_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void c64_epyx_fast_load_cartridge_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_exrom = 1; } diff --git a/src/devices/bus/c64/epyx_fast_load.h b/src/devices/bus/c64/epyx_fast_load.h index 64d23f6febbb6..1c1c19d8f5afe 100644 --- a/src/devices/bus/c64/epyx_fast_load.h +++ b/src/devices/bus/c64/epyx_fast_load.h @@ -33,7 +33,7 @@ class c64_epyx_fast_load_cartridge_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_c64_expansion_card_interface overrides virtual uint8_t c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override; diff --git a/src/devices/bus/c64/super_explode.cpp b/src/devices/bus/c64/super_explode.cpp index 4ed2456bd2a80..2034eada78329 100644 --- a/src/devices/bus/c64/super_explode.cpp +++ b/src/devices/bus/c64/super_explode.cpp @@ -75,7 +75,7 @@ void c64_super_explode_cartridge_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void c64_super_explode_cartridge_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void c64_super_explode_cartridge_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_exrom = 1; } diff --git a/src/devices/bus/c64/super_explode.h b/src/devices/bus/c64/super_explode.h index ca3abdeebf558..cbe3c197c46e0 100644 --- a/src/devices/bus/c64/super_explode.h +++ b/src/devices/bus/c64/super_explode.h @@ -33,7 +33,7 @@ class c64_super_explode_cartridge_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_c64_expansion_card_interface overrides virtual uint8_t c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override; diff --git a/src/devices/bus/c64/vw64.cpp b/src/devices/bus/c64/vw64.cpp index bf4d584d40d79..2723fc6c27b3f 100644 --- a/src/devices/bus/c64/vw64.cpp +++ b/src/devices/bus/c64/vw64.cpp @@ -101,7 +101,7 @@ void c64_vizawrite_cartridge_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void c64_vizawrite_cartridge_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void c64_vizawrite_cartridge_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_game = 1; } diff --git a/src/devices/bus/c64/vw64.h b/src/devices/bus/c64/vw64.h index 64287c0c7852f..4ef4ee517fb74 100644 --- a/src/devices/bus/c64/vw64.h +++ b/src/devices/bus/c64/vw64.h @@ -33,7 +33,7 @@ class c64_vizawrite_cartridge_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_c64_expansion_card_interface overrides virtual uint8_t c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override; diff --git a/src/devices/bus/cbus/pc9801_86.cpp b/src/devices/bus/cbus/pc9801_86.cpp index 2b8b9c8d1af7b..1eca07b548881 100644 --- a/src/devices/bus/cbus/pc9801_86.cpp +++ b/src/devices/bus/cbus/pc9801_86.cpp @@ -309,7 +309,7 @@ uint8_t pc9801_86_device::queue_pop() return ret; } -void pc9801_86_device::device_timer(emu_timer& timer, device_timer_id id, int param, void* ptr) +void pc9801_86_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void* ptr) { int16_t lsample, rsample; diff --git a/src/devices/bus/cbus/pc9801_86.h b/src/devices/bus/cbus/pc9801_86.h index 21de4102f01fb..b7102bf7dfd7f 100644 --- a/src/devices/bus/cbus/pc9801_86.h +++ b/src/devices/bus/cbus/pc9801_86.h @@ -47,7 +47,7 @@ class pc9801_86_device : public pc9801_snd_device virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void pc9801_86_config(machine_config &config); required_device m_bus; diff --git a/src/devices/bus/centronics/epson_lx810l.cpp b/src/devices/bus/centronics/epson_lx810l.cpp index 8b1d862711d38..670b228e58ec1 100644 --- a/src/devices/bus/centronics/epson_lx810l.cpp +++ b/src/devices/bus/centronics/epson_lx810l.cpp @@ -349,7 +349,7 @@ void epson_lx810l_device::device_reset() // device_timer - device-specific timer //------------------------------------------------- -void epson_lx810l_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void epson_lx810l_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { case TIMER_CR: diff --git a/src/devices/bus/centronics/epson_lx810l.h b/src/devices/bus/centronics/epson_lx810l.h index 0e1c67df62421..d44f01204c630 100644 --- a/src/devices/bus/centronics/epson_lx810l.h +++ b/src/devices/bus/centronics/epson_lx810l.h @@ -56,7 +56,7 @@ class epson_lx810l_device : public device_t, public device_centronics_peripheral // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/bus/centronics/printer.cpp b/src/devices/bus/centronics/printer.cpp index 484e718d074d0..1e857d298219e 100644 --- a/src/devices/bus/centronics/printer.cpp +++ b/src/devices/bus/centronics/printer.cpp @@ -48,7 +48,7 @@ WRITE_LINE_MEMBER(centronics_printer_device::printer_online) output_perror(!state); } -void centronics_printer_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void centronics_printer_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/centronics/printer.h b/src/devices/bus/centronics/printer.h index eccfcb99d62e7..3a256358aee3f 100644 --- a/src/devices/bus/centronics/printer.h +++ b/src/devices/bus/centronics/printer.h @@ -33,7 +33,7 @@ class centronics_printer_device : public device_t, virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual bool supports_pin35_5v() override { return true; } private: diff --git a/src/devices/bus/coco/cococart.cpp b/src/devices/bus/coco/cococart.cpp index 28e97457114a9..e6f1913913fec 100644 --- a/src/devices/bus/coco/cococart.cpp +++ b/src/devices/bus/coco/cococart.cpp @@ -168,7 +168,7 @@ void cococart_slot_device::device_start() // device_timer - handle timer callbacks //------------------------------------------------- -void cococart_slot_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cococart_slot_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/bus/coco/cococart.h b/src/devices/bus/coco/cococart.h index d2e33085956d9..d3b6a73e173cc 100644 --- a/src/devices/bus/coco/cococart.h +++ b/src/devices/bus/coco/cococart.h @@ -69,7 +69,7 @@ class cococart_slot_device final : public device_t, // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // image-level overrides virtual image_init_result call_load() override; diff --git a/src/devices/bus/compucolor/floppy.cpp b/src/devices/bus/compucolor/floppy.cpp index 166cc2d5bbb77..d6af887f5ccce 100644 --- a/src/devices/bus/compucolor/floppy.cpp +++ b/src/devices/bus/compucolor/floppy.cpp @@ -141,7 +141,7 @@ void compucolor_floppy_device::device_start() // device_timer - handle timer events //------------------------------------------------- -void compucolor_floppy_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void compucolor_floppy_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (!m_sel && !m_rw) { diff --git a/src/devices/bus/compucolor/floppy.h b/src/devices/bus/compucolor/floppy.h index d2efe54ef8020..96f1bc0ce3408 100644 --- a/src/devices/bus/compucolor/floppy.h +++ b/src/devices/bus/compucolor/floppy.h @@ -75,7 +75,7 @@ class compucolor_floppy_device : public device_t, public device_compucolor_flopp protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/dmv/k210.cpp b/src/devices/bus/dmv/k210.cpp index 3ab9209d87769..728d10b47b17e 100644 --- a/src/devices/bus/dmv/k210.cpp +++ b/src/devices/bus/dmv/k210.cpp @@ -68,7 +68,7 @@ void dmv_k210_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void dmv_k210_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void dmv_k210_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { m_centronics->write_strobe(CLEAR_LINE); } diff --git a/src/devices/bus/dmv/k210.h b/src/devices/bus/dmv/k210.h index 1755ee1a9f5c9..0cfd96af81d10 100644 --- a/src/devices/bus/dmv/k210.h +++ b/src/devices/bus/dmv/k210.h @@ -28,7 +28,7 @@ class dmv_k210_device : // device-level overrides virtual void device_start() override; virtual void device_reset() override; - void device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/econet/e01.cpp b/src/devices/bus/econet/e01.cpp index d5b53c3144060..09d1b5aefba82 100644 --- a/src/devices/bus/econet/e01.cpp +++ b/src/devices/bus/econet/e01.cpp @@ -454,7 +454,7 @@ void econet_e01_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void econet_e01_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void econet_e01_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (m_clk_en) { diff --git a/src/devices/bus/econet/e01.h b/src/devices/bus/econet/e01.h index efb4b548177da..dc501e75a7b27 100644 --- a/src/devices/bus/econet/e01.h +++ b/src/devices/bus/econet/e01.h @@ -44,7 +44,7 @@ class econet_e01_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/bus/epson_sio/pf10.cpp b/src/devices/bus/epson_sio/pf10.cpp index 418971e47d172..2cfe45eedc865 100644 --- a/src/devices/bus/epson_sio/pf10.cpp +++ b/src/devices/bus/epson_sio/pf10.cpp @@ -125,7 +125,7 @@ void epson_pf10_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void epson_pf10_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void epson_pf10_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/epson_sio/pf10.h b/src/devices/bus/epson_sio/pf10.h index e85c033099f37..3685cb8f5212a 100644 --- a/src/devices/bus/epson_sio/pf10.h +++ b/src/devices/bus/epson_sio/pf10.h @@ -34,7 +34,7 @@ class epson_pf10_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/bus/epson_sio/tf20.cpp b/src/devices/bus/epson_sio/tf20.cpp index 955763555ff7b..133ec566abc32 100644 --- a/src/devices/bus/epson_sio/tf20.cpp +++ b/src/devices/bus/epson_sio/tf20.cpp @@ -178,7 +178,7 @@ void epson_tf20_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void epson_tf20_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void epson_tf20_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/epson_sio/tf20.h b/src/devices/bus/epson_sio/tf20.h index 6ce05bb215637..81d5f8fb92871 100644 --- a/src/devices/bus/epson_sio/tf20.h +++ b/src/devices/bus/epson_sio/tf20.h @@ -36,7 +36,7 @@ class epson_tf20_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/bus/gio64/newport.cpp b/src/devices/bus/gio64/newport.cpp index e017708a2c2ca..6c4141b47297e 100644 --- a/src/devices/bus/gio64/newport.cpp +++ b/src/devices/bus/gio64/newport.cpp @@ -1282,7 +1282,7 @@ void newport_base_device::stop_logging() } #endif -void newport_base_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void newport_base_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == DCB_TIMEOUT) { diff --git a/src/devices/bus/gio64/newport.h b/src/devices/bus/gio64/newport.h index cd894510e05da..a6edc63da5e10 100644 --- a/src/devices/bus/gio64/newport.h +++ b/src/devices/bus/gio64/newport.h @@ -311,7 +311,7 @@ class newport_base_device : public device_t protected: // device_t overrides - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; diff --git a/src/devices/bus/hp9845_io/98035.cpp b/src/devices/bus/hp9845_io/98035.cpp index c4516bdbc37b0..21b47c0b3c686 100644 --- a/src/devices/bus/hp9845_io/98035.cpp +++ b/src/devices/bus/hp9845_io/98035.cpp @@ -207,7 +207,7 @@ void hp98035_io_card_device::device_reset() half_init(); } -void hp98035_io_card_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hp98035_io_card_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == MSEC_TMR_ID) { // On real hw there's a full 4-bit decimal counter, but only the LSB is used to diff --git a/src/devices/bus/hp9845_io/98035.h b/src/devices/bus/hp9845_io/98035.h index 0d057f6ef533e..3ecc3f1cf2cbe 100644 --- a/src/devices/bus/hp9845_io/98035.h +++ b/src/devices/bus/hp9845_io/98035.h @@ -27,7 +27,7 @@ class hp98035_io_card_device : public device_t, public device_hp9845_io_interfac protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device-level overrides virtual ioport_constructor device_input_ports() const override; diff --git a/src/devices/bus/hp9845_io/98046.cpp b/src/devices/bus/hp9845_io/98046.cpp index 8b7e601f0f42a..aa54fae8ca766 100644 --- a/src/devices/bus/hp9845_io/98046.cpp +++ b/src/devices/bus/hp9845_io/98046.cpp @@ -237,6 +237,8 @@ const tiny_rom_entry *hp98046_io_card_device::device_rom_region() const void hp98046_io_card_device::device_start() { m_ram = std::make_unique(1024); + m_sync_rx_im_w.init(*this, FUNC(hp98046_io_card_device::sync_rx_im_w)); + m_sync_tx_im_w.init(*this, FUNC(hp98046_io_card_device::sync_tx_im_w)); save_pointer(NAME(m_ram) , 1024); } @@ -495,14 +497,14 @@ WRITE_LINE_MEMBER(hp98046_io_card_device::rs232_cts_w) WRITE_LINE_MEMBER(hp98046_io_card_device::rs232_rxc_w) { if (!m_loopback) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(hp98046_io_card_device::sync_rx_im_w) , this) , state); + m_sync_rx_im_w.synchronize(state); } } WRITE_LINE_MEMBER(hp98046_io_card_device::rs232_txc_w) { if (!m_loopback) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(hp98046_io_card_device::sync_tx_im_w) , this) , state); + m_sync_tx_im_w.synchronize(state); } } @@ -636,7 +638,7 @@ WRITE_LINE_MEMBER(hp98046_io_card_device::rxc_w) m_last_rxc = bool(state); m_sio->rxca_w(m_last_rxc); if (m_loopback) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(hp98046_io_card_device::sync_tx_im_w) , this) , state); + m_sync_tx_im_w.synchronize(state); } } } @@ -649,7 +651,7 @@ WRITE_LINE_MEMBER(hp98046_io_card_device::txc_w) m_sio->txcb_w(m_last_txc); m_sio->rxcb_w(m_last_txc); if (m_loopback) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(hp98046_io_card_device::sync_rx_im_w) , this) , state); + m_sync_rx_im_w.synchronize(state); } } } diff --git a/src/devices/bus/hp9845_io/98046.h b/src/devices/bus/hp9845_io/98046.h index 90debbb8c03d7..f1dfcc94a02fb 100644 --- a/src/devices/bus/hp9845_io/98046.h +++ b/src/devices/bus/hp9845_io/98046.h @@ -99,7 +99,9 @@ class hp98046_io_card_device : public device_t, public device_hp9845_io_interfac DECLARE_WRITE_LINE_MEMBER(rxc_w); DECLARE_WRITE_LINE_MEMBER(txc_w); TIMER_CALLBACK_MEMBER(sync_rx_im_w); + transient_timer_factory m_sync_rx_im_w; TIMER_CALLBACK_MEMBER(sync_tx_im_w); + transient_timer_factory m_sync_tx_im_w; }; // device type definitions diff --git a/src/devices/bus/hp9845_io/hp9885.cpp b/src/devices/bus/hp9845_io/hp9885.cpp index ed782054504e1..e4f6ac42f68ea 100644 --- a/src/devices/bus/hp9845_io/hp9885.cpp +++ b/src/devices/bus/hp9845_io/hp9885.cpp @@ -359,7 +359,7 @@ void hp9885_device::device_reset() set_state(FSM_IDLE); } -void hp9885_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hp9885_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { LOG_TIMER("Tmr %.06f ID %d FSM %d HD %d\n" , machine().time().as_double() , id , m_fsm_state , m_head_state); @@ -521,7 +521,7 @@ void hp9885_device::device_timer(emu_timer &timer, device_timer_id id, int param set_state(FSM_IDLE); return; } - timer.adjust(m_pll.ctime - machine().time()); + m_bit_byte_timer->adjust(m_pll.ctime - machine().time()); } break; } diff --git a/src/devices/bus/hp9845_io/hp9885.h b/src/devices/bus/hp9845_io/hp9885.h index be3c56d3128f5..13bfb2179c4ea 100644 --- a/src/devices/bus/hp9845_io/hp9885.h +++ b/src/devices/bus/hp9845_io/hp9885.h @@ -38,7 +38,7 @@ class hp9885_device : public device_t, public device_hp98032_gpio_interface virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // FSM states diff --git a/src/devices/bus/ieee488/c2040fdc.cpp b/src/devices/bus/ieee488/c2040fdc.cpp index b2b292b65fdd6..61c2f7fe42539 100644 --- a/src/devices/bus/ieee488/c2040fdc.cpp +++ b/src/devices/bus/ieee488/c2040fdc.cpp @@ -152,7 +152,7 @@ void c2040_fdc_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void c2040_fdc_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void c2040_fdc_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { live_sync(); live_run(); diff --git a/src/devices/bus/ieee488/c2040fdc.h b/src/devices/bus/ieee488/c2040fdc.h index b2b78452b84e1..af63a569e3e2f 100644 --- a/src/devices/bus/ieee488/c2040fdc.h +++ b/src/devices/bus/ieee488/c2040fdc.h @@ -59,7 +59,7 @@ class c2040_fdc_device : public device_t virtual void device_start() override; virtual void device_clock_changed() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/bus/ieee488/c8050fdc.cpp b/src/devices/bus/ieee488/c8050fdc.cpp index 3d365ab2304de..3b0ab4957897d 100644 --- a/src/devices/bus/ieee488/c8050fdc.cpp +++ b/src/devices/bus/ieee488/c8050fdc.cpp @@ -144,7 +144,7 @@ void c8050_fdc_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void c8050_fdc_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void c8050_fdc_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { live_sync(); live_run(); diff --git a/src/devices/bus/ieee488/c8050fdc.h b/src/devices/bus/ieee488/c8050fdc.h index 601f9c98ea61f..e30ac9381de2a 100644 --- a/src/devices/bus/ieee488/c8050fdc.h +++ b/src/devices/bus/ieee488/c8050fdc.h @@ -60,7 +60,7 @@ class c8050_fdc_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/bus/ieee488/grid2102.cpp b/src/devices/bus/ieee488/grid2102.cpp index 37301a2d7747e..16a18b0b0b117 100644 --- a/src/devices/bus/ieee488/grid2102.cpp +++ b/src/devices/bus/ieee488/grid2102.cpp @@ -89,7 +89,7 @@ void grid210x_device::device_start() { m_delay_timer = timer_alloc(0); } -void grid210x_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { +void grid210x_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (m_floppy_loop_state == GRID210X_STATE_READING_DATA) { std::unique_ptr data(new uint8_t[io_size]); fseek(floppy_sector_number * 512, SEEK_SET); diff --git a/src/devices/bus/ieee488/grid2102.h b/src/devices/bus/ieee488/grid2102.h index 4bf4403ddc80b..87ac6b2d408a0 100644 --- a/src/devices/bus/ieee488/grid2102.h +++ b/src/devices/bus/ieee488/grid2102.h @@ -33,7 +33,7 @@ class grid210x_device : public device_t, protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_ieee488_interface overrides virtual void ieee488_eoi(int state) override; diff --git a/src/devices/bus/ieee488/hp9122c.cpp b/src/devices/bus/ieee488/hp9122c.cpp index 0c6788c213d48..27d0dc8ae105d 100644 --- a/src/devices/bus/ieee488/hp9122c.cpp +++ b/src/devices/bus/ieee488/hp9122c.cpp @@ -91,7 +91,7 @@ void hp9122c_device::device_start() save_item(NAME(m_ds0)); save_item(NAME(m_ds1)); - m_motor_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hp9122c_device::motor_timeout), this)); + m_motor_timer = timer_alloc(*this, FUNC(hp9122c_device::motor_timeout)); } TIMER_CALLBACK_MEMBER(hp9122c_device::motor_timeout) diff --git a/src/devices/bus/ieee488/hp9895.cpp b/src/devices/bus/ieee488/hp9895.cpp index ee23db8c6cb6d..3a8a428d12ab6 100644 --- a/src/devices/bus/ieee488/hp9895.cpp +++ b/src/devices/bus/ieee488/hp9895.cpp @@ -236,7 +236,7 @@ void hp9895_device::device_reset() m_half_bit_timer->reset(); } -void hp9895_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hp9895_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { case TIMEOUT_TMR_ID: @@ -315,7 +315,7 @@ void hp9895_device::device_timer(emu_timer &timer, device_timer_id id, int param LOG_0(("RD D=%02x/C=%02x\n" , m_data_sr , m_clock_sr)); } LOG_0(("next SDOK @ %.06f\n" , m_pll.ctime.as_double())); - timer.adjust(m_pll.ctime - sdok_time); + m_byte_timer->adjust(m_pll.ctime - sdok_time); } break; @@ -341,7 +341,7 @@ void hp9895_device::device_timer(emu_timer &timer, device_timer_id id, int param if (BIT(m_cntl_reg , REG_CNTL_WRITON_BIT)) { // When loopback is active, leave AM detection to byte timer as // byte boundary is already synchronized - timer.reset(); + m_half_bit_timer->reset(); return; } else { // Align with bit cell @@ -377,12 +377,12 @@ void hp9895_device::device_timer(emu_timer &timer, device_timer_id id, int param attotime adjust{m_pll.ctime - machine().time()}; LOG_0(("Got AM @ %.6f, ctime=%.6f, adj=%.6f, D=%02x/C=%02x\n" , machine().time().as_double() , m_pll.ctime.as_double() , adjust.as_double() , m_data_sr , m_clock_sr)); // Disable half-bit timer & enable byte timer - timer.reset(); + m_half_bit_timer->reset(); m_byte_timer->adjust(adjust); return; } } - timer.adjust(m_pll.ctime - machine().time()); + m_half_bit_timer->adjust(m_pll.ctime - machine().time()); } break; diff --git a/src/devices/bus/ieee488/hp9895.h b/src/devices/bus/ieee488/hp9895.h index 5385820760957..010467115a23e 100644 --- a/src/devices/bus/ieee488/hp9895.h +++ b/src/devices/bus/ieee488/hp9895.h @@ -29,7 +29,7 @@ class hp9895_device : public device_t, protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device-level overrides virtual ioport_constructor device_input_ports() const override; diff --git a/src/devices/bus/ieee488/remote488.cpp b/src/devices/bus/ieee488/remote488.cpp index e40e55765f0e3..aa4cb10ac6396 100644 --- a/src/devices/bus/ieee488/remote488.cpp +++ b/src/devices/bus/ieee488/remote488.cpp @@ -403,7 +403,7 @@ void remote488_device::process_input_msgs() } } -void remote488_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void remote488_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { case TMR_ID_POLL: diff --git a/src/devices/bus/ieee488/remote488.h b/src/devices/bus/ieee488/remote488.h index 312fc260f423d..f40f6e6061565 100644 --- a/src/devices/bus/ieee488/remote488.h +++ b/src/devices/bus/ieee488/remote488.h @@ -42,7 +42,7 @@ class remote488_device : public device_t, virtual void device_start() override; virtual void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // Position of signals in "S/R" msgs diff --git a/src/devices/bus/intellec4/tapereader.cpp b/src/devices/bus/intellec4/tapereader.cpp index 1f32815fbd5b6..a1e4458d4f85a 100644 --- a/src/devices/bus/intellec4/tapereader.cpp +++ b/src/devices/bus/intellec4/tapereader.cpp @@ -43,7 +43,7 @@ void imm4_90_device::call_unload() void imm4_90_device::device_start() { - m_step_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(imm4_90_device::step), this)); + m_step_timer = timer_alloc(*this, FUNC(imm4_90_device::step)); save_item(NAME(m_data)); save_item(NAME(m_ready)); diff --git a/src/devices/bus/interpro/keyboard/hle.cpp b/src/devices/bus/interpro/keyboard/hle.cpp index 66fa8e44a3095..1c92ab51f6d49 100644 --- a/src/devices/bus/interpro/keyboard/hle.cpp +++ b/src/devices/bus/interpro/keyboard/hle.cpp @@ -316,7 +316,7 @@ void hle_device_base::device_reset() start_processing(attotime::from_hz(1'200)); } -void hle_device_base::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hle_device_base::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/interpro/keyboard/hle.h b/src/devices/bus/interpro/keyboard/hle.h index 1f4e2066829e0..b010e180e2663 100644 --- a/src/devices/bus/interpro/keyboard/hle.h +++ b/src/devices/bus/interpro/keyboard/hle.h @@ -31,7 +31,7 @@ class hle_device_base virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_buffered_serial_interface overrides virtual void tra_callback() override; diff --git a/src/devices/bus/interpro/sr/gt.cpp b/src/devices/bus/interpro/sr/gt.cpp index 4005aca569fcf..7c94404d9ab8d 100644 --- a/src/devices/bus/interpro/sr/gt.cpp +++ b/src/devices/bus/interpro/sr/gt.cpp @@ -616,9 +616,9 @@ void gt_device_base::device_start() save_item(NAME(m_control)); // allocate timers - m_blit_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gt_device_base::blit), this)); - m_line_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gt_device_base::line), this)); - m_done_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gt_device_base::done), this)); + m_blit_timer = timer_alloc(*this, FUNC(gt_device_base::blit)); + m_line_timer = timer_alloc(*this, FUNC(gt_device_base::line)); + m_done_timer = timer_alloc(*this, FUNC(gt_device_base::done)); } void gt_device_base::control_w(offs_t offset, u32 data, u32 mem_mask) diff --git a/src/devices/bus/iq151/staper.cpp b/src/devices/bus/iq151/staper.cpp index f11b431f3439d..ec58508c0a85d 100644 --- a/src/devices/bus/iq151/staper.cpp +++ b/src/devices/bus/iq151/staper.cpp @@ -74,7 +74,7 @@ void iq151_staper_device::device_add_mconfig(machine_config &config) // device_timer - handler timer events //------------------------------------------------- -void iq151_staper_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void iq151_staper_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_PRINTER) m_ppi->pc2_w(0); diff --git a/src/devices/bus/iq151/staper.h b/src/devices/bus/iq151/staper.h index d9b078061b88c..4482191711304 100644 --- a/src/devices/bus/iq151/staper.h +++ b/src/devices/bus/iq151/staper.h @@ -26,7 +26,7 @@ class iq151_staper_device : protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/isa/gus.cpp b/src/devices/bus/isa/gus.cpp index 6f839321e0c07..7a7be2d3f15ca 100644 --- a/src/devices/bus/isa/gus.cpp +++ b/src/devices/bus/isa/gus.cpp @@ -204,7 +204,7 @@ void gf1_device::update_volume_ramps() } } -void gf1_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void gf1_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/bus/isa/gus.h b/src/devices/bus/isa/gus.h index be8dbbdbe2d34..765acf2911219 100644 --- a/src/devices/bus/isa/gus.h +++ b/src/devices/bus/isa/gus.h @@ -122,7 +122,7 @@ class gf1_device : void eop_w(int state); // optional information overrides - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; protected: diff --git a/src/devices/bus/isa/hdc.cpp b/src/devices/bus/isa/hdc.cpp index 3a890ebd93c7b..9d777c5ac1514 100644 --- a/src/devices/bus/isa/hdc.cpp +++ b/src/devices/bus/isa/hdc.cpp @@ -686,7 +686,7 @@ void xt_hdc_device::command() } } -void xt_hdc_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void xt_hdc_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { command(); } diff --git a/src/devices/bus/isa/hdc.h b/src/devices/bus/isa/hdc.h index 9df114bdcf639..b77f0e38e6718 100644 --- a/src/devices/bus/isa/hdc.h +++ b/src/devices/bus/isa/hdc.h @@ -52,7 +52,7 @@ class xt_hdc_device : // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; hard_disk_file *pc_hdc_file(int id); void pc_hdc_result(int set_error_info); int no_dma(void); diff --git a/src/devices/bus/isa/mc1502_fdc.cpp b/src/devices/bus/isa/mc1502_fdc.cpp index 85c8eda25aabe..a9229afa06546 100644 --- a/src/devices/bus/isa/mc1502_fdc.cpp +++ b/src/devices/bus/isa/mc1502_fdc.cpp @@ -217,7 +217,7 @@ void mc1502_fdc_device::device_start() m_isa->install_device(0x0048, 0x004b, read8sm_delegate(*m_fdc, FUNC(fd1793_device::read)), write8sm_delegate(*m_fdc, FUNC(fd1793_device::write))); m_isa->install_device(0x004c, 0x004f, read8sm_delegate(*this, FUNC(mc1502_fdc_device::mc1502_fdcv2_r)), write8sm_delegate(*this, FUNC(mc1502_fdc_device::mc1502_fdc_w))); - motor_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mc1502_fdc_device::motor_callback),this)); + motor_timer = timer_alloc(*this, FUNC(mc1502_fdc_device::motor_callback)); motor_on = 0; m_control = 0; } diff --git a/src/devices/bus/isa/omti8621.cpp b/src/devices/bus/isa/omti8621.cpp index f14d680829163..cc763388ba262 100644 --- a/src/devices/bus/isa/omti8621.cpp +++ b/src/devices/bus/isa/omti8621.cpp @@ -417,7 +417,7 @@ void omti8621_device::set_interrupt(enum line_state line_state) m_isa->irq14_w(line_state); } -void omti8621_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void omti8621_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { set_interrupt(ASSERT_LINE); } diff --git a/src/devices/bus/isa/omti8621.h b/src/devices/bus/isa/omti8621.h index 6aabeb8578006..082fcce233ca7 100644 --- a/src/devices/bus/isa/omti8621.h +++ b/src/devices/bus/isa/omti8621.h @@ -50,7 +50,7 @@ class omti8621_device : public device_t, public device_isa16_card_interface virtual void device_start() override; virtual void device_reset() override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; diff --git a/src/devices/bus/isa/s3virge.cpp b/src/devices/bus/isa/s3virge.cpp index 125e848bc81b3..90e51aa965b06 100644 --- a/src/devices/bus/isa/s3virge.cpp +++ b/src/devices/bus/isa/s3virge.cpp @@ -83,7 +83,7 @@ void s3virge_vga_device::device_start() save_item(vga.sequencer.data,"Sequencer Registers"); save_item(vga.attribute.data,"Attribute Registers"); - m_vblank_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vga_device::vblank_timer_cb),this)); + m_vblank_timer = timer_alloc(*this, FUNC(vga_device::vblank_timer_cb)); m_draw_timer = timer_alloc(TIMER_DRAW_STEP); memset(&s3, 0, sizeof(s3)); @@ -1427,7 +1427,7 @@ void s3virge_vga_device::bitblt_monosrc_step() s3virge.s3d.bitblt_step_count++; } -void s3virge_vga_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void s3virge_vga_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // TODO: S3D state timing if(id == TIMER_DRAW_STEP) diff --git a/src/devices/bus/isa/s3virge.h b/src/devices/bus/isa/s3virge.h index 1070850ddc3a1..c563100d20d78 100644 --- a/src/devices/bus/isa/s3virge.h +++ b/src/devices/bus/isa/s3virge.h @@ -184,7 +184,7 @@ class s3virge_vga_device : public s3_vga_device } s3d; } s3virge; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void write_pixel32(uint32_t base, uint16_t x, uint16_t y, uint32_t val) { if(s3virge.s3d.cmd_fifo[s3virge.s3d.cmd_fifo_current_ptr].reg[S3D_REG_COMMAND] & 0x00000002) diff --git a/src/devices/bus/isa/sb16.cpp b/src/devices/bus/isa/sb16.cpp index 5bfacf2c19693..8b25734a4b04c 100644 --- a/src/devices/bus/isa/sb16.cpp +++ b/src/devices/bus/isa/sb16.cpp @@ -742,7 +742,7 @@ void sb16_lle_device::device_reset() m_dma8_done = m_dma16_done = false; } -void sb16_lle_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void sb16_lle_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { uint16_t dacl = 0, dacr = 0, adcl = 0, adcr = 0; if(m_mode & 2) diff --git a/src/devices/bus/isa/sb16.h b/src/devices/bus/isa/sb16.h index 1ec0c722ca5ba..8fd85dd74ac0d 100644 --- a/src/devices/bus/isa/sb16.h +++ b/src/devices/bus/isa/sb16.h @@ -27,7 +27,7 @@ class sb16_lle_device : public device_t, public device_isa16_card_interface virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/bus/isa/sblaster.cpp b/src/devices/bus/isa/sblaster.cpp index 4e86448256a2c..1f574ec321b83 100644 --- a/src/devices/bus/isa/sblaster.cpp +++ b/src/devices/bus/isa/sblaster.cpp @@ -1559,7 +1559,7 @@ void sb_device::dack_w(int line, uint8_t data) } } -void sb_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void sb_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { if (tid) return; diff --git a/src/devices/bus/isa/sblaster.h b/src/devices/bus/isa/sblaster.h index 1c216f0a85939..86b09b6ce426a 100644 --- a/src/devices/bus/isa/sblaster.h +++ b/src/devices/bus/isa/sblaster.h @@ -112,7 +112,7 @@ class sb_device : virtual void device_reset() override; uint8_t dack_r(int line); void dack_w(int line, uint8_t data); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void drq16_w(int state) { } virtual void drq_w(int state) { } virtual void irq_w(int state, int source) { } diff --git a/src/devices/bus/isa/sc499.cpp b/src/devices/bus/isa/sc499.cpp index c313dd84148e7..913a19efcf154 100644 --- a/src/devices/bus/isa/sc499.cpp +++ b/src/devices/bus/isa/sc499.cpp @@ -489,7 +489,7 @@ void sc499_device::check_tape() timer_func - handle timer interrupts -------------------------------------------------*/ -void sc499_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sc499_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { LOG2(("timer_func param=%d status=%x", param, m_status)); diff --git a/src/devices/bus/isa/sc499.h b/src/devices/bus/isa/sc499.h index e62035ccb3aa2..de90756d5d516 100644 --- a/src/devices/bus/isa/sc499.h +++ b/src/devices/bus/isa/sc499.h @@ -75,7 +75,7 @@ class sc499_device: public device_t, public device_isa8_card_interface // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; diff --git a/src/devices/bus/isa/stereo_fx.cpp b/src/devices/bus/isa/stereo_fx.cpp index 5eeb17b0eeb8d..28f2cdf04ffcc 100644 --- a/src/devices/bus/isa/stereo_fx.cpp +++ b/src/devices/bus/isa/stereo_fx.cpp @@ -232,7 +232,7 @@ void stereo_fx_device::device_reset() m_t0 = CLEAR_LINE; } -void stereo_fx_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void stereo_fx_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { m_t0 = !m_t0; m_cpu->set_input_line(MCS51_T0_LINE, m_t0); diff --git a/src/devices/bus/isa/stereo_fx.h b/src/devices/bus/isa/stereo_fx.h index f61eedd4dd13f..87c30f46a896e 100644 --- a/src/devices/bus/isa/stereo_fx.h +++ b/src/devices/bus/isa/stereo_fx.h @@ -28,7 +28,7 @@ class stereo_fx_device : public device_t, virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/bus/isa/trident.cpp b/src/devices/bus/isa/trident.cpp index 5fc2d2d6d1905..e6fad769cf64b 100644 --- a/src/devices/bus/isa/trident.cpp +++ b/src/devices/bus/isa/trident.cpp @@ -181,7 +181,7 @@ void trident_vga_device::device_start() save_pointer(tri.accel_pattern,"Pattern Data", 0x80); save_pointer(tri.lutdac_reg,"LUTDAC registers", 0x100); - m_vblank_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vga_device::vblank_timer_cb),this)); + m_vblank_timer = timer_alloc(*this, FUNC(vga_device::vblank_timer_cb)); vga.svga_intf.seq_regcount = 0x0f; vga.svga_intf.crtc_regcount = 0x60; memset(&tri, 0, sizeof(tri)); diff --git a/src/devices/bus/kc/d004.cpp b/src/devices/bus/kc/d004.cpp index 183130b78c688..3cbb7357b2bcf 100644 --- a/src/devices/bus/kc/d004.cpp +++ b/src/devices/bus/kc/d004.cpp @@ -188,7 +188,7 @@ const tiny_rom_entry *kc_d004_device::device_rom_region() const // device_timer - handler timer events //------------------------------------------------- -void kc_d004_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void kc_d004_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/bus/kc/d004.h b/src/devices/bus/kc/d004.h index 83829250e99f7..32628270f8bd1 100644 --- a/src/devices/bus/kc/d004.h +++ b/src/devices/bus/kc/d004.h @@ -34,7 +34,7 @@ class kc_d004_device : // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/mackbd/keyboard.cpp b/src/devices/bus/mackbd/keyboard.cpp index 4f0de812c19a6..a0dfc405061d7 100644 --- a/src/devices/bus/mackbd/keyboard.cpp +++ b/src/devices/bus/mackbd/keyboard.cpp @@ -278,8 +278,8 @@ class peripheral_base : public device_t, public device_mac_keyboard_interface virtual void device_start() override { - m_watchdog_timeout = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(peripheral_base::watchdog_timeout), this)); - m_watchdog_output = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(peripheral_base::watchdog_output), this)); + m_watchdog_timeout = timer_alloc(*this, FUNC(peripheral_base::watchdog_timeout)); + m_watchdog_output = timer_alloc(*this, FUNC(peripheral_base::watchdog_output)); m_row_drive = make_bitmask(Rows); m_host_clock_out = 1U; @@ -287,6 +287,8 @@ class peripheral_base : public device_t, public device_mac_keyboard_interface m_host_data_in = 0x01U; m_watchdog_in = 1U; + m_update_host_data.init(*this, FUNC(peripheral_base::update_host_data)); + save_item(NAME(m_row_drive)); save_item(NAME(m_host_clock_out)); save_item(NAME(m_host_data_out)); @@ -296,7 +298,7 @@ class peripheral_base : public device_t, public device_mac_keyboard_interface virtual DECLARE_WRITE_LINE_MEMBER(data_w) override { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(peripheral_base::update_host_data), this), state); + m_update_host_data.synchronize(state); } DECLARE_WRITE_LINE_MEMBER(watchdog_w) @@ -351,6 +353,7 @@ class peripheral_base : public device_t, public device_mac_keyboard_interface m_host_data_in = param ? 0x01U : 0x00U; } } + transient_timer_factory m_update_host_data; TIMER_CALLBACK_MEMBER(watchdog_timeout) { @@ -443,6 +446,9 @@ class keypad_base : public peripheral_base<3> { peripheral_base<3>::device_start(); + m_update_keyboard_clock.init(*this, FUNC(keypad_base::update_keyboard_clock)); + m_update_keyboard_data.init(*this, FUNC(keypad_base::update_keyboard_data)); + m_keyboard_data_out = 0x01U; m_keyboard_clock_in = 0x01U; m_keyboard_data_in = 0x01U; @@ -466,23 +472,25 @@ class keypad_base : public peripheral_base<3> DECLARE_WRITE_LINE_MEMBER(keyboard_clock_in_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(keypad_base::update_keyboard_clock), this), state); + m_update_keyboard_clock.synchronize(state); } DECLARE_WRITE_LINE_MEMBER(keyboard_data_in_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(keypad_base::update_keyboard_data), this), state); + m_update_keyboard_data.synchronize(state); } TIMER_CALLBACK_MEMBER(update_keyboard_clock) { m_keyboard_clock_in = param ? 0x01U : 0x00U; } + transient_timer_factory m_update_keyboard_clock; TIMER_CALLBACK_MEMBER(update_keyboard_data) { m_keyboard_data_in = param ? 0x01U : 0x00U; } + transient_timer_factory m_update_keyboard_data; u8 m_keyboard_data_out = 0x01U; // data line drive to keyboard (idle high) u8 m_keyboard_clock_in = 0x01U; // clock line driver from keyboard (idle high) diff --git a/src/devices/bus/mackbd/pluskbd.cpp b/src/devices/bus/mackbd/pluskbd.cpp index 6cc707607f46e..93a7eb3b98e69 100644 --- a/src/devices/bus/mackbd/pluskbd.cpp +++ b/src/devices/bus/mackbd/pluskbd.cpp @@ -144,6 +144,8 @@ class keyboard_base : public device_t, public device_mac_keyboard_interface m_host_data_out = 1U; m_host_data_in = 0x01U; + m_update_host_data.init(*this, FUNC(keyboard_base::update_host_data)); + save_item(NAME(m_row_drive)); save_item(NAME(m_host_clock_out)); save_item(NAME(m_host_data_out)); @@ -152,7 +154,7 @@ class keyboard_base : public device_t, public device_mac_keyboard_interface virtual DECLARE_WRITE_LINE_MEMBER(data_w) override { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(keyboard_base::update_host_data), this), state); + m_update_host_data.synchronize(state); } private: @@ -207,6 +209,7 @@ class keyboard_base : public device_t, public device_mac_keyboard_interface m_host_data_in = param ? 0x01U : 0x00U; } } + transient_timer_factory m_update_host_data; required_device m_mpu; required_ioport_array<10> m_rows; diff --git a/src/devices/bus/macpds/pds_tpdfpd.cpp b/src/devices/bus/macpds/pds_tpdfpd.cpp index 2b0ca60c28102..34d170b0b8df0 100644 --- a/src/devices/bus/macpds/pds_tpdfpd.cpp +++ b/src/devices/bus/macpds/pds_tpdfpd.cpp @@ -135,7 +135,7 @@ void macpds_sedisplay_device::device_reset() } -void macpds_sedisplay_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void macpds_sedisplay_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { if (!m_vbl_disable) { diff --git a/src/devices/bus/macpds/pds_tpdfpd.h b/src/devices/bus/macpds/pds_tpdfpd.h index 8999c569d34d6..17d7ce245fe47 100644 --- a/src/devices/bus/macpds/pds_tpdfpd.h +++ b/src/devices/bus/macpds/pds_tpdfpd.h @@ -28,7 +28,7 @@ class macpds_sedisplay_device : // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/multibus/isbc202.cpp b/src/devices/bus/multibus/isbc202.cpp index 56c3871191d6b..5a7d74c099bba 100644 --- a/src/devices/bus/multibus/isbc202.cpp +++ b/src/devices/bus/multibus/isbc202.cpp @@ -445,7 +445,7 @@ void isbc202_device::device_reset() m_f_timer->reset(); } -void isbc202_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void isbc202_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { case TIMEOUT_TMR_ID: diff --git a/src/devices/bus/multibus/isbc202.h b/src/devices/bus/multibus/isbc202.h index ae5e6ce8fe97f..0c68f384d3477 100644 --- a/src/devices/bus/multibus/isbc202.h +++ b/src/devices/bus/multibus/isbc202.h @@ -43,7 +43,7 @@ class isbc202_device : public cpu_device, // device_t overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual const tiny_rom_entry *device_rom_region() const override; virtual void device_add_mconfig(machine_config &config) override; // device_execute_interface overrides diff --git a/src/devices/bus/nasbus/floppy.cpp b/src/devices/bus/nasbus/floppy.cpp index 3ada48aa19a7e..815ba725be8c6 100644 --- a/src/devices/bus/nasbus/floppy.cpp +++ b/src/devices/bus/nasbus/floppy.cpp @@ -80,7 +80,7 @@ nascom_fdc_device::nascom_fdc_device(const machine_config &mconfig, const char * void nascom_fdc_device::device_start() { // timer to turn off the drive motor line - m_motor = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(nascom_fdc_device::motor_off), this)); + m_motor = timer_alloc(*this, FUNC(nascom_fdc_device::motor_off)); save_item(NAME(m_select)); } diff --git a/src/devices/bus/nes/bandai.cpp b/src/devices/bus/nes/bandai.cpp index 1dd82f1747d28..35781734e6d99 100644 --- a/src/devices/bus/nes/bandai.cpp +++ b/src/devices/bus/nes/bandai.cpp @@ -285,7 +285,7 @@ void nes_oekakids_device::write_h(offs_t offset, uint8_t data) -------------------------------------------------*/ -void nes_fcg_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_fcg_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { diff --git a/src/devices/bus/nes/bandai.h b/src/devices/bus/nes/bandai.h index e7cb0a1d0cda9..af5fbf8ef23b9 100644 --- a/src/devices/bus/nes/bandai.h +++ b/src/devices/bus/nes/bandai.h @@ -45,7 +45,7 @@ class nes_fcg_device : public nes_nrom_device // construction/destruction nes_fcg_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void fcg_write(offs_t offset, uint8_t data); virtual void write_m(offs_t offset, uint8_t data) override; diff --git a/src/devices/bus/nes/bootleg.cpp b/src/devices/bus/nes/bootleg.cpp index 2758b6aff6c0d..5ea7cfb930219 100644 --- a/src/devices/bus/nes/bootleg.cpp +++ b/src/devices/bus/nes/bootleg.cpp @@ -865,7 +865,7 @@ void nes_sc127_device::write_h(offs_t offset, uint8_t data) -------------------------------------------------*/ -void nes_mbaby_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_mbaby_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { @@ -952,7 +952,7 @@ uint8_t nes_asn_device::read_m(offs_t offset) -------------------------------------------------*/ -void nes_smb3p_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_smb3p_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { @@ -1169,7 +1169,7 @@ void nes_lh31_device::write_h(offs_t offset, u8 data) // submapper 2 -------------------------------------------------*/ -void nes_smb2j_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_smb2j_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { @@ -1251,7 +1251,7 @@ uint8_t nes_smb2j_device::read_m(offs_t offset) -------------------------------------------------*/ -void nes_smb2ja_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_smb2ja_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { @@ -1308,7 +1308,7 @@ uint8_t nes_smb2ja_device::read_m(offs_t offset) -------------------------------------------------*/ -void nes_smb2jb_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_smb2jb_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { @@ -1415,7 +1415,7 @@ void nes_0353_device::write_h(offs_t offset, u8 data) -------------------------------------------------*/ -void nes_09034a_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_09034a_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { @@ -1480,7 +1480,7 @@ u8 nes_09034a_device::read_m(offs_t offset) -------------------------------------------------*/ -void nes_batmanfs_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_batmanfs_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { @@ -1825,7 +1825,7 @@ void nes_lh51_device::write_h(offs_t offset, u8 data) -------------------------------------------------*/ -void nes_lh53_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_lh53_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { @@ -2034,7 +2034,7 @@ void nes_mmalee_device::write_m(offs_t offset, uint8_t data) -------------------------------------------------*/ // timer always running and checking IRQ every 114 CPU cycles? -void nes_shuiguan_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_shuiguan_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { @@ -2145,7 +2145,7 @@ uint8_t nes_rt01_device::read_h(offs_t offset) -------------------------------------------------*/ -void nes_yung08_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_yung08_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { diff --git a/src/devices/bus/nes/bootleg.h b/src/devices/bus/nes/bootleg.h index a11092e1925a5..4ce952fc30582 100644 --- a/src/devices/bus/nes/bootleg.h +++ b/src/devices/bus/nes/bootleg.h @@ -66,7 +66,7 @@ class nes_mbaby_device : public nes_nrom_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: static constexpr device_timer_id TIMER_IRQ = 0; @@ -117,7 +117,7 @@ class nes_smb3p_device : public nes_nrom_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: u16 m_irq_count; @@ -181,7 +181,7 @@ class nes_smb2j_device : public nes_nrom_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint16_t m_irq_count; @@ -207,7 +207,7 @@ class nes_smb2ja_device : public nes_nrom_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint16_t m_irq_count; @@ -234,7 +234,7 @@ class nes_smb2jb_device : public nes_nrom_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint16_t m_irq_count; @@ -284,7 +284,7 @@ class nes_09034a_device : public nes_nrom_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: u16 m_irq_count; @@ -310,7 +310,7 @@ class nes_batmanfs_device : public nes_nrom_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: u16 m_irq_count; @@ -540,7 +540,7 @@ class nes_lh53_device : public nes_nrom_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint16_t m_irq_count; @@ -635,7 +635,7 @@ class nes_shuiguan_device : public nes_nrom_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint16_t m_irq_count; @@ -683,7 +683,7 @@ class nes_yung08_device : public nes_nrom_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void write_45(offs_t offset, u8 data); diff --git a/src/devices/bus/nes/cony.cpp b/src/devices/bus/nes/cony.cpp index dbe62aa52a30b..57e603e8b0f8a 100644 --- a/src/devices/bus/nes/cony.cpp +++ b/src/devices/bus/nes/cony.cpp @@ -156,7 +156,7 @@ void nes_yoko_device::pcb_reset() -------------------------------------------------*/ -void nes_cony_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_cony_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { diff --git a/src/devices/bus/nes/cony.h b/src/devices/bus/nes/cony.h index aa767a88c13cd..0ced09ee7d4d8 100644 --- a/src/devices/bus/nes/cony.h +++ b/src/devices/bus/nes/cony.h @@ -29,7 +29,7 @@ class nes_cony_device : public nes_nrom_device // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void set_prg(); virtual void set_chr(); diff --git a/src/devices/bus/nes/datach.cpp b/src/devices/bus/nes/datach.cpp index c767830bd5a75..a8973b733c0dd 100644 --- a/src/devices/bus/nes/datach.cpp +++ b/src/devices/bus/nes/datach.cpp @@ -381,7 +381,7 @@ void nes_datach_device::device_add_mconfig(machine_config &config) // device_timer - handler timer events //------------------------------------------------- -void nes_datach_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_datach_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { diff --git a/src/devices/bus/nes/datach.h b/src/devices/bus/nes/datach.h index df12bbe5a8665..7040ca55d7141 100644 --- a/src/devices/bus/nes/datach.h +++ b/src/devices/bus/nes/datach.h @@ -163,7 +163,7 @@ class nes_datach_device : public nes_lz93d50_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; uint8_t m_datach_latch; diff --git a/src/devices/bus/nes/disksys.cpp b/src/devices/bus/nes/disksys.cpp index 2eae29605361e..0dd7e85bfc917 100644 --- a/src/devices/bus/nes/disksys.cpp +++ b/src/devices/bus/nes/disksys.cpp @@ -380,7 +380,7 @@ uint8_t nes_disksys_device::read_ex(offs_t offset) // device_timer - handler timer events //------------------------------------------------- -void nes_disksys_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_disksys_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { diff --git a/src/devices/bus/nes/disksys.h b/src/devices/bus/nes/disksys.h index 1b5fed37e7727..fbe630520c955 100644 --- a/src/devices/bus/nes/disksys.h +++ b/src/devices/bus/nes/disksys.h @@ -33,7 +33,7 @@ class nes_disksys_device : public nes_nrom_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/bus/nes/event.cpp b/src/devices/bus/nes/event.cpp index a2205e3d0d437..e055ecacad7fe 100644 --- a/src/devices/bus/nes/event.cpp +++ b/src/devices/bus/nes/event.cpp @@ -228,7 +228,7 @@ ioport_constructor nes_event_device::device_input_ports() const // device_timer - handler timer events //------------------------------------------------- -void nes_event_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_event_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_EVENT) { diff --git a/src/devices/bus/nes/event.h b/src/devices/bus/nes/event.h index b4b67614b5096..850d06b774b57 100644 --- a/src/devices/bus/nes/event.h +++ b/src/devices/bus/nes/event.h @@ -25,7 +25,7 @@ class nes_event_device : public nes_sxrom_device // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void update_regs(int reg) override; virtual void set_prg() override; diff --git a/src/devices/bus/nes/irem.cpp b/src/devices/bus/nes/irem.cpp index c55cb58850607..e67704d21c71d 100644 --- a/src/devices/bus/nes/irem.cpp +++ b/src/devices/bus/nes/irem.cpp @@ -279,7 +279,7 @@ void nes_g101_device::write_h(offs_t offset, uint8_t data) -------------------------------------------------*/ -void nes_h3001_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_h3001_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { diff --git a/src/devices/bus/nes/irem.h b/src/devices/bus/nes/irem.h index 82fd0815c3855..2087f17231661 100644 --- a/src/devices/bus/nes/irem.h +++ b/src/devices/bus/nes/irem.h @@ -97,7 +97,7 @@ class nes_h3001_device : public nes_nrom_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; uint16_t m_irq_count, m_irq_count_latch; int m_irq_enable; diff --git a/src/devices/bus/nes/jaleco.cpp b/src/devices/bus/nes/jaleco.cpp index 740c3c799b84a..1ca7ba7fdaee5 100644 --- a/src/devices/bus/nes/jaleco.cpp +++ b/src/devices/bus/nes/jaleco.cpp @@ -424,7 +424,7 @@ void nes_jf19_adpcm_device::write_h(offs_t offset, uint8_t data) -------------------------------------------------*/ -void nes_ss88006_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_ss88006_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { diff --git a/src/devices/bus/nes/jaleco.h b/src/devices/bus/nes/jaleco.h index 53cc5716ce36f..86d33ee185cf7 100644 --- a/src/devices/bus/nes/jaleco.h +++ b/src/devices/bus/nes/jaleco.h @@ -164,7 +164,7 @@ class nes_ss88006_device : public nes_nrom_device // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; uint16_t m_irq_count, m_irq_count_latch; uint8_t m_irq_mode; diff --git a/src/devices/bus/nes/jy.cpp b/src/devices/bus/nes/jy.cpp index 8a54624cd5a84..13ed0efcb1b13 100644 --- a/src/devices/bus/nes/jy.cpp +++ b/src/devices/bus/nes/jy.cpp @@ -225,7 +225,7 @@ void nes_jy_typea_device::irq_clock(int mode, int blanked) } } -void nes_jy_typea_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_jy_typea_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { diff --git a/src/devices/bus/nes/jy.h b/src/devices/bus/nes/jy.h index d318bfae60ac7..9f6cdc9a2263f 100644 --- a/src/devices/bus/nes/jy.h +++ b/src/devices/bus/nes/jy.h @@ -32,7 +32,7 @@ class nes_jy_typea_device : public nes_nrom_device // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void irq_clock(int blanked, int mode); void update_banks(int reg); diff --git a/src/devices/bus/nes/kaiser.cpp b/src/devices/bus/nes/kaiser.cpp index 1c55db49171b5..8994641175414 100644 --- a/src/devices/bus/nes/kaiser.cpp +++ b/src/devices/bus/nes/kaiser.cpp @@ -491,7 +491,7 @@ uint8_t nes_ks7022_device::read_h(offs_t offset) -------------------------------------------------*/ -void nes_ks7032_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_ks7032_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { @@ -646,7 +646,7 @@ void nes_ks7016_device::write_h(offs_t offset, u8 data) -------------------------------------------------*/ -void nes_ks7017_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_ks7017_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { diff --git a/src/devices/bus/nes/kaiser.h b/src/devices/bus/nes/kaiser.h index f76c018175e76..21f0b6a6e66c7 100644 --- a/src/devices/bus/nes/kaiser.h +++ b/src/devices/bus/nes/kaiser.h @@ -86,7 +86,7 @@ class nes_ks7032_device : public nes_nrom_device // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void prg_update(); @@ -166,7 +166,7 @@ class nes_ks7017_device : public nes_nrom_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint8_t m_latch; diff --git a/src/devices/bus/nes/konami.cpp b/src/devices/bus/nes/konami.cpp index 2f77b85520572..96cb0d0bf73d5 100644 --- a/src/devices/bus/nes/konami.cpp +++ b/src/devices/bus/nes/konami.cpp @@ -355,7 +355,7 @@ void nes_konami_vrc2_device::write_h(offs_t offset, uint8_t data) -------------------------------------------------*/ -void nes_konami_vrc3_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_konami_vrc3_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { @@ -443,7 +443,7 @@ void nes_konami_vrc4_device::irq_tick() m_irq_count++; } -void nes_konami_vrc4_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_konami_vrc4_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { diff --git a/src/devices/bus/nes/konami.h b/src/devices/bus/nes/konami.h index 7f7e744893895..3fd674f3d46d7 100644 --- a/src/devices/bus/nes/konami.h +++ b/src/devices/bus/nes/konami.h @@ -70,7 +70,7 @@ class nes_konami_vrc3_device : public nes_nrom_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: static constexpr device_timer_id TIMER_IRQ = 0; @@ -103,7 +103,7 @@ class nes_konami_vrc4_device : public nes_nrom_device // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void set_prg(); uint8_t m_mmc_vrom_bank[8]; uint8_t m_latch, m_mmc_prg_bank; diff --git a/src/devices/bus/nes/legacy.cpp b/src/devices/bus/nes/legacy.cpp index a3ab937708239..2cfe71a000a6d 100644 --- a/src/devices/bus/nes/legacy.cpp +++ b/src/devices/bus/nes/legacy.cpp @@ -156,7 +156,7 @@ void nes_ffe3_device::write_h(offs_t offset, uint8_t data) -------------------------------------------------*/ -void nes_ffe4_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_ffe4_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { diff --git a/src/devices/bus/nes/legacy.h b/src/devices/bus/nes/legacy.h index 92722c0591ca5..2a3b08ebd5ffe 100644 --- a/src/devices/bus/nes/legacy.h +++ b/src/devices/bus/nes/legacy.h @@ -48,7 +48,7 @@ class nes_ffe4_device : public nes_nrom_device // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; uint16_t m_irq_count; int m_irq_enable; diff --git a/src/devices/bus/nes/mmc1.cpp b/src/devices/bus/nes/mmc1.cpp index 9a27c601b4cef..d1aab56cc2987 100644 --- a/src/devices/bus/nes/mmc1.cpp +++ b/src/devices/bus/nes/mmc1.cpp @@ -73,6 +73,8 @@ void nes_sxrom_device::device_start() save_item(NAME(m_count)); save_item(NAME(m_reg)); save_item(NAME(m_reg_write_enable)); + + m_resync_callback.init(*this, FUNC(nes_sxrom_device::resync_callback)); } void nes_sxrom_device::pcb_reset() @@ -235,7 +237,7 @@ void nes_sxrom_device::write_h(offs_t offset, uint8_t data) else { m_reg_write_enable = 0; - machine().scheduler().synchronize(timer_expired_delegate(FUNC(nes_sxrom_device::resync_callback),this)); + m_resync_callback.synchronize(); } if (data & 0x80) diff --git a/src/devices/bus/nes/mmc1.h b/src/devices/bus/nes/mmc1.h index c8ccb835d7671..2e4e90c4c66a8 100644 --- a/src/devices/bus/nes/mmc1.h +++ b/src/devices/bus/nes/mmc1.h @@ -29,6 +29,7 @@ class nes_sxrom_device : public nes_nrom_device virtual void device_start() override; TIMER_CALLBACK_MEMBER(resync_callback); + transient_timer_factory m_resync_callback; virtual void update_regs(int reg); // this is needed to simplify NES-EVENT pcb implementation, which handle differently some regs! virtual void set_prg(); diff --git a/src/devices/bus/nes/namcot.cpp b/src/devices/bus/nes/namcot.cpp index 21f49636727f2..7eb5ab9005830 100644 --- a/src/devices/bus/nes/namcot.cpp +++ b/src/devices/bus/nes/namcot.cpp @@ -412,7 +412,7 @@ void nes_namcot3425_device::write_h(offs_t offset, uint8_t data) -------------------------------------------------*/ -void nes_namcot340_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_namcot340_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { diff --git a/src/devices/bus/nes/namcot.h b/src/devices/bus/nes/namcot.h index 1dcf237fa90ec..2f1c057725111 100644 --- a/src/devices/bus/nes/namcot.h +++ b/src/devices/bus/nes/namcot.h @@ -100,7 +100,7 @@ class nes_namcot340_device : public nes_nrom_device // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; uint16_t m_irq_count; int m_irq_enable; diff --git a/src/devices/bus/nes/pirate.cpp b/src/devices/bus/nes/pirate.cpp index 81acd4dc55dce..c21ea9953c3f6 100644 --- a/src/devices/bus/nes/pirate.cpp +++ b/src/devices/bus/nes/pirate.cpp @@ -1154,7 +1154,7 @@ void nes_tf1201_device::write_h(offs_t offset, uint8_t data) -------------------------------------------------*/ -void nes_cityfight_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_cityfight_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { diff --git a/src/devices/bus/nes/pirate.h b/src/devices/bus/nes/pirate.h index b98dc8d8a8b26..a99aec8137e2b 100644 --- a/src/devices/bus/nes/pirate.h +++ b/src/devices/bus/nes/pirate.h @@ -326,7 +326,7 @@ class nes_cityfight_device : public nes_nrom_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: static constexpr device_timer_id TIMER_IRQ = 0; diff --git a/src/devices/bus/nes/sunsoft.cpp b/src/devices/bus/nes/sunsoft.cpp index 926b1933c91cb..cc4c71c5399a2 100644 --- a/src/devices/bus/nes/sunsoft.cpp +++ b/src/devices/bus/nes/sunsoft.cpp @@ -264,7 +264,7 @@ void nes_sunsoft_2_device::write_h(offs_t offset, uint8_t data) -------------------------------------------------*/ -void nes_sunsoft_3_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_sunsoft_3_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { @@ -457,7 +457,7 @@ uint8_t nes_sunsoft_4_device::read_m(offs_t offset) -------------------------------------------------*/ -void nes_sunsoft_fme7_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_sunsoft_fme7_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { diff --git a/src/devices/bus/nes/sunsoft.h b/src/devices/bus/nes/sunsoft.h index c02b94647cf9d..9649ac69bc3f4 100644 --- a/src/devices/bus/nes/sunsoft.h +++ b/src/devices/bus/nes/sunsoft.h @@ -60,7 +60,7 @@ class nes_sunsoft_3_device : public nes_nrom_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint16_t m_irq_count; int m_irq_enable, m_irq_toggle; @@ -116,7 +116,7 @@ class nes_sunsoft_fme7_device : public nes_nrom_device // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint16_t m_irq_count; diff --git a/src/devices/bus/nes/sunsoft_dcs.cpp b/src/devices/bus/nes/sunsoft_dcs.cpp index 04dc321971665..676a7a5c70b34 100644 --- a/src/devices/bus/nes/sunsoft_dcs.cpp +++ b/src/devices/bus/nes/sunsoft_dcs.cpp @@ -295,7 +295,7 @@ void nes_sunsoft_dcs_device::device_add_mconfig(machine_config &config) // device_timer - handler timer events //------------------------------------------------- -void nes_sunsoft_dcs_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_sunsoft_dcs_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_PROTECT) { diff --git a/src/devices/bus/nes/sunsoft_dcs.h b/src/devices/bus/nes/sunsoft_dcs.h index 87ca0bae5bdb2..e897da4f4c8de 100644 --- a/src/devices/bus/nes/sunsoft_dcs.h +++ b/src/devices/bus/nes/sunsoft_dcs.h @@ -145,7 +145,7 @@ class nes_sunsoft_dcs_device : public nes_sunsoft_4_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/nes/tengen.cpp b/src/devices/bus/nes/tengen.cpp index f6228685796ff..e4d4aeb764c05 100644 --- a/src/devices/bus/nes/tengen.cpp +++ b/src/devices/bus/nes/tengen.cpp @@ -181,7 +181,7 @@ inline void nes_tengen032_device::irq_clock(int blanked) // we use the HBLANK IRQ latch from PPU for the scanline based IRQ mode // and a timer for the cycle based IRQ mode, which both call irq_clock -void nes_tengen032_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_tengen032_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_IRQ) { diff --git a/src/devices/bus/nes/tengen.h b/src/devices/bus/nes/tengen.h index 6d651339f86cd..bd02a8fdad2bf 100644 --- a/src/devices/bus/nes/tengen.h +++ b/src/devices/bus/nes/tengen.h @@ -43,7 +43,7 @@ class nes_tengen032_device : public nes_nrom_device // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void chr_cb(int start, int bank, int source); diff --git a/src/devices/bus/nes_ctrl/bcbattle.cpp b/src/devices/bus/nes_ctrl/bcbattle.cpp index b8c4ed57e6d41..41a0e75075df0 100644 --- a/src/devices/bus/nes_ctrl/bcbattle.cpp +++ b/src/devices/bus/nes_ctrl/bcbattle.cpp @@ -33,7 +33,7 @@ void nes_bcbattle_device::device_add_mconfig(machine_config &config) // This part is the hacky replacement for the real Barcode unit [shared with SNES implementation]: // code periodically checks whether a new code has been scanned and it moves it to the // m_current_barcode array -void nes_bcbattle_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_bcbattle_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_BATTLER) { diff --git a/src/devices/bus/nes_ctrl/bcbattle.h b/src/devices/bus/nes_ctrl/bcbattle.h index 9fc75b0f9fc6c..af7aa8e2d1041 100644 --- a/src/devices/bus/nes_ctrl/bcbattle.h +++ b/src/devices/bus/nes_ctrl/bcbattle.h @@ -34,7 +34,7 @@ class nes_bcbattle_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/nes_ctrl/miracle.cpp b/src/devices/bus/nes_ctrl/miracle.cpp index d9f445f58ef86..e5720f15d3312 100644 --- a/src/devices/bus/nes_ctrl/miracle.cpp +++ b/src/devices/bus/nes_ctrl/miracle.cpp @@ -34,7 +34,7 @@ void nes_miracle_device::device_add_mconfig(machine_config &config) // device_timer - handler timer events //------------------------------------------------- -void nes_miracle_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nes_miracle_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_STROBE_ON) { diff --git a/src/devices/bus/nes_ctrl/miracle.h b/src/devices/bus/nes_ctrl/miracle.h index 16cc1c57cd116..83837bff5ef1b 100644 --- a/src/devices/bus/nes_ctrl/miracle.h +++ b/src/devices/bus/nes_ctrl/miracle.h @@ -41,7 +41,7 @@ class nes_miracle_device : public device_t, virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; private: diff --git a/src/devices/bus/nubus/nubus_48gc.cpp b/src/devices/bus/nubus/nubus_48gc.cpp index 58875e591b672..c8689cab6bd6c 100644 --- a/src/devices/bus/nubus/nubus_48gc.cpp +++ b/src/devices/bus/nubus/nubus_48gc.cpp @@ -143,7 +143,7 @@ void jmfb_device::device_reset() ***************************************************************************/ -void jmfb_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void jmfb_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { if (!m_vbl_disable) { diff --git a/src/devices/bus/nubus/nubus_48gc.h b/src/devices/bus/nubus/nubus_48gc.h index f18df117f8408..14cfe3f8e42cd 100644 --- a/src/devices/bus/nubus/nubus_48gc.h +++ b/src/devices/bus/nubus/nubus_48gc.h @@ -25,7 +25,7 @@ class jmfb_device : // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/nubus/nubus_m2hires.cpp b/src/devices/bus/nubus/nubus_m2hires.cpp index e913c0cb0cb6d..01e0c2872129d 100644 --- a/src/devices/bus/nubus/nubus_m2hires.cpp +++ b/src/devices/bus/nubus/nubus_m2hires.cpp @@ -119,7 +119,7 @@ void nubus_m2hires_device::device_reset() } -void nubus_m2hires_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void nubus_m2hires_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { if (!m_vbl_disable) { diff --git a/src/devices/bus/nubus/nubus_m2hires.h b/src/devices/bus/nubus/nubus_m2hires.h index 0837634a9ae4f..606612f6dc3b3 100644 --- a/src/devices/bus/nubus/nubus_m2hires.h +++ b/src/devices/bus/nubus/nubus_m2hires.h @@ -28,7 +28,7 @@ class nubus_m2hires_device : // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/nubus/nubus_m2video.cpp b/src/devices/bus/nubus/nubus_m2video.cpp index 60728d7dd157d..63596849d5ea2 100644 --- a/src/devices/bus/nubus/nubus_m2video.cpp +++ b/src/devices/bus/nubus/nubus_m2video.cpp @@ -121,7 +121,7 @@ void nubus_m2video_device::device_reset() } -void nubus_m2video_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void nubus_m2video_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { if (!m_vbl_disable) { diff --git a/src/devices/bus/nubus/nubus_m2video.h b/src/devices/bus/nubus/nubus_m2video.h index 9eab1258734c6..d30e868c6133c 100644 --- a/src/devices/bus/nubus/nubus_m2video.h +++ b/src/devices/bus/nubus/nubus_m2video.h @@ -28,7 +28,7 @@ class nubus_m2video_device : // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/nubus/nubus_radiustpd.cpp b/src/devices/bus/nubus/nubus_radiustpd.cpp index 89518f0d22333..8ed79d515ebb3 100644 --- a/src/devices/bus/nubus/nubus_radiustpd.cpp +++ b/src/devices/bus/nubus/nubus_radiustpd.cpp @@ -121,7 +121,7 @@ void nubus_radiustpd_device::device_reset() } -void nubus_radiustpd_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void nubus_radiustpd_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { if (!m_vbl_disable) { diff --git a/src/devices/bus/nubus/nubus_radiustpd.h b/src/devices/bus/nubus/nubus_radiustpd.h index 97ddb25f29a74..2fa0260d2c443 100644 --- a/src/devices/bus/nubus/nubus_radiustpd.h +++ b/src/devices/bus/nubus/nubus_radiustpd.h @@ -28,7 +28,7 @@ class nubus_radiustpd_device : // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/nubus/nubus_spec8.cpp b/src/devices/bus/nubus/nubus_spec8.cpp index 6ca1f9f4489b5..87ff6f537442b 100644 --- a/src/devices/bus/nubus/nubus_spec8.cpp +++ b/src/devices/bus/nubus/nubus_spec8.cpp @@ -125,7 +125,7 @@ void nubus_spec8s3_device::device_reset() } -void nubus_spec8s3_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void nubus_spec8s3_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { if (!m_vbl_disable) { diff --git a/src/devices/bus/nubus/nubus_spec8.h b/src/devices/bus/nubus/nubus_spec8.h index a7085c60f052e..f14ea9d773ec7 100644 --- a/src/devices/bus/nubus/nubus_spec8.h +++ b/src/devices/bus/nubus/nubus_spec8.h @@ -32,7 +32,7 @@ class nubus_spec8s3_device : // optional information overrides virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint32_t spec8s3_r(offs_t offset, uint32_t mem_mask = ~0); diff --git a/src/devices/bus/nubus/nubus_specpdq.cpp b/src/devices/bus/nubus/nubus_specpdq.cpp index c00938c6102c8..7c80032dca3c8 100644 --- a/src/devices/bus/nubus/nubus_specpdq.cpp +++ b/src/devices/bus/nubus/nubus_specpdq.cpp @@ -139,7 +139,7 @@ void nubus_specpdq_device::device_reset() } -void nubus_specpdq_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void nubus_specpdq_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { if (!m_vbl_disable) { diff --git a/src/devices/bus/nubus/nubus_specpdq.h b/src/devices/bus/nubus/nubus_specpdq.h index 372e4beab0889..a45840040699e 100644 --- a/src/devices/bus/nubus/nubus_specpdq.h +++ b/src/devices/bus/nubus/nubus_specpdq.h @@ -33,7 +33,7 @@ class nubus_specpdq_device : // optional information overrides virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint32_t specpdq_r(offs_t offset, uint32_t mem_mask = ~0); diff --git a/src/devices/bus/nubus/nubus_wsportrait.cpp b/src/devices/bus/nubus/nubus_wsportrait.cpp index 9894e0d7906bc..9be96f482bc74 100644 --- a/src/devices/bus/nubus/nubus_wsportrait.cpp +++ b/src/devices/bus/nubus/nubus_wsportrait.cpp @@ -119,7 +119,7 @@ void nubus_wsportrait_device::device_reset() } -void nubus_wsportrait_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void nubus_wsportrait_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { if (!m_vbl_disable) { diff --git a/src/devices/bus/nubus/nubus_wsportrait.h b/src/devices/bus/nubus/nubus_wsportrait.h index e9f81b982bc9a..ba19af4ef0935 100644 --- a/src/devices/bus/nubus/nubus_wsportrait.h +++ b/src/devices/bus/nubus/nubus_wsportrait.h @@ -28,7 +28,7 @@ class nubus_wsportrait_device : // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/nubus/pds30_30hr.cpp b/src/devices/bus/nubus/pds30_30hr.cpp index dde2348abc601..0d7e728b78f5f 100644 --- a/src/devices/bus/nubus/pds30_30hr.cpp +++ b/src/devices/bus/nubus/pds30_30hr.cpp @@ -121,7 +121,7 @@ void nubus_xceed30hr_device::device_reset() } -void nubus_xceed30hr_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void nubus_xceed30hr_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { if (!m_vbl_disable) { diff --git a/src/devices/bus/nubus/pds30_30hr.h b/src/devices/bus/nubus/pds30_30hr.h index 331f8898df433..0806662c62720 100644 --- a/src/devices/bus/nubus/pds30_30hr.h +++ b/src/devices/bus/nubus/pds30_30hr.h @@ -28,7 +28,7 @@ class nubus_xceed30hr_device : // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/nubus/pds30_cb264.cpp b/src/devices/bus/nubus/pds30_cb264.cpp index 388aa5f54d535..32187ae5a9171 100644 --- a/src/devices/bus/nubus/pds30_cb264.cpp +++ b/src/devices/bus/nubus/pds30_cb264.cpp @@ -118,7 +118,7 @@ void nubus_cb264se30_device::device_reset() } -void nubus_cb264se30_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void nubus_cb264se30_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { if (!m_vbl_disable) { diff --git a/src/devices/bus/nubus/pds30_cb264.h b/src/devices/bus/nubus/pds30_cb264.h index 0892e23a2deb8..bddb09fc2afc0 100644 --- a/src/devices/bus/nubus/pds30_cb264.h +++ b/src/devices/bus/nubus/pds30_cb264.h @@ -28,7 +28,7 @@ class nubus_cb264se30_device : // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/nubus/pds30_mc30.cpp b/src/devices/bus/nubus/pds30_mc30.cpp index 879927233198b..ef99d6977576b 100644 --- a/src/devices/bus/nubus/pds30_mc30.cpp +++ b/src/devices/bus/nubus/pds30_mc30.cpp @@ -120,7 +120,7 @@ void nubus_xceedmc30_device::device_reset() } -void nubus_xceedmc30_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void nubus_xceedmc30_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { if (!m_vbl_disable) { diff --git a/src/devices/bus/nubus/pds30_mc30.h b/src/devices/bus/nubus/pds30_mc30.h index 2691b8d728c0b..cd5cca786120d 100644 --- a/src/devices/bus/nubus/pds30_mc30.h +++ b/src/devices/bus/nubus/pds30_mc30.h @@ -28,7 +28,7 @@ class nubus_xceedmc30_device : // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/nubus/pds30_procolor816.cpp b/src/devices/bus/nubus/pds30_procolor816.cpp index 83fd85127042c..bfce6fe65b9e1 100644 --- a/src/devices/bus/nubus/pds30_procolor816.cpp +++ b/src/devices/bus/nubus/pds30_procolor816.cpp @@ -121,7 +121,7 @@ void nubus_procolor816_device::device_reset() } -void nubus_procolor816_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void nubus_procolor816_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { if (!m_vbl_disable) { diff --git a/src/devices/bus/nubus/pds30_procolor816.h b/src/devices/bus/nubus/pds30_procolor816.h index 2fc0474798d4c..2acab22075bee 100644 --- a/src/devices/bus/nubus/pds30_procolor816.h +++ b/src/devices/bus/nubus/pds30_procolor816.h @@ -28,7 +28,7 @@ class nubus_procolor816_device : // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/nubus/pds30_sigmalview.cpp b/src/devices/bus/nubus/pds30_sigmalview.cpp index e04e4b2e297a7..95d7e112e88f0 100644 --- a/src/devices/bus/nubus/pds30_sigmalview.cpp +++ b/src/devices/bus/nubus/pds30_sigmalview.cpp @@ -114,7 +114,7 @@ void nubus_lview_device::device_reset() } -void nubus_lview_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void nubus_lview_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { if (!m_vbl_disable) { diff --git a/src/devices/bus/nubus/pds30_sigmalview.h b/src/devices/bus/nubus/pds30_sigmalview.h index b890a31654fac..10551c107eecf 100644 --- a/src/devices/bus/nubus/pds30_sigmalview.h +++ b/src/devices/bus/nubus/pds30_sigmalview.h @@ -28,7 +28,7 @@ class nubus_lview_device : // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/pc_joy/pc_joy_sw.cpp b/src/devices/bus/pc_joy/pc_joy_sw.cpp index 0fbe1e67e4516..e48590ce716c3 100644 --- a/src/devices/bus/pc_joy/pc_joy_sw.cpp +++ b/src/devices/bus/pc_joy/pc_joy_sw.cpp @@ -35,7 +35,7 @@ void pc_mssw_pad_device::device_reset() m_timer->adjust(attotime::never, 0); } -void pc_mssw_pad_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void pc_mssw_pad_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { uint16_t pad_state = 0; // only multibit mode for now diff --git a/src/devices/bus/pc_joy/pc_joy_sw.h b/src/devices/bus/pc_joy/pc_joy_sw.h index cb76b268a3647..4edcc78f26e98 100644 --- a/src/devices/bus/pc_joy/pc_joy_sw.h +++ b/src/devices/bus/pc_joy/pc_joy_sw.h @@ -19,7 +19,7 @@ class pc_mssw_pad_device : public device_t, protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) override; private: required_ioport m_btn1; diff --git a/src/devices/bus/pc_kbd/hle_mouse.cpp b/src/devices/bus/pc_kbd/hle_mouse.cpp index 9cb96f949832c..1521560d91341 100644 --- a/src/devices/bus/pc_kbd/hle_mouse.cpp +++ b/src/devices/bus/pc_kbd/hle_mouse.cpp @@ -104,8 +104,8 @@ void hle_ps2_mouse_device::device_start() set_pc_kbdc_device(); - m_serial = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hle_ps2_mouse_device::serial), this)); - m_sample = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hle_ps2_mouse_device::sample), this)); + m_serial = timer_alloc(*this, FUNC(hle_ps2_mouse_device::serial)); + m_sample = timer_alloc(*this, FUNC(hle_ps2_mouse_device::sample)); } void hle_ps2_mouse_device::device_reset() diff --git a/src/devices/bus/pet/c2n.cpp b/src/devices/bus/pet/c2n.cpp index e7ac6e27c2889..b7d226a30ab2f 100644 --- a/src/devices/bus/pet/c2n.cpp +++ b/src/devices/bus/pet/c2n.cpp @@ -93,7 +93,7 @@ void c2n_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void c2n_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void c2n_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (m_motor) { diff --git a/src/devices/bus/pet/c2n.h b/src/devices/bus/pet/c2n.h index 6430d1b01a06a..3e5c20fb07f16 100644 --- a/src/devices/bus/pet/c2n.h +++ b/src/devices/bus/pet/c2n.h @@ -35,7 +35,7 @@ class c2n_device : public device_t, // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/plus4/c1551.cpp b/src/devices/bus/plus4/c1551.cpp index b8ecd0b7642ab..105af97d3e7fe 100644 --- a/src/devices/bus/plus4/c1551.cpp +++ b/src/devices/bus/plus4/c1551.cpp @@ -478,7 +478,7 @@ void c1551_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void c1551_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void c1551_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_maincpu->set_input_line(M6502_IRQ_LINE, param); diff --git a/src/devices/bus/plus4/c1551.h b/src/devices/bus/plus4/c1551.h index acf933a4b5aff..a08a0a9a17bb6 100644 --- a/src/devices/bus/plus4/c1551.h +++ b/src/devices/bus/plus4/c1551.h @@ -36,7 +36,7 @@ class c1551_device : public device_t, public device_plus4_expansion_card_interfa // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/bus/psx/ctlrport.cpp b/src/devices/bus/psx/ctlrport.cpp index c043ac1bab08c..552f0808e4ba4 100644 --- a/src/devices/bus/psx/ctlrport.cpp +++ b/src/devices/bus/psx/ctlrport.cpp @@ -100,7 +100,7 @@ void psxcontrollerports_device::ack() device_psx_controller_interface::device_psx_controller_interface(const machine_config &mconfig, device_t &device) : device_interface(device, "psxctrl"), m_odata(0), m_idata(0), m_bit(0), m_count(0), m_memcard(false), m_clock(false), m_sel(false), - m_ack(true), m_rx(false), m_ack_timer(nullptr), m_owner(nullptr) + m_ack(true), m_rx(false), m_owner(nullptr) { } @@ -111,8 +111,7 @@ device_psx_controller_interface::~device_psx_controller_interface() void device_psx_controller_interface::interface_pre_start() { m_owner = dynamic_cast(device().owner()); - if (!m_ack_timer) - m_ack_timer = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(device_psx_controller_interface::ack_timer), this)); + m_ack_timer.init(*this, FUNC(device_psx_controller_interface::ack_timer)); } void device_psx_controller_interface::interface_pre_reset() @@ -131,7 +130,6 @@ void device_psx_controller_interface::interface_pre_reset() void device_psx_controller_interface::interface_post_stop() { - m_ack_timer = nullptr; } void device_psx_controller_interface::ack_timer(void *ptr, int param) @@ -140,7 +138,7 @@ void device_psx_controller_interface::ack_timer(void *ptr, int param) m_owner->ack(); if (!param) - m_ack_timer->adjust(attotime::from_usec(2), 1); + m_ack_timer.adjust(attotime::from_usec(2), 1); } void device_psx_controller_interface::do_pad() @@ -165,7 +163,7 @@ void device_psx_controller_interface::do_pad() } if(get_pad(m_count++, &m_odata, m_idata)) - m_ack_timer->adjust(attotime::from_usec(10), 0); + m_ack_timer.adjust(attotime::from_usec(10), 0); else m_count = 0; } diff --git a/src/devices/bus/psx/ctlrport.h b/src/devices/bus/psx/ctlrport.h index d3578eb9b3a5d..25b2756617c60 100644 --- a/src/devices/bus/psx/ctlrport.h +++ b/src/devices/bus/psx/ctlrport.h @@ -57,7 +57,7 @@ class device_psx_controller_interface : public device_interface bool m_ack; bool m_rx; - emu_timer *m_ack_timer; + persistent_timer m_ack_timer; psx_controller_port_device *m_owner; }; diff --git a/src/devices/bus/psx/memcard.cpp b/src/devices/bus/psx/memcard.cpp index 7f53c69dcfa6a..2ea2ff81dde29 100644 --- a/src/devices/bus/psx/memcard.cpp +++ b/src/devices/bus/psx/memcard.cpp @@ -67,7 +67,7 @@ psxcard_device::psxcard_device(const machine_config &mconfig, const char *tag, d void psxcard_device::device_start() { m_owner = dynamic_cast(owner()); - m_ack_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(psxcard_device::ack_timer), this)); + m_ack_timer = timer_alloc(*this, FUNC(psxcard_device::ack_timer)); m_ack = true; m_disabled = false; diff --git a/src/devices/bus/psx/multitap.cpp b/src/devices/bus/psx/multitap.cpp index 5de091022874a..365c4d86f3f90 100644 --- a/src/devices/bus/psx/multitap.cpp +++ b/src/devices/bus/psx/multitap.cpp @@ -222,9 +222,9 @@ void psx_multitap_device::do_pad() // ports won't ack if they are done m_cack[0] = m_cack[1] = m_cack[2] = m_cack[3] = true; if(m_count < 11) - m_ack_timer->adjust(attotime::from_usec(12), 0); // give a bit of time for the ports to ack + m_ack_timer.adjust(attotime::from_usec(12), 0); // give a bit of time for the ports to ack else if(m_count < 35) - m_ack_timer->adjust(attotime::from_usec(10), 0); + m_ack_timer.adjust(attotime::from_usec(10), 0); } m_bit = (m_bit + 1) % 8; diff --git a/src/devices/bus/qbus/pc11.cpp b/src/devices/bus/qbus/pc11.cpp index 984c8f14e4e8e..5babc82b3a508 100644 --- a/src/devices/bus/qbus/pc11.cpp +++ b/src/devices/bus/qbus/pc11.cpp @@ -213,7 +213,7 @@ void pc11_device::write(offs_t offset, uint16_t data) } } -void pc11_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pc11_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { uint8_t reply; diff --git a/src/devices/bus/qbus/pc11.h b/src/devices/bus/qbus/pc11.h index 163e661c9c919..8bdc89fa47603 100644 --- a/src/devices/bus/qbus/pc11.h +++ b/src/devices/bus/qbus/pc11.h @@ -59,7 +59,7 @@ class pc11_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_z80daisy_interface overrides virtual int z80daisy_irq_state() override; diff --git a/src/devices/bus/rs232/hlemouse.cpp b/src/devices/bus/rs232/hlemouse.cpp index 599e0d77d145b..954e83b2e6875 100644 --- a/src/devices/bus/rs232/hlemouse.cpp +++ b/src/devices/bus/rs232/hlemouse.cpp @@ -236,7 +236,8 @@ void hle_msmouse_device_base::device_start() m_btn_val = m_btn_sent = 0x00U; m_enable = 0U; - machine().scheduler().synchronize(timer_expired_delegate(FUNC(hle_msmouse_device_base::start_mouse), this)); + m_start_mouse.init(*this, FUNC(hle_msmouse_device_base::start_mouse)); + m_start_mouse.synchronize(); } WRITE_LINE_MEMBER(hle_msmouse_device_base::input_dtr) @@ -463,7 +464,8 @@ void hle_msystems_device_base::device_start() m_phase = 0U; - machine().scheduler().synchronize(timer_expired_delegate(FUNC(hle_msystems_device_base::start_mouse), this)); + m_start_mouse.init(*this, FUNC(hle_msystems_device_base::start_mouse)); + m_start_mouse.synchronize(); } void hle_msystems_device_base::tra_callback() diff --git a/src/devices/bus/rs232/hlemouse.h b/src/devices/bus/rs232/hlemouse.h index d2fae5bd4d163..0b369148f8188 100644 --- a/src/devices/bus/rs232/hlemouse.h +++ b/src/devices/bus/rs232/hlemouse.h @@ -44,6 +44,7 @@ class hle_msmouse_device_base : public buffered_rs232_device<8> private: TIMER_CALLBACK_MEMBER(start_mouse); + transient_timer_factory m_start_mouse; void check_enable(); void check_inputs(); @@ -138,6 +139,7 @@ class hle_msystems_device_base : public device_t, public device_rs232_port_inter private: TIMER_CALLBACK_MEMBER(start_mouse); + transient_timer_factory m_start_mouse; virtual bool read_inputs() = 0; virtual uint8_t report_buttons() = 0; diff --git a/src/devices/bus/rs232/null_modem.cpp b/src/devices/bus/rs232/null_modem.cpp index 86cac00a12ad5..1ae3d7a0fb345 100644 --- a/src/devices/bus/rs232/null_modem.cpp +++ b/src/devices/bus/rs232/null_modem.cpp @@ -86,7 +86,7 @@ void null_modem_device::device_reset() queue(); } -void null_modem_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void null_modem_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/rs232/null_modem.h b/src/devices/bus/rs232/null_modem.h index cc63ac962319d..5e633c9396848 100644 --- a/src/devices/bus/rs232/null_modem.h +++ b/src/devices/bus/rs232/null_modem.h @@ -24,7 +24,7 @@ class null_modem_device : public device_t, virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; virtual void tra_callback() override; diff --git a/src/devices/bus/rs232/pty.cpp b/src/devices/bus/rs232/pty.cpp index db002447621a0..606d248d11b3d 100644 --- a/src/devices/bus/rs232/pty.cpp +++ b/src/devices/bus/rs232/pty.cpp @@ -79,7 +79,7 @@ void pseudo_terminal_device::device_reset() queue(); } -void pseudo_terminal_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pseudo_terminal_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/rs232/pty.h b/src/devices/bus/rs232/pty.h index a5accaaf83bba..b48a5a03810e1 100644 --- a/src/devices/bus/rs232/pty.h +++ b/src/devices/bus/rs232/pty.h @@ -26,7 +26,7 @@ class pseudo_terminal_device : public device_t, virtual void device_start() override; virtual void device_stop() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void tra_callback() override; virtual void tra_complete() override; diff --git a/src/devices/bus/rs232/rs232_sync_io.cpp b/src/devices/bus/rs232/rs232_sync_io.cpp index 8977ece64b62a..95d1477176a09 100644 --- a/src/devices/bus/rs232/rs232_sync_io.cpp +++ b/src/devices/bus/rs232/rs232_sync_io.cpp @@ -141,7 +141,7 @@ void rs232_sync_io_device::device_reset() output_rxc(1); } -void rs232_sync_io_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void rs232_sync_io_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { case TMR_ID_CLK: diff --git a/src/devices/bus/rs232/rs232_sync_io.h b/src/devices/bus/rs232/rs232_sync_io.h index de43eda5ece4e..c824da64927fe 100644 --- a/src/devices/bus/rs232/rs232_sync_io.h +++ b/src/devices/bus/rs232/rs232_sync_io.h @@ -34,7 +34,7 @@ class rs232_sync_io_device : public device_t, public device_rs232_port_interface virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_stream; diff --git a/src/devices/bus/rs232/xvd701.cpp b/src/devices/bus/rs232/xvd701.cpp index b2635d21c02e2..bf1a657bd5ffa 100644 --- a/src/devices/bus/rs232/xvd701.cpp +++ b/src/devices/bus/rs232/xvd701.cpp @@ -57,7 +57,7 @@ void jvc_xvd701_device::device_reset() m_response_index = sizeof(m_response); } -void jvc_xvd701_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void jvc_xvd701_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/rs232/xvd701.h b/src/devices/bus/rs232/xvd701.h index b018659210ef8..1e931959e8cf5 100644 --- a/src/devices/bus/rs232/xvd701.h +++ b/src/devices/bus/rs232/xvd701.h @@ -18,7 +18,7 @@ class jvc_xvd701_device : public device_t, virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; virtual void tra_callback() override; diff --git a/src/devices/bus/s100/ascsasi.cpp b/src/devices/bus/s100/ascsasi.cpp index ef8b2d329e316..660914827a40f 100644 --- a/src/devices/bus/s100/ascsasi.cpp +++ b/src/devices/bus/s100/ascsasi.cpp @@ -89,8 +89,8 @@ asc_sasi_device::asc_sasi_device(const machine_config &mconfig, const char *tag, void asc_sasi_device::device_start() { // initialize timers - m_sel_off_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(asc_sasi_device::sel_off), this)); - m_rst_off_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(asc_sasi_device::rst_off), this)); + m_sel_off_timer = timer_alloc(*this, FUNC(asc_sasi_device::sel_off)); + m_rst_off_timer = timer_alloc(*this, FUNC(asc_sasi_device::rst_off)); // save state save_item(NAME(m_data_latch)); diff --git a/src/devices/bus/samcoupe/mouse/mouse.cpp b/src/devices/bus/samcoupe/mouse/mouse.cpp index e023d40499767..8b65c0f9de37b 100644 --- a/src/devices/bus/samcoupe/mouse/mouse.cpp +++ b/src/devices/bus/samcoupe/mouse/mouse.cpp @@ -88,7 +88,7 @@ void sam_mouse_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void sam_mouse_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sam_mouse_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_mouse_index = 0; } diff --git a/src/devices/bus/samcoupe/mouse/mouse.h b/src/devices/bus/samcoupe/mouse/mouse.h index 1e0f6936a1ba1..bd727d94fcd7e 100644 --- a/src/devices/bus/samcoupe/mouse/mouse.h +++ b/src/devices/bus/samcoupe/mouse/mouse.h @@ -33,7 +33,7 @@ class sam_mouse_device : public device_t, public device_samcoupe_mouse_interface virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_ioport m_io_buttons; diff --git a/src/devices/bus/scsi/scsihle.cpp b/src/devices/bus/scsi/scsihle.cpp index ed63dae450e5a..f39eb0e7563e8 100644 --- a/src/devices/bus/scsi/scsihle.cpp +++ b/src/devices/bus/scsi/scsihle.cpp @@ -206,7 +206,7 @@ void scsihle_device::scsibus_write_data() data_idx=0; } -void scsihle_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void scsihle_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { switch (tid) { diff --git a/src/devices/bus/scsi/scsihle.h b/src/devices/bus/scsi/scsihle.h index e98e38122e72b..967b116b99dd2 100644 --- a/src/devices/bus/scsi/scsihle.h +++ b/src/devices/bus/scsi/scsihle.h @@ -43,7 +43,7 @@ class scsihle_device : public device_t, virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_ioport m_scsi_id; diff --git a/src/devices/bus/sg1000_exp/kblink.cpp b/src/devices/bus/sg1000_exp/kblink.cpp index 039c7f91196e2..81bfbfacbe0f3 100644 --- a/src/devices/bus/sg1000_exp/kblink.cpp +++ b/src/devices/bus/sg1000_exp/kblink.cpp @@ -117,7 +117,7 @@ void sk1100_link_cable_device::device_add_mconfig(machine_config &config) } -void sk1100_link_cable_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sk1100_link_cable_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/sg1000_exp/kblink.h b/src/devices/bus/sg1000_exp/kblink.h index 65e5782f4a2ad..0a7d903105292 100644 --- a/src/devices/bus/sg1000_exp/kblink.h +++ b/src/devices/bus/sg1000_exp/kblink.h @@ -37,7 +37,7 @@ class sk1100_link_cable_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; // device_sk1100_link_cable_interface overrides diff --git a/src/devices/bus/sgikbd/hlekbd.cpp b/src/devices/bus/sgikbd/hlekbd.cpp index c5f0b8c4c8384..8082ac75dc612 100644 --- a/src/devices/bus/sgikbd/hlekbd.cpp +++ b/src/devices/bus/sgikbd/hlekbd.cpp @@ -247,7 +247,7 @@ void hle_device::device_reset() start_processing(attotime::from_hz(600)); } -void hle_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hle_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/sgikbd/hlekbd.h b/src/devices/bus/sgikbd/hlekbd.h index b2c21889d5845..41b03529bac6b 100644 --- a/src/devices/bus/sgikbd/hlekbd.h +++ b/src/devices/bus/sgikbd/hlekbd.h @@ -31,7 +31,7 @@ class hle_device : public device_t virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual ioport_constructor device_input_ports() const override; // device_buffered_serial_interface overrides diff --git a/src/devices/bus/sms_ctrl/lphaser.cpp b/src/devices/bus/sms_ctrl/lphaser.cpp index 2dead79388779..44e431aa27f46 100644 --- a/src/devices/bus/sms_ctrl/lphaser.cpp +++ b/src/devices/bus/sms_ctrl/lphaser.cpp @@ -289,7 +289,7 @@ void sms_light_phaser_device::sensor_check() } -void sms_light_phaser_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sms_light_phaser_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/sms_ctrl/lphaser.h b/src/devices/bus/sms_ctrl/lphaser.h index 123241e266301..60d68f57f01ad 100644 --- a/src/devices/bus/sms_ctrl/lphaser.h +++ b/src/devices/bus/sms_ctrl/lphaser.h @@ -52,7 +52,7 @@ class sms_light_phaser_device : public device_t, emu_timer *m_lphaser_timer; static const device_timer_id TIMER_LPHASER = 0; - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void sensor_check(); int bright_aim_area( emu_timer *timer, int lgun_x, int lgun_y ); uint16_t screen_hpos_nonscaled(int scaled_hpos); diff --git a/src/devices/bus/sms_ctrl/sports.cpp b/src/devices/bus/sms_ctrl/sports.cpp index dee6af4eb6369..e3289c36cec3e 100644 --- a/src/devices/bus/sms_ctrl/sports.cpp +++ b/src/devices/bus/sms_ctrl/sports.cpp @@ -53,7 +53,7 @@ DEFINE_DEVICE_TYPE(SMS_SPORTS_PAD, sms_sports_pad_device, "sms_sports_pad", "Seg #define SPORTS_PAD_INTERVAL attotime::from_hz(XTAL(10'738'635)/3/512) -void sms_sports_pad_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sms_sports_pad_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/sms_ctrl/sports.h b/src/devices/bus/sms_ctrl/sports.h index 6644541f36afb..e4298165330ed 100644 --- a/src/devices/bus/sms_ctrl/sports.h +++ b/src/devices/bus/sms_ctrl/sports.h @@ -58,7 +58,7 @@ class sms_sports_pad_device : public device_t, emu_timer *m_sportspad_timer; static const device_timer_id TIMER_SPORTSPAD = 0; - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; diff --git a/src/devices/bus/snes/event.cpp b/src/devices/bus/snes/event.cpp index d6e8000eab32a..dbff04cfd54a2 100644 --- a/src/devices/bus/snes/event.cpp +++ b/src/devices/bus/snes/event.cpp @@ -267,7 +267,7 @@ ioport_constructor sns_pfest94_device::device_input_ports() const // device_timer - handler timer events //------------------------------------------------- -void sns_pfest94_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sns_pfest94_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_EVENT) { diff --git a/src/devices/bus/snes/event.h b/src/devices/bus/snes/event.h index dedd18f921ae4..eb1345c59d762 100644 --- a/src/devices/bus/snes/event.h +++ b/src/devices/bus/snes/event.h @@ -25,7 +25,7 @@ class sns_pfest94_device : public device_t, virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; diff --git a/src/devices/bus/snes_ctrl/bcbattle.cpp b/src/devices/bus/snes_ctrl/bcbattle.cpp index 4c0b17ef6ce74..75c1927b0f1a5 100644 --- a/src/devices/bus/snes_ctrl/bcbattle.cpp +++ b/src/devices/bus/snes_ctrl/bcbattle.cpp @@ -33,7 +33,7 @@ void snes_bcbattle_device::device_add_mconfig(machine_config &config) // This part is the hacky replacement for the real Barcode unit [shared with NES implementation]: // code periodically checks whether a new code has been scanned and it moves it to the // m_current_barcode array -void snes_bcbattle_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void snes_bcbattle_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_BATTLER) { diff --git a/src/devices/bus/snes_ctrl/bcbattle.h b/src/devices/bus/snes_ctrl/bcbattle.h index 808a5332f6855..78e14bb20c0d3 100644 --- a/src/devices/bus/snes_ctrl/bcbattle.h +++ b/src/devices/bus/snes_ctrl/bcbattle.h @@ -32,7 +32,7 @@ class snes_bcbattle_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/snes_ctrl/miracle.cpp b/src/devices/bus/snes_ctrl/miracle.cpp index a0d9c70874c82..acc54ea700558 100644 --- a/src/devices/bus/snes_ctrl/miracle.cpp +++ b/src/devices/bus/snes_ctrl/miracle.cpp @@ -35,7 +35,7 @@ void snes_miracle_device::device_add_mconfig(machine_config &config) // device_timer - handler timer events //------------------------------------------------- -void snes_miracle_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void snes_miracle_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_STROBE_ON) { diff --git a/src/devices/bus/snes_ctrl/miracle.h b/src/devices/bus/snes_ctrl/miracle.h index cb1b89a6edaed..590f79706bfb8 100644 --- a/src/devices/bus/snes_ctrl/miracle.h +++ b/src/devices/bus/snes_ctrl/miracle.h @@ -39,7 +39,7 @@ class snes_miracle_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/spc1000/fdd.cpp b/src/devices/bus/spc1000/fdd.cpp index 36c4c90b9583e..c544392f4fb69 100644 --- a/src/devices/bus/spc1000/fdd.cpp +++ b/src/devices/bus/spc1000/fdd.cpp @@ -156,7 +156,7 @@ spc1000_fdd_exp_device::spc1000_fdd_exp_device(const machine_config &mconfig, co void spc1000_fdd_exp_device::device_start() { - m_timer_tc = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(spc1000_fdd_exp_device::tc_off), this)); + m_timer_tc = timer_alloc(*this, FUNC(spc1000_fdd_exp_device::tc_off)); } //------------------------------------------------- diff --git a/src/devices/bus/spectrum/mgt.cpp b/src/devices/bus/spectrum/mgt.cpp index f0ce315f2d621..ab4b559ddfc99 100644 --- a/src/devices/bus/spectrum/mgt.cpp +++ b/src/devices/bus/spectrum/mgt.cpp @@ -714,7 +714,7 @@ void spectrum_disciple_device::mreq_w(offs_t offset, uint8_t data) m_exp->mreq_w(offset, data); } -void spectrum_disciple_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void spectrum_disciple_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/spectrum/mgt.h b/src/devices/bus/spectrum/mgt.h index f75b8dc540a5e..b824040b93e87 100644 --- a/src/devices/bus/spectrum/mgt.h +++ b/src/devices/bus/spectrum/mgt.h @@ -82,7 +82,7 @@ class spectrum_disciple_device: public spectrum_plusd_device // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/ss50/dc5.cpp b/src/devices/bus/ss50/dc5.cpp index 764b6ada2455c..b83aedebb603e 100644 --- a/src/devices/bus/ss50/dc5.cpp +++ b/src/devices/bus/ss50/dc5.cpp @@ -292,7 +292,7 @@ void ss50_dc5_device::device_start() m_fdc_status = 0; m_control_register = 0; m_fdc_side = 0; - m_floppy_motor_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ss50_dc5_device::floppy_motor_callback),this)); + m_floppy_motor_timer = timer_alloc(*this, FUNC(ss50_dc5_device::floppy_motor_callback)); m_motor_timer_out = 0; m_fdc->set_force_ready(0); m_fdc_prog_clock_div = 12; diff --git a/src/devices/bus/ss50/mpt.cpp b/src/devices/bus/ss50/mpt.cpp index 4664f72a047c9..c102beb4b092c 100644 --- a/src/devices/bus/ss50/mpt.cpp +++ b/src/devices/bus/ss50/mpt.cpp @@ -90,7 +90,7 @@ void ss50_mpt_device::device_add_mconfig(machine_config &config) void ss50_mpt_device::device_start() { - m_mpt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ss50_mpt_device::mpt_timer_callback),this)); + m_mpt_timer = timer_alloc(*this, FUNC(ss50_mpt_device::mpt_timer_callback)); m_mpt_timer_state = 0; save_item(NAME(m_mpt_timer_state)); diff --git a/src/devices/bus/sunkbd/hlekbd.cpp b/src/devices/bus/sunkbd/hlekbd.cpp index 305d09ef3e277..5ecac58d11239 100644 --- a/src/devices/bus/sunkbd/hlekbd.cpp +++ b/src/devices/bus/sunkbd/hlekbd.cpp @@ -865,7 +865,7 @@ void hle_device_base::device_reset() handle timed events --------------------------------------------------*/ -void hle_device_base::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hle_device_base::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/sunkbd/hlekbd.h b/src/devices/bus/sunkbd/hlekbd.h index 6a3814973a234..5cf1fbac50e45 100644 --- a/src/devices/bus/sunkbd/hlekbd.h +++ b/src/devices/bus/sunkbd/hlekbd.h @@ -37,7 +37,7 @@ class hle_device_base virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_buffered_serial_interface overrides virtual void tra_callback() override; diff --git a/src/devices/bus/thomson/cd90_015.cpp b/src/devices/bus/thomson/cd90_015.cpp index d62b0c0e3382e..8acdb91f00e9a 100644 --- a/src/devices/bus/thomson/cd90_015.cpp +++ b/src/devices/bus/thomson/cd90_015.cpp @@ -61,7 +61,7 @@ void cd90_015_device::device_add_mconfig(machine_config &config) FLOPPY_CONNECTOR(config, m_floppy[3], floppy_drives, nullptr, floppy_formats).enable_sound(true); } -void cd90_015_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cd90_015_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_floppy[id]->get_device()->mon_w(1); } diff --git a/src/devices/bus/thomson/cd90_015.h b/src/devices/bus/thomson/cd90_015.h index 7d2c963f7f601..9066309364727 100644 --- a/src/devices/bus/thomson/cd90_015.h +++ b/src/devices/bus/thomson/cd90_015.h @@ -26,7 +26,7 @@ class cd90_015_device : public device_t, public thomson_extension_interface virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_fdc; diff --git a/src/devices/bus/thomson/cd90_351.cpp b/src/devices/bus/thomson/cd90_351.cpp index ca543d2b59679..062abfc0760b9 100644 --- a/src/devices/bus/thomson/cd90_351.cpp +++ b/src/devices/bus/thomson/cd90_351.cpp @@ -122,7 +122,7 @@ void cd90_351_device::device_reset() m_cur_floppy = nullptr; } -void cd90_351_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cd90_351_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { case ID_MOTOROFF: diff --git a/src/devices/bus/thomson/cd90_351.h b/src/devices/bus/thomson/cd90_351.h index 2afba932b493b..e09042bb5ce68 100644 --- a/src/devices/bus/thomson/cd90_351.h +++ b/src/devices/bus/thomson/cd90_351.h @@ -26,7 +26,7 @@ class cd90_351_device : public device_t, public thomson_extension_interface virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_post_load() override; private: diff --git a/src/devices/bus/thomson/nanoreseau.cpp b/src/devices/bus/thomson/nanoreseau.cpp index 51f11c6576168..55562280b09c5 100644 --- a/src/devices/bus/thomson/nanoreseau.cpp +++ b/src/devices/bus/thomson/nanoreseau.cpp @@ -166,7 +166,7 @@ ioport_constructor nanoreseau_device::device_input_ports() const */ -void nanoreseau_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nanoreseau_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_answer_step ++; m_mc6854->set_cts(m_answer_step & 1); diff --git a/src/devices/bus/thomson/nanoreseau.h b/src/devices/bus/thomson/nanoreseau.h index b50f861855692..93937501dbf49 100644 --- a/src/devices/bus/thomson/nanoreseau.h +++ b/src/devices/bus/thomson/nanoreseau.h @@ -25,7 +25,7 @@ class nanoreseau_device : public device_t, public thomson_extension_interface virtual void device_start() override; virtual void device_reset() override; virtual ioport_constructor device_input_ports() const override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_mc6854; diff --git a/src/devices/bus/ti8x/bitsocket.cpp b/src/devices/bus/ti8x/bitsocket.cpp index 00f0e1b4b8dd0..532a0548ae7c0 100644 --- a/src/devices/bus/ti8x/bitsocket.cpp +++ b/src/devices/bus/ti8x/bitsocket.cpp @@ -44,7 +44,7 @@ void bit_socket_device::device_start() } -void bit_socket_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void bit_socket_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/bus/ti8x/bitsocket.h b/src/devices/bus/ti8x/bitsocket.h index d144d332fb873..c434dfa11ce07 100644 --- a/src/devices/bus/ti8x/bitsocket.h +++ b/src/devices/bus/ti8x/bitsocket.h @@ -36,7 +36,7 @@ class bit_socket_device virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual DECLARE_WRITE_LINE_MEMBER(input_tip) override; virtual DECLARE_WRITE_LINE_MEMBER(input_ring) override; diff --git a/src/devices/bus/ti8x/ti8x.cpp b/src/devices/bus/ti8x/ti8x.cpp index f8ec86c06a837..151cc9a5f7619 100644 --- a/src/devices/bus/ti8x/ti8x.cpp +++ b/src/devices/bus/ti8x/ti8x.cpp @@ -107,7 +107,6 @@ device_ti8x_link_port_bit_interface::device_ti8x_link_port_bit_interface( machine_config const &mconfig, device_t &device) : device_ti8x_link_port_interface(mconfig, device) - , m_error_timer(nullptr) , m_bit_phase(IDLE) , m_tx_bit_buffer(EMPTY) , m_tip_in(true) @@ -120,8 +119,7 @@ void device_ti8x_link_port_bit_interface::interface_pre_start() { device_ti8x_link_port_interface::interface_pre_start(); - if (!m_error_timer) - m_error_timer = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(device_ti8x_link_port_bit_interface::bit_timeout), this)); + m_error_timer.init(device().scheduler(), *this, FUNC(device_ti8x_link_port_bit_interface::bit_timeout)); m_bit_phase = IDLE; m_tx_bit_buffer = EMPTY; @@ -144,7 +142,7 @@ void device_ti8x_link_port_bit_interface::interface_pre_reset() { device_ti8x_link_port_interface::interface_pre_reset(); - m_error_timer->reset(); + m_error_timer.reset(); m_bit_phase = (m_tip_in && m_ring_in) ? IDLE : WAIT_IDLE; m_tx_bit_buffer = EMPTY; @@ -164,7 +162,7 @@ void device_ti8x_link_port_bit_interface::send_bit(bool data) if (IDLE == m_bit_phase) check_tx_bit_buffer(); else if (WAIT_IDLE == m_bit_phase) - m_error_timer->reset(attotime(1, 0)); // TODO: configurable timeout + m_error_timer.reset(attotime(1, 0)); // TODO: configurable timeout } @@ -197,7 +195,7 @@ void device_ti8x_link_port_bit_interface::accept_bit() else { LOGBITPROTO("accepted 0 bit, ring low (collision) - waiting for bus idle\n"); - m_error_timer->reset((EMPTY == m_tx_bit_buffer) ? attotime::never : attotime(1, 0)); // TODO: configurable timeout + m_error_timer.reset((EMPTY == m_tx_bit_buffer) ? attotime::never : attotime(1, 0)); // TODO: configurable timeout m_bit_phase = WAIT_IDLE; bit_collision(); } @@ -216,7 +214,7 @@ void device_ti8x_link_port_bit_interface::accept_bit() else { LOGBITPROTO("accepted 1 bit, tip low (collision) - waiting for bus idle\n"); - m_error_timer->reset((EMPTY == m_tx_bit_buffer) ? attotime::never : attotime(1, 0)); // TODO: configurable timeout + m_error_timer.reset((EMPTY == m_tx_bit_buffer) ? attotime::never : attotime(1, 0)); // TODO: configurable timeout m_bit_phase = WAIT_IDLE; bit_collision(); } @@ -239,7 +237,7 @@ WRITE_LINE_MEMBER(device_ti8x_link_port_bit_interface::input_tip) if (!m_tip_in) { LOGBITPROTO("falling edge on tip, acknowledging 0 bit\n"); - m_error_timer->reset(attotime(1, 0)); // TODO: configurable timeout + m_error_timer.reset(attotime(1, 0)); // TODO: configurable timeout m_bit_phase = ACK_0; output_ring(0); } @@ -256,7 +254,7 @@ WRITE_LINE_MEMBER(device_ti8x_link_port_bit_interface::input_tip) if (!m_tip_in) { LOGBITPROTO("falling edge on tip, 1 bit acknowledged, confirming\n"); - m_error_timer->reset(attotime(1, 0)); // TODO: configurable timeout + m_error_timer.reset(attotime(1, 0)); // TODO: configurable timeout m_bit_phase = WAIT_REL_1; output_ring(1); } @@ -268,7 +266,7 @@ WRITE_LINE_MEMBER(device_ti8x_link_port_bit_interface::input_tip) if (!m_tip_in) { LOGBITPROTO("falling edge on tip, lost sync, waiting for bus idle\n"); - m_error_timer->reset((EMPTY == m_tx_bit_buffer) ? attotime::never : attotime(1, 0)); // TODO: configurable timeout + m_error_timer.reset((EMPTY == m_tx_bit_buffer) ? attotime::never : attotime(1, 0)); // TODO: configurable timeout m_bit_phase = WAIT_IDLE; output_ring(1); bit_collision(); @@ -292,7 +290,7 @@ WRITE_LINE_MEMBER(device_ti8x_link_port_bit_interface::input_tip) if (m_tip_in) { LOGBITPROTO("rising edge on tip, 0 bit acknowledge confirmed, holding\n"); - m_error_timer->reset(); + m_error_timer.reset(); m_bit_phase = HOLD_0; bit_received(false); } @@ -324,7 +322,7 @@ WRITE_LINE_MEMBER(device_ti8x_link_port_bit_interface::input_ring) if (!m_ring_in) { LOGBITPROTO("falling edge on ring, acknowledging 1 bit\n"); - m_error_timer->reset(attotime(1, 0)); // TODO: configurable timeout + m_error_timer.reset(attotime(1, 0)); // TODO: configurable timeout m_bit_phase = ACK_1; output_tip(0); } @@ -335,7 +333,7 @@ WRITE_LINE_MEMBER(device_ti8x_link_port_bit_interface::input_ring) if (!m_ring_in) { LOGBITPROTO("falling edge on ring, 0 bit acknowledged, confirming\n"); - m_error_timer->reset(attotime(1, 0)); // TODO: configurable timeout + m_error_timer.reset(attotime(1, 0)); // TODO: configurable timeout m_bit_phase = WAIT_REL_0; output_tip(1); } @@ -365,7 +363,7 @@ WRITE_LINE_MEMBER(device_ti8x_link_port_bit_interface::input_ring) if (!m_ring_in) { LOGBITPROTO("falling edge on ring, lost sync, waiting for bus idle\n"); - m_error_timer->reset((EMPTY == m_tx_bit_buffer) ? attotime::never : attotime(1, 0)); // TODO: configurable timeout + m_error_timer.reset((EMPTY == m_tx_bit_buffer) ? attotime::never : attotime(1, 0)); // TODO: configurable timeout m_bit_phase = WAIT_IDLE; output_tip(1); bit_collision(); @@ -377,7 +375,7 @@ WRITE_LINE_MEMBER(device_ti8x_link_port_bit_interface::input_ring) if (m_ring_in) { LOGBITPROTO("rising edge on ring, 1 bit acknowledge confirmed, holding\n"); - m_error_timer->reset(); + m_error_timer.reset(); m_bit_phase = HOLD_1; bit_received(true); } @@ -423,7 +421,7 @@ TIMER_CALLBACK_MEMBER(device_ti8x_link_port_bit_interface::bit_timeout) else { LOGBITPROTO("waiting for bus idle\n"); - m_error_timer->reset((EMPTY == m_tx_bit_buffer) ? attotime::never : attotime(1, 0)); // TODO: configurable timeout + m_error_timer.reset((EMPTY == m_tx_bit_buffer) ? attotime::never : attotime(1, 0)); // TODO: configurable timeout m_bit_phase = WAIT_IDLE; } bit_receive_timeout(); @@ -438,7 +436,7 @@ TIMER_CALLBACK_MEMBER(device_ti8x_link_port_bit_interface::bit_timeout) case WAIT_REL_0: case WAIT_REL_1: LOGBITPROTO("timeout sending bit\n"); - m_error_timer->reset(); + m_error_timer.reset(); m_bit_phase = (m_tip_in && m_ring_in) ? IDLE : WAIT_IDLE; m_tx_bit_buffer = EMPTY; output_tip(1); @@ -459,14 +457,14 @@ void device_ti8x_link_port_bit_interface::check_tx_bit_buffer() // nothing to do case EMPTY: LOGBITPROTO("no pending bit, entering idle state\n"); - m_error_timer->reset(); + m_error_timer.reset(); m_bit_phase = IDLE; break; // pull tip low and wait for acknowledgement case PENDING_0: LOGBITPROTO("sending 0 bit, pulling tip low\n"); - m_error_timer->reset(attotime(1, 0)); // TODO: configurable timeout + m_error_timer.reset(attotime(1, 0)); // TODO: configurable timeout m_bit_phase = WAIT_ACK_0; m_tx_bit_buffer = EMPTY; output_tip(0); @@ -475,7 +473,7 @@ void device_ti8x_link_port_bit_interface::check_tx_bit_buffer() // pull ring low and wait for acknowledgement case PENDING_1: LOGBITPROTO("sending 1 bit, pulling ring low\n"); - m_error_timer->reset(attotime(1, 0)); // TODO: configurable timeout + m_error_timer.reset(attotime(1, 0)); // TODO: configurable timeout m_bit_phase = WAIT_ACK_1; m_tx_bit_buffer = EMPTY; output_ring(0); diff --git a/src/devices/bus/ti8x/ti8x.h b/src/devices/bus/ti8x/ti8x.h index 759b3523eb15d..f2b4d28fe44db 100644 --- a/src/devices/bus/ti8x/ti8x.h +++ b/src/devices/bus/ti8x/ti8x.h @@ -162,7 +162,7 @@ class device_ti8x_link_port_bit_interface : public device_ti8x_link_port_interfa void check_tx_bit_buffer(); - emu_timer * m_error_timer; + persistent_timer m_error_timer; u8 m_bit_phase; u8 m_tx_bit_buffer; bool m_tip_in, m_ring_in; diff --git a/src/devices/bus/ti99/internal/992board.cpp b/src/devices/bus/ti99/internal/992board.cpp index 10c065ed7ac1a..5816eefc0822e 100644 --- a/src/devices/bus/ti99/internal/992board.cpp +++ b/src/devices/bus/ti99/internal/992board.cpp @@ -175,7 +175,7 @@ std::string video992_device::tts(attotime t) } -void video992_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void video992_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { int raw_vpos = screen().vpos(); diff --git a/src/devices/bus/ti99/internal/992board.h b/src/devices/bus/ti99/internal/992board.h index 4269632688c03..cd7ca91b49eea 100644 --- a/src/devices/bus/ti99/internal/992board.h +++ b/src/devices/bus/ti99/internal/992board.h @@ -63,7 +63,7 @@ class video992_device : public device_t, void device_start() override; void device_reset() override; - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; std::string tts(attotime t); devcb_read8 m_mem_read_cb; // Callback to read memory devcb_write_line m_hold_cb; diff --git a/src/devices/bus/ti99/internal/genkbd.cpp b/src/devices/bus/ti99/internal/genkbd.cpp index 92f0e34b66b22..0fa14b3ef2db4 100644 --- a/src/devices/bus/ti99/internal/genkbd.cpp +++ b/src/devices/bus/ti99/internal/genkbd.cpp @@ -206,7 +206,7 @@ geneve_xt_101_hle_keyboard_device::geneve_xt_101_hle_keyboard_device(const machi /* Called by the poll timer */ -void geneve_xt_101_hle_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void geneve_xt_101_hle_keyboard_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id==0) { diff --git a/src/devices/bus/ti99/internal/genkbd.h b/src/devices/bus/ti99/internal/genkbd.h index 78d985a616078..97ae95fd867a4 100644 --- a/src/devices/bus/ti99/internal/genkbd.h +++ b/src/devices/bus/ti99/internal/genkbd.h @@ -42,7 +42,7 @@ class geneve_xt_101_hle_keyboard_device : public device_t, public device_pc_kbd_ emu_timer *m_poll_timer; emu_timer *m_send_timer; - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; static constexpr unsigned KEYQUEUESIZE = 256; static constexpr unsigned MAXKEYMSGLENGTH = 10; diff --git a/src/devices/bus/ti99/joyport/handset.cpp b/src/devices/bus/ti99/joyport/handset.cpp index 07a78dab1f21a..372dbd56af1a0 100644 --- a/src/devices/bus/ti99/joyport/handset.cpp +++ b/src/devices/bus/ti99/joyport/handset.cpp @@ -100,7 +100,7 @@ void ti99_handset_device::write_dev(uint8_t data) of P0 is changed, because, in one occasion, the ISR asserts the line before it reads the data, so we need to delay the acknowledge process. */ -void ti99_handset_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ti99_handset_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_clock_high = !m_clock_high; m_buf >>= 4; diff --git a/src/devices/bus/ti99/joyport/handset.h b/src/devices/bus/ti99/joyport/handset.h index a1726cd8d809b..96cb4f36a502c 100644 --- a/src/devices/bus/ti99/joyport/handset.h +++ b/src/devices/bus/ti99/joyport/handset.h @@ -38,7 +38,7 @@ class ti99_handset_device : public device_t, public device_ti99_joyport_interfac virtual void device_reset() override; virtual ioport_constructor device_input_ports() const override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: static constexpr unsigned MAX_HANDSETS = 4; diff --git a/src/devices/bus/ti99/joyport/mecmouse.cpp b/src/devices/bus/ti99/joyport/mecmouse.cpp index e21f3a540a2d3..a2ab3a8339914 100644 --- a/src/devices/bus/ti99/joyport/mecmouse.cpp +++ b/src/devices/bus/ti99/joyport/mecmouse.cpp @@ -132,7 +132,7 @@ void mecmouse_device::write_dev(uint8_t data) } } -void mecmouse_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mecmouse_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // Poll the movement int new_mx, new_my; diff --git a/src/devices/bus/ti99/joyport/mecmouse.h b/src/devices/bus/ti99/joyport/mecmouse.h index cd0320b0750d8..1a92f1341240b 100644 --- a/src/devices/bus/ti99/joyport/mecmouse.h +++ b/src/devices/bus/ti99/joyport/mecmouse.h @@ -30,7 +30,7 @@ class mecmouse_device : public device_t, public device_ti99_joyport_interface virtual void device_start() override; virtual void device_reset() override; virtual ioport_constructor device_input_ports() const override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: int m_last_select; diff --git a/src/devices/bus/ti99/peb/hfdc.cpp b/src/devices/bus/ti99/peb/hfdc.cpp index 204223fd19c41..7dc55a1507bb5 100644 --- a/src/devices/bus/ti99/peb/hfdc.cpp +++ b/src/devices/bus/ti99/peb/hfdc.cpp @@ -507,7 +507,7 @@ void myarc_hfdc_device::cruwrite(offs_t offset, uint8_t data) /* Monoflop has gone back to the OFF state. */ -void myarc_hfdc_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void myarc_hfdc_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { set_floppy_motors_running(false); } diff --git a/src/devices/bus/ti99/peb/hfdc.h b/src/devices/bus/ti99/peb/hfdc.h index 370fb0289dda0..52d6bae536b5c 100644 --- a/src/devices/bus/ti99/peb/hfdc.h +++ b/src/devices/bus/ti99/peb/hfdc.h @@ -47,7 +47,7 @@ class myarc_hfdc_device : public device_t, public device_ti99_peribox_card_inter void device_config_complete() override; private: - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void device_start() override; void device_reset() override; diff --git a/src/devices/bus/vcs/dpc.cpp b/src/devices/bus/vcs/dpc.cpp index 7709fe44e5a55..7703bf9cbabc6 100644 --- a/src/devices/bus/vcs/dpc.cpp +++ b/src/devices/bus/vcs/dpc.cpp @@ -91,7 +91,7 @@ void dpc_device::decrement_counter(uint8_t data_fetcher) // device_timer - handler timer events //------------------------------------------------- -void dpc_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void dpc_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_OSC) { diff --git a/src/devices/bus/vcs/dpc.h b/src/devices/bus/vcs/dpc.h index 19dc7f34dd2b1..d7b621db9bcd4 100644 --- a/src/devices/bus/vcs/dpc.h +++ b/src/devices/bus/vcs/dpc.h @@ -13,7 +13,7 @@ // TO DO: DPC should be made a separate device! -// m_dpc.oscillator = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(a2600_state::modeDPC_timer_callback),this)); +// m_dpc.oscillator = timer_alloc(*this, FUNC(a2600_state::modeDPC_timer_callback)); class dpc_device : public device_t { @@ -42,7 +42,7 @@ class dpc_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; df_t m_df[8]; uint8_t m_movamt; diff --git a/src/devices/bus/vip/vp550.cpp b/src/devices/bus/vip/vp550.cpp index 8df76ac92d5bf..b8e9e6ea51a19 100644 --- a/src/devices/bus/vip/vp550.cpp +++ b/src/devices/bus/vip/vp550.cpp @@ -100,7 +100,7 @@ void vp550_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void vp550_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void vp550_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (LOG) logerror("VP550 '%s' Interrupt\n", tag()); diff --git a/src/devices/bus/vip/vp550.h b/src/devices/bus/vip/vp550.h index d881063ba2cdc..27bfa232095b5 100644 --- a/src/devices/bus/vip/vp550.h +++ b/src/devices/bus/vip/vp550.h @@ -32,7 +32,7 @@ class vp550_device : public device_t, protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; // device_vip_expansion_card_interface overrides diff --git a/src/devices/bus/vme/vme_fccpu20.cpp b/src/devices/bus/vme/vme_fccpu20.cpp index ee07b86e1be73..b29e7f7782b05 100644 --- a/src/devices/bus/vme/vme_fccpu20.cpp +++ b/src/devices/bus/vme/vme_fccpu20.cpp @@ -479,7 +479,7 @@ void vme_fccpu20_device::device_reset() //------------------------------------------------- // device_timer - handler timer events //------------------------------------------------- -void vme_fccpu20_device::device_timer (emu_timer &timer, device_timer_id id, int32_t param, void *ptr) +void vme_fccpu20_device::device_timer(timer_instance const &timer, device_timer_id id, int32_t param, void *ptr) { switch(id) { diff --git a/src/devices/bus/vme/vme_fccpu20.h b/src/devices/bus/vme/vme_fccpu20.h index ede5e886f46bf..71c67542013e3 100644 --- a/src/devices/bus/vme/vme_fccpu20.h +++ b/src/devices/bus/vme/vme_fccpu20.h @@ -43,7 +43,7 @@ class vme_fccpu20_device : public device_t, public device_vme_card_interface virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/bus/vsmile/pad.cpp b/src/devices/bus/vsmile/pad.cpp index 5cf7940ab39f1..9e64dc1f15599 100644 --- a/src/devices/bus/vsmile/pad.cpp +++ b/src/devices/bus/vsmile/pad.cpp @@ -49,8 +49,7 @@ void vsmile_pad_device::device_start() { vsmile_ctrl_device_base::device_start(); - m_idle_timer = machine().scheduler().timer_alloc( - timer_expired_delegate(FUNC(vsmile_pad_device::handle_idle), this)); + m_idle_timer = timer_alloc(*this, FUNC(vsmile_pad_device::handle_idle)); m_idle_timer->adjust(attotime::from_seconds(1)); m_sent_joy = 0x0000U; diff --git a/src/devices/bus/vsmile/vsmile_ctrl.cpp b/src/devices/bus/vsmile/vsmile_ctrl.cpp index fa937beb1ad57..ca5b807876083 100644 --- a/src/devices/bus/vsmile/vsmile_ctrl.cpp +++ b/src/devices/bus/vsmile/vsmile_ctrl.cpp @@ -115,12 +115,10 @@ vsmile_ctrl_device_base::~vsmile_ctrl_device_base() void vsmile_ctrl_device_base::device_start() { // allocate a timer to limit transmit rate to something realistic - m_tx_timer = machine().scheduler().timer_alloc( - timer_expired_delegate(FUNC(vsmile_ctrl_device_base::tx_timer_expired), this)); + m_tx_timer = timer_alloc(*this, FUNC(vsmile_ctrl_device_base::tx_timer_expired)); // allocate a timer for RTS timeouts - m_rts_timer = machine().scheduler().timer_alloc( - timer_expired_delegate(FUNC(vsmile_ctrl_device_base::rts_timer_expired), this)); + m_rts_timer = timer_alloc(*this, FUNC(vsmile_ctrl_device_base::rts_timer_expired)); // start with transmit queue empty m_tx_fifo_head = m_tx_fifo_tail = 0U; diff --git a/src/devices/bus/wswan/rom.cpp b/src/devices/bus/wswan/rom.cpp index 034ec926dc465..f0228d8991fe8 100644 --- a/src/devices/bus/wswan/rom.cpp +++ b/src/devices/bus/wswan/rom.cpp @@ -199,7 +199,7 @@ void ws_rom_eeprom_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void ws_rom_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ws_rom_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_RTC) { diff --git a/src/devices/bus/wswan/rom.h b/src/devices/bus/wswan/rom.h index e61efd904de44..2bc4a57ac5027 100644 --- a/src/devices/bus/wswan/rom.h +++ b/src/devices/bus/wswan/rom.h @@ -30,7 +30,7 @@ class ws_rom_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; u16 m_io_regs[8]; u32 m_base20, m_base30, m_base40; diff --git a/src/devices/bus/z29_kbd/he191_3425.cpp b/src/devices/bus/z29_kbd/he191_3425.cpp index 5a52f363590ae..4a29ee0cf956b 100644 --- a/src/devices/bus/z29_kbd/he191_3425.cpp +++ b/src/devices/bus/z29_kbd/he191_3425.cpp @@ -42,13 +42,15 @@ void he191_3425_device::device_start() { m_leds[0] = 1; // L1: Power + m_receive_data_synced.init(*this, FUNC(he191_3425_device::receive_data_synced)); + save_item(NAME(m_select)); save_item(NAME(m_recv_data)); } void he191_3425_device::receive_data(bool state) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(he191_3425_device::receive_data_synced), this), state); + m_receive_data_synced.synchronize(state); } TIMER_CALLBACK_MEMBER(he191_3425_device::receive_data_synced) diff --git a/src/devices/bus/z29_kbd/he191_3425.h b/src/devices/bus/z29_kbd/he191_3425.h index cf0129936fb78..811162ad0c978 100644 --- a/src/devices/bus/z29_kbd/he191_3425.h +++ b/src/devices/bus/z29_kbd/he191_3425.h @@ -39,6 +39,7 @@ class he191_3425_device : public device_t, public device_z29_keyboard_interface // misc. helpers TIMER_CALLBACK_MEMBER(receive_data_synced); + transient_timer_factory m_receive_data_synced; // object finders required_device m_mcu; diff --git a/src/devices/bus/z29_kbd/md_kbd.cpp b/src/devices/bus/z29_kbd/md_kbd.cpp index 1a313af10ce3b..68179fa10b214 100644 --- a/src/devices/bus/z29_kbd/md_kbd.cpp +++ b/src/devices/bus/z29_kbd/md_kbd.cpp @@ -49,6 +49,7 @@ void md_keyboard_device::device_resolve_objects() void md_keyboard_device::device_start() { + m_receive_data_synced.init(*this, FUNC(md_keyboard_device::receive_data_synced)); save_item(NAME(m_14515b_select)); save_item(NAME(m_ls175_clock)); save_item(NAME(m_recv_data)); @@ -61,7 +62,7 @@ void md_keyboard_device::device_reset() void md_keyboard_device::receive_data(bool state) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(md_keyboard_device::receive_data_synced), this), state); + m_receive_data_synced.synchronize(state); } TIMER_CALLBACK_MEMBER(md_keyboard_device::receive_data_synced) diff --git a/src/devices/bus/z29_kbd/md_kbd.h b/src/devices/bus/z29_kbd/md_kbd.h index 8a81b9a461d6b..6c8548cc67a08 100644 --- a/src/devices/bus/z29_kbd/md_kbd.h +++ b/src/devices/bus/z29_kbd/md_kbd.h @@ -37,6 +37,7 @@ class md_keyboard_device : public device_t, public device_z29_keyboard_interface // misc. helpers TIMER_CALLBACK_MEMBER(receive_data_synced); + transient_timer_factory m_receive_data_synced; void ls175_w(u8 data); // address maps diff --git a/src/devices/bus/z88/z88.cpp b/src/devices/bus/z88/z88.cpp index 024c960a9b7d6..a61739353d22e 100644 --- a/src/devices/bus/z88/z88.cpp +++ b/src/devices/bus/z88/z88.cpp @@ -85,7 +85,7 @@ void z88cart_slot_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void z88cart_slot_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void z88cart_slot_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_FLP_CLEAR) { diff --git a/src/devices/bus/z88/z88.h b/src/devices/bus/z88/z88.h index 15207ff66df33..ba7b46898a6d0 100644 --- a/src/devices/bus/z88/z88.h +++ b/src/devices/bus/z88/z88.h @@ -127,7 +127,7 @@ class z88cart_slot_device : public device_t, protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_image_interface implementation virtual const software_list_loader &get_software_list_loader() const override { return rom_software_list_loader::instance(); } diff --git a/src/devices/cpu/alto2/a2disk.cpp b/src/devices/cpu/alto2/a2disk.cpp index fa9392695dcdd..faab8ee55584d 100644 --- a/src/devices/cpu/alto2/a2disk.cpp +++ b/src/devices/cpu/alto2/a2disk.cpp @@ -1749,16 +1749,16 @@ void alto2_cpu_device::init_disk() m_dsk.kcom = 066000; - m_dsk.strobon_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(alto2_cpu_device::disk_strobon),this)); + m_dsk.strobon_timer = timer_alloc(*this, FUNC(alto2_cpu_device::disk_strobon)); m_dsk.strobon_timer->reset(); - m_dsk.seclate_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(alto2_cpu_device::disk_seclate),this)); + m_dsk.seclate_timer = timer_alloc(*this, FUNC(alto2_cpu_device::disk_seclate)); m_dsk.seclate_timer->reset(); - m_dsk.ok_to_run_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(alto2_cpu_device::disk_ok_to_run),this)); + m_dsk.ok_to_run_timer = timer_alloc(*this, FUNC(alto2_cpu_device::disk_ok_to_run)); m_dsk.ok_to_run_timer->adjust(attotime::from_nsec(35 * ALTO2_UCYCLE / 1000), 1); - m_dsk.ready_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(alto2_cpu_device::disk_ready_mf31a),this)); + m_dsk.ready_timer = timer_alloc(*this, FUNC(alto2_cpu_device::disk_ready_mf31a)); m_dsk.ready_timer->reset(); m_dsk.bitclk_time[0] = static_cast(attotime::from_nsec(300).as_attoseconds() / 1000000); diff --git a/src/devices/cpu/alto2/a2ether.cpp b/src/devices/cpu/alto2/a2ether.cpp index 5ed7f9b9107a3..51802c590c5d4 100644 --- a/src/devices/cpu/alto2/a2ether.cpp +++ b/src/devices/cpu/alto2/a2ether.cpp @@ -1325,10 +1325,10 @@ void alto2_cpu_device::init_ether(int task) m_eth.rx_packet = std::make_unique(sizeof(uint16_t)*ALTO2_ETHER_PACKET_SIZE); m_eth.tx_packet = std::make_unique(sizeof(uint16_t)*ALTO2_ETHER_PACKET_SIZE); - m_eth.tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(alto2_cpu_device::tx_packet),this)); + m_eth.tx_timer = timer_alloc(*this, FUNC(alto2_cpu_device::tx_packet)); m_eth.tx_timer->reset(); - m_eth.rx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(alto2_cpu_device::rx_breath_of_life),this)); + m_eth.rx_timer = timer_alloc(*this, FUNC(alto2_cpu_device::rx_breath_of_life)); m_eth.rx_timer->reset(); } diff --git a/src/devices/cpu/amis2000/amis2000.cpp b/src/devices/cpu/amis2000/amis2000.cpp index 0558f5117dbe8..50f3653d78a4b 100644 --- a/src/devices/cpu/amis2000/amis2000.cpp +++ b/src/devices/cpu/amis2000/amis2000.cpp @@ -194,7 +194,7 @@ void amis2152_cpu_device::device_start() { amis2000_base_device::device_start(); - m_d2f_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(amis2152_cpu_device::d2f_timer_cb), this)); + m_d2f_timer = timer_alloc(*this, FUNC(amis2152_cpu_device::d2f_timer_cb)); // zerofill m_d2f_latch = 0; diff --git a/src/devices/cpu/cop400/cop400.cpp b/src/devices/cpu/cop400/cop400.cpp index 10b5ec73dd48e..e30a8ea28b6f1 100644 --- a/src/devices/cpu/cop400/cop400.cpp +++ b/src/devices/cpu/cop400/cop400.cpp @@ -1062,7 +1062,7 @@ void cop400_cpu_device::inil_tick() INITIALIZATION ***************************************************************************/ -void cop400_cpu_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cop400_cpu_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/cpu/cop400/cop400.h b/src/devices/cpu/cop400/cop400.h index 72bbf4ce5c98b..db6e9e83ceb5b 100644 --- a/src/devices/cpu/cop400/cop400.h +++ b/src/devices/cpu/cop400/cop400.h @@ -73,7 +73,7 @@ enum cop400_cko_bond { class cop400_cpu_device : public cpu_device { public: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // L pins: 8-bit bi-directional auto read_l() { return m_read_l.bind(); } diff --git a/src/devices/cpu/cosmac/cosmac.cpp b/src/devices/cpu/cosmac/cosmac.cpp index 978c4e76fc8c0..6522bb613b504 100644 --- a/src/devices/cpu/cosmac/cosmac.cpp +++ b/src/devices/cpu/cosmac/cosmac.cpp @@ -792,6 +792,8 @@ void cosmac_device::execute_run() // execute initialization cycle m_state = cosmac_state::STATE_1_INIT; + + // fix me: this is very dodgy, why are we recursively calling ourselves here? run(); // next state is IDLE diff --git a/src/devices/cpu/e0c6200/e0c6s46.cpp b/src/devices/cpu/e0c6200/e0c6s46.cpp index 7c5b1196fb0b7..877cfb9612bf8 100644 --- a/src/devices/cpu/e0c6200/e0c6s46.cpp +++ b/src/devices/cpu/e0c6200/e0c6s46.cpp @@ -83,11 +83,11 @@ void e0c6s46_device::device_start() m_pixel_update_cb.resolve(); // create timers - m_core_256_handle = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(e0c6s46_device::core_256_cb), this)); + m_core_256_handle = timer_alloc(*this, FUNC(e0c6s46_device::core_256_cb)); m_core_256_handle->adjust(attotime::from_ticks(64, unscaled_clock())); - m_prgtimer_handle = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(e0c6s46_device::prgtimer_cb), this)); + m_prgtimer_handle = timer_alloc(*this, FUNC(e0c6s46_device::prgtimer_cb)); m_prgtimer_handle->adjust(attotime::never); - m_buzzer_handle = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(e0c6s46_device::buzzer_cb), this)); + m_buzzer_handle = timer_alloc(*this, FUNC(e0c6s46_device::buzzer_cb)); m_buzzer_handle->adjust(attotime::never); // zerofill diff --git a/src/devices/cpu/e132xs/e132xs.cpp b/src/devices/cpu/e132xs/e132xs.cpp index c328c0a35d7b1..1d8f40920217b 100644 --- a/src/devices/cpu/e132xs/e132xs.cpp +++ b/src/devices/cpu/e132xs/e132xs.cpp @@ -1142,7 +1142,7 @@ void hyperstone_device::init(int scale_mask) } m_io = &space(AS_IO); - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hyperstone_device::timer_callback), this)); + m_timer = timer_alloc(*this, FUNC(hyperstone_device::timer_callback)); m_core->clock_scale_mask = scale_mask; for (uint8_t i = 0; i < 16; i++) diff --git a/src/devices/cpu/f2mc16/mb9061x.cpp b/src/devices/cpu/f2mc16/mb9061x.cpp index 9a425f7ad95d1..141c8767e4e1d 100644 --- a/src/devices/cpu/f2mc16/mb9061x.cpp +++ b/src/devices/cpu/f2mc16/mb9061x.cpp @@ -41,11 +41,11 @@ void mb9061x_device::device_start() { f2mc16_device::device_start(); - m_tbtc_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mb9061x_device::tbtc_tick), this)); + m_tbtc_timer = timer_alloc(*this, FUNC(mb9061x_device::tbtc_tick)); m_tbtc_timer->adjust(attotime::never); - m_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mb9061x_device::timer0_tick), this)); + m_timer[0] = timer_alloc(*this, FUNC(mb9061x_device::timer0_tick)); m_timer[0]->adjust(attotime::never); - m_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mb9061x_device::timer1_tick), this)); + m_timer[1] = timer_alloc(*this, FUNC(mb9061x_device::timer1_tick)); m_timer[1]->adjust(attotime::never); } diff --git a/src/devices/cpu/h8/h8_sci.cpp b/src/devices/cpu/h8/h8_sci.cpp index 04a666e50660c..adac7bbf4f0ca 100644 --- a/src/devices/cpu/h8/h8_sci.cpp +++ b/src/devices/cpu/h8/h8_sci.cpp @@ -309,7 +309,7 @@ void h8_sci_device::device_reset() cur_sync_time = attotime::never; } -void h8_sci_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void h8_sci_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // Used only to force system-wide syncs } @@ -368,7 +368,7 @@ uint64_t h8_sci_device::internal_update(uint64_t current_time) bool new_clock = delta >= divider; if(new_clock != clock_value) { - cpu->synchronize(); + scheduler().synchronize(); if((!new_clock) && (clock_state & CLK_TX)) tx_dropped_edge(); @@ -397,7 +397,7 @@ uint64_t h8_sci_device::internal_update(uint64_t current_time) assert(delta < fp); bool new_clock = delta >= divider*8; if(new_clock != clock_value) { - cpu->synchronize(); + scheduler().synchronize(); if((!new_clock) && (clock_state & CLK_TX)) tx_dropped_edge(); @@ -423,7 +423,7 @@ uint64_t h8_sci_device::internal_update(uint64_t current_time) delta &= 1; bool new_clock = delta >= 1; if(new_clock != clock_value) { - cpu->synchronize(); + scheduler().synchronize(); if((!new_clock) && (clock_state & CLK_TX)) tx_dropped_edge(); @@ -447,7 +447,7 @@ uint64_t h8_sci_device::internal_update(uint64_t current_time) delta &= 15; bool new_clock = delta >= 8; if(new_clock != clock_value) { - cpu->synchronize(); + scheduler().synchronize(); if((!new_clock) && (clock_state & CLK_TX)) tx_dropped_edge(); @@ -485,7 +485,7 @@ void h8_sci_device::clock_start(int mode) return; if(!clock_state) { - cpu->synchronize(); + scheduler().synchronize(); clock_state = mode; switch(clock_mode) { case CLKM_INTERNAL_ASYNC: diff --git a/src/devices/cpu/h8/h8_sci.h b/src/devices/cpu/h8/h8_sci.h index bf3d5b8bcbb3e..05f0be21b9f73 100644 --- a/src/devices/cpu/h8/h8_sci.h +++ b/src/devices/cpu/h8/h8_sci.h @@ -122,7 +122,7 @@ class h8_sci_device : public device_t { virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void clock_start(int mode); void clock_stop(int mode); diff --git a/src/devices/cpu/hd61700/hd61700.cpp b/src/devices/cpu/hd61700/hd61700.cpp index 95f61dc6e842c..59ccaeb0128a5 100644 --- a/src/devices/cpu/hd61700/hd61700.cpp +++ b/src/devices/cpu/hd61700/hd61700.cpp @@ -230,7 +230,7 @@ void hd61700_cpu_device::device_reset() //------------------------------------------------- // device_timer - handler timer events //------------------------------------------------- -void hd61700_cpu_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hd61700_cpu_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/cpu/hd61700/hd61700.h b/src/devices/cpu/hd61700/hd61700.h index f11da04a4bde6..9eaa05f66f32c 100644 --- a/src/devices/cpu/hd61700/hd61700.h +++ b/src/devices/cpu/hd61700/hd61700.h @@ -47,7 +47,7 @@ class hd61700_cpu_device : public cpu_device // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_execute_interface overrides virtual uint32_t execute_min_cycles() const noexcept override { return 1; } diff --git a/src/devices/cpu/i86/i186.cpp b/src/devices/cpu/i86/i186.cpp index 0c15e41cbbc60..54b48c8f5a170 100644 --- a/src/devices/cpu/i86/i186.cpp +++ b/src/devices/cpu/i86/i186.cpp @@ -1199,7 +1199,12 @@ void i80186_cpu_device::external_int(uint16_t intno, int state) * *************************************/ -void i80186_cpu_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void i80186_cpu_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) +{ + device_timer(id, param, ptr); +} + +void i80186_cpu_device::device_timer(device_timer_id id, int param, void *ptr) { switch(id) { @@ -1303,10 +1308,10 @@ void i80186_cpu_device::inc_timer(int which) if (t->control & 2) { if (t->count == ((t->control & 0x1000) ? t->maxB : t->maxA)) - device_timer(*t->int_timer, which, which, nullptr); + device_timer(which, which, nullptr); } else if (t->count == t->maxA) - device_timer(*t->int_timer, which, which, nullptr); + device_timer(which, which, nullptr); } void i80186_cpu_device::internal_timer_update(int which, int new_count, int new_maxA, int new_maxB, int new_control) diff --git a/src/devices/cpu/i86/i186.h b/src/devices/cpu/i86/i186.h index 1ef28afca6eea..b291b82e84899 100644 --- a/src/devices/cpu/i86/i186.h +++ b/src/devices/cpu/i86/i186.h @@ -65,7 +65,7 @@ class i80186_cpu_device : public i8086_common_cpu_device virtual void execute_run() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual uint32_t execute_input_lines() const noexcept override { return 1; } virtual uint8_t fetch() override; uint32_t update_pc() { return m_pc = (m_sregs[CS] << 4) + m_ip; } @@ -83,6 +83,7 @@ class i80186_cpu_device : public i8086_common_cpu_device static const uint8_t m_i80186_timing[200]; private: + void device_timer(device_timer_id id, int param, void *ptr); void update_interrupt_state(); void handle_eoi(int data); void external_int(uint16_t intno, int state); diff --git a/src/devices/cpu/lc8670/lc8670.cpp b/src/devices/cpu/lc8670/lc8670.cpp index 4d03d6c5c0e4a..ed4e594560849 100644 --- a/src/devices/cpu/lc8670/lc8670.cpp +++ b/src/devices/cpu/lc8670/lc8670.cpp @@ -332,7 +332,7 @@ void lc8670_cpu_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void lc8670_cpu_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void lc8670_cpu_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/cpu/lc8670/lc8670.h b/src/devices/cpu/lc8670/lc8670.h index 890472d689f23..8576a1d782bef 100644 --- a/src/devices/cpu/lc8670/lc8670.h +++ b/src/devices/cpu/lc8670/lc8670.h @@ -93,7 +93,7 @@ class lc8670_cpu_device : public cpu_device // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_execute_interface overrides virtual uint32_t execute_min_cycles() const noexcept override { return 1; } diff --git a/src/devices/cpu/m37710/m37710.cpp b/src/devices/cpu/m37710/m37710.cpp index 87dca3939010b..a0469557dee22 100644 --- a/src/devices/cpu/m37710/m37710.cpp +++ b/src/devices/cpu/m37710/m37710.cpp @@ -1355,12 +1355,12 @@ void m37710_cpu_device::device_start() for (int i = 0; i < 8; i++) { - m_timers[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m37710_cpu_device::m37710_timer_cb), this)); + m_timers[i] = timer_alloc(*this, FUNC(m37710_cpu_device::m37710_timer_cb)); m_reload[i] = attotime::never; m_timer_out[i] = 0; } - m_ad_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m37710_cpu_device::ad_timer_cb), this)); + m_ad_timer = timer_alloc(*this, FUNC(m37710_cpu_device::ad_timer_cb)); save_item(NAME(m_a)); save_item(NAME(m_b)); diff --git a/src/devices/cpu/m6502/m3745x.cpp b/src/devices/cpu/m6502/m3745x.cpp index 2532e25d8ab4a..b4ee6c1edc0b0 100644 --- a/src/devices/cpu/m6502/m3745x.cpp +++ b/src/devices/cpu/m6502/m3745x.cpp @@ -116,7 +116,7 @@ void m3745x_device::device_reset() m_last_all_ints = 0; } -void m3745x_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void m3745x_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/cpu/m6502/m3745x.h b/src/devices/cpu/m6502/m3745x.h index 73e16cb011798..aa8cdb46a56ed 100644 --- a/src/devices/cpu/m6502/m3745x.h +++ b/src/devices/cpu/m6502/m3745x.h @@ -58,7 +58,7 @@ class m3745x_device : public m740_device // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual space_config_vector memory_space_config() const override; // device_execute_interface overrides diff --git a/src/devices/cpu/m6502/m5074x.cpp b/src/devices/cpu/m6502/m5074x.cpp index deb79eb0585c6..4e9daeaea6db9 100644 --- a/src/devices/cpu/m6502/m5074x.cpp +++ b/src/devices/cpu/m6502/m5074x.cpp @@ -122,7 +122,7 @@ void m5074x_device::device_reset() m_tmr1 = m_tmr2 = m_tmrx = 0; } -void m5074x_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void m5074x_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -607,7 +607,7 @@ void m50753_device::execute_set_input(int inputnum, int state) recalc_irqs(); } -void m50753_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void m50753_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/cpu/m6502/m5074x.h b/src/devices/cpu/m6502/m5074x.h index b7ce310bd6e11..afd903a9e3419 100644 --- a/src/devices/cpu/m6502/m5074x.h +++ b/src/devices/cpu/m6502/m5074x.h @@ -56,7 +56,7 @@ class m5074x_device : public m740_device // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual space_config_vector memory_space_config() const override; // device_execute_interface overrides (TODO: /8 in M50740A/41/52/57/58 SLW mode) @@ -128,7 +128,7 @@ class m50753_device : public m5074x_device // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void execute_set_input(int inputnum, int state) override; diff --git a/src/devices/cpu/m6502/m6500_1.cpp b/src/devices/cpu/m6502/m6500_1.cpp index aaede8b2bff7e..cc0febc32a82f 100644 --- a/src/devices/cpu/m6502/m6500_1.cpp +++ b/src/devices/cpu/m6502/m6500_1.cpp @@ -105,28 +105,28 @@ m6500_1_device::m6500_1_device(machine_config const &mconfig, char const *tag, d void m6500_1_device::pa_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(m6500_1_device::set_port_in<0>), this), unsigned(data)); + m_set_port_in[0].synchronize(data); } void m6500_1_device::pb_w(u8 data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(m6500_1_device::set_port_in<1>), this), unsigned(data)); + m_set_port_in[1].synchronize(data); } void m6500_1_device::pc_w(u8 data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(m6500_1_device::set_port_in<2>), this), unsigned(data)); + m_set_port_in[2].synchronize(data); } void m6500_1_device::pd_w(u8 data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(m6500_1_device::set_port_in<3>), this), unsigned(data)); + m_set_port_in[3].synchronize(data); } WRITE_LINE_MEMBER(m6500_1_device::cntr_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(m6500_1_device::set_cntr_in), this), state); + m_set_cntr_in.synchronize(state); } @@ -145,6 +145,12 @@ void m6500_1_device::device_start() m_counter_base = 0U; + m_set_port_in[0].init(*this, FUNC(m6500_1_device::set_port_in<0>)); + m_set_port_in[1].init(*this, FUNC(m6500_1_device::set_port_in<1>)); + m_set_port_in[2].init(*this, FUNC(m6500_1_device::set_port_in<2>)); + m_set_port_in[3].init(*this, FUNC(m6500_1_device::set_port_in<3>)); + m_set_cntr_in.init(*this, FUNC(m6500_1_device::set_cntr_in)); + state_add(M6500_1_CR, "CR", m_cr).callimport().callexport(); state_add(M6500_1_UL, "UL", m_ul).callimport().callexport(); state_add(M6500_1_LL, "LL", m_ll).callimport().callexport(); diff --git a/src/devices/cpu/m6502/m6500_1.h b/src/devices/cpu/m6502/m6500_1.h index 0a4a07a6ff957..bdccb8f972358 100644 --- a/src/devices/cpu/m6502/m6500_1.h +++ b/src/devices/cpu/m6502/m6500_1.h @@ -98,6 +98,7 @@ class m6500_1_device : public m6502_mcu_device void write_port(offs_t offset, u8 data); void clear_edge(offs_t offset, u8 data); template TIMER_CALLBACK_MEMBER(set_port_in); + transient_timer_factory m_set_port_in[4]; u8 read_upper_count(); u8 read_lower_count(); @@ -108,6 +109,7 @@ class m6500_1_device : public m6502_mcu_device bool pulse_generator_mode() const; bool event_counter_mode() const; TIMER_CALLBACK_MEMBER(set_cntr_in); + transient_timer_factory m_set_cntr_in; void toggle_cntr(); void memory_map(address_map &map); diff --git a/src/devices/cpu/m6502/st2204.cpp b/src/devices/cpu/m6502/st2204.cpp index 2523f34d5a844..119361269b723 100644 --- a/src/devices/cpu/m6502/st2204.cpp +++ b/src/devices/cpu/m6502/st2204.cpp @@ -91,9 +91,9 @@ void st2204_device::device_start() init_base_timer(0x0020); init_lcd_timer(0x0040); - m_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(st2204_device::t0_interrupt), this)); - m_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(st2204_device::t1_interrupt), this)); - m_psg_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(st2204_device::psg_interrupt), this)); + m_timer[0] = timer_alloc(*this, FUNC(st2204_device::t0_interrupt)); + m_timer[1] = timer_alloc(*this, FUNC(st2204_device::t1_interrupt)); + m_psg_timer = timer_alloc(*this, FUNC(st2204_device::psg_interrupt)); save_item(NAME(m_tmode)); save_item(NAME(m_tcntr)); diff --git a/src/devices/cpu/m6502/st2205u.cpp b/src/devices/cpu/m6502/st2205u.cpp index 15d8992384cb6..d87e09a76741b 100644 --- a/src/devices/cpu/m6502/st2205u.cpp +++ b/src/devices/cpu/m6502/st2205u.cpp @@ -101,10 +101,10 @@ st2302u_device::st2302u_device(const machine_config &mconfig, const char *tag, d void st2205u_base_device::base_init(std::unique_ptr &&intf) { - m_timer_12bit[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(st2205u_device::t0_interrupt), this)); - m_timer_12bit[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(st2205u_device::t1_interrupt), this)); - m_timer_12bit[2] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(st2205u_device::t2_interrupt), this)); - m_timer_12bit[3] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(st2205u_device::t3_interrupt), this)); + m_timer_12bit[0] = timer_alloc(*this, FUNC(st2205u_device::t0_interrupt)); + m_timer_12bit[1] = timer_alloc(*this, FUNC(st2205u_device::t1_interrupt)); + m_timer_12bit[2] = timer_alloc(*this, FUNC(st2205u_device::t2_interrupt)); + m_timer_12bit[3] = timer_alloc(*this, FUNC(st2205u_device::t3_interrupt)); init_base_timer(0x0040); init_lcd_timer(0x0080); diff --git a/src/devices/cpu/m6502/st2xxx.cpp b/src/devices/cpu/m6502/st2xxx.cpp index 2c24f65f653f4..68164c60dc365 100644 --- a/src/devices/cpu/m6502/st2xxx.cpp +++ b/src/devices/cpu/m6502/st2xxx.cpp @@ -130,7 +130,7 @@ void st2xxx_device::init_base_timer(u16 ireq) if (st2xxx_bt_divider(n) != 0) { m_bt_mask |= 1 << n; - m_base_timer[n] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(st2xxx_device::bt_interrupt), this)); + m_base_timer[n] = timer_alloc(*this, FUNC(st2xxx_device::bt_interrupt)); } } @@ -149,7 +149,7 @@ void st2xxx_device::init_lcd_timer(u16 ireq) m_lcd_ireq = ireq; assert(m_lcd_ireq != 0); - m_lcd_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(st2xxx_device::lcd_interrupt), this)); + m_lcd_timer = timer_alloc(*this, FUNC(st2xxx_device::lcd_interrupt)); } void st2xxx_device::save_common_registers() diff --git a/src/devices/cpu/m6800/m6801.cpp b/src/devices/cpu/m6800/m6801.cpp index a5e3226d77071..b31159e2f845a 100644 --- a/src/devices/cpu/m6800/m6801.cpp +++ b/src/devices/cpu/m6800/m6801.cpp @@ -1041,7 +1041,7 @@ void m6801_cpu_device::device_start() { m6800_cpu_device::device_start(); - m_sci_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m6801_cpu_device::sci_tick),this)); + m_sci_timer = timer_alloc(*this, FUNC(m6801_cpu_device::sci_tick)); m_irq_state[M6801_IS_LINE] = 0; m_port_ddr[3] = 0; diff --git a/src/devices/cpu/mb88xx/mb88xx.cpp b/src/devices/cpu/mb88xx/mb88xx.cpp index fe07ba80d2c37..aff9678749735 100644 --- a/src/devices/cpu/mb88xx/mb88xx.cpp +++ b/src/devices/cpu/mb88xx/mb88xx.cpp @@ -194,7 +194,7 @@ void mb88_cpu_device::device_start() m_read_si.resolve_safe(0); m_write_so.resolve_safe(); - m_serial = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mb88_cpu_device::serial_timer), this)); + m_serial = timer_alloc(*this, FUNC(mb88_cpu_device::serial_timer)); m_ctr = 0; diff --git a/src/devices/cpu/mcs48/mcs48.cpp b/src/devices/cpu/mcs48/mcs48.cpp index 34d89693bf261..2b51e1df82bb9 100644 --- a/src/devices/cpu/mcs48/mcs48.cpp +++ b/src/devices/cpu/mcs48/mcs48.cpp @@ -1418,9 +1418,17 @@ TIMER_CALLBACK_MEMBER( upi41_cpu_device::master_callback ) void upi41_cpu_device::upi41_master_w(offs_t offset, uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(upi41_cpu_device::master_callback), this), (offset << 8) | data); + m_master_callback.synchronize((offset << 8) | data); } +void upi41_cpu_device::device_start() +{ + mcs48_cpu_device::device_start(); + + m_master_callback.init(*this, FUNC(upi41_cpu_device::master_callback)); +} + + /*************************************************************************** GENERAL CONTEXT ACCESS diff --git a/src/devices/cpu/mcs48/mcs48.h b/src/devices/cpu/mcs48/mcs48.h index fa73d33e5b6ca..4fb1b75643fd5 100644 --- a/src/devices/cpu/mcs48/mcs48.h +++ b/src/devices/cpu/mcs48/mcs48.h @@ -631,7 +631,11 @@ class upi41_cpu_device : public mcs48_cpu_device // construction/destruction upi41_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int rom_size, int ram_size); + // overrides + virtual void device_start() override; + TIMER_CALLBACK_MEMBER( master_callback ); + transient_timer_factory m_master_callback; }; class i8041a_device : public upi41_cpu_device diff --git a/src/devices/cpu/melps4/m58846.cpp b/src/devices/cpu/melps4/m58846.cpp index 436dd312512c4..d1ea5fb5820bc 100644 --- a/src/devices/cpu/melps4/m58846.cpp +++ b/src/devices/cpu/melps4/m58846.cpp @@ -66,7 +66,7 @@ void m58846_device::reset_timer() m_timer->adjust(base); } -void m58846_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void m58846_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id != 0) return; diff --git a/src/devices/cpu/melps4/m58846.h b/src/devices/cpu/melps4/m58846.h index 63ead8d7a6097..6128b48705ef2 100644 --- a/src/devices/cpu/melps4/m58846.h +++ b/src/devices/cpu/melps4/m58846.h @@ -30,7 +30,7 @@ class m58846_device : public melps4_cpu_device virtual void execute_one() override; // timers - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void write_v(uint8_t data) override; void data_128x4(address_map &map); diff --git a/src/devices/cpu/mips/mips3.cpp b/src/devices/cpu/mips/mips3.cpp index f82ae82da508d..45ead83f29378 100644 --- a/src/devices/cpu/mips/mips3.cpp +++ b/src/devices/cpu/mips/mips3.cpp @@ -432,7 +432,7 @@ void mips3_device::device_start() m_program->accessors(m_memory); /* allocate a timer for the compare interrupt */ - m_compare_int_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mips3_device::compare_int_callback), this)); + m_compare_int_timer = timer_alloc(*this, FUNC(mips3_device::compare_int_callback)); uint32_t flags = 0; /* initialize the UML generator */ diff --git a/src/devices/cpu/mips/r4000.cpp b/src/devices/cpu/mips/r4000.cpp index 2b12a2089f593..398c87cffbba6 100644 --- a/src/devices/cpu/mips/r4000.cpp +++ b/src/devices/cpu/mips/r4000.cpp @@ -186,7 +186,7 @@ void r4000_base_device::device_start() m_hard_reset = true; - m_cp0_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(r4000_base_device::cp0_timer_callback), this)); + m_cp0_timer = timer_alloc(*this, FUNC(r4000_base_device::cp0_timer_callback)); // compute icache line selection mask and allocate tag and data unsigned const config_ic = (m_cp0[CP0_Config] & CONFIG_IC) >> 9; diff --git a/src/devices/cpu/mn10200/mn10200.cpp b/src/devices/cpu/mn10200/mn10200.cpp index 0f989d9844bde..af0e7565a6c8d 100644 --- a/src/devices/cpu/mn10200/mn10200.cpp +++ b/src/devices/cpu/mn10200/mn10200.cpp @@ -151,7 +151,7 @@ void mn10200_device::device_start() for (int tmr = 0; tmr < MN10200_NUM_TIMERS_8BIT; tmr++) { - m_timer_timers[tmr] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mn10200_device::simple_timer_cb), this)); + m_timer_timers[tmr] = timer_alloc(*this, FUNC(mn10200_device::simple_timer_cb)); m_timer_timers[tmr]->adjust(attotime::never, tmr); } diff --git a/src/devices/cpu/nec/v25.cpp b/src/devices/cpu/nec/v25.cpp index 8a44732d07d47..76128dacbd6d9 100644 --- a/src/devices/cpu/nec/v25.cpp +++ b/src/devices/cpu/nec/v25.cpp @@ -557,7 +557,7 @@ void v25_common_device::device_start() m_E16 = 0; for (i = 0; i < 4; i++) - m_timers[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(v25_common_device::v25_timer_callback),this)); + m_timers[i] = timer_alloc(*this, FUNC(v25_common_device::v25_timer_callback)); std::fill_n(&m_intp_state[0], 3, 0); std::fill_n(&m_ems[0], 3, 0); diff --git a/src/devices/cpu/powerpc/ppccom.cpp b/src/devices/cpu/powerpc/ppccom.cpp index 1ff153ca1b687..37b24044cca1b 100644 --- a/src/devices/cpu/powerpc/ppccom.cpp +++ b/src/devices/cpu/powerpc/ppccom.cpp @@ -753,22 +753,22 @@ void ppc_device::device_start() /* allocate a timer for the compare interrupt */ if ((m_cap & PPCCAP_OEA) && (m_tb_divisor)) - m_decrementer_int_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ppc_device::decrementer_int_callback), this)); + m_decrementer_int_timer = timer_alloc(*this, FUNC(ppc_device::decrementer_int_callback)); /* and for the 4XX interrupts if needed */ if (m_cap & PPCCAP_4XX) { - m_fit_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ppc_device::ppc4xx_fit_callback), this)); - m_pit_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ppc_device::ppc4xx_pit_callback), this)); - m_spu.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ppc_device::ppc4xx_spu_callback), this)); + m_fit_timer = timer_alloc(*this, FUNC(ppc_device::ppc4xx_fit_callback)); + m_pit_timer = timer_alloc(*this, FUNC(ppc_device::ppc4xx_pit_callback)); + m_spu.timer = timer_alloc(*this, FUNC(ppc_device::ppc4xx_spu_callback)); } if (m_cap & PPCCAP_4XX) { - m_buffered_dma_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ppc_device::ppc4xx_buffered_dma_callback), this)); - m_buffered_dma_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ppc_device::ppc4xx_buffered_dma_callback), this)); - m_buffered_dma_timer[2] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ppc_device::ppc4xx_buffered_dma_callback), this)); - m_buffered_dma_timer[3] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ppc_device::ppc4xx_buffered_dma_callback), this)); + m_buffered_dma_timer[0] = timer_alloc(*this, FUNC(ppc_device::ppc4xx_buffered_dma_callback)); + m_buffered_dma_timer[1] = timer_alloc(*this, FUNC(ppc_device::ppc4xx_buffered_dma_callback)); + m_buffered_dma_timer[2] = timer_alloc(*this, FUNC(ppc_device::ppc4xx_buffered_dma_callback)); + m_buffered_dma_timer[3] = timer_alloc(*this, FUNC(ppc_device::ppc4xx_buffered_dma_callback)); m_buffered_dma_rate[0] = 10000; m_buffered_dma_rate[1] = 10000; diff --git a/src/devices/cpu/psx/dma.cpp b/src/devices/cpu/psx/dma.cpp index 36078c5b499f5..d5c6cffe1b2d9 100644 --- a/src/devices/cpu/psx/dma.cpp +++ b/src/devices/cpu/psx/dma.cpp @@ -196,7 +196,7 @@ void psxdma_device::dma_finished( int index ) dma_stop_timer( index ); } -void psxdma_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void psxdma_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { dma_finished(id); } diff --git a/src/devices/cpu/psx/dma.h b/src/devices/cpu/psx/dma.h index 1bd743614b273..ac1840f35b857 100644 --- a/src/devices/cpu/psx/dma.h +++ b/src/devices/cpu/psx/dma.h @@ -39,7 +39,7 @@ class psxdma_device : public device_t virtual void device_start() override; virtual void device_reset() override; virtual void device_post_load() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: struct psx_dma_channel diff --git a/src/devices/cpu/psx/rcnt.cpp b/src/devices/cpu/psx/rcnt.cpp index 37932db2d8deb..b9cd37ff2506d 100644 --- a/src/devices/cpu/psx/rcnt.cpp +++ b/src/devices/cpu/psx/rcnt.cpp @@ -227,7 +227,7 @@ void psxrcnt_device::root_timer_adjust( int n_counter ) } } -void psxrcnt_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void psxrcnt_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { int n_counter = id; psx_root *root = &root_counter[ n_counter ]; diff --git a/src/devices/cpu/psx/rcnt.h b/src/devices/cpu/psx/rcnt.h index 4e44e365466c8..7b102ce13445f 100644 --- a/src/devices/cpu/psx/rcnt.h +++ b/src/devices/cpu/psx/rcnt.h @@ -41,7 +41,7 @@ class psxrcnt_device : public device_t virtual void device_start() override; virtual void device_reset() override; virtual void device_post_load() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: struct psx_root diff --git a/src/devices/cpu/psx/sio.cpp b/src/devices/cpu/psx/sio.cpp index 2fac592bb5966..644d7dab8849a 100644 --- a/src/devices/cpu/psx/sio.cpp +++ b/src/devices/cpu/psx/sio.cpp @@ -138,7 +138,7 @@ void psxsio_device::sio_timer_adjust() m_timer->adjust( n_time ); } -void psxsio_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void psxsio_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { verboselog( *this, 2, "sio tick\n" ); diff --git a/src/devices/cpu/psx/sio.h b/src/devices/cpu/psx/sio.h index 3662ea01a53c3..2004dcdb1b2f2 100644 --- a/src/devices/cpu/psx/sio.h +++ b/src/devices/cpu/psx/sio.h @@ -54,7 +54,7 @@ class psxsio_device : public device_t // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_post_load() override; private: diff --git a/src/devices/cpu/rii/riscii.cpp b/src/devices/cpu/rii/riscii.cpp index 804280dc6e19f..54e452338e324 100644 --- a/src/devices/cpu/rii/riscii.cpp +++ b/src/devices/cpu/rii/riscii.cpp @@ -206,8 +206,8 @@ void riscii_series_device::device_start() set_icountptr(m_icount); - m_timer0 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(riscii_series_device::timer0), this)); - m_speech_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(riscii_series_device::speech_timer), this)); + m_timer0 = timer_alloc(*this, FUNC(riscii_series_device::timer0)); + m_speech_timer = timer_alloc(*this, FUNC(riscii_series_device::speech_timer)); state_add(RII_PC, "PC", [this]() { return m_pc; }, [this](u32 pc) { debug_set_pc(pc); }).mask(m_pcmask); state_add(STATE_GENPC, "GENPC", [this]() { return m_pc; }, [this](u32 pc) { debug_set_pc(pc); }).mask(m_pcmask).noshow(); diff --git a/src/devices/cpu/sc61860/sc61860.cpp b/src/devices/cpu/sc61860/sc61860.cpp index bd99080a9b5a5..d77ca6ffa9b8e 100644 --- a/src/devices/cpu/sc61860/sc61860.cpp +++ b/src/devices/cpu/sc61860/sc61860.cpp @@ -106,7 +106,7 @@ void sc61860_device::device_reset() void sc61860_device::device_start() { - m_2ms_tick_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sc61860_device::sc61860_2ms_tick), this)); + m_2ms_tick_timer = timer_alloc(*this, FUNC(sc61860_device::sc61860_2ms_tick)); m_2ms_tick_timer->adjust(attotime::from_hz(500), 0, attotime::from_hz(500)); space(AS_PROGRAM).cache(m_cache); diff --git a/src/devices/cpu/sh/sh2.cpp b/src/devices/cpu/sh/sh2.cpp index d46a2f5fdc07c..57bb1629e2e19 100644 --- a/src/devices/cpu/sh/sh2.cpp +++ b/src/devices/cpu/sh/sh2.cpp @@ -515,15 +515,15 @@ void sh2_device::device_start() { sh_common_execution::device_start(); - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sh2_device::sh2_timer_callback), this)); + m_timer = timer_alloc(*this, FUNC(sh2_device::sh2_timer_callback)); m_timer->adjust(attotime::never); - m_wdtimer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sh2_device::sh2_wdtimer_callback), this)); + m_wdtimer = timer_alloc(*this, FUNC(sh2_device::sh2_wdtimer_callback)); m_wdtimer->adjust(attotime::never); - m_dma_current_active_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sh2_device::sh2_dma_current_active_callback), this)); + m_dma_current_active_timer[0] = timer_alloc(*this, FUNC(sh2_device::sh2_dma_current_active_callback)); m_dma_current_active_timer[0]->adjust(attotime::never); - m_dma_current_active_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sh2_device::sh2_dma_current_active_callback), this)); + m_dma_current_active_timer[1] = timer_alloc(*this, FUNC(sh2_device::sh2_dma_current_active_callback)); m_dma_current_active_timer[1]->adjust(attotime::never); /* resolve callbacks */ diff --git a/src/devices/cpu/sh/sh4.cpp b/src/devices/cpu/sh/sh4.cpp index acfd0dbfc8abd..f3b9c6ac89072 100644 --- a/src/devices/cpu/sh/sh4.cpp +++ b/src/devices/cpu/sh/sh4.cpp @@ -2038,21 +2038,21 @@ void sh34_base_device::device_start() for (int i = 0; i < 3; i++) { - m_timer[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sh34_base_device::sh4_timer_callback), this)); + m_timer[i] = timer_alloc(*this, FUNC(sh34_base_device::sh4_timer_callback)); m_timer[i]->adjust(attotime::never, i); } for (int i = 0; i < 4; i++) { - m_dma_timer[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sh34_base_device::sh4_dmac_callback), this)); + m_dma_timer[i] = timer_alloc(*this, FUNC(sh34_base_device::sh4_dmac_callback)); m_dma_timer[i]->adjust(attotime::never, i); } - m_refresh_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sh34_base_device::sh4_refresh_timer_callback), this)); + m_refresh_timer = timer_alloc(*this, FUNC(sh34_base_device::sh4_refresh_timer_callback)); m_refresh_timer->adjust(attotime::never); m_refresh_timer_base = 0; - m_rtc_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sh34_base_device::sh4_rtc_timer_callback), this)); + m_rtc_timer = timer_alloc(*this, FUNC(sh34_base_device::sh4_rtc_timer_callback)); m_rtc_timer->adjust(attotime::never); sh4_parse_configuration(); diff --git a/src/devices/cpu/sharc/sharc.cpp b/src/devices/cpu/sharc/sharc.cpp index cec9388854862..d286854132f94 100644 --- a/src/devices/cpu/sharc/sharc.cpp +++ b/src/devices/cpu/sharc/sharc.cpp @@ -582,7 +582,7 @@ void adsp21062_device::device_start() m_core->cache_dirty = 1; - m_core->delayed_iop_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(adsp21062_device::sharc_iop_delayed_write_callback), this)); + m_core->delayed_iop_timer = timer_alloc(*this, FUNC(adsp21062_device::sharc_iop_delayed_write_callback)); for (auto & elem : m_core->dma_op) { @@ -596,7 +596,7 @@ void adsp21062_device::device_start() elem.pmode = 0; elem.chained_direction = 0; elem.active = false; - elem.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(adsp21062_device::sharc_dma_callback), this)); + elem.timer = timer_alloc(*this, FUNC(adsp21062_device::sharc_dma_callback)); } for (int i=0; i < 16; i++) diff --git a/src/devices/cpu/sm510/sm510base.cpp b/src/devices/cpu/sm510/sm510base.cpp index cca35da7730dd..27fe81e5161c3 100644 --- a/src/devices/cpu/sm510/sm510base.cpp +++ b/src/devices/cpu/sm510/sm510base.cpp @@ -216,7 +216,7 @@ TIMER_CALLBACK_MEMBER(sm510_base_device::lcd_timer_cb) void sm510_base_device::init_lcd_driver() { // note: in reality, this timer runs at high frequency off the main divider, strobing one segment at a time - m_lcd_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sm510_base_device::lcd_timer_cb), this)); + m_lcd_timer = timer_alloc(*this, FUNC(sm510_base_device::lcd_timer_cb)); attotime period = attotime::from_ticks(0x20, unscaled_clock()); // default 1kHz m_lcd_timer->adjust(period, 0, period); } @@ -266,7 +266,7 @@ TIMER_CALLBACK_MEMBER(sm510_base_device::div_timer_cb) void sm510_base_device::init_divider() { - m_div_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sm510_base_device::div_timer_cb), this)); + m_div_timer = timer_alloc(*this, FUNC(sm510_base_device::div_timer_cb)); m_div_timer->adjust(attotime::from_ticks(1, unscaled_clock()), 0, attotime::from_ticks(1, unscaled_clock())); } diff --git a/src/devices/cpu/tlcs870/tlcs870.cpp b/src/devices/cpu/tlcs870/tlcs870.cpp index 2766804a50a8e..5994fdc5faded 100644 --- a/src/devices/cpu/tlcs870/tlcs870.cpp +++ b/src/devices/cpu/tlcs870/tlcs870.cpp @@ -1245,13 +1245,13 @@ void tlcs870_device::device_start() m_port_analog_in_cb.resolve_all_safe(0xff); m_serial_out_cb.resolve_all_safe(); - m_serial_transmit_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tlcs870_device::sio0_transmit_cb), this)); - m_serial_transmit_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tlcs870_device::sio1_transmit_cb), this)); + m_serial_transmit_timer[0] = timer_alloc(*this, FUNC(tlcs870_device::sio0_transmit_cb)); + m_serial_transmit_timer[1] = timer_alloc(*this, FUNC(tlcs870_device::sio1_transmit_cb)); - m_tcx_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tlcs870_device::tc1_cb), this)); - m_tcx_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tlcs870_device::tc2_cb), this)); - m_tcx_timer[2] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tlcs870_device::tc3_cb), this)); - m_tcx_timer[3] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tlcs870_device::tc4_cb), this)); + m_tcx_timer[0] = timer_alloc(*this, FUNC(tlcs870_device::tc1_cb)); + m_tcx_timer[1] = timer_alloc(*this, FUNC(tlcs870_device::tc2_cb)); + m_tcx_timer[2] = timer_alloc(*this, FUNC(tlcs870_device::tc3_cb)); + m_tcx_timer[3] = timer_alloc(*this, FUNC(tlcs870_device::tc4_cb)); } diff --git a/src/devices/cpu/tlcs90/tlcs90.cpp b/src/devices/cpu/tlcs90/tlcs90.cpp index bd02b9cc19752..7a6e923ac354d 100644 --- a/src/devices/cpu/tlcs90/tlcs90.cpp +++ b/src/devices/cpu/tlcs90/tlcs90.cpp @@ -2951,9 +2951,9 @@ void tlcs90_device::device_start() // Timers for (int i = 0; i < 4; i++) - m_timer[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tlcs90_device::t90_timer_callback),this)); + m_timer[i] = timer_alloc(*this, FUNC(tlcs90_device::t90_timer_callback)); - m_timer[4] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tlcs90_device::t90_timer4_callback),this)); + m_timer[4] = timer_alloc(*this, FUNC(tlcs90_device::t90_timer4_callback)); state_add( T90_PC, "PC", m_pc.w.l).formatstr("%04X"); state_add( T90_SP, "SP", m_sp.w.l).formatstr("%04X"); diff --git a/src/devices/cpu/tms34010/tms34010.cpp b/src/devices/cpu/tms34010/tms34010.cpp index 6eaf63b96aea0..3d2e8c3b121d9 100644 --- a/src/devices/cpu/tms34010/tms34010.cpp +++ b/src/devices/cpu/tms34010/tms34010.cpp @@ -741,8 +741,10 @@ void tms340x0_device::device_start() } } + m_internal_interrupt_callback.init(*this, FUNC(tms340x0_device::internal_interrupt_callback)); + /* allocate a scanline timer and set it to go off at the start */ - m_scantimer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tms340x0_device::scanline_callback), this)); + m_scantimer = timer_alloc(*this, FUNC(tms340x0_device::scanline_callback)); m_scantimer->adjust(attotime::zero); save_item(NAME(m_pc)); @@ -1286,7 +1288,7 @@ void tms34010_device::io_register_w(offs_t offset, u16 data, u16 mem_mask) /* NMI issued? */ if (data & 0x0100) - machine().scheduler().synchronize(timer_expired_delegate(FUNC(tms340x0_device::internal_interrupt_callback), this), 0); + m_internal_interrupt_callback.synchronize(0); } break; @@ -1324,7 +1326,7 @@ void tms34010_device::io_register_w(offs_t offset, u16 data, u16 mem_mask) /* input interrupt? (should really be state-based, but the functions don't exist!) */ if (!(oldreg & 0x0008) && (newreg & 0x0008)) - machine().scheduler().synchronize(timer_expired_delegate(FUNC(tms340x0_device::internal_interrupt_callback), this), TMS34010_HI); + m_internal_interrupt_callback.synchronize(TMS34010_HI); else if ((oldreg & 0x0008) && !(newreg & 0x0008)) IOREG(REG_INTPEND) &= ~TMS34010_HI; } @@ -1441,7 +1443,7 @@ void tms34020_device::io_register_w(offs_t offset, u16 data, u16 mem_mask) /* NMI issued? */ if (data & 0x0100) - machine().scheduler().synchronize(timer_expired_delegate(FUNC(tms340x0_device::internal_interrupt_callback), this), 0); + m_internal_interrupt_callback.synchronize(0); break; case REG020_HSTCTLL: @@ -1476,7 +1478,7 @@ void tms34020_device::io_register_w(offs_t offset, u16 data, u16 mem_mask) /* input interrupt? (should really be state-based, but the functions don't exist!) */ if (!(oldreg & 0x0008) && (newreg & 0x0008)) - machine().scheduler().synchronize(timer_expired_delegate(FUNC(tms340x0_device::internal_interrupt_callback), this), TMS34010_HI); + m_internal_interrupt_callback.synchronize(TMS34010_HI); else if ((oldreg & 0x0008) && !(newreg & 0x0008)) IOREG(REG020_INTPEND) &= ~TMS34010_HI; break; diff --git a/src/devices/cpu/tms34010/tms34010.h b/src/devices/cpu/tms34010/tms34010.h index c3d639e3506a0..a0fe46071f06a 100644 --- a/src/devices/cpu/tms34010/tms34010.h +++ b/src/devices/cpu/tms34010/tms34010.h @@ -177,6 +177,7 @@ class tms340x0_device : public cpu_device, u16 host_r(offs_t offset); TIMER_CALLBACK_MEMBER(internal_interrupt_callback); + transient_timer_factory m_internal_interrupt_callback; TIMER_CALLBACK_MEMBER(scanline_callback); protected: diff --git a/src/devices/cpu/tms7000/tms7000.cpp b/src/devices/cpu/tms7000/tms7000.cpp index ea7893f8cea62..02c8195c3337a 100644 --- a/src/devices/cpu/tms7000/tms7000.cpp +++ b/src/devices/cpu/tms7000/tms7000.cpp @@ -222,7 +222,7 @@ void tms7000_device::device_start() for (int tmr = 0; tmr < 2; tmr++) { - m_timer_handle[tmr] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tms7000_device::simple_timer_cb), this)); + m_timer_handle[tmr] = timer_alloc(*this, FUNC(tms7000_device::simple_timer_cb)); m_timer_handle[tmr]->adjust(attotime::never, tmr); m_timer_data[tmr] = 0; diff --git a/src/devices/cpu/ucom4/ucom4.cpp b/src/devices/cpu/ucom4/ucom4.cpp index 8d98f1d2f942e..0643283f0ab69 100644 --- a/src/devices/cpu/ucom4/ucom4.cpp +++ b/src/devices/cpu/ucom4/ucom4.cpp @@ -167,7 +167,7 @@ void ucom4_cpu_device::device_start() m_datamask = (1 << m_datawidth) - 1; m_dph_mask = m_datamask >> 4; - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ucom4_cpu_device::simple_timer_cb), this)); + m_timer = timer_alloc(*this, FUNC(ucom4_cpu_device::simple_timer_cb)); // resolve callbacks m_read_a.resolve_safe(0); diff --git a/src/devices/cpu/z8/z8.cpp b/src/devices/cpu/z8/z8.cpp index b2f4a20e4fee9..9475d8e3edbae 100644 --- a/src/devices/cpu/z8/z8.cpp +++ b/src/devices/cpu/z8/z8.cpp @@ -1262,8 +1262,8 @@ void z8_device::device_start() space(AS_IO).specific(m_regs); /* allocate timers */ - m_internal_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(z8_device::timeout<0>), this)); - m_internal_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(z8_device::timeout<1>), this)); + m_internal_timer[0] = timer_alloc(*this, FUNC(z8_device::timeout<0>)); + m_internal_timer[1] = timer_alloc(*this, FUNC(z8_device::timeout<1>)); /* Clear state */ std::fill(std::begin(m_irq_line), std::end(m_irq_line), CLEAR_LINE); diff --git a/src/devices/cpu/z80/kp63.cpp b/src/devices/cpu/z80/kp63.cpp index a1a9e5913c827..8ccb201a0e168 100644 --- a/src/devices/cpu/z80/kp63.cpp +++ b/src/devices/cpu/z80/kp63.cpp @@ -153,20 +153,20 @@ TIMER_CALLBACK_MEMBER(kp63_device::pwm_off) void kp63_device::device_start() { // Setup timers - m_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(kp63_device::timer_expired<0>), this)); - m_strobe_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(kp63_device::strobe_off<0>), this)); - m_pwm_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(kp63_device::pwm_off<0>), this)); - m_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(kp63_device::timer_expired<1>), this)); - m_strobe_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(kp63_device::strobe_off<1>), this)); - m_pwm_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(kp63_device::pwm_off<1>), this)); - m_timer[2] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(kp63_device::timer_expired<2>), this)); - m_strobe_timer[2] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(kp63_device::strobe_off<2>), this)); - m_pwm_timer[2] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(kp63_device::pwm_off<2>), this)); + m_timer[0] = timer_alloc(*this, FUNC(kp63_device::timer_expired<0>)); + m_strobe_timer[0] = timer_alloc(*this, FUNC(kp63_device::strobe_off<0>)); + m_pwm_timer[0] = timer_alloc(*this, FUNC(kp63_device::pwm_off<0>)); + m_timer[1] = timer_alloc(*this, FUNC(kp63_device::timer_expired<1>)); + m_strobe_timer[1] = timer_alloc(*this, FUNC(kp63_device::strobe_off<1>)); + m_pwm_timer[1] = timer_alloc(*this, FUNC(kp63_device::pwm_off<1>)); + m_timer[2] = timer_alloc(*this, FUNC(kp63_device::timer_expired<2>)); + m_strobe_timer[2] = timer_alloc(*this, FUNC(kp63_device::strobe_off<2>)); + m_pwm_timer[2] = timer_alloc(*this, FUNC(kp63_device::pwm_off<2>)); if (c_num_counters > 3) { - m_timer[3] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(kp63_device::timer_expired<3>), this)); - m_strobe_timer[3] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(kp63_device::strobe_off<3>), this)); - m_pwm_timer[3] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(kp63_device::pwm_off<3>), this)); + m_timer[3] = timer_alloc(*this, FUNC(kp63_device::timer_expired<3>)); + m_strobe_timer[3] = timer_alloc(*this, FUNC(kp63_device::strobe_off<3>)); + m_pwm_timer[3] = timer_alloc(*this, FUNC(kp63_device::pwm_off<3>)); } // Save state diff --git a/src/devices/cpu/z80/tmpz84c015.cpp b/src/devices/cpu/z80/tmpz84c015.cpp index 329aec51f9f2f..a3f3da95bb588 100644 --- a/src/devices/cpu/z80/tmpz84c015.cpp +++ b/src/devices/cpu/z80/tmpz84c015.cpp @@ -116,7 +116,7 @@ void tmpz84c015_device::device_start() m_wdtout_cb.resolve(); // setup watchdog timer - m_watchdog_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tmpz84c015_device::watchdog_timeout), this)); + m_watchdog_timer = timer_alloc(*this, FUNC(tmpz84c015_device::watchdog_timeout)); // register for save states save_item(NAME(m_irq_priority)); diff --git a/src/devices/imagedev/avivideo.cpp b/src/devices/imagedev/avivideo.cpp index 0c3559a127a4b..0f9fb2ffe8800 100644 --- a/src/devices/imagedev/avivideo.cpp +++ b/src/devices/imagedev/avivideo.cpp @@ -58,7 +58,7 @@ void avivideo_image_device::device_reset() m_frame_num = 0; } -void avivideo_image_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void avivideo_image_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_FRAME) { diff --git a/src/devices/imagedev/avivideo.h b/src/devices/imagedev/avivideo.h index 7d4c1bc5fa71c..c742ea07ce3a2 100644 --- a/src/devices/imagedev/avivideo.h +++ b/src/devices/imagedev/avivideo.h @@ -47,7 +47,7 @@ class avivideo_image_device : public device_t, public device_image_interface // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: static constexpr device_timer_id TIMER_FRAME = 0; diff --git a/src/devices/imagedev/flopdrv.cpp b/src/devices/imagedev/flopdrv.cpp index 6ab5028f2d81f..bccfef975d873 100644 --- a/src/devices/imagedev/flopdrv.cpp +++ b/src/devices/imagedev/flopdrv.cpp @@ -123,7 +123,7 @@ void legacy_floppy_image_device::floppy_drive_init() /* initialise flags */ m_flags = 0; m_index_pulse_callback = nullptr; - m_index_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(legacy_floppy_image_device::floppy_drive_index_callback),this)); + m_index_timer = timer_alloc(*this, FUNC(legacy_floppy_image_device::floppy_drive_index_callback)); m_idx = 0; floppy_drive_set_geometry(m_config->floppy_type); @@ -658,6 +658,8 @@ legacy_floppy_image_device::~legacy_floppy_image_device() void legacy_floppy_image_device::device_start() { + m_set_wpt.init(*this, FUNC(legacy_floppy_image_device::set_wpt)); + floppy_drive_init(); m_active = false; @@ -733,7 +735,7 @@ image_init_result legacy_floppy_image_device::call_load() else next_wpt = 0; - machine().scheduler().timer_set(attotime::from_msec(250), timer_expired_delegate(FUNC(legacy_floppy_image_device::set_wpt),this), next_wpt); + m_set_wpt.call_after(attotime::from_msec(250), next_wpt); return retVal; } @@ -755,7 +757,7 @@ void legacy_floppy_image_device::call_unload() //m_out_wpt_func(m_wpt); /* set timer for disk eject */ - machine().scheduler().timer_set(attotime::from_msec(250), timer_expired_delegate(FUNC(legacy_floppy_image_device::set_wpt),this), 1); + m_set_wpt.call_after(attotime::from_msec(250), 1); } bool legacy_floppy_image_device::is_creatable() const noexcept diff --git a/src/devices/imagedev/flopdrv.h b/src/devices/imagedev/flopdrv.h index 4f893bca965ae..ac9a1ad10938f 100644 --- a/src/devices/imagedev/flopdrv.h +++ b/src/devices/imagedev/flopdrv.h @@ -176,6 +176,7 @@ class legacy_floppy_image_device : public device_t, /* callbacks */ devcb_write_line m_out_idx_func; + transient_timer_factory m_set_wpt; /* state of input lines */ int m_drtn; /* direction */ diff --git a/src/devices/imagedev/floppy.cpp b/src/devices/imagedev/floppy.cpp index 452fde3503597..6e1d7f0f3d83f 100644 --- a/src/devices/imagedev/floppy.cpp +++ b/src/devices/imagedev/floppy.cpp @@ -523,7 +523,7 @@ void floppy_image_device::device_reset() cache_clear(); } -void floppy_image_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void floppy_image_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { index_resync(); } diff --git a/src/devices/imagedev/floppy.h b/src/devices/imagedev/floppy.h index ac27e35741e20..085bee46d1c19 100644 --- a/src/devices/imagedev/floppy.h +++ b/src/devices/imagedev/floppy.h @@ -171,7 +171,7 @@ class floppy_image_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_config_complete() override; virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/imagedev/mfmhd.cpp b/src/devices/imagedev/mfmhd.cpp index 61eabb122174d..ba113aa69dfce 100644 --- a/src/devices/imagedev/mfmhd.cpp +++ b/src/devices/imagedev/mfmhd.cpp @@ -620,7 +620,7 @@ attotime mfm_harddisk_device::track_end_time() return endtime; } -void mfm_harddisk_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mfm_harddisk_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/imagedev/mfmhd.h b/src/devices/imagedev/mfmhd.h index 007be4be4200c..fe7cceac4ce64 100644 --- a/src/devices/imagedev/mfmhd.h +++ b/src/devices/imagedev/mfmhd.h @@ -106,7 +106,7 @@ class mfm_harddisk_device : public harddisk_image_device void device_start() override; void device_stop() override; void device_reset() override; - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; std::string tts(const attotime &t); diff --git a/src/devices/imagedev/microdrv.cpp b/src/devices/imagedev/microdrv.cpp index 854b8d5519775..ad632e2cd3fd2 100644 --- a/src/devices/imagedev/microdrv.cpp +++ b/src/devices/imagedev/microdrv.cpp @@ -107,7 +107,7 @@ void microdrive_image_device::call_unload() memset(m_right.get(), 0, MDV_IMAGE_LENGTH / 2); } -void microdrive_image_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void microdrive_image_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_bit_offset++; diff --git a/src/devices/imagedev/microdrv.h b/src/devices/imagedev/microdrv.h index d43daba70fbf7..74f5f975f0115 100644 --- a/src/devices/imagedev/microdrv.h +++ b/src/devices/imagedev/microdrv.h @@ -67,7 +67,7 @@ class microdrive_image_device : public device_t, protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_image_interface implementation virtual const software_list_loader &get_software_list_loader() const override { return image_software_list_loader::instance(); } diff --git a/src/devices/imagedev/midiin.cpp b/src/devices/imagedev/midiin.cpp index 54a9f1c2297cb..7e6987c525854 100644 --- a/src/devices/imagedev/midiin.cpp +++ b/src/devices/imagedev/midiin.cpp @@ -62,7 +62,7 @@ void midiin_device::device_reset() device_timer -------------------------------------------------*/ -void midiin_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void midiin_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == 0) { diff --git a/src/devices/imagedev/midiin.h b/src/devices/imagedev/midiin.h index 28a0826fc0bc7..1a8c97afe0a4f 100644 --- a/src/devices/imagedev/midiin.h +++ b/src/devices/imagedev/midiin.h @@ -49,7 +49,7 @@ class midiin_device : public device_t, virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // serial overrides virtual void tra_complete() override; // Tx completed sending byte diff --git a/src/devices/imagedev/snapquik.cpp b/src/devices/imagedev/snapquik.cpp index 4ac355f6cf4ad..d5b1cd802f325 100644 --- a/src/devices/imagedev/snapquik.cpp +++ b/src/devices/imagedev/snapquik.cpp @@ -60,7 +60,7 @@ void snapshot_image_device::device_start() m_load.resolve(); /* allocate a timer */ - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(snapshot_image_device::process_snapshot_or_quickload),this)); + m_timer = timer_alloc(*this, FUNC(snapshot_image_device::process_snapshot_or_quickload)); } /*------------------------------------------------- diff --git a/src/devices/machine/53c7xx.cpp b/src/devices/machine/53c7xx.cpp index 40c481a448fda..91779e4751ace 100644 --- a/src/devices/machine/53c7xx.cpp +++ b/src/devices/machine/53c7xx.cpp @@ -760,7 +760,7 @@ void ncr53c7xx_device::recv_byte() // state machine //------------------------------------------------- -void ncr53c7xx_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ncr53c7xx_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { step(true); } diff --git a/src/devices/machine/53c7xx.h b/src/devices/machine/53c7xx.h index 5adae84d7901f..b84fcf31a45d7 100644 --- a/src/devices/machine/53c7xx.h +++ b/src/devices/machine/53c7xx.h @@ -35,7 +35,7 @@ class ncr53c7xx_device : public nscsi_device, public nscsi_slot_card_interface, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void execute_run() override; int m_icount; diff --git a/src/devices/machine/64h156.cpp b/src/devices/machine/64h156.cpp index 2e9d70b2c5f31..4292c59a82bc6 100644 --- a/src/devices/machine/64h156.cpp +++ b/src/devices/machine/64h156.cpp @@ -133,7 +133,7 @@ void c64h156_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void c64h156_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void c64h156_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { live_sync(); live_run(); diff --git a/src/devices/machine/64h156.h b/src/devices/machine/64h156.h index c8ef50cc3ea6b..3119fa346cc02 100644 --- a/src/devices/machine/64h156.h +++ b/src/devices/machine/64h156.h @@ -108,7 +108,7 @@ class c64h156_device : public device_t virtual void device_start() override; virtual void device_clock_changed() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum { diff --git a/src/devices/machine/6522via.cpp b/src/devices/machine/6522via.cpp index f37666b519a52..f847eef40706f 100644 --- a/src/devices/machine/6522via.cpp +++ b/src/devices/machine/6522via.cpp @@ -480,7 +480,7 @@ void via6522_device::shift_in() m_shift_counter = (m_shift_counter - 1) & 0x0f; // Count all edges } -void via6522_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void via6522_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/6522via.h b/src/devices/machine/6522via.h index 013438f3ca727..a14bfd3efb4da 100644 --- a/src/devices/machine/6522via.h +++ b/src/devices/machine/6522via.h @@ -123,7 +123,7 @@ class via6522_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: static constexpr device_timer_id TIMER_SHIFT = 0; diff --git a/src/devices/machine/6532riot.cpp b/src/devices/machine/6532riot.cpp index 1d4e4845e6808..80d9350c0d199 100644 --- a/src/devices/machine/6532riot.cpp +++ b/src/devices/machine/6532riot.cpp @@ -502,7 +502,7 @@ void riot6532_device::device_reset() m_timer->adjust(attotime::from_ticks(256 << m_timershift, clock())); } -void riot6532_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void riot6532_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/6532riot.h b/src/devices/machine/6532riot.h index e551247d7fa05..8e41e7c84c865 100644 --- a/src/devices/machine/6532riot.h +++ b/src/devices/machine/6532riot.h @@ -80,7 +80,7 @@ class riot6532_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_post_load() override { } virtual void device_clock_changed() override { } diff --git a/src/devices/machine/68230pit.cpp b/src/devices/machine/68230pit.cpp index b6979d5942af0..13f982494c355 100644 --- a/src/devices/machine/68230pit.cpp +++ b/src/devices/machine/68230pit.cpp @@ -241,7 +241,7 @@ void pit68230_device::tick_clock() //------------------------------------------------- // device_timer - handler timer events //------------------------------------------------- -void pit68230_device::device_timer (emu_timer &timer, device_timer_id id, int32_t param, void *ptr) +void pit68230_device::device_timer(timer_instance const &timer, device_timer_id id, int32_t param, void *ptr) { switch(id) { diff --git a/src/devices/machine/68230pit.h b/src/devices/machine/68230pit.h index 72f6e94d37332..776e34440ea17 100644 --- a/src/devices/machine/68230pit.h +++ b/src/devices/machine/68230pit.h @@ -279,7 +279,7 @@ class pit68230_device : public device_t//, public device_execute_interface // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // Interrupt methods void trigger_interrupt(int source); diff --git a/src/devices/machine/68307tmu.cpp b/src/devices/machine/68307tmu.cpp index 06d9f57234d54..e05c07d4a4ca8 100644 --- a/src/devices/machine/68307tmu.cpp +++ b/src/devices/machine/68307tmu.cpp @@ -106,7 +106,7 @@ TIMER_CALLBACK_MEMBER(m68307_cpu_device::m68307_timer::timer0_callback ) if (BIT(tptr->regs[m68307TIMER_TMR], 4)) m68k->timer0_interrupt(1); - tptr->mametimer->adjust(m68k->cycles_to_attotime(20000)); + tptr->mametimer.adjust(m68k->cycles_to_attotime(20000)); } TIMER_CALLBACK_MEMBER(m68307_cpu_device::m68307_timer::timer1_callback ) @@ -118,7 +118,7 @@ TIMER_CALLBACK_MEMBER(m68307_cpu_device::m68307_timer::timer1_callback ) if (BIT(tptr->regs[m68307TIMER_TMR], 4)) m68k->timer1_interrupt(1); - tptr->mametimer->adjust(m68k->cycles_to_attotime(20000)); + tptr->mametimer.adjust(m68k->cycles_to_attotime(20000)); } @@ -134,12 +134,12 @@ void m68307_cpu_device::m68307_timer::init(m68307_cpu_device *device) single_timer* tptr; tptr = &singletimer[0]; - tptr->mametimer = device->machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m68307_timer::timer0_callback),this), parent); + tptr->mametimer.init(device->device_t::scheduler(), *this, FUNC(m68307_timer::timer0_callback)).set_ptr(parent); tptr = &singletimer[1]; - tptr->mametimer = device->machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m68307_timer::timer1_callback),this), parent); + tptr->mametimer.init(device->device_t::scheduler(), *this, FUNC(m68307_timer::timer1_callback)).set_ptr(parent); - wd_mametimer = device->machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m68307_timer::wd_timer_callback),this), parent); + wd_mametimer.init(device->device_t::scheduler(), *this, FUNC(m68307_timer::wd_timer_callback)); } uint16_t m68307_cpu_device::m68307_timer::read_tcn(uint16_t mem_mask, int which) @@ -209,7 +209,7 @@ void m68307_cpu_device::m68307_timer::write_tmr(uint16_t data, uint16_t mem_mask if (rst==0x0) m68k->logerror("(timer is reset)\n"); if (rst==0x1) m68k->logerror("(timer is running)\n"); - tptr->mametimer->adjust(m68k->cycles_to_attotime(100000)); + tptr->mametimer.adjust(m68k->cycles_to_attotime(100000)); m68k->logerror("\n"); } @@ -239,10 +239,10 @@ void m68307_cpu_device::m68307_timer::reset() tptr->regs[m68307TIMER_WCR] = 0xffff; tptr->regs[m68307TIMER_XXX] = 0; tptr->enabled = false; - tptr->mametimer->adjust(attotime::never); + tptr->mametimer.adjust(attotime::never); } - wd_mametimer->adjust(attotime::never); + wd_mametimer.adjust(attotime::never); } diff --git a/src/devices/machine/68307tmu.h b/src/devices/machine/68307tmu.h index 3c3984e56c89c..31b28e5cf8782 100644 --- a/src/devices/machine/68307tmu.h +++ b/src/devices/machine/68307tmu.h @@ -15,13 +15,13 @@ class m68307_cpu_device::m68307_timer { uint16_t regs[0x8]; bool enabled; - emu_timer *mametimer; + persistent_timer mametimer; }; single_timer singletimer[2]; - emu_timer *wd_mametimer; + persistent_timer wd_mametimer; m68307_cpu_device *parent; void write_tmr(uint16_t data, uint16_t mem_mask, int which); diff --git a/src/devices/machine/68340sim.cpp b/src/devices/machine/68340sim.cpp index 7e1f845722473..8f5d48fd3f389 100644 --- a/src/devices/machine/68340sim.cpp +++ b/src/devices/machine/68340sim.cpp @@ -438,7 +438,7 @@ void m68340_cpu_device::start_68340_sim() { LOG("%s\n", FUNCNAME); LOGCLOCK( " - Clock: %d [0x%08x]\n", clock(), clock()); - m_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m68340_cpu_device::periodic_interrupt_timer_callback),this)); + m_irq_timer = timer_alloc(*this, FUNC(m68340_cpu_device::periodic_interrupt_timer_callback)); // resolve callbacks Port A m_pa_out_cb.resolve_safe(); diff --git a/src/devices/machine/68340tmu.cpp b/src/devices/machine/68340tmu.cpp index d66f1f2387ca3..e08ae83e64ca6 100644 --- a/src/devices/machine/68340tmu.cpp +++ b/src/devices/machine/68340tmu.cpp @@ -312,7 +312,7 @@ void mc68340_timer_module_device::device_start() m_cpu = downcast(owner()); - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mc68340_timer_module_device::timer_callback),this)); + m_timer = timer_alloc(*this, FUNC(mc68340_timer_module_device::timer_callback)); // Resolve Timer callbacks m_tout_out_cb.resolve_safe(); diff --git a/src/devices/machine/6840ptm.cpp b/src/devices/machine/6840ptm.cpp index 21d8c0d80e9b5..c200a8126fc22 100644 --- a/src/devices/machine/6840ptm.cpp +++ b/src/devices/machine/6840ptm.cpp @@ -166,7 +166,7 @@ void ptm6840_device::device_resolve_objects() // device_timer - handle timer callbacks //------------------------------------------------- -void ptm6840_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ptm6840_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { timeout(id); } diff --git a/src/devices/machine/6840ptm.h b/src/devices/machine/6840ptm.h index 6836aa5d3173a..14ffde012bf55 100644 --- a/src/devices/machine/6840ptm.h +++ b/src/devices/machine/6840ptm.h @@ -59,7 +59,7 @@ class ptm6840_device : public device_t virtual void device_start() override; virtual void device_reset() override; virtual void device_resolve_objects() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void subtract_from_counter(int counter, int count); diff --git a/src/devices/machine/6850acia.cpp b/src/devices/machine/6850acia.cpp index d428851ad8fa6..a438076aeff77 100644 --- a/src/devices/machine/6850acia.cpp +++ b/src/devices/machine/6850acia.cpp @@ -112,6 +112,8 @@ void acia6850_device::device_start() m_rts_handler.resolve_safe(); m_irq_handler.resolve_safe(); + m_delayed_output_irq.init(*this, FUNC(acia6850_device::delayed_output_irq)); + save_item(NAME(m_status)); save_item(NAME(m_tdr)); save_item(NAME(m_rdr)); @@ -608,7 +610,7 @@ void acia6850_device::output_irq(int irq) { m_irq = irq; - machine().scheduler().synchronize(timer_expired_delegate(FUNC(acia6850_device::delayed_output_irq), this), irq); + m_delayed_output_irq.synchronize(irq); } } diff --git a/src/devices/machine/6850acia.h b/src/devices/machine/6850acia.h index 4d99209d5196a..a0d3ebcd9d7d6 100644 --- a/src/devices/machine/6850acia.h +++ b/src/devices/machine/6850acia.h @@ -54,6 +54,7 @@ class acia6850_device : public device_t void output_irq(int irq); TIMER_CALLBACK_MEMBER(delayed_output_irq); + transient_timer_factory m_delayed_output_irq; enum { diff --git a/src/devices/machine/74123.cpp b/src/devices/machine/74123.cpp index 6596bf58bf3ba..8dc6c3c03567c 100644 --- a/src/devices/machine/74123.cpp +++ b/src/devices/machine/74123.cpp @@ -48,7 +48,9 @@ void ttl74123_device::device_start() { m_output_changed_cb.resolve_safe(); - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ttl74123_device::clear_callback),this)); + m_output_callback.init(*this, FUNC(ttl74123_device::output_callback)); + + m_timer = timer_alloc(*this, FUNC(ttl74123_device::clear_callback)); /* register for state saving */ save_item(NAME(m_a)); @@ -133,7 +135,7 @@ void ttl74123_device::set_output() { int output = timer_running(); - machine().scheduler().timer_set( attotime::zero, timer_expired_delegate(FUNC(ttl74123_device::output_callback ),this), output); + m_output_callback.synchronize(output); LOG("74123: Output: %d\n", output); } diff --git a/src/devices/machine/74123.h b/src/devices/machine/74123.h index bdff8d29aeef7..7636e1e83b634 100644 --- a/src/devices/machine/74123.h +++ b/src/devices/machine/74123.h @@ -115,6 +115,7 @@ class ttl74123_device : public device_t int m_b; /* initial/constant value of the B pin */ int m_clear; /* initial/constant value of the Clear pin */ devcb_write_line m_output_changed_cb; + transient_timer_factory m_output_callback; }; diff --git a/src/devices/machine/8042kbdc.cpp b/src/devices/machine/8042kbdc.cpp index 1e90488834443..840b43d4fdcb7 100644 --- a/src/devices/machine/8042kbdc.cpp +++ b/src/devices/machine/8042kbdc.cpp @@ -204,7 +204,7 @@ void kbdc8042_device::at_8042_clear_keyboard_received() m_mouse.received = 0; } -void kbdc8042_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void kbdc8042_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_UPDATE) { diff --git a/src/devices/machine/8042kbdc.h b/src/devices/machine/8042kbdc.h index e70b2398b2931..a3719f809f700 100644 --- a/src/devices/machine/8042kbdc.h +++ b/src/devices/machine/8042kbdc.h @@ -57,7 +57,7 @@ class kbdc8042_device : public device_t virtual void device_start() override; virtual void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual ioport_constructor device_input_ports() const override; static const device_timer_id TIMER_UPDATE = 0; diff --git a/src/devices/machine/8364_paula.cpp b/src/devices/machine/8364_paula.cpp index 6869ffb3395f2..f144051d11a7e 100644 --- a/src/devices/machine/8364_paula.cpp +++ b/src/devices/machine/8364_paula.cpp @@ -54,7 +54,7 @@ void paula_8364_device::device_start() m_channel[i].curticks = 0; m_channel[i].manualmode = false; m_channel[i].curlocation = 0; - m_channel[i].irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(paula_8364_device::signal_irq), this)); + m_channel[i].irq_timer = timer_alloc(*this, FUNC(paula_8364_device::signal_irq)); } // create the stream diff --git a/src/devices/machine/8530scc.cpp b/src/devices/machine/8530scc.cpp index c331037d0a19f..c6c950d6139c5 100644 --- a/src/devices/machine/8530scc.cpp +++ b/src/devices/machine/8530scc.cpp @@ -114,7 +114,7 @@ void scc8530_legacy_device::resetchannel(int ch) scc8530_baud_expire - baud rate timer expiry -------------------------------------------------*/ -void scc8530_legacy_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void scc8530_legacy_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { Chan *pChan = &channel[id]; int brconst = pChan->reg_val[13]<<8 | pChan->reg_val[14]; @@ -146,11 +146,11 @@ void scc8530_legacy_device::device_timer(emu_timer &timer, device_timer_id id, i if (rate) { attotime attorate = attotime::from_hz(rate); - timer.adjust(attorate, 0, attorate); + pChan->baudtimer->adjust(attorate, 0, attorate); } else { - timer.adjust(attotime::never, 0, attotime::never); + pChan->baudtimer->adjust(attotime::never, 0, attotime::never); } } diff --git a/src/devices/machine/8530scc.h b/src/devices/machine/8530scc.h index 4a706df22a0a8..c410117b1e02a 100644 --- a/src/devices/machine/8530scc.h +++ b/src/devices/machine/8530scc.h @@ -46,7 +46,7 @@ class scc8530_legacy_device : public device_t protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: struct Chan { diff --git a/src/devices/machine/acorn_ioc.cpp b/src/devices/machine/acorn_ioc.cpp index 1a879cb7a2d30..af30917e0180b 100644 --- a/src/devices/machine/acorn_ioc.cpp +++ b/src/devices/machine/acorn_ioc.cpp @@ -51,7 +51,7 @@ void acorn_ioc_device::device_resolve_objects() void acorn_ioc_device::device_start() { for (int i=0; i <4; i++) - m_timers[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(acorn_ioc_device::timer_tick), this)); + m_timers[i] = timer_alloc(*this, FUNC(acorn_ioc_device::timer_tick)); save_item(NAME(m_ir)); save_item(NAME(m_if)); diff --git a/src/devices/machine/acorn_vidc.cpp b/src/devices/machine/acorn_vidc.cpp index 3ea63a91740a1..67ad05cf239a7 100644 --- a/src/devices/machine/acorn_vidc.cpp +++ b/src/devices/machine/acorn_vidc.cpp @@ -215,7 +215,7 @@ void acorn_vidc10_device::device_reset() // device_timer - device-specific timer //------------------------------------------------- -void acorn_vidc10_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void acorn_vidc10_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -622,7 +622,7 @@ void arm_vidc20_device::device_reset() m_vco_v_modulo = 1; } -void arm_vidc20_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void arm_vidc20_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { acorn_vidc10_device::device_timer(timer, id, param, ptr); } diff --git a/src/devices/machine/acorn_vidc.h b/src/devices/machine/acorn_vidc.h index 2bf2bcde1de12..f87c5e5b2c2f0 100644 --- a/src/devices/machine/acorn_vidc.h +++ b/src/devices/machine/acorn_vidc.h @@ -59,7 +59,7 @@ class acorn_vidc10_device : public device_t, virtual void device_config_complete() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual space_config_vector memory_space_config() const override; u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); virtual u32 get_pixel_clock(); @@ -160,7 +160,7 @@ class arm_vidc20_device : public acorn_vidc10_device virtual void device_start() override; virtual void device_reset() override; virtual void device_config_complete() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); virtual u32 get_pixel_clock() override; diff --git a/src/devices/machine/adc0804.cpp b/src/devices/machine/adc0804.cpp index 048b99734b62a..01edde71d708a 100644 --- a/src/devices/machine/adc0804.cpp +++ b/src/devices/machine/adc0804.cpp @@ -118,7 +118,7 @@ void adc0804_device::device_start() m_fclk_rc = attotime::from_double(m_res * m_cap / 1.1); // create timer - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(adc0804_device::conversion_done), this)); + m_timer = timer_alloc(*this, FUNC(adc0804_device::conversion_done)); // save state if (m_rd_mode == RD_BITBANGED) diff --git a/src/devices/machine/adc0808.cpp b/src/devices/machine/adc0808.cpp index 3988254dc716d..d9d5b702c301a 100644 --- a/src/devices/machine/adc0808.cpp +++ b/src/devices/machine/adc0808.cpp @@ -99,7 +99,7 @@ void adc0808_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void adc0808_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void adc0808_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (m_state) { diff --git a/src/devices/machine/adc0808.h b/src/devices/machine/adc0808.h index 296921c12719f..becd40fdb13ee 100644 --- a/src/devices/machine/adc0808.h +++ b/src/devices/machine/adc0808.h @@ -65,7 +65,7 @@ class adc0808_device : public device_t // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // callbacks diff --git a/src/devices/machine/adc0844.cpp b/src/devices/machine/adc0844.cpp index c36160359279e..0ab763debb6e8 100644 --- a/src/devices/machine/adc0844.cpp +++ b/src/devices/machine/adc0844.cpp @@ -103,7 +103,7 @@ uint8_t adc0844_device::clamp(int value) // device_timer - handler timer events //------------------------------------------------- -void adc0844_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void adc0844_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (m_channel) { @@ -132,7 +132,7 @@ void adc0844_device::device_timer(emu_timer &timer, device_timer_id id, int para m_intr_cb(ASSERT_LINE); } -void adc0848_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void adc0848_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (m_channel) { diff --git a/src/devices/machine/adc0844.h b/src/devices/machine/adc0844.h index 51dff681f1609..ccaf3134ac467 100644 --- a/src/devices/machine/adc0844.h +++ b/src/devices/machine/adc0844.h @@ -51,7 +51,7 @@ class adc0844_device : public device_t // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; uint8_t clamp(int value); @@ -83,7 +83,7 @@ class adc0848_device : public adc0844_device protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: devcb_read8 m_ch5_cb, m_ch6_cb, m_ch7_cb, m_ch8_cb; diff --git a/src/devices/machine/aic565.cpp b/src/devices/machine/aic565.cpp index 34da7f4fd149d..5e77a041b9e3d 100644 --- a/src/devices/machine/aic565.cpp +++ b/src/devices/machine/aic565.cpp @@ -75,6 +75,9 @@ void aic565_device::device_start() save_item(NAME(m_local_status)); save_item(NAME(m_aux_status)); save_item(NAME(m_interrupt_flags)); + + m_host_sync_w.init(*this, FUNC(aic565_device::host_sync_w)); + m_local_sync_w.init(*this, FUNC(aic565_device::local_sync_w)); } @@ -130,7 +133,7 @@ u8 aic565_device::host_r(offs_t offset) void aic565_device::host_w(offs_t offset, u8 data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(aic565_device::host_sync_w), this), (offset & 3) << 8 | data); + m_host_sync_w.synchronize((offset & 3) << 8 | data); } @@ -214,7 +217,7 @@ u8 aic565_device::local_r(offs_t offset) void aic565_device::local_w(offs_t offset, u8 data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(aic565_device::local_sync_w), this), (offset & 3) << 8 | data); + m_local_sync_w.synchronize((offset & 3) << 8 | data); } diff --git a/src/devices/machine/aic565.h b/src/devices/machine/aic565.h index 581a595d77c11..f412a19490b9e 100644 --- a/src/devices/machine/aic565.h +++ b/src/devices/machine/aic565.h @@ -45,7 +45,9 @@ class aic565_device : public device_t private: // synchronization helpers TIMER_CALLBACK_MEMBER(host_sync_w); + transient_timer_factory m_host_sync_w; TIMER_CALLBACK_MEMBER(local_sync_w); + transient_timer_factory m_local_sync_w; // callback objects devcb_write_line m_hrst_callback; diff --git a/src/devices/machine/aic6250.cpp b/src/devices/machine/aic6250.cpp index 71859bdee05fc..7e18c8f7465cd 100644 --- a/src/devices/machine/aic6250.cpp +++ b/src/devices/machine/aic6250.cpp @@ -182,7 +182,7 @@ void aic6250_device::device_start() m_rev_cntrl = 0x02; - m_state_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(aic6250_device::state_loop), this)); + m_state_timer = timer_alloc(*this, FUNC(aic6250_device::state_loop)); m_state = IDLE; m_int_asserted = false; diff --git a/src/devices/machine/aicartc.cpp b/src/devices/machine/aicartc.cpp index 0f8ad30c2832a..578b58f0ffe73 100644 --- a/src/devices/machine/aicartc.cpp +++ b/src/devices/machine/aicartc.cpp @@ -111,7 +111,7 @@ void aicartc_device::device_reset() //------------------------------------------------- -void aicartc_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void aicartc_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_rtc_tick++; if(m_rtc_tick & 0x8000) diff --git a/src/devices/machine/aicartc.h b/src/devices/machine/aicartc.h index 6af901ac36379..2f4dd9386fd9d 100644 --- a/src/devices/machine/aicartc.h +++ b/src/devices/machine/aicartc.h @@ -33,7 +33,7 @@ class aicartc_device : public device_t, public device_rtc_interface virtual void device_validity_check(validity_checker &valid) const override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rtc_interface overrides virtual bool rtc_feature_y2k() const override { return true; } diff --git a/src/devices/machine/akiko.cpp b/src/devices/machine/akiko.cpp index 1505eab2a56b1..14c3b9fbfb349 100644 --- a/src/devices/machine/akiko.cpp +++ b/src/devices/machine/akiko.cpp @@ -106,6 +106,8 @@ void akiko_device::device_start() m_sda_r.resolve_safe(1); m_sda_w.resolve_safe(); + m_cd_delayed_cmd.init(*this, FUNC(akiko_device::cd_delayed_cmd)); + m_c2p_input_index = 0; m_c2p_output_index = 0; @@ -130,8 +132,8 @@ void akiko_device::device_start() m_cdrom_cmd_resp = 0; m_cdrom_toc = nullptr; - m_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(akiko_device::dma_proc), this)); - m_frame_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(akiko_device::frame_proc), this)); + m_dma_timer = timer_alloc(*this, FUNC(akiko_device::dma_proc)); + m_frame_timer = timer_alloc(*this, FUNC(akiko_device::frame_proc)); } //------------------------------------------------- @@ -702,7 +704,7 @@ void akiko_device::update_cdrom() { m_cdrom_cmd_start = (m_cdrom_cmd_start+3) & 0xff; - machine().scheduler().timer_set( attotime::from_msec(1), timer_expired_delegate(FUNC(akiko_device::cd_delayed_cmd ), this), resp[0]); + m_cd_delayed_cmd.call_after(attotime::from_msec(1), resp[0]); break; } diff --git a/src/devices/machine/akiko.h b/src/devices/machine/akiko.h index 8a0ffec8e76fb..5ccec729790ca 100644 --- a/src/devices/machine/akiko.h +++ b/src/devices/machine/akiko.h @@ -114,6 +114,7 @@ class akiko_device : public device_t void setup_response( int len, uint8_t *r1 ); TIMER_CALLBACK_MEMBER( cd_delayed_cmd ); + transient_timer_factory m_cd_delayed_cmd; void update_cdrom(); // interface diff --git a/src/devices/machine/am2910.cpp b/src/devices/machine/am2910.cpp index f3b425d86cb89..619710a05187f 100644 --- a/src/devices/machine/am2910.cpp +++ b/src/devices/machine/am2910.cpp @@ -86,7 +86,7 @@ void am2910_device::device_reset() m_execute_timer->adjust(attotime::from_hz(clock()), 0, attotime::from_hz(clock())); } -void am2910_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void am2910_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_CLOCK) { diff --git a/src/devices/machine/am2910.h b/src/devices/machine/am2910.h index b304d7a09a9e4..c24ef09f0a17d 100644 --- a/src/devices/machine/am2910.h +++ b/src/devices/machine/am2910.h @@ -42,7 +42,7 @@ class am2910_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; static constexpr device_timer_id TIMER_CLOCK = 0; diff --git a/src/devices/machine/am53cf96.cpp b/src/devices/machine/am53cf96.cpp index 891f43f680b6d..04d16e8a6e53a 100644 --- a/src/devices/machine/am53cf96.cpp +++ b/src/devices/machine/am53cf96.cpp @@ -47,7 +47,7 @@ uint8_t am53cf96_device::read(offs_t offset) return rv; } -void am53cf96_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void am53cf96_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { scsi_regs[REG_IRQSTATE] = 8; // indicate success scsi_regs[REG_STATUS] |= 0x80; // indicate IRQ diff --git a/src/devices/machine/am53cf96.h b/src/devices/machine/am53cf96.h index d9b2ce1aab48f..e358075ea7861 100644 --- a/src/devices/machine/am53cf96.h +++ b/src/devices/machine/am53cf96.h @@ -51,7 +51,7 @@ class am53cf96_device : public legacy_scsi_host_adapter // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: static constexpr device_timer_id TIMER_TRANSFER = 0; diff --git a/src/devices/machine/am79c90.cpp b/src/devices/machine/am79c90.cpp index bfa1aad78e553..d7ce069ed4207 100644 --- a/src/devices/machine/am79c90.cpp +++ b/src/devices/machine/am79c90.cpp @@ -87,7 +87,7 @@ void am7990_device_base::device_start() m_dma_in_cb.resolve_safe(0); m_dma_out_cb.resolve_safe(); - m_transmit_poll = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(am7990_device_base::transmit_poll), this)); + m_transmit_poll = timer_alloc(*this, FUNC(am7990_device_base::transmit_poll)); m_transmit_poll->adjust(TX_POLL_PERIOD, 0, TX_POLL_PERIOD); save_item(NAME(m_rap)); diff --git a/src/devices/machine/am9513.cpp b/src/devices/machine/am9513.cpp index 9e6a661b18b42..0bbe8aa509279 100644 --- a/src/devices/machine/am9513.cpp +++ b/src/devices/machine/am9513.cpp @@ -83,6 +83,8 @@ void am9513_device::device_start() m_out_cb.resolve_all_safe(); m_fout_cb.resolve(); + m_clear_outputs.init(*this, FUNC(am9513_device::clear_outputs)); + // Power-on reset m_dpr = 0x1f; m_mmr = 0; @@ -144,7 +146,7 @@ void am9513_device::device_start() save_item(NAME(m_fout_counter)); // Synchronize clearing of OUT n - machine().scheduler().synchronize(timer_expired_delegate(FUNC(am9513_device::clear_outputs), this)); + m_clear_outputs.synchronize(); } @@ -232,7 +234,7 @@ void am9513_device::device_clock_changed() // fires //------------------------------------------------- -void am9513_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void am9513_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { assert(id >= TIMER_F1 && id <= TIMER_F5); diff --git a/src/devices/machine/am9513.h b/src/devices/machine/am9513.h index 0ea22285b4eab..d40ae279177d8 100644 --- a/src/devices/machine/am9513.h +++ b/src/devices/machine/am9513.h @@ -93,11 +93,12 @@ class am9513_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_clock_changed() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // internal helpers TIMER_CALLBACK_MEMBER(clear_outputs); + transient_timer_factory m_clear_outputs; void master_reset(); void init_freq_timer(int f); void select_freq_timer(int f, int c, bool selected, bool cycle); diff --git a/src/devices/machine/am9519.cpp b/src/devices/machine/am9519.cpp index be0b8c3da10e9..b8caa3eb8853b 100644 --- a/src/devices/machine/am9519.cpp +++ b/src/devices/machine/am9519.cpp @@ -11,7 +11,7 @@ //#define VERBOSE (LOG_GENERAL) #include "logmacro.h" -void am9519_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void am9519_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if(!BIT(m_mode, 7)) // chip disabled return; diff --git a/src/devices/machine/am9519.h b/src/devices/machine/am9519.h index ec84cd50e52e2..f25fe07ba6356 100644 --- a/src/devices/machine/am9519.h +++ b/src/devices/machine/am9519.h @@ -57,7 +57,7 @@ class am9519_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: static constexpr device_timer_id TIMER_CHECK_IRQ = 0; diff --git a/src/devices/machine/amigafdc.cpp b/src/devices/machine/amigafdc.cpp index 4452af4349332..af87e1db56ce4 100644 --- a/src/devices/machine/amigafdc.cpp +++ b/src/devices/machine/amigafdc.cpp @@ -428,7 +428,7 @@ uint16_t amiga_fdc_device::dskbytr_r() return res; } -void amiga_fdc_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void amiga_fdc_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { live_sync(); live_run(); diff --git a/src/devices/machine/amigafdc.h b/src/devices/machine/amigafdc.h index 2bb7b1aa62839..987c8f433ea43 100644 --- a/src/devices/machine/amigafdc.h +++ b/src/devices/machine/amigafdc.h @@ -37,7 +37,7 @@ class amiga_fdc_device : public device_t { protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // Running states diff --git a/src/devices/machine/applefdc.cpp b/src/devices/machine/applefdc.cpp index da817ccb1d8c8..1f703b72b19f2 100644 --- a/src/devices/machine/applefdc.cpp +++ b/src/devices/machine/applefdc.cpp @@ -158,7 +158,7 @@ void applefdc_base_device::device_reset(void) // device_timer - device-specific timer callbacks //------------------------------------------------- -void applefdc_base_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void applefdc_base_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/machine/applefdc.h b/src/devices/machine/applefdc.h index cf8f06f4cb94a..1a7e87803292d 100644 --- a/src/devices/machine/applefdc.h +++ b/src/devices/machine/applefdc.h @@ -83,7 +83,7 @@ class applefdc_base_device : public device_t // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // other protecteds virtual void iwm_modereg_w(uint8_t data); diff --git a/src/devices/machine/arm_iomd.cpp b/src/devices/machine/arm_iomd.cpp index d6ce955771664..ad83c699e2e77 100644 --- a/src/devices/machine/arm_iomd.cpp +++ b/src/devices/machine/arm_iomd.cpp @@ -326,7 +326,7 @@ void arm7500fe_iomd_device::device_reset() m_iolines_ddr = 0xff; } -void arm_iomd_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void arm_iomd_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/machine/arm_iomd.h b/src/devices/machine/arm_iomd.h index 482c06b8cbccf..f01e4a6e27919 100644 --- a/src/devices/machine/arm_iomd.h +++ b/src/devices/machine/arm_iomd.h @@ -62,7 +62,7 @@ class arm_iomd_device : public device_t virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void base_map(address_map &map); u16 m_id; diff --git a/src/devices/machine/at28c16.cpp b/src/devices/machine/at28c16.cpp index acbee4613ebcb..8b887aacd4617 100644 --- a/src/devices/machine/at28c16.cpp +++ b/src/devices/machine/at28c16.cpp @@ -224,7 +224,7 @@ WRITE_LINE_MEMBER( at28c16_device::set_oe_12v ) } -void at28c16_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void at28c16_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch( id ) { diff --git a/src/devices/machine/at28c16.h b/src/devices/machine/at28c16.h index 54c87fccb4fe2..02d3cbd0f07b1 100644 --- a/src/devices/machine/at28c16.h +++ b/src/devices/machine/at28c16.h @@ -35,7 +35,7 @@ class at28c16_device : protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_memory_interface overrides virtual space_config_vector memory_space_config() const override; diff --git a/src/devices/machine/at28c64b.cpp b/src/devices/machine/at28c64b.cpp index 5abd3e3485f89..d8a0b90b7edef 100644 --- a/src/devices/machine/at28c64b.cpp +++ b/src/devices/machine/at28c64b.cpp @@ -268,7 +268,7 @@ WRITE_LINE_MEMBER( at28c64b_device::set_oe_12v ) } -void at28c64b_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void at28c64b_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch( id ) { diff --git a/src/devices/machine/at28c64b.h b/src/devices/machine/at28c64b.h index 994625bf42d01..1fac979acb759 100644 --- a/src/devices/machine/at28c64b.h +++ b/src/devices/machine/at28c64b.h @@ -35,7 +35,7 @@ class at28c64b_device : protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_memory_interface overrides virtual space_config_vector memory_space_config() const override; diff --git a/src/devices/machine/at29x.cpp b/src/devices/machine/at29x.cpp index 3f31e44c0a829..da1bd1ffe5a8f 100644 --- a/src/devices/machine/at29x.cpp +++ b/src/devices/machine/at29x.cpp @@ -135,7 +135,7 @@ void at29x_device::nvram_write(emu_file &file) /* Programming timer callback */ -void at29x_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void at29x_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (m_pgm) { diff --git a/src/devices/machine/at29x.h b/src/devices/machine/at29x.h index 265ef1587c2b5..d54476846583c 100644 --- a/src/devices/machine/at29x.h +++ b/src/devices/machine/at29x.h @@ -29,7 +29,7 @@ class at29x_device : public device_t, public device_nvram_interface virtual void device_start(void) override; virtual void device_reset(void) override; virtual void device_stop(void) override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void nvram_default() override; void nvram_read(emu_file &file) override; diff --git a/src/devices/machine/at_keybc.cpp b/src/devices/machine/at_keybc.cpp index a166ff234cb7e..bda558cc5fd8b 100644 --- a/src/devices/machine/at_keybc.cpp +++ b/src/devices/machine/at_keybc.cpp @@ -167,7 +167,7 @@ uint8_t at_kbc_device_base::status_r() void at_kbc_device_base::data_w(uint8_t data) { LOG("data_w 0x%02x (%s)\n", data, machine().describe_context()); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(at_kbc_device_base::write_data), this), unsigned(data)); + m_write_data.synchronize(unsigned(data)); } void at_kbc_device_base::command_w(uint8_t data) @@ -269,17 +269,17 @@ void at_kbc_device_base::command_w(uint8_t data) else LOG("command_w 0x%02x (%s)\n", data, machine().describe_context()); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(at_kbc_device_base::write_command), this), unsigned(data)); + m_write_command.synchronize(unsigned(data)); } WRITE_LINE_MEMBER(at_kbc_device_base::kbd_clk_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(at_kbc_device_base::set_kbd_clk_in), this), state); + m_set_kbd_clk_in.synchronize(state); } WRITE_LINE_MEMBER(at_kbc_device_base::kbd_data_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(at_kbc_device_base::set_kbd_data_in), this), state); + m_set_kbd_data_in.synchronize(state); } at_kbc_device_base::at_kbc_device_base(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock) @@ -311,6 +311,11 @@ void at_kbc_device_base::device_start() save_item(NAME(m_kbd_data_in)); save_item(NAME(m_kbd_data_out)); + m_write_data.init(*this, FUNC(at_kbc_device_base::write_data)); + m_write_command.init(*this, FUNC(at_kbc_device_base::write_command)); + m_set_kbd_clk_in.init(*this, FUNC(at_kbc_device_base::set_kbd_clk_in)); + m_set_kbd_data_in.init(*this, FUNC(at_kbc_device_base::set_kbd_data_in)); + m_hot_res = m_gate_a20 = m_kbd_irq = 0U; m_kbd_clk_in = m_kbd_clk_out = 1U; m_kbd_data_in = m_kbd_data_out = 1U; @@ -444,12 +449,12 @@ uint8_t ps2_keyboard_controller_device::status_r() WRITE_LINE_MEMBER(ps2_keyboard_controller_device::aux_clk_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(ps2_keyboard_controller_device::set_aux_clk_in), this), state); + m_set_aux_clk_in.synchronize(state); } WRITE_LINE_MEMBER(ps2_keyboard_controller_device::aux_data_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(ps2_keyboard_controller_device::set_aux_data_in), this), state); + m_set_aux_data_in.synchronize(state); } ps2_keyboard_controller_device::ps2_keyboard_controller_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) @@ -491,6 +496,9 @@ void ps2_keyboard_controller_device::device_start() { at_kbc_device_base::device_start(); + m_set_aux_clk_in.init(*this, FUNC(ps2_keyboard_controller_device::set_aux_clk_in)); + m_set_aux_data_in.init(*this, FUNC(ps2_keyboard_controller_device::set_aux_data_in)); + save_item(NAME(m_aux_irq)); save_item(NAME(m_aux_clk_in)); save_item(NAME(m_aux_clk_out)); diff --git a/src/devices/machine/at_keybc.h b/src/devices/machine/at_keybc.h index 9e769416cb20a..c95843db0d8de 100644 --- a/src/devices/machine/at_keybc.h +++ b/src/devices/machine/at_keybc.h @@ -63,9 +63,13 @@ class at_kbc_device_base : public device_t private: // internal sync helpers TIMER_CALLBACK_MEMBER(write_data); + transient_timer_factory m_write_data; TIMER_CALLBACK_MEMBER(write_command); + transient_timer_factory m_write_command; TIMER_CALLBACK_MEMBER(set_kbd_clk_in); + transient_timer_factory m_set_kbd_clk_in; TIMER_CALLBACK_MEMBER(set_kbd_data_in); + transient_timer_factory m_set_kbd_data_in; devcb_write_line m_hot_res_cb, m_gate_a20_cb, m_kbd_irq_cb; devcb_write_line m_kbd_clk_cb, m_kbd_data_cb; @@ -141,7 +145,9 @@ class ps2_keyboard_controller_device : public at_kbc_device_base // internal sync helpers TIMER_CALLBACK_MEMBER(set_aux_clk_in); + transient_timer_factory m_set_aux_clk_in; TIMER_CALLBACK_MEMBER(set_aux_data_in); + transient_timer_factory m_set_aux_data_in; // MCU I/O handlers uint8_t p1_r(); diff --git a/src/devices/machine/bq4847.cpp b/src/devices/machine/bq4847.cpp index 7dd9031c81480..11420baf1a078 100644 --- a/src/devices/machine/bq4847.cpp +++ b/src/devices/machine/bq4847.cpp @@ -502,13 +502,13 @@ void bq4847_device::connect_osc(bool conn) void bq4847_device::device_start() { - m_clock_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bq4847_device::rtc_clock_cb), this)); + m_clock_timer = timer_alloc(*this, FUNC(bq4847_device::rtc_clock_cb)); // Periodic timer - m_periodic_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bq4847_device::rtc_periodic_cb), this)); + m_periodic_timer = timer_alloc(*this, FUNC(bq4847_device::rtc_periodic_cb)); // Watchdog timer - m_watchdog_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bq4847_device::rtc_watchdog_cb), this)); + m_watchdog_timer = timer_alloc(*this, FUNC(bq4847_device::rtc_watchdog_cb)); // Interrupt line m_interrupt_cb.resolve_safe(); diff --git a/src/devices/machine/bq48x2.cpp b/src/devices/machine/bq48x2.cpp index 40bfde5a754f5..59a937e6763b1 100644 --- a/src/devices/machine/bq48x2.cpp +++ b/src/devices/machine/bq48x2.cpp @@ -507,13 +507,13 @@ int bq48x2_device::get_delay() void bq48x2_device::device_start() { - m_clock_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bq48x2_device::rtc_clock_cb), this)); + m_clock_timer = timer_alloc(*this, FUNC(bq48x2_device::rtc_clock_cb)); // Periodic timer - m_periodic_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bq48x2_device::rtc_periodic_cb), this)); + m_periodic_timer = timer_alloc(*this, FUNC(bq48x2_device::rtc_periodic_cb)); // Watchdog timer - m_watchdog_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bq48x2_device::rtc_watchdog_cb), this)); + m_watchdog_timer = timer_alloc(*this, FUNC(bq48x2_device::rtc_watchdog_cb)); // Interrupt line m_interrupt_cb.resolve_safe(); diff --git a/src/devices/machine/busmouse.cpp b/src/devices/machine/busmouse.cpp index 2c06045d127eb..d6cab4afbec77 100644 --- a/src/devices/machine/busmouse.cpp +++ b/src/devices/machine/busmouse.cpp @@ -165,7 +165,7 @@ void bus_mouse_device::device_reset() LOG("irq rate: %d Hz\n", hz); } -void bus_mouse_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void bus_mouse_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { irq = !irq; diff --git a/src/devices/machine/busmouse.h b/src/devices/machine/busmouse.h index 787c80e399b78..060b50acb1c3d 100644 --- a/src/devices/machine/busmouse.h +++ b/src/devices/machine/busmouse.h @@ -28,7 +28,7 @@ class bus_mouse_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; // optional information overrides diff --git a/src/devices/machine/cdp1852.cpp b/src/devices/machine/cdp1852.cpp index b98b9a34fef39..1ef082104428e 100644 --- a/src/devices/machine/cdp1852.cpp +++ b/src/devices/machine/cdp1852.cpp @@ -66,8 +66,8 @@ void cdp1852_device::device_start() m_write_data.resolve_safe(); // allocate timers - m_update_do_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cdp1852_device::update_do), this)); - m_update_sr_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cdp1852_device::update_sr), this)); + m_update_do_timer = timer_alloc(*this, FUNC(cdp1852_device::update_do)); + m_update_sr_timer = timer_alloc(*this, FUNC(cdp1852_device::update_sr)); // register for state saving save_item(NAME(m_new_data)); diff --git a/src/devices/machine/cdp1871.cpp b/src/devices/machine/cdp1871.cpp index 36ce4b7789235..de6ceb9979492 100644 --- a/src/devices/machine/cdp1871.cpp +++ b/src/devices/machine/cdp1871.cpp @@ -175,7 +175,7 @@ void cdp1871_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void cdp1871_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cdp1871_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { change_output_lines(); clock_scan_counters(); diff --git a/src/devices/machine/cdp1871.h b/src/devices/machine/cdp1871.h index 50c0aaefdc9eb..356de08ffba53 100644 --- a/src/devices/machine/cdp1871.h +++ b/src/devices/machine/cdp1871.h @@ -66,7 +66,7 @@ class cdp1871_device : public device_t protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void change_output_lines(); void clock_scan_counters(); diff --git a/src/devices/machine/cdp1879.cpp b/src/devices/machine/cdp1879.cpp index 1ecf168b3d51e..3b5314425b229 100644 --- a/src/devices/machine/cdp1879.cpp +++ b/src/devices/machine/cdp1879.cpp @@ -64,7 +64,7 @@ void cdp1879_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void cdp1879_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cdp1879_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { advance_seconds(); diff --git a/src/devices/machine/cdp1879.h b/src/devices/machine/cdp1879.h index 2f2740df32a56..168437f7314f5 100644 --- a/src/devices/machine/cdp1879.h +++ b/src/devices/machine/cdp1879.h @@ -29,7 +29,7 @@ class cdp1879_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rtc_interface overrides virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override; diff --git a/src/devices/machine/chessmachine.cpp b/src/devices/machine/chessmachine.cpp index cd80fce19e543..d88b31fd6e082 100644 --- a/src/devices/machine/chessmachine.cpp +++ b/src/devices/machine/chessmachine.cpp @@ -61,6 +61,8 @@ void chessmachine_device::device_start() { // resolve callbacks m_data_out.resolve_safe(); + m_sync0_callback.init(*this, FUNC(chessmachine_device::sync0_callback)); + m_sync1_callback.init(*this, FUNC(chessmachine_device::sync1_callback)); // register for savestates save_item(NAME(m_bootrom_enabled)); @@ -80,7 +82,7 @@ void chessmachine_device::sync0_callback(void *ptr, s32 param) void chessmachine_device::data0_w(int state) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(chessmachine_device::sync0_callback), this), state ? 1 : 0); + m_sync0_callback.synchronize(state ? 1 : 0); } void chessmachine_device::sync1_callback(void *ptr, s32 param) @@ -93,7 +95,7 @@ void chessmachine_device::sync1_callback(void *ptr, s32 param) void chessmachine_device::data1_w(int state) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(chessmachine_device::sync1_callback), this), state ? 0x80 : 0); + m_sync1_callback.synchronize(state ? 0x80 : 0); } void chessmachine_device::reset_w(int state) diff --git a/src/devices/machine/chessmachine.h b/src/devices/machine/chessmachine.h index b1a11b459f19c..330c6e6524aff 100644 --- a/src/devices/machine/chessmachine.h +++ b/src/devices/machine/chessmachine.h @@ -48,7 +48,9 @@ class chessmachine_device : public device_t u8 m_latch[2] = { 0, 0 }; void sync0_callback(void *ptr, s32 param); + transient_timer_factory m_sync0_callback; void sync1_callback(void *ptr, s32 param); + transient_timer_factory m_sync1_callback; bool m_bootrom_enabled = false; void install_bootrom(bool enable); diff --git a/src/devices/machine/clock.cpp b/src/devices/machine/clock.cpp index 374dc8a16a8ec..bfb2f37f5ce60 100644 --- a/src/devices/machine/clock.cpp +++ b/src/devices/machine/clock.cpp @@ -39,7 +39,7 @@ void clock_device::device_clock_changed() m_timer->adjust(attotime::never); } -void clock_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void clock_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_signal = !m_signal; m_signal_handler(m_signal); diff --git a/src/devices/machine/clock.h b/src/devices/machine/clock.h index 4bf0bed47a09e..7c49387cb6bf3 100644 --- a/src/devices/machine/clock.h +++ b/src/devices/machine/clock.h @@ -16,7 +16,7 @@ class clock_device : public device_t protected: virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_clock_changed() override; private: diff --git a/src/devices/machine/com8116.cpp b/src/devices/machine/com8116.cpp index 9942234a64011..1d97d5d19690c 100644 --- a/src/devices/machine/com8116.cpp +++ b/src/devices/machine/com8116.cpp @@ -174,7 +174,7 @@ void com8116_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void com8116_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void com8116_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/com8116.h b/src/devices/machine/com8116.h index c881d08312dc1..322cb1b8b4b20 100644 --- a/src/devices/machine/com8116.h +++ b/src/devices/machine/com8116.h @@ -63,7 +63,7 @@ class com8116_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int m_param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int m_param, void *ptr) override; private: enum diff --git a/src/devices/machine/cop452.cpp b/src/devices/machine/cop452.cpp index 09e31df2c823b..fe4636a33ed67 100644 --- a/src/devices/machine/cop452.cpp +++ b/src/devices/machine/cop452.cpp @@ -178,7 +178,7 @@ void cop452_device::device_reset() m_timers[ 1 ]->reset(); } -void cop452_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cop452_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (m_mode) { case MODE_DUAL_FREQ: diff --git a/src/devices/machine/cop452.h b/src/devices/machine/cop452.h index f4981be72f3e4..1894777e0894f 100644 --- a/src/devices/machine/cop452.h +++ b/src/devices/machine/cop452.h @@ -42,7 +42,7 @@ class cop452_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // Index 0 is for "A" side, 1 is for "B" side diff --git a/src/devices/machine/corvushd.cpp b/src/devices/machine/corvushd.cpp index 07b959d9fba46..22caf5609d9a7 100644 --- a/src/devices/machine/corvushd.cpp +++ b/src/devices/machine/corvushd.cpp @@ -1297,7 +1297,6 @@ void corvus_hdc_device::corvus_process_command_packet(bool invalid_command_flag) // // Set up timers for command completion and timeout from host // - //machine.scheduler().timer_set(attotime::from_usec(m_delay), FUNC(corvus_hdc_callback), CALLBACK_CTH_MODE); m_cmd_timer->adjust(attotime::from_usec(m_delay), CALLBACK_CTH_MODE); m_timeout_timer->enable(0); // We've received enough data, disable the timeout timer @@ -1317,7 +1316,7 @@ void corvus_hdc_device::corvus_process_command_packet(bool invalid_command_flag) // Returns: // Nothing // -void corvus_hdc_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void corvus_hdc_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { int function = param; diff --git a/src/devices/machine/corvushd.h b/src/devices/machine/corvushd.h index fddffa0e4326b..58b1cde89cddd 100644 --- a/src/devices/machine/corvushd.h +++ b/src/devices/machine/corvushd.h @@ -37,7 +37,7 @@ class corvus_hdc_device : public device_t protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: static constexpr unsigned MAX_COMMAND_SIZE = 4096; // The maximum size of a command packet (the controller only has 5K of RAM...) diff --git a/src/devices/machine/cr511b.cpp b/src/devices/machine/cr511b.cpp index 5ff2decd5d5ea..5700d2075eb4d 100644 --- a/src/devices/machine/cr511b.cpp +++ b/src/devices/machine/cr511b.cpp @@ -87,7 +87,7 @@ void cr511b_device::device_reset() // device_timer - device-specific timer events //------------------------------------------------- -void cr511b_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void cr511b_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { } diff --git a/src/devices/machine/cr511b.h b/src/devices/machine/cr511b.h index ab70be1eb9c8f..53a44b6b80dca 100644 --- a/src/devices/machine/cr511b.h +++ b/src/devices/machine/cr511b.h @@ -63,7 +63,7 @@ class cr511b_device : public device_t virtual void device_start() override; virtual void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum diff --git a/src/devices/machine/cxd1185.cpp b/src/devices/machine/cxd1185.cpp index b599d30778317..8229adf44c3f9 100644 --- a/src/devices/machine/cxd1185.cpp +++ b/src/devices/machine/cxd1185.cpp @@ -100,7 +100,7 @@ void cxd1185_device::device_start() save_item(NAME(m_scsi_ctrl)); save_item(NAME(m_ioport)); - m_state_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cxd1185_device::state_timer), this)); + m_state_timer = timer_alloc(*this, FUNC(cxd1185_device::state_timer)); m_state = IDLE; m_irq_asserted = false; diff --git a/src/devices/machine/diablo_hd.cpp b/src/devices/machine/diablo_hd.cpp index 938173a945bfa..af0286d577fdc 100644 --- a/src/devices/machine/diablo_hd.cpp +++ b/src/devices/machine/diablo_hd.cpp @@ -1389,7 +1389,7 @@ void diablo_hd_device::device_reset() return; // for units with a CHD assigned to them start the timer m_bits = std::make_unique[]>(m_pages); - timer_set(m_sector_time - m_sector_mark_0_time, 1, 0); + m_timer->adjust(m_sector_time - m_sector_mark_0_time, 0); read_sector(); } @@ -1404,7 +1404,7 @@ void diablo_hd_device::device_reset() * @param id timer id * @param arg argument supplied to timer_insert (unused) */ -void diablo_hd_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void diablo_hd_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { LOG_DRIVE(9,"[DHD%u] TIMER id=%d param=%d ptr=%p @%.0fns\n", m_unit, id, param, ptr, timer.elapsed().as_double() * ATTOSECONDS_PER_NANOSECOND); if (!m_disk) @@ -1415,20 +1415,20 @@ void diablo_hd_device::device_timer(emu_timer &timer, device_timer_id id, int pa // assert sector mark sector_mark_0(); // next sector timer event is in the middle between sector_mark going 0 and back to 1 - timer.adjust(m_sector_mark_0_time, 1); + m_timer->adjust(m_sector_mark_0_time, 1); break; case 1: /* call the sector_callback, if any */ if (m_sector_callback) (void)(*m_sector_callback)(m_sector_callback_cookie, m_unit); // next sector timer event is deassert of sector_mark_0 (set to 1) - timer.adjust(m_sector_mark_1_time, 2); + m_timer->adjust(m_sector_mark_1_time, 2); break; case 2: // deassert sector mark sector_mark_1(); // next sector timer event is sector_mark_0 for next sector - timer.adjust(m_sector_time - m_sector_mark_0_time, 0); + m_timer->adjust(m_sector_time - m_sector_mark_0_time, 0); break; } } diff --git a/src/devices/machine/diablo_hd.h b/src/devices/machine/diablo_hd.h index ea96d2c4c7014..5271a14c78c2d 100644 --- a/src/devices/machine/diablo_hd.h +++ b/src/devices/machine/diablo_hd.h @@ -67,7 +67,7 @@ class diablo_hd_device : public device_t protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; private: diff --git a/src/devices/machine/dp83932c.cpp b/src/devices/machine/dp83932c.cpp index 092b3949ac2b5..38c7fdf40bfeb 100644 --- a/src/devices/machine/dp83932c.cpp +++ b/src/devices/machine/dp83932c.cpp @@ -82,7 +82,7 @@ void dp83932c_device::device_start() { m_out_int.resolve(); - m_command = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(dp83932c_device::command), this)); + m_command = timer_alloc(*this, FUNC(dp83932c_device::command)); save_item(NAME(m_int_state)); save_item(NAME(m_reg)); diff --git a/src/devices/machine/dp8573.cpp b/src/devices/machine/dp8573.cpp index d110ffa0656d1..92710414087d6 100644 --- a/src/devices/machine/dp8573.cpp +++ b/src/devices/machine/dp8573.cpp @@ -79,7 +79,7 @@ void dp8573_device::save_registers() m_ram[REG_SAVE_MONTH] = m_ram[REG_MONTH]; } -void dp8573_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void dp8573_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if ((m_pfr & PFR_OSF) || !(m_ram[REG_RTMR] & RTMR_CSS)) { diff --git a/src/devices/machine/dp8573.h b/src/devices/machine/dp8573.h index 1cb1300dedf8e..8870c1ce0ad43 100644 --- a/src/devices/machine/dp8573.h +++ b/src/devices/machine/dp8573.h @@ -31,7 +31,7 @@ class dp8573_device : public device_t, public device_nvram_interface protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_nvram_interface overrides virtual void nvram_default() override; diff --git a/src/devices/machine/ds1302.cpp b/src/devices/machine/ds1302.cpp index 0cdb5ea524287..f473546ebd903 100644 --- a/src/devices/machine/ds1302.cpp +++ b/src/devices/machine/ds1302.cpp @@ -132,7 +132,7 @@ void ds1302_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void ds1302_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ds1302_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (!CLOCK_HALT) { diff --git a/src/devices/machine/ds1302.h b/src/devices/machine/ds1302.h index 5adc919cae9d6..b6155cf2e73c2 100644 --- a/src/devices/machine/ds1302.h +++ b/src/devices/machine/ds1302.h @@ -46,7 +46,7 @@ class ds1302_device : public device_t, // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_nvram_interface overrides virtual void nvram_default() override; diff --git a/src/devices/machine/ds1386.cpp b/src/devices/machine/ds1386.cpp index 4333a6bcc5cb1..03cc5224a4201 100644 --- a/src/devices/machine/ds1386.cpp +++ b/src/devices/machine/ds1386.cpp @@ -199,7 +199,7 @@ void ds1386_device::watchdog_alarm() } } -void ds1386_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ds1386_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/ds1386.h b/src/devices/machine/ds1386.h index 0e994e436c9e8..ff45b27d1312a 100644 --- a/src/devices/machine/ds1386.h +++ b/src/devices/machine/ds1386.h @@ -125,7 +125,7 @@ class ds1386_device : public device_t, // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_nvram_interface overrides virtual void nvram_default() override; diff --git a/src/devices/machine/ds1994.cpp b/src/devices/machine/ds1994.cpp index c63fdd0da1522..221e4d0cd1bf4 100644 --- a/src/devices/machine/ds1994.cpp +++ b/src/devices/machine/ds1994.cpp @@ -353,7 +353,7 @@ void ds1994_device::ds1994_writemem(uint8_t value) /* */ /*************************************************/ -void ds1994_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ds1994_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/ds1994.h b/src/devices/machine/ds1994.h index a65f1b7d688b8..034155f3ee3e6 100644 --- a/src/devices/machine/ds1994.h +++ b/src/devices/machine/ds1994.h @@ -37,7 +37,7 @@ class ds1994_device : public device_t, public device_nvram_interface // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_nvram_interface overrides virtual void nvram_default() override; diff --git a/src/devices/machine/ds2401.cpp b/src/devices/machine/ds2401.cpp index a5fea5b189bac..bd80c201ee03f 100644 --- a/src/devices/machine/ds2401.cpp +++ b/src/devices/machine/ds2401.cpp @@ -92,7 +92,7 @@ void ds2401_device::device_reset() memset(m_data, 0, SIZE_DATA); } -void ds2401_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ds2401_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/machine/ds2401.h b/src/devices/machine/ds2401.h index 8b74c603cf95e..3cc105adcde21 100644 --- a/src/devices/machine/ds2401.h +++ b/src/devices/machine/ds2401.h @@ -53,7 +53,7 @@ class ds2401_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // internal state int m_state, m_bit, m_shift; diff --git a/src/devices/machine/ds2404.cpp b/src/devices/machine/ds2404.cpp index 0b62e2dbbcf11..3f8e4b8dc33da 100644 --- a/src/devices/machine/ds2404.cpp +++ b/src/devices/machine/ds2404.cpp @@ -317,7 +317,7 @@ void ds2404_device::clk_w(uint8_t data) } } -void ds2404_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ds2404_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/machine/ds2404.h b/src/devices/machine/ds2404.h index 3e31b5b14ccc6..07044f19a425a 100644 --- a/src/devices/machine/ds2404.h +++ b/src/devices/machine/ds2404.h @@ -46,7 +46,7 @@ class ds2404_device : public device_t, public device_nvram_interface virtual void nvram_read(emu_file &file) override; virtual void nvram_write(emu_file &file) override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void rom_cmd(uint8_t cmd); diff --git a/src/devices/machine/e0516.cpp b/src/devices/machine/e0516.cpp index a5d029afe27ee..88c60627e6f8b 100644 --- a/src/devices/machine/e0516.cpp +++ b/src/devices/machine/e0516.cpp @@ -73,7 +73,7 @@ void e0516_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void e0516_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void e0516_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { advance_seconds(); } diff --git a/src/devices/machine/e0516.h b/src/devices/machine/e0516.h index 6e5d1b557795d..40b0da52d642d 100644 --- a/src/devices/machine/e0516.h +++ b/src/devices/machine/e0516.h @@ -38,7 +38,7 @@ class e0516_device : public device_t, public device_rtc_interface protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rtc_interface overrides virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override; diff --git a/src/devices/machine/edlc.cpp b/src/devices/machine/edlc.cpp index 9fcc3be5fb583..470be6dc5a795 100644 --- a/src/devices/machine/edlc.cpp +++ b/src/devices/machine/edlc.cpp @@ -67,8 +67,8 @@ void seeq8003_device::device_start() //save_item(NAME(m_rx_fifo)); //save_item(NAME(m_tx_fifo)); - m_tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(seeq8003_device::transmit), this)); - m_int_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(seeq8003_device::interrupt), this)); + m_tx_timer = timer_alloc(*this, FUNC(seeq8003_device::transmit)); + m_int_timer = timer_alloc(*this, FUNC(seeq8003_device::interrupt)); m_int_state = 0; m_reset_state = 1; diff --git a/src/devices/machine/er1400.cpp b/src/devices/machine/er1400.cpp index f42a9f58f9cd9..4d251974d7da4 100644 --- a/src/devices/machine/er1400.cpp +++ b/src/devices/machine/er1400.cpp @@ -295,7 +295,7 @@ WRITE_LINE_MEMBER(er1400_device::c3_w) // fires //------------------------------------------------- -void er1400_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void er1400_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/er1400.h b/src/devices/machine/er1400.h index 984a6c9eea0fa..5bc05d61c5a80 100644 --- a/src/devices/machine/er1400.h +++ b/src/devices/machine/er1400.h @@ -45,7 +45,7 @@ class er1400_device : public device_t, public device_nvram_interface protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_nvram_interface overrides virtual void nvram_default() override; diff --git a/src/devices/machine/exorterm.cpp b/src/devices/machine/exorterm.cpp index 9db3f0658e496..b71e71ca11600 100644 --- a/src/devices/machine/exorterm.cpp +++ b/src/devices/machine/exorterm.cpp @@ -725,7 +725,7 @@ TIMER_CALLBACK_MEMBER(exorterm155_device::kbd_scan_row) m_kbd_next_row = (m_kbd_next_row + 1) % 5; } -TIMER_CALLBACK_MEMBER(exorterm155_device::kbd_repeat) +TIMER_CALLBACK_MEMBER(exorterm155_device::kbd_repeat_cb) { assert((m_kbd_repeat_row != 0xff) || (m_kbd_repeat_column != 0xff)); kbd_send_translated((m_kbd_repeat_row << 5) | m_kbd_repeat_column); @@ -761,8 +761,8 @@ void exorterm155_device::device_start() save_item(NAME(m_kbd_start_holdoff)); // Keyboard - m_kbd_scan_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(exorterm155_device::kbd_scan_row), this)); - m_kbd_repeat_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(exorterm155_device::kbd_repeat), this)); + m_kbd_scan_timer = timer_alloc(*this, FUNC(exorterm155_device::kbd_scan_row)); + m_kbd_repeat_timer = timer_alloc(*this, FUNC(exorterm155_device::kbd_repeat_cb)); kbd_reset_state(); kbd_repeat_stop(); diff --git a/src/devices/machine/exorterm.h b/src/devices/machine/exorterm.h index ee41cab4422b2..beecc9800a413 100644 --- a/src/devices/machine/exorterm.h +++ b/src/devices/machine/exorterm.h @@ -134,7 +134,7 @@ class exorterm155_device : public device_t void kbd_send_translated(u8 code); TIMER_CALLBACK_MEMBER(kbd_scan_row); - TIMER_CALLBACK_MEMBER(kbd_repeat); + TIMER_CALLBACK_MEMBER(kbd_repeat_cb); emu_timer *m_kbd_scan_timer; emu_timer *m_kbd_repeat_timer; diff --git a/src/devices/machine/f3853.cpp b/src/devices/machine/f3853.cpp index 4f7b6ff798b84..e617ad9b7c66e 100644 --- a/src/devices/machine/f3853.cpp +++ b/src/devices/machine/f3853.cpp @@ -113,7 +113,7 @@ void f3853_device::device_start() reg = reg << 1 | (BIT(reg,7) ^ BIT(reg,5) ^ BIT(reg,4) ^ BIT(reg,3) ^ 1); } - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(f3853_device::timer_callback),this)); + m_timer = timer_alloc(*this, FUNC(f3853_device::timer_callback)); // zerofill (what's not in constructor) m_external_int_enable = false; diff --git a/src/devices/machine/fga002.cpp b/src/devices/machine/fga002.cpp index 59a40777aa9f4..ec7a68820a7fa 100644 --- a/src/devices/machine/fga002.cpp +++ b/src/devices/machine/fga002.cpp @@ -145,7 +145,7 @@ void fga002_device::device_reset() //------------------------------------------------- // device_timer - handler timer events //------------------------------------------------- -void fga002_device::device_timer (emu_timer &timer, device_timer_id id, int32_t param, void *ptr) +void fga002_device::device_timer(timer_instance const &timer, device_timer_id id, int32_t param, void *ptr) { switch(id) { diff --git a/src/devices/machine/fga002.h b/src/devices/machine/fga002.h index be72206eb768c..092cb46197328 100644 --- a/src/devices/machine/fga002.h +++ b/src/devices/machine/fga002.h @@ -57,7 +57,7 @@ class fga002_device : public device_t virtual int z80daisy_irq_ack() override; virtual void z80daisy_irq_reti() override; #endif - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; devcb_write_line m_out_int_cb; devcb_read8 m_liack4_cb; diff --git a/src/devices/machine/gen_fifo.cpp b/src/devices/machine/gen_fifo.cpp index 10fcf37429cd3..a974fc5ee4f0c 100644 --- a/src/devices/machine/gen_fifo.cpp +++ b/src/devices/machine/gen_fifo.cpp @@ -60,7 +60,7 @@ template void generic_fifo_device_base::device_start() save_item(NAME(m_full_triggered)); } -template void generic_fifo_device_base::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +template void generic_fifo_device_base::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { case T_FULL: { diff --git a/src/devices/machine/gen_fifo.h b/src/devices/machine/gen_fifo.h index a33f4d4880f8e..da9dde014f1c7 100644 --- a/src/devices/machine/gen_fifo.h +++ b/src/devices/machine/gen_fifo.h @@ -197,7 +197,7 @@ template class generic_fifo_device_base : public device_t { bool m_empty_triggered, m_full_triggered; virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; class generic_fifo_u32_device : public generic_fifo_device_base diff --git a/src/devices/machine/gen_latch.cpp b/src/devices/machine/gen_latch.cpp index 2e3929b108a84..6fa563e76f9fc 100644 --- a/src/devices/machine/gen_latch.cpp +++ b/src/devices/machine/gen_latch.cpp @@ -49,7 +49,8 @@ void generic_latch_base_device::device_start() save_item(NAME(m_latch_written)); // synchronization is needed since other devices may not be initialized yet - machine().scheduler().synchronize(timer_expired_delegate(FUNC(generic_latch_base_device::init_callback), this)); + m_init_callback.init(*this, FUNC(generic_latch_base_device::init_callback)); + m_init_callback.synchronize(); } //------------------------------------------------- @@ -125,7 +126,7 @@ u8 generic_latch_8_device::read() void generic_latch_8_device::write(u8 data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(generic_latch_8_device::sync_callback), this), data); + m_sync_callback.synchronize(data); } void generic_latch_8_device::preset_w(u8 data) @@ -174,6 +175,7 @@ void generic_latch_8_device::device_start() { // register for state saving generic_latch_base_device::device_start(); + m_sync_callback.init(*this, FUNC(generic_latch_8_device::sync_callback)); save_item(NAME(m_latched_value)); } @@ -196,7 +198,7 @@ u16 generic_latch_16_device::read() void generic_latch_16_device::write(u16 data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(generic_latch_16_device::sync_callback), this), data); + m_sync_callback.synchronize(data); } void generic_latch_16_device::preset_w(u16 data) @@ -245,5 +247,6 @@ void generic_latch_16_device::device_start() { // register for state saving generic_latch_base_device::device_start(); + m_sync_callback.init(*this, FUNC(generic_latch_16_device::sync_callback)); save_item(NAME(m_latched_value)); } diff --git a/src/devices/machine/gen_latch.h b/src/devices/machine/gen_latch.h index 4080cbebe8da8..111513321c16f 100644 --- a/src/devices/machine/gen_latch.h +++ b/src/devices/machine/gen_latch.h @@ -52,6 +52,7 @@ class generic_latch_base_device : public device_t private: void init_callback(void *ptr, s32 param); + transient_timer_factory m_init_callback; bool m_separate_acknowledge; bool m_latch_written; @@ -79,6 +80,7 @@ class generic_latch_8_device : public generic_latch_base_device virtual void device_start() override; void sync_callback(void *ptr, s32 param); + transient_timer_factory m_sync_callback; private: u8 m_latched_value; @@ -105,6 +107,7 @@ class generic_latch_16_device : public generic_latch_base_device virtual void device_start() override; void sync_callback(void *ptr, s32 param); + transient_timer_factory m_sync_callback; private: u16 m_latched_value; diff --git a/src/devices/machine/generalplus_gpl16250soc.cpp b/src/devices/machine/generalplus_gpl16250soc.cpp index 80990745f8170..8beb2274cfb5b 100644 --- a/src/devices/machine/generalplus_gpl16250soc.cpp +++ b/src/devices/machine/generalplus_gpl16250soc.cpp @@ -1698,7 +1698,7 @@ void sunplus_gcm394_base_device::checkirq6() */ -void sunplus_gcm394_base_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sunplus_gcm394_base_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/generalplus_gpl16250soc.h b/src/devices/machine/generalplus_gpl16250soc.h index 50b8f67d8a69e..5490c995367fa 100644 --- a/src/devices/machine/generalplus_gpl16250soc.h +++ b/src/devices/machine/generalplus_gpl16250soc.h @@ -360,7 +360,7 @@ class sunplus_gcm394_base_device : public unsp_20_device, public device_mixer_in void checkirq6(); emu_timer *m_unk_timer; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; inline uint16_t read_space(uint32_t offset); inline void write_space(uint32_t offset, uint16_t data); diff --git a/src/devices/machine/generalplus_gpl16250soc_video.cpp b/src/devices/machine/generalplus_gpl16250soc_video.cpp index 4f3a754e43cff..bc0bf65a8cf83 100644 --- a/src/devices/machine/generalplus_gpl16250soc_video.cpp +++ b/src/devices/machine/generalplus_gpl16250soc_video.cpp @@ -1132,7 +1132,7 @@ WRITE_LINE_MEMBER(gcm394_base_video_device::vblank) } } -void gcm394_base_video_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void gcm394_base_video_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/generalplus_gpl16250soc_video.h b/src/devices/machine/generalplus_gpl16250soc_video.h index 429e3246e04ad..d744b9c85ed5d 100644 --- a/src/devices/machine/generalplus_gpl16250soc_video.h +++ b/src/devices/machine/generalplus_gpl16250soc_video.h @@ -141,7 +141,7 @@ class gcm394_base_video_device : public device_t, public device_video_interface protected: static const device_timer_id TIMER_SCREENPOS = 2; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; inline void check_video_irq(); diff --git a/src/devices/machine/gt64xxx.cpp b/src/devices/machine/gt64xxx.cpp index 15e20e56ebf1b..81e3b63583d97 100644 --- a/src/devices/machine/gt64xxx.cpp +++ b/src/devices/machine/gt64xxx.cpp @@ -205,7 +205,7 @@ void gt64xxx_device::device_start() status = 0x0; // DMA timer - m_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gt64xxx_device::perform_dma), this)); + m_dma_timer = timer_alloc(*this, FUNC(gt64xxx_device::perform_dma)); // Leave the timer disabled. m_dma_timer->adjust(attotime::never, 0, DMA_TIMER_PERIOD); @@ -228,10 +228,10 @@ void gt64xxx_device::device_start() } /* allocate timers for the galileo */ - m_timer[0].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gt64xxx_device::timer_callback), this)); - m_timer[1].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gt64xxx_device::timer_callback), this)); - m_timer[2].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gt64xxx_device::timer_callback), this)); - m_timer[3].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gt64xxx_device::timer_callback), this)); + m_timer[0].timer = timer_alloc(*this, FUNC(gt64xxx_device::timer_callback)); + m_timer[1].timer = timer_alloc(*this, FUNC(gt64xxx_device::timer_callback)); + m_timer[2].timer = timer_alloc(*this, FUNC(gt64xxx_device::timer_callback)); + m_timer[3].timer = timer_alloc(*this, FUNC(gt64xxx_device::timer_callback)); // Save states save_item(NAME(m_pci_stall_state)); diff --git a/src/devices/machine/hd63450.cpp b/src/devices/machine/hd63450.cpp index 9d8226c3f9ea4..a747e98060cfc 100644 --- a/src/devices/machine/hd63450.cpp +++ b/src/devices/machine/hd63450.cpp @@ -50,7 +50,7 @@ void hd63450_device::device_start() // Initialise timers and registers for (int x = 0; x < 4; x++) - m_timer[x] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hd63450_device::dma_transfer_timer), this)); + m_timer[x] = timer_alloc(*this, FUNC(hd63450_device::dma_transfer_timer)); save_item(STRUCT_MEMBER(m_reg, csr)); save_item(STRUCT_MEMBER(m_reg, cer)); diff --git a/src/devices/machine/hd64610.cpp b/src/devices/machine/hd64610.cpp index 3b8393b9a119f..48e7c04e8f80a 100644 --- a/src/devices/machine/hd64610.cpp +++ b/src/devices/machine/hd64610.cpp @@ -188,7 +188,7 @@ void hd64610_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void hd64610_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hd64610_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/hd64610.h b/src/devices/machine/hd64610.h index 517ff11284f7a..59fa79129c792 100644 --- a/src/devices/machine/hd64610.h +++ b/src/devices/machine/hd64610.h @@ -48,7 +48,7 @@ class hd64610_device : public device_t, protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rtc_interface overrides virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override; diff --git a/src/devices/machine/hdc92x4.cpp b/src/devices/machine/hdc92x4.cpp index 967c6289a6cbc..04d9953a204dc 100644 --- a/src/devices/machine/hdc92x4.cpp +++ b/src/devices/machine/hdc92x4.cpp @@ -4766,7 +4766,7 @@ void hdc92x4_device::set_clock_divider(int line, int value) /* This is reached when a timer has expired */ -void hdc92x4_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hdc92x4_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { live_sync(); m_timed_wait = false; diff --git a/src/devices/machine/hdc92x4.h b/src/devices/machine/hdc92x4.h index dea7717d2b3d8..3808b07f764fe 100644 --- a/src/devices/machine/hdc92x4.h +++ b/src/devices/machine/hdc92x4.h @@ -138,7 +138,7 @@ class hdc92x4_device : public device_t // emu_timer *m_live_timer; // Timer callback - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // Handlers for incoming signals void ready_handler(); diff --git a/src/devices/machine/hp_dc100_tape.cpp b/src/devices/machine/hp_dc100_tape.cpp index 2c4b55e0156ab..7bb2dc53df6cd 100644 --- a/src/devices/machine/hp_dc100_tape.cpp +++ b/src/devices/machine/hp_dc100_tape.cpp @@ -503,7 +503,7 @@ void hp_dc100_tape_device::device_reset() clear_state(); } -void hp_dc100_tape_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hp_dc100_tape_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { LOG_TMR("%.6f TMR %d p=%d s=%.3f(%.3f) a=%d\n" , machine().time().as_double() , id , m_tape_pos , m_speed , m_set_point , m_accelerating); update_speed_pos(); diff --git a/src/devices/machine/hp_dc100_tape.h b/src/devices/machine/hp_dc100_tape.h index 2d3a2ea0617a2..263473a549c42 100644 --- a/src/devices/machine/hp_dc100_tape.h +++ b/src/devices/machine/hp_dc100_tape.h @@ -108,7 +108,7 @@ class hp_dc100_tape_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: devcb_write_line m_cart_out_handler; diff --git a/src/devices/machine/hp_taco.cpp b/src/devices/machine/hp_taco.cpp index 5be1a1ebc9a21..6a3cf527073f1 100644 --- a/src/devices/machine/hp_taco.cpp +++ b/src/devices/machine/hp_taco.cpp @@ -605,7 +605,7 @@ void hp_taco_device::device_reset() m_error_timer->reset(); } -void hp_taco_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hp_taco_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { case GAP_TMR_ID: diff --git a/src/devices/machine/hp_taco.h b/src/devices/machine/hp_taco.h index 243b79e98bae5..89a72a0c4aa94 100644 --- a/src/devices/machine/hp_taco.h +++ b/src/devices/machine/hp_taco.h @@ -52,7 +52,7 @@ class hp_taco_device : public device_t virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_tape; diff --git a/src/devices/machine/i7220.cpp b/src/devices/machine/i7220.cpp index 4050cd5aff849..4e8435222d349 100644 --- a/src/devices/machine/i7220.cpp +++ b/src/devices/machine/i7220.cpp @@ -108,7 +108,7 @@ void i7220_device::device_reset() memset(&m_regs, 0, sizeof(m_regs)); } -void i7220_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void i7220_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { general_continue(bi); } diff --git a/src/devices/machine/i7220.h b/src/devices/machine/i7220.h index a65eecbf1198d..083e650b7f041 100644 --- a/src/devices/machine/i7220.h +++ b/src/devices/machine/i7220.h @@ -68,7 +68,7 @@ class i7220_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; int m_data_size; diff --git a/src/devices/machine/i8087.cpp b/src/devices/machine/i8087.cpp index 9d2327bd3afff..264bc90ea21a0 100644 --- a/src/devices/machine/i8087.cpp +++ b/src/devices/machine/i8087.cpp @@ -215,7 +215,7 @@ void i8087_device::device_start() build_opcode_table(); } -void i8087_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void i8087_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_busy_handler(1); } diff --git a/src/devices/machine/i8087.h b/src/devices/machine/i8087.h index 4ee28a095bf12..1dd12da1fc53e 100644 --- a/src/devices/machine/i8087.h +++ b/src/devices/machine/i8087.h @@ -26,7 +26,7 @@ class i8087_device : public device_t i8087_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: address_space &space() { return *m_space; } diff --git a/src/devices/machine/i8155.cpp b/src/devices/machine/i8155.cpp index 996faed2f42b8..ece0ccf59703a 100644 --- a/src/devices/machine/i8155.cpp +++ b/src/devices/machine/i8155.cpp @@ -321,8 +321,8 @@ void i8155_device::device_start() m_ram = make_unique_clear(256); // allocate timers - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(i8155_device::timer_half_counted), this)); - m_timer_tc = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(i8155_device::timer_tc), this)); + m_timer = timer_alloc(*this, FUNC(i8155_device::timer_half_counted)); + m_timer_tc = timer_alloc(*this, FUNC(i8155_device::timer_tc)); // register for state saving save_item(NAME(m_io_m)); diff --git a/src/devices/machine/i82357.cpp b/src/devices/machine/i82357.cpp index 80319a8a52a17..e0b4a0e7171b9 100644 --- a/src/devices/machine/i82357.cpp +++ b/src/devices/machine/i82357.cpp @@ -210,7 +210,7 @@ void i82357_device::device_start() m_out_nmi.resolve_safe(); m_out_spkr.resolve_safe(); - m_nmi_check = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(i82357_device::nmi_check), this)); + m_nmi_check = timer_alloc(*this, FUNC(i82357_device::nmi_check)); } void i82357_device::device_reset() diff --git a/src/devices/machine/i82586.cpp b/src/devices/machine/i82586.cpp index e52c2ff8389f6..d2e58ad2d1f90 100644 --- a/src/devices/machine/i82586.cpp +++ b/src/devices/machine/i82586.cpp @@ -204,7 +204,7 @@ void i82586_base_device::device_reset() m_mac_multi = 0; } -void i82586_base_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void i82586_base_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/i82586.h b/src/devices/machine/i82586.h index ad02c0bfecefe..e0ae140490d20 100644 --- a/src/devices/machine/i82586.h +++ b/src/devices/machine/i82586.h @@ -167,7 +167,7 @@ class i82586_base_device : virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual space_config_vector memory_space_config() const override; // device_network_interface overrides diff --git a/src/devices/machine/i8271.cpp b/src/devices/machine/i8271.cpp index 06ee6a4010467..b1c029d80651d 100644 --- a/src/devices/machine/i8271.cpp +++ b/src/devices/machine/i8271.cpp @@ -1546,7 +1546,7 @@ std::string i8271_device::ttsn() const return machine().time().to_string(); } -void i8271_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void i8271_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { live_sync(); diff --git a/src/devices/machine/i8271.h b/src/devices/machine/i8271.h index ba15f6ec16666..01ffebef54daa 100644 --- a/src/devices/machine/i8271.h +++ b/src/devices/machine/i8271.h @@ -44,7 +44,7 @@ class i8271_device : public device_t protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum { diff --git a/src/devices/machine/i8279.cpp b/src/devices/machine/i8279.cpp index 474dfbbf1704e..ed58648166e61 100644 --- a/src/devices/machine/i8279.cpp +++ b/src/devices/machine/i8279.cpp @@ -120,7 +120,7 @@ void i8279_device::device_start() m_in_shift_cb.resolve(); m_in_ctrl_cb.resolve(); m_scanclock = clock(); - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(i8279_device::timerproc_callback), this)); + m_timer = timer_alloc(*this, FUNC(i8279_device::timerproc_callback)); // save state save_item(NAME(m_d_ram)); diff --git a/src/devices/machine/ibm21s850.cpp b/src/devices/machine/ibm21s850.cpp index 3afb88b27a1d2..7161bf2da9943 100644 --- a/src/devices/machine/ibm21s850.cpp +++ b/src/devices/machine/ibm21s850.cpp @@ -81,7 +81,7 @@ void ibm21s851_device::device_reset() m_regs[REG_COUNT_OFFS] |= 0x0b; // 11 registers following the standard block on 21S851 } -void ibm21s85x_base_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ibm21s85x_base_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_RESET) { diff --git a/src/devices/machine/ibm21s850.h b/src/devices/machine/ibm21s850.h index 3853a7c9799fa..0afe87b42adb9 100644 --- a/src/devices/machine/ibm21s850.h +++ b/src/devices/machine/ibm21s850.h @@ -30,7 +30,7 @@ class ibm21s85x_base_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void power_on_reset(); diff --git a/src/devices/machine/icm7170.cpp b/src/devices/machine/icm7170.cpp index c66d1b6bcc7c4..8cca89a157da5 100644 --- a/src/devices/machine/icm7170.cpp +++ b/src/devices/machine/icm7170.cpp @@ -112,7 +112,7 @@ void icm7170_device::device_reset() // device_timer - handles timer events //------------------------------------------------- -void icm7170_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void icm7170_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // advance hundredths m_irq_status |= IRQ_BIT_100TH_SECOND; diff --git a/src/devices/machine/icm7170.h b/src/devices/machine/icm7170.h index e38a556b06c20..61d308b9b8b76 100644 --- a/src/devices/machine/icm7170.h +++ b/src/devices/machine/icm7170.h @@ -61,7 +61,7 @@ class icm7170_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rtc_interface overrides virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override; diff --git a/src/devices/machine/ie15.cpp b/src/devices/machine/ie15.cpp index 4d9d17a3afccc..bf575eecab8d3 100644 --- a/src/devices/machine/ie15.cpp +++ b/src/devices/machine/ie15.cpp @@ -166,7 +166,7 @@ void ie15_device::beep_w(uint8_t data) { LOG("beep (%s)\n", m_long_beep ? "short" : "long"); } - machine().scheduler().timer_set(attotime::from_msec(length), timer_expired_delegate(FUNC(ie15_device::ie15_beepoff),this)); + m_ie15_beepoff.call_after(attotime::from_msec(length)); m_beeper->set_state(1); } @@ -231,7 +231,7 @@ uint8_t ie15_device::kb_s_lin_r() /* serial port */ -void ie15_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ie15_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -497,6 +497,8 @@ void ie15_device::device_start() m_hblank_timer = timer_alloc(TIMER_HBLANK); m_hblank_timer->adjust(attotime::never); + m_ie15_beepoff.init(*this, FUNC(ie15_device::ie15_beepoff)); + m_video.ptr1 = m_video.ptr2 = m_latch = 0; m_tmpbmp = std::make_unique(IE15_TOTAL_HORZ * IE15_TOTAL_VERT); diff --git a/src/devices/machine/ie15.h b/src/devices/machine/ie15.h index 3bd93567d22a1..ee291ab3de2be 100644 --- a/src/devices/machine/ie15.h +++ b/src/devices/machine/ie15.h @@ -56,7 +56,7 @@ class ie15_device : public device_t, public device_serial_interface virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; @@ -154,6 +154,8 @@ class ie15_device : public device_t, public device_serial_interface devcb_write_line m_rs232_conn_dtr_handler; devcb_write_line m_rs232_conn_rts_handler; + transient_timer_factory m_ie15_beepoff; + // Until the UART is implemented required_ioport m_rs232_txbaud; required_ioport m_rs232_rxbaud; diff --git a/src/devices/machine/input_merger.cpp b/src/devices/machine/input_merger.cpp index 3e0570d82b09d..074914721863d 100644 --- a/src/devices/machine/input_merger.cpp +++ b/src/devices/machine/input_merger.cpp @@ -80,6 +80,7 @@ input_merger_device::~input_merger_device() void input_merger_device::device_start() { m_output_handler.resolve_safe(); + m_update_state.init(*this, FUNC(input_merger_device::update_state)); save_item(NAME(m_state)); m_state = m_initval; } diff --git a/src/devices/machine/input_merger.h b/src/devices/machine/input_merger.h index 744b342796d06..bd13d4f90de25 100644 --- a/src/devices/machine/input_merger.h +++ b/src/devices/machine/input_merger.h @@ -24,7 +24,7 @@ class input_merger_device : public device_t auto &initial_state(u32 val) { m_initval = val; return *this; } // initial input pin(s) state, be wary about the unused pins // input lines - template DECLARE_WRITE_LINE_MEMBER(in_w) { static_assert(Bit < 32, "invalid bit"); machine().scheduler().synchronize(timer_expired_delegate(FUNC(input_merger_device::update_state), this), (Bit << 1) | (state ? 1U : 0U)); } + template DECLARE_WRITE_LINE_MEMBER(in_w) { static_assert(Bit < 32, "invalid bit"); m_update_state.synchronize((Bit << 1) | (state ? 1U : 0U)); } template void in_set(u8 data = 0) { in_w(1); } template void in_clear(u8 data = 0) { in_w(0); } @@ -52,6 +52,7 @@ class input_merger_device : public device_t u32 const m_xorval; int const m_active; u32 m_state; + transient_timer_factory m_update_state; }; diff --git a/src/devices/machine/ins8250.cpp b/src/devices/machine/ins8250.cpp index 3a4dabf688a5b..5fa7928b97a06 100644 --- a/src/devices/machine/ins8250.cpp +++ b/src/devices/machine/ins8250.cpp @@ -713,7 +713,7 @@ void ns16550_device::device_reset() ins8250_uart_device::device_reset(); } -void ns16550_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ns16550_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if(!id) { diff --git a/src/devices/machine/ins8250.h b/src/devices/machine/ins8250.h index 5f9a6bd179395..03c929ac7fc65 100644 --- a/src/devices/machine/ins8250.h +++ b/src/devices/machine/ins8250.h @@ -119,7 +119,7 @@ class ns16550_device : public ins8250_uart_device virtual void device_reset() override; virtual void rcv_complete() override; virtual void tra_complete() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void set_fcr(u8 data) override; virtual void push_tx(u8 data) override; virtual u8 pop_rx() override; diff --git a/src/devices/machine/intelfsh.cpp b/src/devices/machine/intelfsh.cpp index 2252d2804f722..f3b5145da4554 100644 --- a/src/devices/machine/intelfsh.cpp +++ b/src/devices/machine/intelfsh.cpp @@ -543,7 +543,7 @@ void intelfsh_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void intelfsh_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void intelfsh_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch( m_flash_mode ) { diff --git a/src/devices/machine/intelfsh.h b/src/devices/machine/intelfsh.h index 8001b2fc5ceb1..867704552a941 100644 --- a/src/devices/machine/intelfsh.h +++ b/src/devices/machine/intelfsh.h @@ -66,7 +66,7 @@ class intelfsh_device : public device_t, // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_nvram_interface overrides virtual void nvram_default() override; diff --git a/src/devices/machine/iopsio2.cpp b/src/devices/machine/iopsio2.cpp index 6ffe90c0737bb..19b03f8bd2ebe 100644 --- a/src/devices/machine/iopsio2.cpp +++ b/src/devices/machine/iopsio2.cpp @@ -32,7 +32,7 @@ iop_sio2_device::~iop_sio2_device() void iop_sio2_device::device_start() { if (!m_response_timer) - m_response_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(iop_sio2_device::response_timer), this)); + m_response_timer = timer_alloc(*this, FUNC(iop_sio2_device::response_timer)); save_item(NAME(m_buffer)); save_item(NAME(m_curr_byte)); diff --git a/src/devices/machine/ioptimer.cpp b/src/devices/machine/ioptimer.cpp index 487c795ef267c..8c44bc256c8f4 100644 --- a/src/devices/machine/ioptimer.cpp +++ b/src/devices/machine/ioptimer.cpp @@ -39,10 +39,10 @@ void iop_timer_device::device_start() m_int_cb.resolve_safe(); if (!m_compare_timer) - m_compare_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(iop_timer_device::compare), this)); + m_compare_timer = timer_alloc(*this, FUNC(iop_timer_device::compare)); if (!m_overflow_timer) - m_overflow_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(iop_timer_device::overflow), this)); + m_overflow_timer = timer_alloc(*this, FUNC(iop_timer_device::overflow)); } void iop_timer_device::device_reset() @@ -116,7 +116,7 @@ void iop_timer_device::update_overflow_timer() void iop_timer_device::update_count() { - attotime curr_time = machine().scheduler().time(); + attotime curr_time = machine().time(); attotime time_delta = curr_time - m_last_update_time; m_last_update_time = curr_time; m_elapsed_time += time_delta; diff --git a/src/devices/machine/iwm.cpp b/src/devices/machine/iwm.cpp index 0f5663908a71b..a5d998343960f 100644 --- a/src/devices/machine/iwm.cpp +++ b/src/devices/machine/iwm.cpp @@ -90,7 +90,7 @@ void iwm_device::device_reset() m_devsel_cb(0); } -void iwm_device::device_timer(emu_timer &, device_timer_id, int, void *) +void iwm_device::device_timer(timer_instance const &, device_timer_id, int, void *) { if(m_active == MODE_DELAY) { flush_write(); diff --git a/src/devices/machine/iwm.h b/src/devices/machine/iwm.h index 4cb4edb18cf8e..fa59da42c1b11 100644 --- a/src/devices/machine/iwm.h +++ b/src/devices/machine/iwm.h @@ -37,7 +37,7 @@ class iwm_device: public applefdintf_device protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum { diff --git a/src/devices/machine/kb3600.cpp b/src/devices/machine/kb3600.cpp index 5400d8ac1a882..f26dc6788aed9 100644 --- a/src/devices/machine/kb3600.cpp +++ b/src/devices/machine/kb3600.cpp @@ -106,7 +106,7 @@ void ay3600_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void ay3600_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ay3600_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { int ako = 0; diff --git a/src/devices/machine/kb3600.h b/src/devices/machine/kb3600.h index fce1eab7646fd..ac4c8cfc13d00 100644 --- a/src/devices/machine/kb3600.h +++ b/src/devices/machine/kb3600.h @@ -83,7 +83,7 @@ class ay3600_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; devcb_read16 m_read_x0, m_read_x1, m_read_x2, m_read_x3, m_read_x4, m_read_x5, m_read_x6, m_read_x7, m_read_x8; devcb_read_line m_read_shift, m_read_control; diff --git a/src/devices/machine/keyboard.h b/src/devices/machine/keyboard.h index 2b4f32e856f81..046ef6e904fc4 100644 --- a/src/devices/machine/keyboard.h +++ b/src/devices/machine/keyboard.h @@ -54,17 +54,17 @@ class device_matrix_keyboard_interface : public device_interface bool are_all_keys_up(); private: - TIMER_CALLBACK_MEMBER(scan_row); - TIMER_CALLBACK_MEMBER(typematic); - - emu_timer *m_scan_timer; - emu_timer *m_typematic_timer; - required_ioport m_key_rows[ROW_COUNT]; - ioport_value m_key_states[ROW_COUNT]; - u8 m_next_row; - u8 m_processing; - u8 m_typematic_row; - u8 m_typematic_column; + void scan_row(timer_instance const &timer); + void typematic(timer_instance const &timer); + + persistent_timer m_scan_timer; + persistent_timer m_typematic_timer; + required_ioport m_key_rows[ROW_COUNT]; + ioport_value m_key_states[ROW_COUNT]; + u8 m_next_row; + u8 m_processing; + u8 m_typematic_row; + u8 m_typematic_column; }; diff --git a/src/devices/machine/keyboard.ipp b/src/devices/machine/keyboard.ipp index 12dfb7b1a5a21..5cbe54d50956f 100644 --- a/src/devices/machine/keyboard.ipp +++ b/src/devices/machine/keyboard.ipp @@ -19,8 +19,6 @@ template template device_matrix_keyboard_interface::device_matrix_keyboard_interface(machine_config const &mconfig, device_t &device, T &&... tags) : device_interface(device, "matrix_keyboard") - , m_scan_timer(nullptr) - , m_typematic_timer(nullptr) , m_key_rows{ { device, std::forward(tags) }... } , m_next_row(0U) , m_processing(0U) @@ -33,10 +31,8 @@ device_matrix_keyboard_interface::device_matrix_keyboard_interface(ma template void device_matrix_keyboard_interface::interface_pre_start() { - if (!m_scan_timer) - m_scan_timer = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(device_matrix_keyboard_interface::scan_row), this)); - if (!m_typematic_timer) - m_typematic_timer = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(device_matrix_keyboard_interface::typematic), this)); + m_scan_timer.init(*this, FUNC(device_matrix_keyboard_interface::scan_row)); + m_typematic_timer.init(*this, FUNC(device_matrix_keyboard_interface::typematic)); reset_key_state(); typematic_stop(); } @@ -57,14 +53,14 @@ template void device_matrix_keyboard_interface::start_processing(const attotime &period) { m_processing = 1U; - m_scan_timer->adjust(period, 0, period); + m_scan_timer.adjust(period, 0, period); } template void device_matrix_keyboard_interface::stop_processing() { - m_scan_timer->reset(); + m_scan_timer.reset(); m_processing = 0U; } @@ -82,7 +78,7 @@ void device_matrix_keyboard_interface::typematic_start(uint8_t row, u { m_typematic_row = row; m_typematic_column = column; - m_typematic_timer->adjust(delay, 0, interval); + m_typematic_timer.adjust(delay, 0, interval); } @@ -90,7 +86,7 @@ template void device_matrix_keyboard_interface::typematic_restart(attotime const &delay, attotime const &interval) { if ((m_typematic_row != uint8_t(~0U)) || (m_typematic_column != uint8_t(~0U))) - m_typematic_timer->adjust(delay, 0, interval); + m_typematic_timer.adjust(delay, 0, interval); } @@ -99,12 +95,12 @@ void device_matrix_keyboard_interface::typematic_stop() { m_typematic_row = uint8_t(~0U); m_typematic_column = uint8_t(~0U); - m_typematic_timer->reset(); + m_typematic_timer.reset(); } template -TIMER_CALLBACK_MEMBER(device_matrix_keyboard_interface::scan_row) +void device_matrix_keyboard_interface::scan_row(timer_instance const &timer) { assert(m_next_row < std::size(m_key_rows)); assert(m_next_row < std::size(m_key_states)); @@ -135,7 +131,7 @@ TIMER_CALLBACK_MEMBER(device_matrix_keyboard_interface::scan_row) template -TIMER_CALLBACK_MEMBER(device_matrix_keyboard_interface::typematic) +void device_matrix_keyboard_interface::typematic(timer_instance const &timer) { assert((m_typematic_row != uint8_t(~0U)) || (m_typematic_column != uint8_t(~0U))); key_repeat(m_typematic_row, m_typematic_column); diff --git a/src/devices/machine/kr2376.cpp b/src/devices/machine/kr2376.cpp index 7d59c4ea317a7..cad9ccd5ff269 100644 --- a/src/devices/machine/kr2376.cpp +++ b/src/devices/machine/kr2376.cpp @@ -263,7 +263,7 @@ void kr2376_device::detect_keypress() } } -void kr2376_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void kr2376_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/kr2376.h b/src/devices/machine/kr2376.h index ab5a4c3f82cf5..338c169ac054f 100644 --- a/src/devices/machine/kr2376.h +++ b/src/devices/machine/kr2376.h @@ -71,7 +71,7 @@ class kr2376_device : public device_t protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual uint8_t key_codes(int mode, int x, int y) { return 0x00; } private: diff --git a/src/devices/machine/laserdsc.cpp b/src/devices/machine/laserdsc.cpp index 92fad4019fd7d..fb95677144a2d 100644 --- a/src/devices/machine/laserdsc.cpp +++ b/src/devices/machine/laserdsc.cpp @@ -283,7 +283,7 @@ void laserdisc_device::device_validity_check(validity_checker &valid) const // device //------------------------------------------------- -void laserdisc_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void laserdisc_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/laserdsc.h b/src/devices/machine/laserdsc.h index 5fcc317a761e3..5fcc47fbabcd8 100644 --- a/src/devices/machine/laserdsc.h +++ b/src/devices/machine/laserdsc.h @@ -216,7 +216,7 @@ class laserdisc_device : public device_t, virtual void device_start() override; virtual void device_stop() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_validity_check(validity_checker &valid) const override; // device_sound_interface overrides diff --git a/src/devices/machine/latch8.cpp b/src/devices/machine/latch8.cpp index bfccdc48a30a4..ab37d587f5fb0 100644 --- a/src/devices/machine/latch8.cpp +++ b/src/devices/machine/latch8.cpp @@ -58,7 +58,7 @@ void latch8_device::write(offs_t offset, uint8_t data) assert(offset == 0); if (m_nosync != 0xff) - machine().scheduler().synchronize(timer_expired_delegate(FUNC(latch8_device::timerproc),this), (0xff << 8) | data); + m_timerproc.synchronize((0xff << 8) | data); else update(data, 0xff); } @@ -85,7 +85,7 @@ template inline void latch8_device::bitx_w(offs_t offset, uint8_t data if (m_nosync & mask) update(masked_data, mask); else - machine().scheduler().synchronize(timer_expired_delegate(FUNC(latch8_device::timerproc),this), (mask << 8) | masked_data); + m_timerproc.synchronize((mask << 8) | masked_data); } void latch8_device::bit0_w(offs_t offset, uint8_t data) { bitx_w<0>(offset, data); } @@ -131,6 +131,8 @@ void latch8_device::device_validity_check(validity_checker &valid) const void latch8_device::device_start() { + m_timerproc.init(*this, FUNC(latch8_device::timerproc)); + // setup nodemap for (auto &cb : m_write_cb) { diff --git a/src/devices/machine/latch8.h b/src/devices/machine/latch8.h index 0609d3949ff5c..70017649ef1ed 100644 --- a/src/devices/machine/latch8.h +++ b/src/devices/machine/latch8.h @@ -86,6 +86,7 @@ class latch8_device : public device_t virtual void device_validity_check(validity_checker &valid) const override; TIMER_CALLBACK_MEMBER( timerproc ); + transient_timer_factory m_timerproc; void update(uint8_t new_val, uint8_t mask); template void bitx_w(offs_t offset, uint8_t data); diff --git a/src/devices/machine/ldpr8210.cpp b/src/devices/machine/ldpr8210.cpp index 64392ed0c905b..32e99b5b33c63 100644 --- a/src/devices/machine/ldpr8210.cpp +++ b/src/devices/machine/ldpr8210.cpp @@ -316,7 +316,7 @@ void pioneer_pr8210_device::device_reset() // device //------------------------------------------------- -void pioneer_pr8210_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pioneer_pr8210_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -986,7 +986,7 @@ void simutrek_special_device::device_reset() // device //------------------------------------------------- -void simutrek_special_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void simutrek_special_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/ldpr8210.h b/src/devices/machine/ldpr8210.h index 217159e0cd17b..831597fe1c8e9 100644 --- a/src/devices/machine/ldpr8210.h +++ b/src/devices/machine/ldpr8210.h @@ -57,7 +57,7 @@ class pioneer_pr8210_device : public laserdisc_device // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual const tiny_rom_entry *device_rom_region() const override; virtual void device_add_mconfig(machine_config &config) override; @@ -166,7 +166,7 @@ class simutrek_special_device : public pioneer_pr8210_device // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual const tiny_rom_entry *device_rom_region() const override; virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/machine/ldv1000.cpp b/src/devices/machine/ldv1000.cpp index 934633e4b5aab..068f0e763d556 100644 --- a/src/devices/machine/ldv1000.cpp +++ b/src/devices/machine/ldv1000.cpp @@ -191,7 +191,7 @@ void pioneer_ldv1000_device::device_reset() // device //------------------------------------------------- -void pioneer_ldv1000_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pioneer_ldv1000_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -203,7 +203,7 @@ void pioneer_ldv1000_device::device_timer(emu_timer &timer, device_timer_id id, // update down counter and reschedule if (--m_counter != 0) - timer.adjust(MULTIJUMP_TRACK_TIME); + m_multitimer->adjust(MULTIJUMP_TRACK_TIME); break; } diff --git a/src/devices/machine/ldv1000.h b/src/devices/machine/ldv1000.h index 2d19b81c4e3e9..8309c5d03eece 100644 --- a/src/devices/machine/ldv1000.h +++ b/src/devices/machine/ldv1000.h @@ -62,7 +62,7 @@ class pioneer_ldv1000_device : public laserdisc_device // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual const tiny_rom_entry *device_rom_region() const override; virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/machine/ldvp931.cpp b/src/devices/machine/ldvp931.cpp index 69bf68d2f5534..63eca9d70425a 100644 --- a/src/devices/machine/ldvp931.cpp +++ b/src/devices/machine/ldvp931.cpp @@ -185,7 +185,7 @@ void philips_22vp931_device::device_reset() // device //------------------------------------------------- -void philips_22vp931_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void philips_22vp931_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/ldvp931.h b/src/devices/machine/ldvp931.h index c492f0cb69973..ef65814ddc5ff 100644 --- a/src/devices/machine/ldvp931.h +++ b/src/devices/machine/ldvp931.h @@ -67,7 +67,7 @@ class philips_22vp931_device : public laserdisc_device // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual const tiny_rom_entry *device_rom_region() const override; virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/machine/m3002.cpp b/src/devices/machine/m3002.cpp index fd93666a55f44..5533921754437 100644 --- a/src/devices/machine/m3002.cpp +++ b/src/devices/machine/m3002.cpp @@ -83,7 +83,7 @@ void m3002_device::device_resolve_objects() void m3002_device::device_start() { // Setup timer - m_second_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m3002_device::second_timer), this)); + m_second_timer = timer_alloc(*this, FUNC(m3002_device::second_timer)); // Save internal state save_item(NAME(m_ram)); diff --git a/src/devices/machine/m68sfdc.cpp b/src/devices/machine/m68sfdc.cpp index 1f9b37acf4c62..164f42563f1e9 100644 --- a/src/devices/machine/m68sfdc.cpp +++ b/src/devices/machine/m68sfdc.cpp @@ -150,7 +150,7 @@ WRITE_LINE_MEMBER(m68sfdc_device::handle_nmi) m_nmi_handler(state); } -void m68sfdc_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void m68sfdc_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/m68sfdc.h b/src/devices/machine/m68sfdc.h index aa7dfcb00ee86..dc2ca0adc9656 100644 --- a/src/devices/machine/m68sfdc.h +++ b/src/devices/machine/m68sfdc.h @@ -84,7 +84,7 @@ class m68sfdc_device : public device_t { virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; diff --git a/src/devices/machine/mb3773.cpp b/src/devices/machine/mb3773.cpp index 948fdd7a75e4f..bbe612e2005fd 100644 --- a/src/devices/machine/mb3773.cpp +++ b/src/devices/machine/mb3773.cpp @@ -56,7 +56,7 @@ void mb3773_device::device_reset() reset_timer(); } -void mb3773_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mb3773_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { logerror("Reset caused by watchdog\n"); diff --git a/src/devices/machine/mb3773.h b/src/devices/machine/mb3773.h index e6f8bf4c9559d..09a3cded79e10 100644 --- a/src/devices/machine/mb3773.h +++ b/src/devices/machine/mb3773.h @@ -27,7 +27,7 @@ class mb3773_device : public device_t virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void reset_timer(); diff --git a/src/devices/machine/mb87030.cpp b/src/devices/machine/mb87030.cpp index a9c87cfc11b2e..f18a26512333a 100644 --- a/src/devices/machine/mb87030.cpp +++ b/src/devices/machine/mb87030.cpp @@ -433,8 +433,8 @@ void mb87030_device::step(bool timeout) void mb87030_device::device_start() { - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mb87030_device::timeout), this)); - m_delay_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mb87030_device::delay_timeout), this)); + m_timer = timer_alloc(*this, FUNC(mb87030_device::timeout)); + m_delay_timer = timer_alloc(*this, FUNC(mb87030_device::delay_timeout)); m_irq_handler.resolve_safe(); m_dreq_handler.resolve_safe(); diff --git a/src/devices/machine/mb8795.cpp b/src/devices/machine/mb8795.cpp index 4f6d08d9aca16..4ffd09f63ba26 100644 --- a/src/devices/machine/mb8795.cpp +++ b/src/devices/machine/mb8795.cpp @@ -323,7 +323,7 @@ bool mb8795_device::recv_is_multicast() return rxbuf[0] & 0x01; } -void mb8795_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mb8795_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if(id == TIMER_TX) { drq_tx = true; diff --git a/src/devices/machine/mb8795.h b/src/devices/machine/mb8795.h index 1298a6295cc8c..b0f0d474248d6 100644 --- a/src/devices/machine/mb8795.h +++ b/src/devices/machine/mb8795.h @@ -22,7 +22,7 @@ class mb8795_device : public device_t, protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void recv_cb(uint8_t *buf, int len) override; diff --git a/src/devices/machine/mb89352.cpp b/src/devices/machine/mb89352.cpp index 62b9adb78bb14..f6a2bc7cd18f2 100644 --- a/src/devices/machine/mb89352.cpp +++ b/src/devices/machine/mb89352.cpp @@ -217,7 +217,7 @@ int mb89352_device::get_scsi_cmd_len(uint8_t cbyte) //return 6; } -void mb89352_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mb89352_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/machine/mb89352.h b/src/devices/machine/mb89352.h index 7454e63a35286..7a0c23cf746c2 100644 --- a/src/devices/machine/mb89352.h +++ b/src/devices/machine/mb89352.h @@ -31,7 +31,7 @@ class mb89352_device : public legacy_scsi_host_adapter virtual void device_start() override; virtual void device_reset() override; virtual void device_stop() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // internal device state goes here diff --git a/src/devices/machine/mc14411.cpp b/src/devices/machine/mc14411.cpp index fb24372e7bdd8..03f3e065446d8 100644 --- a/src/devices/machine/mc14411.cpp +++ b/src/devices/machine/mc14411.cpp @@ -215,7 +215,7 @@ void mc14411_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void mc14411_device::device_timer(emu_timer &timer, device_timer_id id, int32_t param, void *ptr) +void mc14411_device::device_timer(timer_instance const &timer, device_timer_id id, int32_t param, void *ptr) { if (id >= TIMER_F1 && id <= TIMER_F16) { diff --git a/src/devices/machine/mc14411.h b/src/devices/machine/mc14411.h index 99cc8309c968a..8c4a9f1c4c772 100644 --- a/src/devices/machine/mc14411.h +++ b/src/devices/machine/mc14411.h @@ -78,7 +78,7 @@ class mc14411_device : public device_t virtual void device_start() override; virtual void device_clock_changed() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void arm_timer(int i); diff --git a/src/devices/machine/mc146818.cpp b/src/devices/machine/mc146818.cpp index c7597a2fbeaac..ca5ce1584f6c9 100644 --- a/src/devices/machine/mc146818.cpp +++ b/src/devices/machine/mc146818.cpp @@ -107,7 +107,7 @@ void mc146818_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void mc146818_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mc146818_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/mc146818.h b/src/devices/machine/mc146818.h index 96acaa7fc6217..2ac3629585aaa 100644 --- a/src/devices/machine/mc146818.h +++ b/src/devices/machine/mc146818.h @@ -53,7 +53,7 @@ class mc146818_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_nvram_interface overrides virtual void nvram_default() override; diff --git a/src/devices/machine/mc68328.cpp b/src/devices/machine/mc68328.cpp index e369028771036..7a8fa1e3fd2a1 100644 --- a/src/devices/machine/mc68328.cpp +++ b/src/devices/machine/mc68328.cpp @@ -438,10 +438,10 @@ void mc68328_device::device_start() { m68000_device::device_start(); - m_gptimer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mc68328_device::timer1_hit),this)); - m_gptimer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mc68328_device::timer2_hit),this)); - m_rtc = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mc68328_device::rtc_tick),this)); - m_pwm = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mc68328_device::pwm_transition),this)); + m_gptimer[0] = timer_alloc(*this, FUNC(mc68328_device::timer1_hit)); + m_gptimer[1] = timer_alloc(*this, FUNC(mc68328_device::timer2_hit)); + m_rtc = timer_alloc(*this, FUNC(mc68328_device::rtc_tick)); + m_pwm = timer_alloc(*this, FUNC(mc68328_device::pwm_transition)); register_state_save(); } diff --git a/src/devices/machine/mc6843.cpp b/src/devices/machine/mc6843.cpp index 695c26a1500ea..388632f8e058b 100644 --- a/src/devices/machine/mc6843.cpp +++ b/src/devices/machine/mc6843.cpp @@ -300,7 +300,7 @@ void mc6843_device::ready_callback(floppy_image_device *floppy, int state) } } -void mc6843_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mc6843_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { live_sync(); run(true, false, false); diff --git a/src/devices/machine/mc6843.h b/src/devices/machine/mc6843.h index a9acaf377accc..83c6913dc2ca8 100644 --- a/src/devices/machine/mc6843.h +++ b/src/devices/machine/mc6843.h @@ -30,7 +30,7 @@ class mc6843_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // Status flags diff --git a/src/devices/machine/mc6846.cpp b/src/devices/machine/mc6846.cpp index 72b3f1added5d..dc399e2a1f7b1 100644 --- a/src/devices/machine/mc6846.cpp +++ b/src/devices/machine/mc6846.cpp @@ -62,8 +62,8 @@ mc6846_device::mc6846_device(const machine_config &mconfig, const char *tag, dev void mc6846_device::device_start() { - m_interval = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mc6846_device::timer_expire), this)); - m_one_shot = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mc6846_device::timer_one_shot), this)); + m_interval = timer_alloc(*this, FUNC(mc6846_device::timer_expire)); + m_one_shot = timer_alloc(*this, FUNC(mc6846_device::timer_one_shot)); m_out_port_cb.resolve(); /* 8-bit output */ m_out_cp2_cb.resolve(); /* 1-bit output */ diff --git a/src/devices/machine/mc6854.cpp b/src/devices/machine/mc6854.cpp index ed5eb02b8b5ae..b8a4edb578884 100644 --- a/src/devices/machine/mc6854.cpp +++ b/src/devices/machine/mc6854.cpp @@ -194,7 +194,7 @@ void mc6854_device::device_start() m_out_rts_cb.resolve_safe(); m_out_dtr_cb.resolve_safe(); - m_ttimer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mc6854_device::tfifo_cb), this)); + m_ttimer = timer_alloc(*this, FUNC(mc6854_device::tfifo_cb)); save_item(NAME(m_cr1)); save_item(NAME(m_cr2)); diff --git a/src/devices/machine/mc68681.cpp b/src/devices/machine/mc68681.cpp index 645b7c9deba07..ea0c10ac6cc53 100644 --- a/src/devices/machine/mc68681.cpp +++ b/src/devices/machine/mc68681.cpp @@ -208,7 +208,7 @@ void duart_base_device::device_start() read_inport.resolve(); write_outport.resolve_safe(); - duart_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(duart_base_device::duart_timer_callback),this), nullptr); + duart_timer = timer_alloc(*this, FUNC(duart_base_device::duart_timer_callback)); save_item(NAME(ACR)); save_item(NAME(IMR)); diff --git a/src/devices/machine/mc68901.cpp b/src/devices/machine/mc68901.cpp index 082e02985a740..36f96a572a0c4 100644 --- a/src/devices/machine/mc68901.cpp +++ b/src/devices/machine/mc68901.cpp @@ -503,7 +503,7 @@ void mc68901_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void mc68901_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mc68901_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if(id >= TIMER_A && id <= TIMER_D) timer_count(id); diff --git a/src/devices/machine/mc68901.h b/src/devices/machine/mc68901.h index cc792b3490088..93b680b8cb178 100644 --- a/src/devices/machine/mc68901.h +++ b/src/devices/machine/mc68901.h @@ -91,7 +91,7 @@ class mc68901_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void check_interrupts(); void take_interrupt(u16 mask); diff --git a/src/devices/machine/mccs1850.cpp b/src/devices/machine/mccs1850.cpp index 7422565b53f0f..731206d8faff2 100644 --- a/src/devices/machine/mccs1850.cpp +++ b/src/devices/machine/mccs1850.cpp @@ -359,7 +359,7 @@ void mccs1850_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void mccs1850_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mccs1850_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/mccs1850.h b/src/devices/machine/mccs1850.h index 62b7f5d5afc4e..d7c34b59143c8 100644 --- a/src/devices/machine/mccs1850.h +++ b/src/devices/machine/mccs1850.h @@ -55,7 +55,7 @@ class mccs1850_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_nvram_interface overrides virtual void nvram_default() override; diff --git a/src/devices/machine/mcf5206e.cpp b/src/devices/machine/mcf5206e.cpp index 640550fcdec87..dbabb46a37d12 100644 --- a/src/devices/machine/mcf5206e.cpp +++ b/src/devices/machine/mcf5206e.cpp @@ -846,7 +846,7 @@ void mcf5206e_peripheral_device::device_start() { init_regs(true); - m_timer1 = machine().scheduler().timer_alloc( timer_expired_delegate( FUNC( mcf5206e_peripheral_device::timer1_callback ), this) ); + m_timer1 = timer_alloc(*this, FUNC( mcf5206e_peripheral_device::timer1_callback )); save_item(NAME(m_ICR)); save_item(NAME(m_CSAR)); diff --git a/src/devices/machine/meters.cpp b/src/devices/machine/meters.cpp index cf36ff751779f..dac876eba95d7 100644 --- a/src/devices/machine/meters.cpp +++ b/src/devices/machine/meters.cpp @@ -61,7 +61,7 @@ void meters_device::device_reset() // device_timer - device-specific timer events //------------------------------------------------- -void meters_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void meters_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id >= m_number_mtr) throw emu_fatalerror("Unknown id in meters_device::device_timer"); diff --git a/src/devices/machine/meters.h b/src/devices/machine/meters.h index c9a11790931c8..256d062c2e23d 100644 --- a/src/devices/machine/meters.h +++ b/src/devices/machine/meters.h @@ -38,7 +38,7 @@ class meters_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // internal state diff --git a/src/devices/machine/microtch.cpp b/src/devices/machine/microtch.cpp index a974202bfabb2..e4d3b830e07f7 100644 --- a/src/devices/machine/microtch.cpp +++ b/src/devices/machine/microtch.cpp @@ -160,7 +160,7 @@ void microtouch_device::send_touch_packet() } } -void microtouch_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void microtouch_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (!id) { diff --git a/src/devices/machine/microtch.h b/src/devices/machine/microtch.h index 2f955955e03f5..95d5e2b1a5b78 100644 --- a/src/devices/machine/microtch.h +++ b/src/devices/machine/microtch.h @@ -26,7 +26,7 @@ class microtouch_device : // device_t implementation virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_serial_interface implementation virtual void tra_callback() override; diff --git a/src/devices/machine/mm5307.cpp b/src/devices/machine/mm5307.cpp index 312d7cff86bc5..37c0c4d226aa6 100644 --- a/src/devices/machine/mm5307.cpp +++ b/src/devices/machine/mm5307.cpp @@ -140,7 +140,7 @@ void mm5307_device::device_resolve_objects() void mm5307_device::device_start() { // Create timer - m_periodic_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mm5307_device::periodic_update), this)); + m_periodic_timer = timer_alloc(*this, FUNC(mm5307_device::periodic_update)); // Register for saving save_item(NAME(m_freq_control)); diff --git a/src/devices/machine/mm5740.cpp b/src/devices/machine/mm5740.cpp index ca378caecf9d9..392a16da3e251 100644 --- a/src/devices/machine/mm5740.cpp +++ b/src/devices/machine/mm5740.cpp @@ -100,7 +100,7 @@ void mm5740_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void mm5740_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mm5740_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { int ako = 0; diff --git a/src/devices/machine/mm5740.h b/src/devices/machine/mm5740.h index a3242711a953c..8e6042e26368a 100644 --- a/src/devices/machine/mm5740.h +++ b/src/devices/machine/mm5740.h @@ -105,7 +105,7 @@ class mm5740_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/machine/mm58167.cpp b/src/devices/machine/mm58167.cpp index 05aa4377ccb68..314fff965b4c7 100644 --- a/src/devices/machine/mm58167.cpp +++ b/src/devices/machine/mm58167.cpp @@ -97,7 +97,7 @@ void mm58167_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void mm58167_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mm58167_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_milliseconds++; diff --git a/src/devices/machine/mm58167.h b/src/devices/machine/mm58167.h index c12b151b6764c..d768e78bb8673 100644 --- a/src/devices/machine/mm58167.h +++ b/src/devices/machine/mm58167.h @@ -38,7 +38,7 @@ class mm58167_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rtc_interface overrides virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override; diff --git a/src/devices/machine/mm58174.cpp b/src/devices/machine/mm58174.cpp index 53d23bdc4e36c..aa76dfbcdc15e 100644 --- a/src/devices/machine/mm58174.cpp +++ b/src/devices/machine/mm58174.cpp @@ -282,7 +282,7 @@ void mm58174_device::write(offs_t offset, uint8_t data) // Increment RTC clock (timed interrupt every 1/10s) -void mm58174_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mm58174_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id > 0) return; diff --git a/src/devices/machine/mm58174.h b/src/devices/machine/mm58174.h index 7d592e258b889..154094c33993a 100644 --- a/src/devices/machine/mm58174.h +++ b/src/devices/machine/mm58174.h @@ -23,7 +23,7 @@ class mm58174_device : public device_t, public device_rtc_interface protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rtc_interface overrides virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override; diff --git a/src/devices/machine/mm58274c.cpp b/src/devices/machine/mm58274c.cpp index c7e7f49a78ee4..797210e4d84ff 100644 --- a/src/devices/machine/mm58274c.cpp +++ b/src/devices/machine/mm58274c.cpp @@ -61,9 +61,9 @@ mm58274c_device::mm58274c_device(const machine_config &mconfig, const char *tag, void mm58274c_device::device_start() { - m_increment_rtc = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mm58274c_device::rtc_increment_cb),this)); + m_increment_rtc = timer_alloc(*this, FUNC(mm58274c_device::rtc_increment_cb)); m_increment_rtc->adjust(attotime::zero, 0, attotime::from_msec(100)); - m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mm58274c_device::rtc_interrupt_cb),this)); + m_interrupt_timer = timer_alloc(*this, FUNC(mm58274c_device::rtc_interrupt_cb)); // register for state saving save_item(NAME(m_mode24)); diff --git a/src/devices/machine/mm74c922.cpp b/src/devices/machine/mm74c922.cpp index e9f3c9704ac73..880c9a35b0a43 100644 --- a/src/devices/machine/mm74c922.cpp +++ b/src/devices/machine/mm74c922.cpp @@ -90,7 +90,7 @@ void mm74c922_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void mm74c922_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mm74c922_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { change_output_lines(); clock_scan_counters(); diff --git a/src/devices/machine/mm74c922.h b/src/devices/machine/mm74c922.h index fd70c7871ae56..c6c8b681075ca 100644 --- a/src/devices/machine/mm74c922.h +++ b/src/devices/machine/mm74c922.h @@ -67,7 +67,7 @@ class mm74c922_device : public device_t // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void change_output_lines(); diff --git a/src/devices/machine/mos6526.cpp b/src/devices/machine/mos6526.cpp index e1f40b109c14c..f3b0ac1ceddb5 100644 --- a/src/devices/machine/mos6526.cpp +++ b/src/devices/machine/mos6526.cpp @@ -762,7 +762,7 @@ void mos6526_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void mos6526_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mos6526_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { tod_w(1); tod_w(0); diff --git a/src/devices/machine/mos6526.h b/src/devices/machine/mos6526.h index 33ccc6dd26d96..97d55146b926d 100644 --- a/src/devices/machine/mos6526.h +++ b/src/devices/machine/mos6526.h @@ -113,7 +113,7 @@ class mos6526_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void execute_run() override; int m_icount; diff --git a/src/devices/machine/mos6530.cpp b/src/devices/machine/mos6530.cpp index 8cc7198b3e5e1..6c0dcbaed1564 100644 --- a/src/devices/machine/mos6530.cpp +++ b/src/devices/machine/mos6530.cpp @@ -157,7 +157,7 @@ uint8_t mos6530_device::get_timer() timer -------------------------------------------------*/ -void mos6530_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mos6530_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/mos6530.h b/src/devices/machine/mos6530.h index 0639544d8e051..5864b170df81e 100644 --- a/src/devices/machine/mos6530.h +++ b/src/devices/machine/mos6530.h @@ -66,7 +66,7 @@ class mos6530_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum diff --git a/src/devices/machine/mos6530n.cpp b/src/devices/machine/mos6530n.cpp index e6ad3c9dc86ee..c2f9651f0838d 100644 --- a/src/devices/machine/mos6530n.cpp +++ b/src/devices/machine/mos6530n.cpp @@ -242,7 +242,7 @@ void mos6530_device_base::device_reset() // device_timer - handler timer events //------------------------------------------------- -void mos6530_device_base::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mos6530_device_base::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { live_sync(); live_run(); diff --git a/src/devices/machine/mos6530n.h b/src/devices/machine/mos6530n.h index 2822d18d6bfd9..858e428c775f3 100644 --- a/src/devices/machine/mos6530n.h +++ b/src/devices/machine/mos6530n.h @@ -101,7 +101,7 @@ class mos6530_device_base : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; enum { diff --git a/src/devices/machine/mpu401.cpp b/src/devices/machine/mpu401.cpp index 0103e51ceca7f..81cd6561cae4c 100644 --- a/src/devices/machine/mpu401.cpp +++ b/src/devices/machine/mpu401.cpp @@ -148,7 +148,7 @@ void mpu401_device::device_reset() // device_timer - called when our device timer expires //------------------------------------------------- -void mpu401_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void mpu401_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { m_ourcpu->m6801_clock_serial(); } diff --git a/src/devices/machine/mpu401.h b/src/devices/machine/mpu401.h index 6a51a8f3e91df..090f3a7b91f3c 100644 --- a/src/devices/machine/mpu401.h +++ b/src/devices/machine/mpu401.h @@ -28,7 +28,7 @@ class mpu401_device : public device_t virtual void device_start() override; virtual void device_reset() override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; private: diff --git a/src/devices/machine/msm5832.cpp b/src/devices/machine/msm5832.cpp index 9d4ef6e088a58..e61b6e304efef 100644 --- a/src/devices/machine/msm5832.cpp +++ b/src/devices/machine/msm5832.cpp @@ -128,7 +128,7 @@ void msm5832_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void msm5832_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void msm5832_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/msm5832.h b/src/devices/machine/msm5832.h index 5ba34a537daf1..d21fa9bb2ac1c 100644 --- a/src/devices/machine/msm5832.h +++ b/src/devices/machine/msm5832.h @@ -56,7 +56,7 @@ class msm5832_device : public device_t, protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rtc_interface overrides virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override; diff --git a/src/devices/machine/msm58321.cpp b/src/devices/machine/msm58321.cpp index 4f74ef3f888f3..fce224cc4276c 100644 --- a/src/devices/machine/msm58321.cpp +++ b/src/devices/machine/msm58321.cpp @@ -247,7 +247,7 @@ void msm58321_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void msm58321_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void msm58321_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/msm58321.h b/src/devices/machine/msm58321.h index d5b7a5d78c3ee..db55a2421ade5 100644 --- a/src/devices/machine/msm58321.h +++ b/src/devices/machine/msm58321.h @@ -73,7 +73,7 @@ class msm58321_device : public device_t, protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rtc_interface overrides virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override; diff --git a/src/devices/machine/msm6242.cpp b/src/devices/machine/msm6242.cpp index f6dd7c6dca7f6..f1c02c7eb72bb 100644 --- a/src/devices/machine/msm6242.cpp +++ b/src/devices/machine/msm6242.cpp @@ -168,7 +168,7 @@ void msm6242_device::device_post_load() // fires //------------------------------------------------- -void msm6242_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void msm6242_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/machine/msm6242.h b/src/devices/machine/msm6242.h index 6ee5929a64167..4e25aa148e372 100644 --- a/src/devices/machine/msm6242.h +++ b/src/devices/machine/msm6242.h @@ -62,7 +62,7 @@ class msm6242_device : public device_t, public device_rtc_interface virtual void device_reset() override; virtual void device_pre_save() override; virtual void device_post_load() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // rtc overrides virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override; diff --git a/src/devices/machine/myb3k_kbd.cpp b/src/devices/machine/myb3k_kbd.cpp index 83ee855337384..ec114350e8b8e 100644 --- a/src/devices/machine/myb3k_kbd.cpp +++ b/src/devices/machine/myb3k_kbd.cpp @@ -456,7 +456,7 @@ void myb3k_keyboard_device::update_modifiers(int y, bool down) m_modifier_keys = (m_modifier_keys & mask) | (down?bit:0); } -void myb3k_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void myb3k_keyboard_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/myb3k_kbd.h b/src/devices/machine/myb3k_kbd.h index 384d837bf20b1..d296b03ad6794 100644 --- a/src/devices/machine/myb3k_kbd.h +++ b/src/devices/machine/myb3k_kbd.h @@ -63,7 +63,7 @@ class myb3k_keyboard_device : public device_t void key_changed(int x, int y, bool down); void scan_keys(); void update_modifiers(int y, bool down); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; output_delegate m_keyboard_cb; required_ioport_array<12> m_io_kbd_t; diff --git a/src/devices/machine/ncr5390.cpp b/src/devices/machine/ncr5390.cpp index 2c516a37ddb50..355175fe77d05 100644 --- a/src/devices/machine/ncr5390.cpp +++ b/src/devices/machine/ncr5390.cpp @@ -251,7 +251,7 @@ void ncr5390_device::scsi_ctrl_changed() step(false); } -void ncr5390_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ncr5390_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { step(true); } diff --git a/src/devices/machine/ncr5390.h b/src/devices/machine/ncr5390.h index 76952fe0f7b19..d96c0647aadad 100644 --- a/src/devices/machine/ncr5390.h +++ b/src/devices/machine/ncr5390.h @@ -52,7 +52,7 @@ class ncr5390_device : public nscsi_device, public nscsi_slot_card_interface virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; enum { MODE_D, MODE_T, MODE_I }; enum { IDLE }; diff --git a/src/devices/machine/ncr539x.cpp b/src/devices/machine/ncr539x.cpp index 1ddd46b2c183c..fa99fed5c37d8 100644 --- a/src/devices/machine/ncr539x.cpp +++ b/src/devices/machine/ncr539x.cpp @@ -177,7 +177,7 @@ void ncr539x_device::dma_write_data(int bytes, uint8_t *pData) write_data(pData, bytes); } -void ncr539x_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void ncr539x_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { //printf("539X: device_timer expired, param = %d, m_command = %02x\n", param, m_command); diff --git a/src/devices/machine/ncr539x.h b/src/devices/machine/ncr539x.h index 8172f4ea5f24c..d09a9e1e52275 100644 --- a/src/devices/machine/ncr539x.h +++ b/src/devices/machine/ncr539x.h @@ -35,7 +35,7 @@ class ncr539x_device : public legacy_scsi_host_adapter // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void fifo_write(uint8_t data); diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp index cc1f92c575515..b3bc8bf7fa7ae 100644 --- a/src/devices/machine/netlist.cpp +++ b/src/devices/machine/netlist.cpp @@ -288,18 +288,16 @@ void netlist_mame_analog_input_device::write(const double val) { m_value_for_device_timer = val * m_mult + m_offset; if (m_value_for_device_timer != (*m_param)()) - { - synchronize(0, 0, &m_value_for_device_timer); -} + synchronize(0); } -void netlist_mame_analog_input_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void netlist_mame_analog_input_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { update_to_current_time(); #if NETLIST_CREATE_CSV nl_owner().log_add(m_param_name, *((double *) ptr), true); #endif - m_param->set(*((double *) ptr)); + m_param->set(m_value_for_device_timer); } void netlist_mame_int_input_device::write(const uint32_t val) @@ -322,7 +320,7 @@ void netlist_mame_logic_input_device::write(const uint32_t val) } } -void netlist_mame_int_input_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void netlist_mame_int_input_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { update_to_current_time(); #if NETLIST_CREATE_CSV @@ -331,7 +329,7 @@ void netlist_mame_int_input_device::device_timer(emu_timer &timer, device_timer_ m_param->set(param); } -void netlist_mame_logic_input_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void netlist_mame_logic_input_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { update_to_current_time(); #if NETLIST_CREATE_CSV @@ -340,7 +338,7 @@ void netlist_mame_logic_input_device::device_timer(emu_timer &timer, device_time m_param->set(param); } -void netlist_mame_ram_pointer_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void netlist_mame_ram_pointer_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_data = (*m_param)(); } @@ -382,7 +380,7 @@ void netlist_mame_device::log_add(char const* param, double value, bool isfloat) return; // make a new entry - buffer_entry entry = { machine().scheduler().time(), isfloat, value, param }; + buffer_entry entry = { machine().time(), isfloat, value, param }; // flush out half of the old entries if we hit the buffer limit if (m_buffer.size() >= MAX_BUFFER_ENTRIES) diff --git a/src/devices/machine/netlist.h b/src/devices/machine/netlist.h index 7f6d0c4dde5a1..014a55944e5bf 100644 --- a/src/devices/machine/netlist.h +++ b/src/devices/machine/netlist.h @@ -382,7 +382,7 @@ class netlist_mame_analog_input_device : public device_t, public netlist_mame_su protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: netlist::param_num_t *m_param; @@ -482,7 +482,7 @@ class netlist_mame_int_input_device : public device_t, public netlist_mame_sub_i protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: netlist::param_num_t *m_param; @@ -523,7 +523,7 @@ class netlist_mame_logic_input_device : public device_t, public netlist_mame_sub protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: netlist::param_num_t *m_param; @@ -551,7 +551,7 @@ class netlist_mame_ram_pointer_device : public device_t, public netlist_mame_sub protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: netlist::param_ptr_t *m_param; diff --git a/src/devices/machine/ns32081.cpp b/src/devices/machine/ns32081.cpp index c27ffde659599..53c6a7718d85f 100644 --- a/src/devices/machine/ns32081.cpp +++ b/src/devices/machine/ns32081.cpp @@ -102,7 +102,7 @@ void ns32081_device::device_start() save_item(NAME(m_state)); save_item(NAME(m_tcy)); - m_complete = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ns32081_device::complete), this)); + m_complete = timer_alloc(*this, FUNC(ns32081_device::complete)); } void ns32081_device::device_reset() diff --git a/src/devices/machine/ns32202.cpp b/src/devices/machine/ns32202.cpp index 3499a6bab055f..d467524d8753b 100644 --- a/src/devices/machine/ns32202.cpp +++ b/src/devices/machine/ns32202.cpp @@ -103,9 +103,9 @@ void ns32202_device::device_start() save_item(NAME(m_out_int_state)); save_item(NAME(m_out_cout_state)); - m_interrupt = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ns32202_device::interrupt), this)); - m_counter[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ns32202_device::counter<0>), this)); - m_counter[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ns32202_device::counter<1>), this)); + m_interrupt = timer_alloc(*this, FUNC(ns32202_device::interrupt)); + m_counter[0] = timer_alloc(*this, FUNC(ns32202_device::counter<0>)); + m_counter[1] = timer_alloc(*this, FUNC(ns32202_device::counter<1>)); } void ns32202_device::device_reset() diff --git a/src/devices/machine/nsc810.cpp b/src/devices/machine/nsc810.cpp index 42ddd8db02fe8..76fb995dc26de 100644 --- a/src/devices/machine/nsc810.cpp +++ b/src/devices/machine/nsc810.cpp @@ -86,7 +86,7 @@ void nsc810_device::device_reset() m_ramselect = false; } -void nsc810_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nsc810_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/machine/nsc810.h b/src/devices/machine/nsc810.h index 520591208f7c5..a1d31213e2e81 100644 --- a/src/devices/machine/nsc810.h +++ b/src/devices/machine/nsc810.h @@ -52,7 +52,7 @@ class nsc810_device : public device_t protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint8_t m_portA_latch; diff --git a/src/devices/machine/nscsi_bus.cpp b/src/devices/machine/nscsi_bus.cpp index 987e8951c2705..00cfeb566ec6e 100644 --- a/src/devices/machine/nscsi_bus.cpp +++ b/src/devices/machine/nscsi_bus.cpp @@ -265,7 +265,7 @@ void nscsi_full_device::device_reset() scsi_bus->ctrl_wait(scsi_refid, S_SEL|S_BSY|S_RST, S_ALL); } -void nscsi_full_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nscsi_full_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if(id != SCSI_TIMER) return; diff --git a/src/devices/machine/nscsi_bus.h b/src/devices/machine/nscsi_bus.h index 60c9f02a3b103..6cb2f8ecbb50a 100644 --- a/src/devices/machine/nscsi_bus.h +++ b/src/devices/machine/nscsi_bus.h @@ -316,7 +316,7 @@ class nscsi_full_device : public nscsi_device, public nscsi_slot_card_interface virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void scsi_message(); virtual void scsi_command(); diff --git a/src/devices/machine/pcf8573.cpp b/src/devices/machine/pcf8573.cpp index 5a33d716be861..7baf076ad67a2 100644 --- a/src/devices/machine/pcf8573.cpp +++ b/src/devices/machine/pcf8573.cpp @@ -83,7 +83,7 @@ void pcf8573_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void pcf8573_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pcf8573_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { advance_seconds(); diff --git a/src/devices/machine/pcf8573.h b/src/devices/machine/pcf8573.h index 1a7fade8c1b51..863d2182339d7 100644 --- a/src/devices/machine/pcf8573.h +++ b/src/devices/machine/pcf8573.h @@ -71,7 +71,7 @@ class pcf8573_device : protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rtc_interface overrides virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override; diff --git a/src/devices/machine/pcf8583.cpp b/src/devices/machine/pcf8583.cpp index 0cc310238443c..fc0df6776b88b 100644 --- a/src/devices/machine/pcf8583.cpp +++ b/src/devices/machine/pcf8583.cpp @@ -73,7 +73,7 @@ void pcf8583_device::device_start() m_irq_cb.resolve_safe(); } -void pcf8583_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pcf8583_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/pcf8583.h b/src/devices/machine/pcf8583.h index b01eadc44fde3..c2d1568ac4b44 100644 --- a/src/devices/machine/pcf8583.h +++ b/src/devices/machine/pcf8583.h @@ -88,7 +88,7 @@ class pcf8583_device : protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rtc_interface overrides virtual bool rtc_feature_y2k() const override { return true; } diff --git a/src/devices/machine/pcf8593.cpp b/src/devices/machine/pcf8593.cpp index 331e12ccdbdc3..72e5fa66c2cf7 100644 --- a/src/devices/machine/pcf8593.cpp +++ b/src/devices/machine/pcf8593.cpp @@ -90,7 +90,7 @@ void pcf8593_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void pcf8593_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pcf8593_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/machine/pcf8593.h b/src/devices/machine/pcf8593.h index 2b6d76bc853d3..4e3ccd35a5f8c 100644 --- a/src/devices/machine/pcf8593.h +++ b/src/devices/machine/pcf8593.h @@ -32,7 +32,7 @@ class pcf8593_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rtc_interface overrides virtual bool rtc_feature_y2k() const override { return true; } diff --git a/src/devices/machine/pckeybrd.cpp b/src/devices/machine/pckeybrd.cpp index 015c534327c58..b0d8d5bc026c4 100644 --- a/src/devices/machine/pckeybrd.cpp +++ b/src/devices/machine/pckeybrd.cpp @@ -300,7 +300,7 @@ at_keyboard_device::at_keyboard_device(const machine_config &mconfig, const char } -void pc_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pc_keyboard_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { polling(); if(!charqueue_empty()) diff --git a/src/devices/machine/pckeybrd.h b/src/devices/machine/pckeybrd.h index 8eeb2118b6bb9..e122c1cac138c 100644 --- a/src/devices/machine/pckeybrd.h +++ b/src/devices/machine/pckeybrd.h @@ -40,7 +40,7 @@ class pc_keyboard_device : public device_t virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void queue_insert(uint8_t data); void clear_buffer(); diff --git a/src/devices/machine/phi.cpp b/src/devices/machine/phi.cpp index c131f2f3191a7..1121ff73ab0c3 100644 --- a/src/devices/machine/phi.cpp +++ b/src/devices/machine/phi.cpp @@ -417,9 +417,9 @@ void phi_device::device_reset() update_488(); } -void phi_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void phi_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { - LOG_NOISY("tmr %d enabled %d\n" , id , timer.enabled()); + LOG_NOISY("tmr %d\n" , id); update_fsm(); } diff --git a/src/devices/machine/phi.h b/src/devices/machine/phi.h index 755f073a2d944..4d91202648b63 100644 --- a/src/devices/machine/phi.h +++ b/src/devices/machine/phi.h @@ -95,7 +95,7 @@ class phi_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // Depth of inbound/outbound FIFOs diff --git a/src/devices/machine/pic8259.cpp b/src/devices/machine/pic8259.cpp index d510441369183..42aaadae86bf0 100644 --- a/src/devices/machine/pic8259.cpp +++ b/src/devices/machine/pic8259.cpp @@ -29,7 +29,7 @@ ALLOW_SAVE_TYPE(pic8259_device::state_t); // allow save_item on a non-fundamental type -void pic8259_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pic8259_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { /* check the various IRQs */ for (int n = 0, irq = m_prio; n < 8; n++, irq = (irq + 1) & 7) diff --git a/src/devices/machine/pic8259.h b/src/devices/machine/pic8259.h index a1f14b4c51df7..4e2a6436c2d3b 100644 --- a/src/devices/machine/pic8259.h +++ b/src/devices/machine/pic8259.h @@ -59,7 +59,7 @@ class pic8259_device : public device_t virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual bool is_x86() const { return m_is_x86; } diff --git a/src/devices/machine/pit8253.cpp b/src/devices/machine/pit8253.cpp index 7d0d4246b677d..da2610a0bd947 100644 --- a/src/devices/machine/pit8253.cpp +++ b/src/devices/machine/pit8253.cpp @@ -716,7 +716,7 @@ void pit_counter_device::update() attotime elapsed_time = now - m_last_updated; // in the case of sub-Hz frequencies, just loop; there's not going to be many - if (m_clock_period.m_seconds != 0) + if (m_clock_period.seconds() != 0) { while (elapsed_time >= m_clock_period) { @@ -728,28 +728,28 @@ void pit_counter_device::update() // otherwise, compute it a straightforward way else { - elapsed_cycles = elapsed_time.m_attoseconds / m_clock_period.m_attoseconds; + elapsed_cycles = elapsed_time.attoseconds() / m_clock_period.attoseconds(); // not expecting to see many cases of this, but just in case, let's do it right - if (elapsed_time.m_seconds != 0) + if (elapsed_time.seconds() != 0) { - // first account for the elapsed_cycles counted above (guaranteed to be <= elapsed_time.m_attoseconds) - elapsed_time.m_attoseconds -= elapsed_cycles * m_clock_period.m_attoseconds; + // first account for the elapsed_cycles counted above (guaranteed to be <= elapsed_time.attoseconds()) + elapsed_time.set_attoseconds(elapsed_time.attoseconds() - elapsed_cycles * m_clock_period.attoseconds()); // now compute the integral cycles per second based on the clock period - int64_t cycles_per_second = ATTOSECONDS_PER_SECOND / m_clock_period.m_attoseconds; + int64_t cycles_per_second = ATTOSECONDS_PER_SECOND / m_clock_period.attoseconds(); // add that many times the number of elapsed seconds - elapsed_cycles += cycles_per_second * elapsed_time.m_seconds; + elapsed_cycles += cycles_per_second * elapsed_time.seconds(); // now compute how many attoseconds we missed for each full second (will be 0 for integral values) - int64_t remainder_per_second = ATTOSECONDS_PER_SECOND - cycles_per_second * m_clock_period.m_attoseconds; + int64_t remainder_per_second = ATTOSECONDS_PER_SECOND - cycles_per_second * m_clock_period.attoseconds(); // add those to the elapsed attoseconds - elapsed_time.m_attoseconds += elapsed_time.m_seconds * remainder_per_second; + elapsed_time.set_attoseconds(elapsed_time.attoseconds() + elapsed_time.seconds() * remainder_per_second); // finally, see if that adds up to any additional cycles - elapsed_cycles += elapsed_time.m_attoseconds / m_clock_period.m_attoseconds; + elapsed_cycles += elapsed_time.attoseconds() / m_clock_period.attoseconds(); } } @@ -972,7 +972,7 @@ void pit8254_device::readback_command(uint8_t data) m_counter[timer]->readback(read_command); } -void pit_counter_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pit_counter_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { update(); switch (id) diff --git a/src/devices/machine/pit8253.h b/src/devices/machine/pit8253.h index c602a64a3d1d4..20e292858878f 100644 --- a/src/devices/machine/pit8253.h +++ b/src/devices/machine/pit8253.h @@ -58,7 +58,7 @@ class pit_counter_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: inline uint32_t adjusted_count() const; diff --git a/src/devices/machine/ps2timer.cpp b/src/devices/machine/ps2timer.cpp index 2f7111b1a22bd..a80c9caad9cac 100644 --- a/src/devices/machine/ps2timer.cpp +++ b/src/devices/machine/ps2timer.cpp @@ -42,10 +42,10 @@ ps2_timer_device::ps2_timer_device(const machine_config &mconfig, const char *ta void ps2_timer_device::device_start() { if (!m_compare_timer) - m_compare_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ps2_timer_device::compare), this)); + m_compare_timer = timer_alloc(*this, FUNC(ps2_timer_device::compare)); if (!m_overflow_timer) - m_overflow_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ps2_timer_device::overflow), this)); + m_overflow_timer = timer_alloc(*this, FUNC(ps2_timer_device::overflow)); } void ps2_timer_device::device_reset() @@ -122,7 +122,7 @@ void ps2_timer_device::update_count() break; } - attotime curr_time = machine().scheduler().time(); + attotime curr_time = machine().time(); attotime time_delta = curr_time - m_last_update_time; m_last_update_time = curr_time; m_elapsed_time += time_delta; diff --git a/src/devices/machine/pxa255.cpp b/src/devices/machine/pxa255.cpp index 6bd82ec987c05..0fe70d6414b52 100644 --- a/src/devices/machine/pxa255.cpp +++ b/src/devices/machine/pxa255.cpp @@ -1567,7 +1567,7 @@ void pxa255_periphs_device::device_reset() memset(&m_clocks_regs, 0, sizeof(m_clocks_regs)); } -void pxa255_periphs_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pxa255_periphs_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id < TIMER_OSTIMER0) dma_end_tick(id); diff --git a/src/devices/machine/pxa255.h b/src/devices/machine/pxa255.h index 87a7cef0ce8c0..61dececc289b3 100644 --- a/src/devices/machine/pxa255.h +++ b/src/devices/machine/pxa255.h @@ -65,7 +65,7 @@ class pxa255_periphs_device : public device_t virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; static const device_timer_id TIMER_DMA0 = 0; static const device_timer_id TIMER_OSTIMER0 = 16; diff --git a/src/devices/machine/r10788.cpp b/src/devices/machine/r10788.cpp index c273c70a4eedb..5a1558b0933b0 100644 --- a/src/devices/machine/r10788.cpp +++ b/src/devices/machine/r10788.cpp @@ -106,7 +106,7 @@ void r10788_device::device_reset() * @param param parameter * @param ptr pointer parameter */ -void r10788_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void r10788_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { uint8_t data; switch (id) diff --git a/src/devices/machine/r10788.h b/src/devices/machine/r10788.h index 6ef21ccc466ee..899a52495e01b 100644 --- a/src/devices/machine/r10788.h +++ b/src/devices/machine/r10788.h @@ -43,7 +43,7 @@ class r10788_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: static const device_timer_id TIMER_DISPLAY = 0; diff --git a/src/devices/machine/ripple_counter.cpp b/src/devices/machine/ripple_counter.cpp index 96ce53aeec670..0ff7c99014c6c 100644 --- a/src/devices/machine/ripple_counter.cpp +++ b/src/devices/machine/ripple_counter.cpp @@ -178,7 +178,7 @@ WRITE_LINE_MEMBER(ripple_counter_device::reset_w) // fires //------------------------------------------------- -void ripple_counter_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ripple_counter_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/ripple_counter.h b/src/devices/machine/ripple_counter.h index 450dc2118bba3..1b2ed64d77bba 100644 --- a/src/devices/machine/ripple_counter.h +++ b/src/devices/machine/ripple_counter.h @@ -43,7 +43,7 @@ class ripple_counter_device : public device_t, public device_rom_interface<14> virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_clock_changed() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rom_interface overrides virtual space_config_vector memory_space_config() const override; diff --git a/src/devices/machine/rp5c01.cpp b/src/devices/machine/rp5c01.cpp index 6785039621301..232d8af634e07 100644 --- a/src/devices/machine/rp5c01.cpp +++ b/src/devices/machine/rp5c01.cpp @@ -230,7 +230,7 @@ void rp5c01_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void rp5c01_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void rp5c01_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/rp5c01.h b/src/devices/machine/rp5c01.h index f26a382db67f7..4b9287d70477c 100644 --- a/src/devices/machine/rp5c01.h +++ b/src/devices/machine/rp5c01.h @@ -54,7 +54,7 @@ class rp5c01_device : public device_t, // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rtc_interface overrides virtual bool rtc_feature_leap_year() const override { return true; } diff --git a/src/devices/machine/rp5c15.cpp b/src/devices/machine/rp5c15.cpp index 78d71d4200043..2d4cb7dbec230 100644 --- a/src/devices/machine/rp5c15.cpp +++ b/src/devices/machine/rp5c15.cpp @@ -242,7 +242,7 @@ void rp5c15_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void rp5c15_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void rp5c15_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/rp5c15.h b/src/devices/machine/rp5c15.h index 6d4e161ac3ecd..5521385f86ccc 100644 --- a/src/devices/machine/rp5c15.h +++ b/src/devices/machine/rp5c15.h @@ -41,7 +41,7 @@ class rp5c15_device : public device_t, protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rtc_interface overrides virtual bool rtc_feature_leap_year() const override { return true; } diff --git a/src/devices/machine/rstbuf.cpp b/src/devices/machine/rstbuf.cpp index 9e13d72743a81..adbb2f8526536 100644 --- a/src/devices/machine/rstbuf.cpp +++ b/src/devices/machine/rstbuf.cpp @@ -117,6 +117,9 @@ void rst_buffer_device::device_resolve_objects() void rst_buffer_device::device_start() { + m_sync_set_input.init(*this, FUNC(rst_pos_buffer_device::sync_set_input)); + m_sync_clear_input.init(*this, FUNC(rst_pos_buffer_device::sync_clear_input)); + // save input state save_item(NAME(m_input_buffer)); } @@ -163,9 +166,9 @@ TIMER_CALLBACK_MEMBER(rst_buffer_device::sync_clear_input) void rst_buffer_device::sync_input(bool state, u8 mask) { if (state) - machine().scheduler().synchronize(timer_expired_delegate(FUNC(rst_pos_buffer_device::sync_set_input), this), mask); + m_sync_set_input.synchronize(mask); else - machine().scheduler().synchronize(timer_expired_delegate(FUNC(rst_pos_buffer_device::sync_clear_input), this), mask); + m_sync_clear_input.synchronize(mask); } diff --git a/src/devices/machine/rstbuf.h b/src/devices/machine/rstbuf.h index 718a96f48611a..08f7139e40f23 100644 --- a/src/devices/machine/rstbuf.h +++ b/src/devices/machine/rstbuf.h @@ -39,7 +39,9 @@ class rst_buffer_device : public device_t // synchronization helpers void sync_input(bool state, u8 mask); TIMER_CALLBACK_MEMBER(sync_set_input); + transient_timer_factory m_sync_set_input; TIMER_CALLBACK_MEMBER(sync_clear_input); + transient_timer_factory m_sync_clear_input; // interrupt output callback devcb_write_line m_int_cb; diff --git a/src/devices/machine/rtc4543.cpp b/src/devices/machine/rtc4543.cpp index f58278118f6c8..748483bcb3259 100644 --- a/src/devices/machine/rtc4543.cpp +++ b/src/devices/machine/rtc4543.cpp @@ -104,7 +104,7 @@ void rtc4543_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void rtc4543_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void rtc4543_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { advance_seconds(); } diff --git a/src/devices/machine/rtc4543.h b/src/devices/machine/rtc4543.h index f93fa097d59ca..2ec8ae3535e2e 100644 --- a/src/devices/machine/rtc4543.h +++ b/src/devices/machine/rtc4543.h @@ -44,7 +44,7 @@ class rtc4543_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rtc_interface overrides virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override; diff --git a/src/devices/machine/rtc65271.cpp b/src/devices/machine/rtc65271.cpp index b39730fb372ae..bc8261052bbf5 100644 --- a/src/devices/machine/rtc65271.cpp +++ b/src/devices/machine/rtc65271.cpp @@ -505,7 +505,7 @@ TIMER_CALLBACK_MEMBER(rtc65271_device::rtc_begin_update_cb) m_regs[reg_A] |= reg_A_UIP; /* schedule end of update cycle */ - machine().scheduler().timer_set(UPDATE_CYCLE_TIME, timer_expired_delegate(FUNC(rtc65271_device::rtc_end_update_cb), this)); + m_rtc_end_update_cb.call_after(UPDATE_CYCLE_TIME); } } @@ -677,11 +677,13 @@ rtc65271_device::rtc65271_device(const machine_config &mconfig, const char *tag, //------------------------------------------------- void rtc65271_device::device_start() { - m_update_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(rtc65271_device::rtc_begin_update_cb), this)); + m_update_timer = timer_alloc(*this, FUNC(rtc65271_device::rtc_begin_update_cb)); m_update_timer->adjust(attotime::from_seconds(1), 0, attotime::from_seconds(1)); - m_SQW_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(rtc65271_device::rtc_SQW_cb), this)); + m_SQW_timer = timer_alloc(*this, FUNC(rtc65271_device::rtc_SQW_cb)); m_interrupt_cb.resolve(); + m_rtc_end_update_cb.init(*this, FUNC(rtc65271_device::rtc_end_update_cb)); + save_item(NAME(m_regs)); save_item(NAME(m_cur_reg)); save_item(NAME(m_xram)); diff --git a/src/devices/machine/rtc65271.h b/src/devices/machine/rtc65271.h index e249491cf4818..0cf27cdaafe7e 100644 --- a/src/devices/machine/rtc65271.h +++ b/src/devices/machine/rtc65271.h @@ -64,6 +64,7 @@ class rtc65271_device : public device_t, /* callback called when interrupt pin state changes (may be nullptr) */ devcb_write_line m_interrupt_cb; + transient_timer_factory m_rtc_end_update_cb; optional_region_ptr m_default_data; }; diff --git a/src/devices/machine/rtc9701.cpp b/src/devices/machine/rtc9701.cpp index a8ccc5cec7f9e..d5f8c175ad287 100644 --- a/src/devices/machine/rtc9701.cpp +++ b/src/devices/machine/rtc9701.cpp @@ -92,7 +92,7 @@ void rtc9701_device::device_validity_check(validity_checker &valid) const void rtc9701_device::device_start() { /* let's call the timer callback every second */ - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(rtc9701_device::timer_callback), this)); + m_timer = timer_alloc(*this, FUNC(rtc9701_device::timer_callback)); m_timer->adjust(attotime::from_hz(clock() / XTAL(32'768)), 0, attotime::from_hz(clock() / XTAL(32'768))); system_time systime; diff --git a/src/devices/machine/s3520cf.cpp b/src/devices/machine/s3520cf.cpp index abdd1d83638d2..08f7742276469 100644 --- a/src/devices/machine/s3520cf.cpp +++ b/src/devices/machine/s3520cf.cpp @@ -105,7 +105,7 @@ void s3520cf_device::device_validity_check(validity_checker &valid) const void s3520cf_device::device_start() { /* let's call the timer callback every second for now */ - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(s3520cf_device::timer_callback), this)); + m_timer = timer_alloc(*this, FUNC(s3520cf_device::timer_callback)); m_timer->adjust(attotime::from_hz(clock() / XTAL(32'768)), 0, attotime::from_hz(clock() / XTAL(32'768))); system_time systime; diff --git a/src/devices/machine/s3c24xx.hxx b/src/devices/machine/s3c24xx.hxx index acddd0ad7e09c..4ff9ce627d68b 100644 --- a/src/devices/machine/s3c24xx.hxx +++ b/src/devices/machine/s3c24xx.hxx @@ -3272,15 +3272,15 @@ void S3C24_CLASS_NAME::s3c24xx_device_start() m_nand_data_w_cb.resolve(); #endif for (int i = 0; i < 5; i++) - m_pwm.timer[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(S3C24_CLASS_NAME::s3c24xx_pwm_timer_exp), this)); + m_pwm.timer[i] = timer_alloc(*this, FUNC(S3C24_CLASS_NAME::s3c24xx_pwm_timer_exp)); for (auto & elem : m_dma) - elem.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(S3C24_CLASS_NAME::s3c24xx_dma_timer_exp), this)); - m_iic.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(S3C24_CLASS_NAME::s3c24xx_iic_timer_exp), this)); - m_iis.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(S3C24_CLASS_NAME::s3c24xx_iis_timer_exp), this)); - m_lcd.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(S3C24_CLASS_NAME::s3c24xx_lcd_timer_exp), this)); - m_rtc.timer_tick_count = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(S3C24_CLASS_NAME::s3c24xx_rtc_timer_tick_count_exp), this)); - m_rtc.timer_update = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(S3C24_CLASS_NAME::s3c24xx_rtc_timer_update_exp), this)); - m_wdt.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(S3C24_CLASS_NAME::s3c24xx_wdt_timer_exp), this)); + elem.timer = timer_alloc(*this, FUNC(S3C24_CLASS_NAME::s3c24xx_dma_timer_exp)); + m_iic.timer = timer_alloc(*this, FUNC(S3C24_CLASS_NAME::s3c24xx_iic_timer_exp)); + m_iis.timer = timer_alloc(*this, FUNC(S3C24_CLASS_NAME::s3c24xx_iis_timer_exp)); + m_lcd.timer = timer_alloc(*this, FUNC(S3C24_CLASS_NAME::s3c24xx_lcd_timer_exp)); + m_rtc.timer_tick_count = timer_alloc(*this, FUNC(S3C24_CLASS_NAME::s3c24xx_rtc_timer_tick_count_exp)); + m_rtc.timer_update = timer_alloc(*this, FUNC(S3C24_CLASS_NAME::s3c24xx_rtc_timer_update_exp)); + m_wdt.timer = timer_alloc(*this, FUNC(S3C24_CLASS_NAME::s3c24xx_wdt_timer_exp)); #if defined(DEVICE_S3C2410) || defined(DEVICE_S3C2440) int om0 = iface_core_pin_r(S3C24XX_CORE_PIN_OM0); diff --git a/src/devices/machine/s3c44b0.cpp b/src/devices/machine/s3c44b0.cpp index bf3a1ed811c62..460f774e68a53 100644 --- a/src/devices/machine/s3c44b0.cpp +++ b/src/devices/machine/s3c44b0.cpp @@ -268,17 +268,17 @@ void s3c44b0_device::device_start() m_cpu->space(AS_PROGRAM).cache(m_cache); - for (int i = 0; i < 6; i++) m_pwm.timer[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(s3c44b0_device::pwm_timer_exp),this)); - for (auto & elem : m_uart) elem.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(s3c44b0_device::uart_timer_exp),this)); - for (auto & elem : m_zdma) elem.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(s3c44b0_device::zdma_timer_exp),this)); - for (auto & elem : m_bdma) elem.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(s3c44b0_device::bdma_timer_exp),this)); - - m_lcd.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(s3c44b0_device::lcd_timer_exp),this)); - m_wdt.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(s3c44b0_device::wdt_timer_exp),this)); - m_sio.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(s3c44b0_device::sio_timer_exp),this)); - m_adc.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(s3c44b0_device::adc_timer_exp),this)); - m_iic.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(s3c44b0_device::iic_timer_exp),this)); - m_iis.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(s3c44b0_device::iis_timer_exp),this)); + for (int i = 0; i < 6; i++) m_pwm.timer[i] = timer_alloc(*this, FUNC(s3c44b0_device::pwm_timer_exp)); + for (auto & elem : m_uart) elem.timer = timer_alloc(*this, FUNC(s3c44b0_device::uart_timer_exp)); + for (auto & elem : m_zdma) elem.timer = timer_alloc(*this, FUNC(s3c44b0_device::zdma_timer_exp)); + for (auto & elem : m_bdma) elem.timer = timer_alloc(*this, FUNC(s3c44b0_device::bdma_timer_exp)); + + m_lcd.timer = timer_alloc(*this, FUNC(s3c44b0_device::lcd_timer_exp)); + m_wdt.timer = timer_alloc(*this, FUNC(s3c44b0_device::wdt_timer_exp)); + m_sio.timer = timer_alloc(*this, FUNC(s3c44b0_device::sio_timer_exp)); + m_adc.timer = timer_alloc(*this, FUNC(s3c44b0_device::adc_timer_exp)); + m_iic.timer = timer_alloc(*this, FUNC(s3c44b0_device::iic_timer_exp)); + m_iis.timer = timer_alloc(*this, FUNC(s3c44b0_device::iis_timer_exp)); video_start(); diff --git a/src/devices/machine/s_smp.cpp b/src/devices/machine/s_smp.cpp index fb4396b68d5d1..e42d0667b1ecc 100644 --- a/src/devices/machine/s_smp.cpp +++ b/src/devices/machine/s_smp.cpp @@ -179,7 +179,7 @@ inline void s_smp_device::update_timer_tick(u8 which) } } -void s_smp_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void s_smp_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id != TIMER_TICK_ID) throw emu_fatalerror("Unknown id in s_smp_device::device_timer"); diff --git a/src/devices/machine/s_smp.h b/src/devices/machine/s_smp.h index 9fd0232329c5e..b4589274d6429 100644 --- a/src/devices/machine/s_smp.h +++ b/src/devices/machine/s_smp.h @@ -31,7 +31,7 @@ class s_smp_device : public spc700_device virtual void device_start() override; virtual void device_reset() override; virtual void device_clock_changed() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_memory_interface configuration virtual space_config_vector memory_space_config() const override; diff --git a/src/devices/machine/sa1110.cpp b/src/devices/machine/sa1110.cpp index 11afedeef5165..70f2f068ce143 100644 --- a/src/devices/machine/sa1110.cpp +++ b/src/devices/machine/sa1110.cpp @@ -2314,12 +2314,12 @@ void sa1110_periphs_device::device_start() save_item(NAME(m_icp_regs.uart.rx_fifo_read_idx)); save_item(NAME(m_icp_regs.uart.rx_fifo_write_idx)); save_item(NAME(m_icp_regs.uart.rx_fifo_count)); - m_icp_regs.uart_rx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::icp_rx_callback), this)); + m_icp_regs.uart_rx_timer = timer_alloc(*this, FUNC(sa1110_periphs_device::icp_rx_callback)); save_item(NAME(m_icp_regs.uart.tx_fifo)); save_item(NAME(m_icp_regs.uart.tx_fifo_read_idx)); save_item(NAME(m_icp_regs.uart.tx_fifo_write_idx)); save_item(NAME(m_icp_regs.uart.tx_fifo_count)); - m_icp_regs.uart_tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::icp_tx_callback), this)); + m_icp_regs.uart_tx_timer = timer_alloc(*this, FUNC(sa1110_periphs_device::icp_tx_callback)); save_item(NAME(m_icp_regs.uart.rx_break_interlock)); save_item(NAME(m_icp_regs.utcr4)); @@ -2331,12 +2331,12 @@ void sa1110_periphs_device::device_start() save_item(NAME(m_icp_regs.hssp.rx_fifo_read_idx)); save_item(NAME(m_icp_regs.hssp.rx_fifo_write_idx)); save_item(NAME(m_icp_regs.hssp.rx_fifo_count)); - m_icp_regs.hssp.rx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::hssp_rx_callback), this)); + m_icp_regs.hssp.rx_timer = timer_alloc(*this, FUNC(sa1110_periphs_device::hssp_rx_callback)); save_item(NAME(m_icp_regs.hssp.tx_fifo)); save_item(NAME(m_icp_regs.hssp.tx_fifo_read_idx)); save_item(NAME(m_icp_regs.hssp.tx_fifo_write_idx)); save_item(NAME(m_icp_regs.hssp.tx_fifo_count)); - m_icp_regs.hssp.tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::hssp_tx_callback), this)); + m_icp_regs.hssp.tx_timer = timer_alloc(*this, FUNC(sa1110_periphs_device::hssp_tx_callback)); save_item(NAME(m_uart_regs.utcr)); save_item(NAME(m_uart_regs.utsr0)); @@ -2363,7 +2363,7 @@ void sa1110_periphs_device::device_start() save_item(NAME(m_mcp_regs.audio_tx_fifo_read_idx)); save_item(NAME(m_mcp_regs.audio_tx_fifo_write_idx)); save_item(NAME(m_mcp_regs.audio_tx_fifo_count)); - m_mcp_regs.audio_tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::mcp_audio_tx_callback), this)); + m_mcp_regs.audio_tx_timer = timer_alloc(*this, FUNC(sa1110_periphs_device::mcp_audio_tx_callback)); save_item(NAME(m_mcp_regs.telecom_rx_fifo)); save_item(NAME(m_mcp_regs.telecom_rx_fifo_read_idx)); save_item(NAME(m_mcp_regs.telecom_rx_fifo_write_idx)); @@ -2372,7 +2372,7 @@ void sa1110_periphs_device::device_start() save_item(NAME(m_mcp_regs.telecom_tx_fifo_read_idx)); save_item(NAME(m_mcp_regs.telecom_tx_fifo_write_idx)); save_item(NAME(m_mcp_regs.telecom_tx_fifo_count)); - m_mcp_regs.telecom_tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::mcp_telecom_tx_callback), this)); + m_mcp_regs.telecom_tx_timer = timer_alloc(*this, FUNC(sa1110_periphs_device::mcp_telecom_tx_callback)); save_item(NAME(m_ssp_regs.sscr0)); save_item(NAME(m_ssp_regs.sscr1)); @@ -2381,12 +2381,12 @@ void sa1110_periphs_device::device_start() save_item(NAME(m_ssp_regs.rx_fifo_read_idx)); save_item(NAME(m_ssp_regs.rx_fifo_write_idx)); save_item(NAME(m_ssp_regs.rx_fifo_count)); - m_ssp_regs.rx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::ssp_rx_callback), this)); + m_ssp_regs.rx_timer = timer_alloc(*this, FUNC(sa1110_periphs_device::ssp_rx_callback)); save_item(NAME(m_ssp_regs.tx_fifo)); save_item(NAME(m_ssp_regs.tx_fifo_read_idx)); save_item(NAME(m_ssp_regs.tx_fifo_write_idx)); save_item(NAME(m_ssp_regs.tx_fifo_count)); - m_ssp_regs.tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::ssp_tx_callback), this)); + m_ssp_regs.tx_timer = timer_alloc(*this, FUNC(sa1110_periphs_device::ssp_tx_callback)); save_item(NAME(m_ostmr_regs.osmr)); save_item(NAME(m_ostmr_regs.oscr)); @@ -2395,14 +2395,14 @@ void sa1110_periphs_device::device_start() save_item(NAME(m_ostmr_regs.oier)); for (int i = 0; i < 4; i++) { - m_ostmr_regs.timer[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::ostimer_tick_cb), this)); + m_ostmr_regs.timer[i] = timer_alloc(*this, FUNC(sa1110_periphs_device::ostimer_tick_cb)); } save_item(NAME(m_rtc_regs.rtar)); save_item(NAME(m_rtc_regs.rcnr)); save_item(NAME(m_rtc_regs.rttr)); save_item(NAME(m_rtc_regs.rtsr)); - m_rtc_regs.tick_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::rtc_tick_cb), this)); + m_rtc_regs.tick_timer = timer_alloc(*this, FUNC(sa1110_periphs_device::rtc_tick_cb)); save_item(NAME(m_power_regs.pmcr)); save_item(NAME(m_power_regs.pssr)); diff --git a/src/devices/machine/sa1111.cpp b/src/devices/machine/sa1111.cpp index 89ebf0a178410..e35977793d543 100644 --- a/src/devices/machine/sa1111.cpp +++ b/src/devices/machine/sa1111.cpp @@ -2080,13 +2080,13 @@ void sa1111_device::device_start() save_item(NAME(m_card_regs.pcssr)); save_item(NAME(m_card_regs.pcsr)); - m_audio_regs.rx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1111_device::audio_rx_callback), this)); - m_audio_regs.rx_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1111_device::audio_rx_dma_callback), this)); - m_audio_regs.tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1111_device::audio_tx_callback), this)); - m_audio_regs.tx_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1111_device::audio_tx_dma_callback), this)); + m_audio_regs.rx_timer = timer_alloc(*this, FUNC(sa1111_device::audio_rx_callback)); + m_audio_regs.rx_dma_timer = timer_alloc(*this, FUNC(sa1111_device::audio_rx_dma_callback)); + m_audio_regs.tx_timer = timer_alloc(*this, FUNC(sa1111_device::audio_tx_callback)); + m_audio_regs.tx_dma_timer = timer_alloc(*this, FUNC(sa1111_device::audio_tx_dma_callback)); - m_ssp_regs.rx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1111_device::ssp_rx_callback), this)); - m_ssp_regs.tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1111_device::ssp_tx_callback), this)); + m_ssp_regs.rx_timer = timer_alloc(*this, FUNC(sa1111_device::ssp_rx_callback)); + m_ssp_regs.tx_timer = timer_alloc(*this, FUNC(sa1111_device::ssp_tx_callback)); m_irq_out.resolve_safe(); m_gpio_out.resolve_all_safe(); diff --git a/src/devices/machine/saa1043.cpp b/src/devices/machine/saa1043.cpp index c6766cf5b7ed4..bb8944619ee10 100644 --- a/src/devices/machine/saa1043.cpp +++ b/src/devices/machine/saa1043.cpp @@ -62,7 +62,7 @@ void saa1043_device::device_reset() m_outputs[V2](ASSERT_LINE); } -void saa1043_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void saa1043_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/saa1043.h b/src/devices/machine/saa1043.h index 32591d583005c..210d2ad8b3f79 100644 --- a/src/devices/machine/saa1043.h +++ b/src/devices/machine/saa1043.h @@ -101,7 +101,7 @@ class saa1043_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: devcb_write_line::array m_outputs; diff --git a/src/devices/machine/scc2698b.cpp b/src/devices/machine/scc2698b.cpp index 0898e52393d00..cbf0fdc845e6a 100644 --- a/src/devices/machine/scc2698b.cpp +++ b/src/devices/machine/scc2698b.cpp @@ -369,7 +369,7 @@ scc2698b_device::scc2698b_device(const machine_config &mconfig, const char *tag, -void scc2698b_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void scc2698b_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { } diff --git a/src/devices/machine/scc2698b.h b/src/devices/machine/scc2698b.h index 84da53998c508..7a7e9751b00ff 100644 --- a/src/devices/machine/scc2698b.h +++ b/src/devices/machine/scc2698b.h @@ -114,7 +114,7 @@ class scc2698b_device : public device_t protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; devcb_write_line write_intr_A, write_intr_B, write_intr_C, write_intr_D; diff --git a/src/devices/machine/scc68070.cpp b/src/devices/machine/scc68070.cpp index 84debddc48d0d..ebdc19727f9ad 100644 --- a/src/devices/machine/scc68070.cpp +++ b/src/devices/machine/scc68070.cpp @@ -267,7 +267,7 @@ void scc68070_device::device_reset() // device_timer - device-specific timer callback //------------------------------------------------- -void scc68070_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void scc68070_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_TMR0) timer0_callback(); diff --git a/src/devices/machine/scc68070.h b/src/devices/machine/scc68070.h index 2bae392ab6392..4d7e6c603768e 100644 --- a/src/devices/machine/scc68070.h +++ b/src/devices/machine/scc68070.h @@ -264,7 +264,7 @@ class scc68070_device : public scc68070_base_device virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_execute_interface overrides virtual u64 execute_clocks_to_cycles(u64 clocks) const noexcept override { return (clocks + 2 - 1) / 2; } diff --git a/src/devices/machine/scn_pci.cpp b/src/devices/machine/scn_pci.cpp index 73ef2590e6621..bd1e460ac3c54 100644 --- a/src/devices/machine/scn_pci.cpp +++ b/src/devices/machine/scn_pci.cpp @@ -303,7 +303,7 @@ void scn2641_device::device_resolve_objects() void scn_pci_device::device_start() { // Create timer for baud rate generator - m_brg_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(scn_pci_device::brg_tick), this)); + m_brg_timer = timer_alloc(*this, FUNC(scn_pci_device::brg_tick)); // Save state save_item(NAME(m_rhr)); diff --git a/src/devices/machine/scnxx562.cpp b/src/devices/machine/scnxx562.cpp index df6754c8f2415..90810d6f891a5 100644 --- a/src/devices/machine/scnxx562.cpp +++ b/src/devices/machine/scnxx562.cpp @@ -722,7 +722,7 @@ void duscc_channel::device_reset() m_a7 = 0; } -void duscc_channel::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void duscc_channel::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/machine/scnxx562.h b/src/devices/machine/scnxx562.h index 72f3322a2e551..61115cecdade0 100644 --- a/src/devices/machine/scnxx562.h +++ b/src/devices/machine/scnxx562.h @@ -152,7 +152,7 @@ class duscc_channel : public device_t, public device_serial_interface // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_serial_interface overrides virtual void tra_callback() override; diff --git a/src/devices/machine/sega_scu.cpp b/src/devices/machine/sega_scu.cpp index d7a0bf521cbd8..2aa661793af70 100644 --- a/src/devices/machine/sega_scu.cpp +++ b/src/devices/machine/sega_scu.cpp @@ -270,7 +270,7 @@ void sega_scu_device::device_reset_after_children() } -void sega_scu_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sega_scu_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) diff --git a/src/devices/machine/sega_scu.h b/src/devices/machine/sega_scu.h index ae751b09d2f63..67cf76a2507e9 100644 --- a/src/devices/machine/sega_scu.h +++ b/src/devices/machine/sega_scu.h @@ -63,7 +63,7 @@ class sega_scu_device : public device_t virtual void device_start() override; virtual void device_reset() override; virtual void device_reset_after_children() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_scudsp; diff --git a/src/devices/machine/sensorboard.cpp b/src/devices/machine/sensorboard.cpp index 3d4188396ddca..2a92ff051baae 100644 --- a/src/devices/machine/sensorboard.cpp +++ b/src/devices/machine/sensorboard.cpp @@ -114,8 +114,8 @@ void sensorboard_device::device_start() m_out_count.resolve(); } - m_undotimer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sensorboard_device::undo_tick),this)); - m_sensortimer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sensorboard_device::sensor_off),this)); + m_undotimer = timer_alloc(*this, FUNC(sensorboard_device::undo_tick)); + m_sensortimer = timer_alloc(*this, FUNC(sensorboard_device::sensor_off)); cancel_sensor(); u16 wmask = ~((1 << m_width) - 1); diff --git a/src/devices/machine/smc91c9x.cpp b/src/devices/machine/smc91c9x.cpp index 8b0d22f8c7175..22949200f21b1 100644 --- a/src/devices/machine/smc91c9x.cpp +++ b/src/devices/machine/smc91c9x.cpp @@ -82,7 +82,7 @@ void smc91c9x_device::device_start() m_buffer = std::make_unique(ETHER_BUFFER_SIZE * m_num_ebuf); // TX timer - m_tx_poll = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(smc91c9x_device::tx_poll), this)); + m_tx_poll = timer_alloc(*this, FUNC(smc91c9x_device::tx_poll)); m_irq_handler.resolve_safe(); @@ -580,7 +580,7 @@ TIMER_CALLBACK_MEMBER(smc91c9x_device::tx_poll) m_tx_active = 1; m_tx_poll->enable(false); - LOGMASKED(LOG_TX, "Start sending packet %d length = %d time: %s\n", packet_num, length, machine().scheduler().time().as_string()); + LOGMASKED(LOG_TX, "Start sending packet %d length = %d time: %s\n", packet_num, length, machine().time().as_string()); dump_bytes(&tx_buffer[4], length); // Write loopback data and save result @@ -612,7 +612,7 @@ void smc91c9x_device::send_complete_cb(int result) const int packet_num = pop_queued_tx(); uint8_t *const tx_buffer = &m_buffer[packet_num * ETHER_BUFFER_SIZE]; - LOGMASKED(LOG_TX, "End sending packet %d result = %d time: %s\n", packet_num, result, machine().scheduler().time().as_string()); + LOGMASKED(LOG_TX, "End sending packet %d result = %d time: %s\n", packet_num, result, machine().time().as_string()); /* update the EPH register */ m_reg[B0_EPH_STATUS] |= TX_SUC; @@ -776,7 +776,7 @@ void smc91c9x_device::process_command(uint16_t data) if (!m_tx_active && !m_tx_poll->enabled()) { m_tx_poll->adjust(attotime::from_usec(10)); - LOG("Start polling time: %s\n", machine().scheduler().time().as_string()); + LOG("Start polling time: %s\n", machine().time().as_string()); } } break; diff --git a/src/devices/machine/smioc.cpp b/src/devices/machine/smioc.cpp index e58673a0bb041..205079b73abac 100644 --- a/src/devices/machine/smioc.cpp +++ b/src/devices/machine/smioc.cpp @@ -246,7 +246,7 @@ void smioc_device::SoftReset() } -void smioc_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void smioc_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { switch (tid) { diff --git a/src/devices/machine/smioc.h b/src/devices/machine/smioc.h index a75a5b33ed392..33e1b4bf39f34 100644 --- a/src/devices/machine/smioc.h +++ b/src/devices/machine/smioc.h @@ -108,7 +108,7 @@ class smioc_device : public device_t /* Optional information overrides */ virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; u16 ReadDmaParameter(smioc_dma_parameter_t param); int DmaParameterAddress(smioc_dma_parameter_t param); diff --git a/src/devices/machine/smpc.cpp b/src/devices/machine/smpc.cpp index bff704cdcb381..a9b793d8dbffb 100644 --- a/src/devices/machine/smpc.cpp +++ b/src/devices/machine/smpc.cpp @@ -564,7 +564,7 @@ void smpc_hle_device::command_register_w(uint8_t data) } -void smpc_hle_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void smpc_hle_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/machine/smpc.h b/src/devices/machine/smpc.h index b62d13dc1d356..7d1c07f8fc398 100644 --- a/src/devices/machine/smpc.h +++ b/src/devices/machine/smpc.h @@ -86,7 +86,7 @@ class smpc_hle_device : public device_t, virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual space_config_vector memory_space_config() const override; private: diff --git a/src/devices/machine/spg290_cdservo.cpp b/src/devices/machine/spg290_cdservo.cpp index 651d5e168185d..5187c1bc43ff4 100644 --- a/src/devices/machine/spg290_cdservo.cpp +++ b/src/devices/machine/spg290_cdservo.cpp @@ -101,7 +101,7 @@ void spg290_cdservo_device::device_reset() change_status(); } -void spg290_cdservo_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void spg290_cdservo_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (!(m_control1 & 0x04) && m_cur_sector == m_seek_lba + SPG290_LEADIN_LEN) { diff --git a/src/devices/machine/spg290_cdservo.h b/src/devices/machine/spg290_cdservo.h index 790e7b4c28df0..e3d7eb44e9bc1 100644 --- a/src/devices/machine/spg290_cdservo.h +++ b/src/devices/machine/spg290_cdservo.h @@ -31,7 +31,7 @@ class spg290_cdservo_device : public device_t protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void change_status(); diff --git a/src/devices/machine/spg290_i2c.cpp b/src/devices/machine/spg290_i2c.cpp index 94faef82598bc..6d4f3ce741c27 100644 --- a/src/devices/machine/spg290_i2c.cpp +++ b/src/devices/machine/spg290_i2c.cpp @@ -52,7 +52,7 @@ void spg290_i2c_device::device_reset() m_irq_cb(CLEAR_LINE); } -void spg290_i2c_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void spg290_i2c_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (m_config & 0x40) m_rdata = m_i2c_read_cb(m_port_addr); diff --git a/src/devices/machine/spg290_i2c.h b/src/devices/machine/spg290_i2c.h index 9b6c35cd9d905..5e5c9c3b169ca 100644 --- a/src/devices/machine/spg290_i2c.h +++ b/src/devices/machine/spg290_i2c.h @@ -23,7 +23,7 @@ class spg290_i2c_device : public device_t virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: devcb_write_line m_irq_cb; diff --git a/src/devices/machine/spg290_timer.cpp b/src/devices/machine/spg290_timer.cpp index 25ee7790e8b2d..5e6de04750171 100644 --- a/src/devices/machine/spg290_timer.cpp +++ b/src/devices/machine/spg290_timer.cpp @@ -56,7 +56,7 @@ void spg290_timer_device::device_clock_changed() m_tick_timer->adjust(attotime::never); } -void spg290_timer_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void spg290_timer_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (!BIT(m_control, 31)) return; diff --git a/src/devices/machine/spg290_timer.h b/src/devices/machine/spg290_timer.h index 44c399fbb6435..4215dbd93f12e 100644 --- a/src/devices/machine/spg290_timer.h +++ b/src/devices/machine/spg290_timer.h @@ -22,7 +22,7 @@ class spg290_timer_device : public device_t virtual void device_reset() override; virtual void device_clock_changed() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: devcb_write_line m_irq_cb; diff --git a/src/devices/machine/spg2xx_audio.cpp b/src/devices/machine/spg2xx_audio.cpp index 2441ebf17cec1..82598985092cc 100644 --- a/src/devices/machine/spg2xx_audio.cpp +++ b/src/devices/machine/spg2xx_audio.cpp @@ -159,7 +159,7 @@ void spg2xx_audio_device::device_stop() #endif } -void spg2xx_audio_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void spg2xx_audio_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id >= TIMER_IRQ && id < (TIMER_IRQ + 16)) { diff --git a/src/devices/machine/spg2xx_audio.h b/src/devices/machine/spg2xx_audio.h index 588d49e789504..808889c042334 100644 --- a/src/devices/machine/spg2xx_audio.h +++ b/src/devices/machine/spg2xx_audio.h @@ -337,7 +337,7 @@ class spg2xx_audio_device : public device_t, public device_sound_interface virtual void device_start() override; virtual void device_reset() override; virtual void device_stop() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; uint16_t read_space(offs_t offset); diff --git a/src/devices/machine/spg2xx_video.cpp b/src/devices/machine/spg2xx_video.cpp index da3bb29f7df1d..9b00789627f41 100644 --- a/src/devices/machine/spg2xx_video.cpp +++ b/src/devices/machine/spg2xx_video.cpp @@ -463,7 +463,7 @@ void spg2xx_video_device::check_video_irq() m_video_irq_cb((VIDEO_IRQ_STATUS & VIDEO_IRQ_ENABLE) ? ASSERT_LINE : CLEAR_LINE); } -void spg2xx_video_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void spg2xx_video_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/spg2xx_video.h b/src/devices/machine/spg2xx_video.h index 2d48f247bdc6d..3f9645fa4b82d 100644 --- a/src/devices/machine/spg2xx_video.h +++ b/src/devices/machine/spg2xx_video.h @@ -46,7 +46,7 @@ class spg2xx_video_device : public device_t virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void do_sprite_dma(uint32_t len); diff --git a/src/devices/machine/sun4c_mmu.cpp b/src/devices/machine/sun4c_mmu.cpp index fce37a92824cd..a80656de96047 100644 --- a/src/devices/machine/sun4c_mmu.cpp +++ b/src/devices/machine/sun4c_mmu.cpp @@ -221,7 +221,7 @@ void sun4_mmu_base_device::device_reset() memset(&m_cachedata[0], 0, sizeof(uint32_t) * 16384); } -void sun4_mmu_base_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sun4_mmu_base_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_RESET) { diff --git a/src/devices/machine/sun4c_mmu.h b/src/devices/machine/sun4c_mmu.h index d9fa7a8078396..1f870fe69c6d4 100644 --- a/src/devices/machine/sun4c_mmu.h +++ b/src/devices/machine/sun4c_mmu.h @@ -127,7 +127,7 @@ class sun4_mmu_base_device : public device_t, public sparc_mmu_interface virtual void device_start() override; virtual void device_reset() override; virtual void device_stop() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; uint32_t page_entry_to_uint(uint32_t index); void merge_page_entry(uint32_t index, uint32_t data, uint32_t mem_mask); diff --git a/src/devices/machine/swim1.cpp b/src/devices/machine/swim1.cpp index 57afba463f449..2bc553f9c8193 100644 --- a/src/devices/machine/swim1.cpp +++ b/src/devices/machine/swim1.cpp @@ -380,7 +380,7 @@ void swim1_device::ism_write(offs_t offset, u8 data) } } -void swim1_device::device_timer(emu_timer &, device_timer_id, int, void *) +void swim1_device::device_timer(timer_instance const &, device_timer_id, int, void *) { if(m_iwm_active == MODE_DELAY) { flush_write(); diff --git a/src/devices/machine/swim1.h b/src/devices/machine/swim1.h index a9cdfd1893184..64e35b2fdeaf7 100644 --- a/src/devices/machine/swim1.h +++ b/src/devices/machine/swim1.h @@ -35,7 +35,7 @@ class swim1_device : public applefdintf_device protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum { diff --git a/src/devices/machine/swim2.cpp b/src/devices/machine/swim2.cpp index c4b8ee387f4b9..80a01f672b382 100644 --- a/src/devices/machine/swim2.cpp +++ b/src/devices/machine/swim2.cpp @@ -78,7 +78,7 @@ void swim2_device::device_reset() m_last_sync = machine().time().as_ticks(clock()); } -void swim2_device::device_timer(emu_timer &, device_timer_id, int, void *) +void swim2_device::device_timer(timer_instance const &, device_timer_id, int, void *) { } diff --git a/src/devices/machine/swim2.h b/src/devices/machine/swim2.h index 20df167113150..4013ff76e7c32 100644 --- a/src/devices/machine/swim2.h +++ b/src/devices/machine/swim2.h @@ -36,7 +36,7 @@ class swim2_device : public applefdintf_device protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum { diff --git a/src/devices/machine/swim3.cpp b/src/devices/machine/swim3.cpp index 1be0e9937f6f8..aded19402e127 100644 --- a/src/devices/machine/swim3.cpp +++ b/src/devices/machine/swim3.cpp @@ -300,7 +300,7 @@ void swim3_device::index_callback(floppy_image_device *floppy, int state) run(false, true); } } -void swim3_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void swim3_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { sync(); run(true, false); diff --git a/src/devices/machine/swim3.h b/src/devices/machine/swim3.h index c3cf7d9361e88..b1c9f5329b8a6 100644 --- a/src/devices/machine/swim3.h +++ b/src/devices/machine/swim3.h @@ -42,7 +42,7 @@ class swim3_device : public applefdintf_device protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum { diff --git a/src/devices/machine/swtpc8212.cpp b/src/devices/machine/swtpc8212.cpp index fffd6eefe7f79..e31b81ae9fdf0 100644 --- a/src/devices/machine/swtpc8212.cpp +++ b/src/devices/machine/swtpc8212.cpp @@ -329,7 +329,7 @@ MC6845_UPDATE_ROW(swtpc8212_device::update_row) } } -void swtpc8212_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void swtpc8212_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/swtpc8212.h b/src/devices/machine/swtpc8212.h index 343d182de4bcc..8b6f4ed981f2e 100644 --- a/src/devices/machine/swtpc8212.h +++ b/src/devices/machine/swtpc8212.h @@ -39,7 +39,7 @@ class swtpc8212_device : public device_t virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; diff --git a/src/devices/machine/terminal.cpp b/src/devices/machine/terminal.cpp index ed1dd4d001fe3..51475cff312f2 100644 --- a/src/devices/machine/terminal.cpp +++ b/src/devices/machine/terminal.cpp @@ -361,7 +361,7 @@ void generic_terminal_device::device_reset() m_framecnt = 0; } -void generic_terminal_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void generic_terminal_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/terminal.h b/src/devices/machine/terminal.h index aa98c91dc624c..0394985ade275 100644 --- a/src/devices/machine/terminal.h +++ b/src/devices/machine/terminal.h @@ -41,7 +41,7 @@ class generic_terminal_device : public device_t virtual void term_write(uint8_t data); virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual ioport_constructor device_input_ports() const override; virtual void device_add_mconfig(machine_config &config) override; virtual void send_key(uint8_t code) { if (!m_keyboard_cb.isnull()) m_keyboard_cb(code); } diff --git a/src/devices/machine/ticket.cpp b/src/devices/machine/ticket.cpp index 8cf8e3fddf088..60f5df5ab822d 100644 --- a/src/devices/machine/ticket.cpp +++ b/src/devices/machine/ticket.cpp @@ -159,7 +159,7 @@ void ticket_dispenser_device::device_reset() // device_timer - handle timer callbacks //------------------------------------------------- -void ticket_dispenser_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ticket_dispenser_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // if we still have power, keep toggling ticket states if (m_power) diff --git a/src/devices/machine/ticket.h b/src/devices/machine/ticket.h index 7330ad3cb74d3..dc1e55b9095f1 100644 --- a/src/devices/machine/ticket.h +++ b/src/devices/machine/ticket.h @@ -71,7 +71,7 @@ class ticket_dispenser_device : public device_t // device-level overrides virtual void device_start() override ATTR_COLD; virtual void device_reset() override ATTR_COLD; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // configuration state uint8_t m_motor_sense; diff --git a/src/devices/machine/timekpr.cpp b/src/devices/machine/timekpr.cpp index 5128ef1ac622f..5d0a76ee7277d 100644 --- a/src/devices/machine/timekpr.cpp +++ b/src/devices/machine/timekpr.cpp @@ -230,7 +230,7 @@ void timekeeper_device::device_start() emu_timer *timer = timer_alloc(); timer->adjust(attotime::from_seconds(1), 0, attotime::from_seconds(1)); - m_watchdog_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(timekeeper_device::watchdog_callback), this)); + m_watchdog_timer = timer_alloc(*this, FUNC(timekeeper_device::watchdog_callback)); m_watchdog_timer->adjust(attotime::never); m_reset_cb.resolve_safe(); m_irq_cb.resolve_safe(); @@ -268,7 +268,7 @@ void timekeeper_device::counters_from_ram() m_century = counter_from_ram(&m_data[0], m_offset_century); } -void timekeeper_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void timekeeper_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { LOGMASKED(LOG_TICKS, "Tick\n"); if ((m_seconds & SECONDS_ST) != 0 || diff --git a/src/devices/machine/timekpr.h b/src/devices/machine/timekpr.h index def60c0205962..3cf8f9468df0c 100644 --- a/src/devices/machine/timekpr.h +++ b/src/devices/machine/timekpr.h @@ -46,7 +46,7 @@ class timekeeper_device : public device_t, public device_nvram_interface // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_nvram_interface overrides virtual void nvram_default() override; diff --git a/src/devices/machine/timer.cpp b/src/devices/machine/timer.cpp index 2461fb4da3033..a74b4afa078e6 100644 --- a/src/devices/machine/timer.cpp +++ b/src/devices/machine/timer.cpp @@ -158,7 +158,7 @@ void timer_device::device_reset() // device_timer - handle timer expiration events //------------------------------------------------- -void timer_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void timer_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (m_type) { @@ -166,7 +166,7 @@ void timer_device::device_timer(emu_timer &timer, device_timer_id id, int param, case TIMER_TYPE_GENERIC: case TIMER_TYPE_PERIODIC: if (!m_callback.isnull()) - (m_callback)(*this, m_ptr, param); + (m_callback)(m_ptr, param); break; // scanline timers have to do some additional bookkeeping @@ -181,7 +181,7 @@ void timer_device::device_timer(emu_timer &timer, device_timer_id id, int param, // call the real callback int vpos = m_screen->vpos(); if (!m_callback.isnull()) - (m_callback)(*this, m_ptr, vpos); + (m_callback)(m_ptr, vpos); // advance by the increment only if we will still be within the screen bounds if (m_increment != 0 && (vpos + m_increment) < m_screen->height()) diff --git a/src/devices/machine/timer.h b/src/devices/machine/timer.h index 04d0f1923253a..256ec70d312a1 100644 --- a/src/devices/machine/timer.h +++ b/src/devices/machine/timer.h @@ -20,7 +20,8 @@ //************************************************************************** // macros for a timer callback functions -#define TIMER_DEVICE_CALLBACK_MEMBER(name) void name(timer_device &timer, void *ptr, s32 param) +#define TIMER_DEVICE_CALLBACK_MEMBER(name) void name(void *ptr, s32 param) + //************************************************************************** // TYPE DEFINITIONS @@ -32,7 +33,7 @@ class timer_device : public device_t { public: // a timer callbacks look like this - typedef device_delegate expired_delegate; + typedef device_delegate expired_delegate; // construction/destruction timer_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0); @@ -110,7 +111,7 @@ class timer_device : public device_t virtual void device_validity_check(validity_checker &valid) const override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // timer types enum timer_type diff --git a/src/devices/machine/tmp68301.cpp b/src/devices/machine/tmp68301.cpp index f6cd84dd318de..1829064d87690 100644 --- a/src/devices/machine/tmp68301.cpp +++ b/src/devices/machine/tmp68301.cpp @@ -161,7 +161,7 @@ void tmp68301_device::device_start() m68000_device::device_start(); for (int i = 0; i < 3; i++) - m_tmp68301_timer[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tmp68301_device::timer_callback), this)); + m_tmp68301_timer[i] = timer_alloc(*this, FUNC(tmp68301_device::timer_callback)); m_in_parallel_cb.resolve_safe(0); m_out_parallel_cb.resolve_safe(); diff --git a/src/devices/machine/tms5501.cpp b/src/devices/machine/tms5501.cpp index 6f115084d703c..8e18db0bc7ac2 100644 --- a/src/devices/machine/tms5501.cpp +++ b/src/devices/machine/tms5501.cpp @@ -125,7 +125,7 @@ void tms5501_device::device_reset() // device_timer - handle timer events //------------------------------------------------- -void tms5501_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tms5501_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/tms5501.h b/src/devices/machine/tms5501.h index 74fae77b5861f..adebd4d6f0b3b 100644 --- a/src/devices/machine/tms5501.h +++ b/src/devices/machine/tms5501.h @@ -80,7 +80,7 @@ class tms5501_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_serial_interface overrides virtual void tra_callback() override; diff --git a/src/devices/machine/tms9901.cpp b/src/devices/machine/tms9901.cpp index 64250f7079a12..11fe4ec046054 100644 --- a/src/devices/machine/tms9901.cpp +++ b/src/devices/machine/tms9901.cpp @@ -453,7 +453,7 @@ void tms9901_device::write_bit(int offset, bool data) Decrementer counts down the value set in clock mode; when it reaches 0, raises an interrupt and resets to the start value */ -void tms9901_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tms9901_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id==DECREMENTER) // we have only that one { diff --git a/src/devices/machine/tms9901.h b/src/devices/machine/tms9901.h index 7947845601af5..89609192a6925 100644 --- a/src/devices/machine/tms9901.h +++ b/src/devices/machine/tms9901.h @@ -89,7 +89,7 @@ class tms9901_device : public device_t private: static constexpr device_timer_id DECREMENTER = 0; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void soft_reset(); void device_start() override; diff --git a/src/devices/machine/tms9902.cpp b/src/devices/machine/tms9902.cpp index b6f8e4279c9ae..1f09409ef066f 100644 --- a/src/devices/machine/tms9902.cpp +++ b/src/devices/machine/tms9902.cpp @@ -256,7 +256,7 @@ void tms9902_device::rcv_break(bool value) /* Timer callback */ -void tms9902_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tms9902_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/tms9902.h b/src/devices/machine/tms9902.h index 3d203c597095e..1093d70b1539a 100644 --- a/src/devices/machine/tms9902.h +++ b/src/devices/machine/tms9902.h @@ -73,7 +73,7 @@ class tms9902_device : public device_t void cruwrite(offs_t offset, uint8_t data); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_start() override; virtual void device_reset() override; virtual void device_stop() override; diff --git a/src/devices/machine/tms9914.cpp b/src/devices/machine/tms9914.cpp index b8d7b05e4a47e..9d4b25dad891e 100644 --- a/src/devices/machine/tms9914.cpp +++ b/src/devices/machine/tms9914.cpp @@ -593,7 +593,7 @@ void tms9914_device::device_reset() update_ren(); } -void tms9914_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tms9914_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { LOG_NOISY("tmr %d\n" , id); update_fsm(); diff --git a/src/devices/machine/tms9914.h b/src/devices/machine/tms9914.h index 2c766f0dfc37f..a86be9c8d660f 100644 --- a/src/devices/machine/tms9914.h +++ b/src/devices/machine/tms9914.h @@ -94,7 +94,7 @@ class tms9914_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; devcb_read8 m_dio_read_func; devcb_write8 m_dio_write_func; diff --git a/src/devices/machine/upd1990a.cpp b/src/devices/machine/upd1990a.cpp index 6b14f95c12328..c76ce9d82dece 100644 --- a/src/devices/machine/upd1990a.cpp +++ b/src/devices/machine/upd1990a.cpp @@ -133,7 +133,7 @@ void upd1990a_device::rtc_clock_updated(int year, int month, int day, int day_of // device_timer - handler timer events //------------------------------------------------- -void upd1990a_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void upd1990a_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/upd1990a.h b/src/devices/machine/upd1990a.h index fbd26e6dfb48e..aef6f08246058 100644 --- a/src/devices/machine/upd1990a.h +++ b/src/devices/machine/upd1990a.h @@ -55,7 +55,7 @@ class upd1990a_device : public device_t, public device_rtc_interface upd1990a_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint32_t variant); virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rtc_interface overrides virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override; diff --git a/src/devices/machine/upd4992.cpp b/src/devices/machine/upd4992.cpp index 60a2eece92b5d..984329eb1582e 100644 --- a/src/devices/machine/upd4992.cpp +++ b/src/devices/machine/upd4992.cpp @@ -63,7 +63,7 @@ void upd4992_device::device_start() } -void upd4992_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void upd4992_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/upd4992.h b/src/devices/machine/upd4992.h index 7ceb831410b1a..ac7578bd36a75 100644 --- a/src/devices/machine/upd4992.h +++ b/src/devices/machine/upd4992.h @@ -34,7 +34,7 @@ class upd4992_device : public device_t, public device_rtc_interface // device-level overrides virtual void device_validity_check(validity_checker &valid) const override; virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override; private: diff --git a/src/devices/machine/upd7001.cpp b/src/devices/machine/upd7001.cpp index d4607e7a47977..2d675b4a76c6a 100644 --- a/src/devices/machine/upd7001.cpp +++ b/src/devices/machine/upd7001.cpp @@ -85,8 +85,8 @@ void upd7001_device::device_start() m_fck_rc = attotime::from_double(m_res * m_cap * 1.97); // initialize timers - m_conv_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(upd7001_device::conversion_done), this)); - m_scsk_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(upd7001_device::output_enabled), this)); + m_conv_timer = timer_alloc(*this, FUNC(upd7001_device::conversion_done)); + m_scsk_timer = timer_alloc(*this, FUNC(upd7001_device::output_enabled)); // save state save_item(NAME(m_cs_active)); diff --git a/src/devices/machine/upd7002.cpp b/src/devices/machine/upd7002.cpp index 2d4d2ad4bc64f..e3b4fd143fb18 100644 --- a/src/devices/machine/upd7002.cpp +++ b/src/devices/machine/upd7002.cpp @@ -72,7 +72,7 @@ READ_LINE_MEMBER( upd7002_device::eoc_r ) } -void upd7002_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void upd7002_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/machine/upd7002.h b/src/devices/machine/upd7002.h index 5f9e88928c70a..388da0008e2da 100644 --- a/src/devices/machine/upd7002.h +++ b/src/devices/machine/upd7002.h @@ -38,7 +38,7 @@ class upd7002_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // internal state diff --git a/src/devices/machine/upd7004.cpp b/src/devices/machine/upd7004.cpp index e3cfb9118640f..f5fa843d0c745 100644 --- a/src/devices/machine/upd7004.cpp +++ b/src/devices/machine/upd7004.cpp @@ -74,7 +74,7 @@ void upd7004_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void upd7004_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void upd7004_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (m_state) { diff --git a/src/devices/machine/upd7004.h b/src/devices/machine/upd7004.h index 11b311b60f243..af8a1d58c4a5a 100644 --- a/src/devices/machine/upd7004.h +++ b/src/devices/machine/upd7004.h @@ -49,7 +49,7 @@ class upd7004_device : public device_t // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // callbacks diff --git a/src/devices/machine/upd71071.cpp b/src/devices/machine/upd71071.cpp index de46ffe53c531..f5a4735a6b296 100644 --- a/src/devices/machine/upd71071.cpp +++ b/src/devices/machine/upd71071.cpp @@ -117,7 +117,7 @@ void upd71071_device::device_start() m_dma_write_cb.resolve_all_safe(); m_out_dack_cb.resolve_all_safe(); for (auto &elem : m_timer) - elem = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(upd71071_device::dma_transfer_timer), this)); + elem = timer_alloc(*this, FUNC(upd71071_device::dma_transfer_timer)); m_selected_channel = 0; m_reg.device_control = 0; diff --git a/src/devices/machine/upd765.cpp b/src/devices/machine/upd765.cpp index 1ad53ec9ae08d..28cd72495044b 100644 --- a/src/devices/machine/upd765.cpp +++ b/src/devices/machine/upd765.cpp @@ -2485,7 +2485,7 @@ std::string upd765_family_device::ttsn() const return machine().time().to_string(); } -void upd765_family_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void upd765_family_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if(id == TIMER_DRIVE_READY_POLLING) { run_drive_ready_polling(); diff --git a/src/devices/machine/upd765.h b/src/devices/machine/upd765.h index 0ba8aa6d1c7fb..83009a80811bf 100644 --- a/src/devices/machine/upd765.h +++ b/src/devices/machine/upd765.h @@ -64,7 +64,7 @@ class upd765_family_device : public device_t { virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; enum { TIMER_DRIVE_READY_POLLING = 4 diff --git a/src/devices/machine/v3021.cpp b/src/devices/machine/v3021.cpp index 559a617340a34..e64e7c81111cc 100644 --- a/src/devices/machine/v3021.cpp +++ b/src/devices/machine/v3021.cpp @@ -153,7 +153,7 @@ void v3021_device::device_validity_check(validity_checker &valid) const void v3021_device::device_start() { /* let's call the timer callback every second */ - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(v3021_device::timer_callback), this)); + m_timer = timer_alloc(*this, FUNC(v3021_device::timer_callback)); m_timer->adjust(attotime::from_hz(clock() / XTAL(32'768)), 0, attotime::from_hz(clock() / XTAL(32'768))); copy_clock_to_ram(); diff --git a/src/devices/machine/vic_pl192.cpp b/src/devices/machine/vic_pl192.cpp index 5c37d03abee0d..bcbcd77a3449a 100644 --- a/src/devices/machine/vic_pl192.cpp +++ b/src/devices/machine/vic_pl192.cpp @@ -12,7 +12,7 @@ #define VERBOSE (LOG_GENERAL) #include "logmacro.h" -void vic_pl192_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void vic_pl192_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if(u32 intrs = (raw_intr | soft_intr) & intr_en) { diff --git a/src/devices/machine/vic_pl192.h b/src/devices/machine/vic_pl192.h index 9936b369fb686..5c66f41f633c3 100644 --- a/src/devices/machine/vic_pl192.h +++ b/src/devices/machine/vic_pl192.h @@ -26,7 +26,7 @@ class vic_pl192_device : public device_t, public device_memory_interface virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual space_config_vector memory_space_config() const override; diff --git a/src/devices/machine/vrc4373.cpp b/src/devices/machine/vrc4373.cpp index d0dbb96e55a04..5d5f84d5f3f86 100644 --- a/src/devices/machine/vrc4373.cpp +++ b/src/devices/machine/vrc4373.cpp @@ -151,7 +151,7 @@ void vrc4373_device::device_start() m_cpu->add_fastram(0x1fc00000, 0x1fcfffff, true, m_romRegion->base()); // DMA timer - m_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vrc4373_device::dma_transfer), this)); + m_dma_timer = timer_alloc(*this, FUNC(vrc4373_device::dma_transfer)); // Leave the timer disabled. m_dma_timer->adjust(attotime::never, 0, DMA_TIMER_PERIOD); diff --git a/src/devices/machine/vrc5074.cpp b/src/devices/machine/vrc5074.cpp index a2e1c0ea061fb..dc6ef41e8cb0f 100644 --- a/src/devices/machine/vrc5074.cpp +++ b/src/devices/machine/vrc5074.cpp @@ -230,14 +230,14 @@ void vrc5074_device::device_start() m_cpu->add_fastram(0x1fc00000, 0x1fcfffff, true, m_romRegion->base()); // DMA timer - m_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vrc5074_device::dma_transfer), this)); + m_dma_timer = timer_alloc(*this, FUNC(vrc5074_device::dma_transfer)); // Leave the timer disabled. m_dma_timer->adjust(attotime::never, 0, DMA_TIMER_PERIOD); /* allocate timers for the NILE */ - m_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate()); - m_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate()); - m_timer[2] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vrc5074_device::nile_timer_callback), this)); - m_timer[3] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vrc5074_device::nile_timer_callback), this)); + m_timer[0] = timer_alloc(); + m_timer[1] = timer_alloc(); + m_timer[2] = timer_alloc(*this, FUNC(vrc5074_device::nile_timer_callback)); + m_timer[3] = timer_alloc(*this, FUNC(vrc5074_device::nile_timer_callback)); // Save states // m_sdram diff --git a/src/devices/machine/vrender0.cpp b/src/devices/machine/vrender0.cpp index c97a40a5736ed..18600936368ce 100644 --- a/src/devices/machine/vrender0.cpp +++ b/src/devices/machine/vrender0.cpp @@ -165,7 +165,7 @@ void vrender0soc_device::device_start() fatalerror("%s: bus clock not setup properly",this->tag()); for (int i = 0; i < 4; i++) - m_Timer[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vrender0soc_device::Timercb),this), (void*)(uintptr_t)i); + m_Timer[i] = timer_alloc(*this, FUNC(vrender0soc_device::Timercb), (void*)(uintptr_t)i); write_tx.resolve_all_safe(); diff --git a/src/devices/machine/watchdog.cpp b/src/devices/machine/watchdog.cpp index 7829709abff61..6145c1e985136 100644 --- a/src/devices/machine/watchdog.cpp +++ b/src/devices/machine/watchdog.cpp @@ -90,7 +90,7 @@ void watchdog_timer_device::device_reset() // device_timer - handle timer expiration events //------------------------------------------------- -void watchdog_timer_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void watchdog_timer_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { watchdog_fired(); } diff --git a/src/devices/machine/watchdog.h b/src/devices/machine/watchdog.h index 0c93a62ac0147..ba3e776760c5b 100644 --- a/src/devices/machine/watchdog.h +++ b/src/devices/machine/watchdog.h @@ -42,7 +42,7 @@ class watchdog_timer_device : public device_t virtual void device_validity_check(validity_checker &valid) const override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // internal helpers diff --git a/src/devices/machine/wd1000.cpp b/src/devices/machine/wd1000.cpp index f8c879ef20e0e..5344aabef3ee8 100644 --- a/src/devices/machine/wd1000.cpp +++ b/src/devices/machine/wd1000.cpp @@ -114,7 +114,7 @@ void wd1000_device::device_reset() // device_timer - device-specific timer //------------------------------------------------- -void wd1000_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void wd1000_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { switch (tid) { diff --git a/src/devices/machine/wd1000.h b/src/devices/machine/wd1000.h index ac2219e8425be..6d5e6599ab295 100644 --- a/src/devices/machine/wd1000.h +++ b/src/devices/machine/wd1000.h @@ -45,7 +45,7 @@ class wd1000_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum diff --git a/src/devices/machine/wd1010.cpp b/src/devices/machine/wd1010.cpp index 4c77c88b215a5..6190191189d28 100644 --- a/src/devices/machine/wd1010.cpp +++ b/src/devices/machine/wd1010.cpp @@ -127,7 +127,7 @@ void wd1010_device::device_reset() // device_timer - device-specific timer //------------------------------------------------- -void wd1010_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void wd1010_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { switch (tid) { diff --git a/src/devices/machine/wd1010.h b/src/devices/machine/wd1010.h index 81607536f34f1..54eaf21759202 100644 --- a/src/devices/machine/wd1010.h +++ b/src/devices/machine/wd1010.h @@ -54,7 +54,7 @@ class wd1010_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum diff --git a/src/devices/machine/wd2010.cpp b/src/devices/machine/wd2010.cpp index 486d22b47f0f1..60102aebb980a 100644 --- a/src/devices/machine/wd2010.cpp +++ b/src/devices/machine/wd2010.cpp @@ -875,7 +875,7 @@ void wd2010_device::buffer_ready(bool state) } -void wd2010_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void wd2010_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { switch (tid) { diff --git a/src/devices/machine/wd2010.h b/src/devices/machine/wd2010.h index 1617f886ed6a8..9dbac6b8aaedd 100644 --- a/src/devices/machine/wd2010.h +++ b/src/devices/machine/wd2010.h @@ -50,7 +50,7 @@ class wd2010_device : public device_t virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void compute_correction(uint8_t data); diff --git a/src/devices/machine/wd33c9x.cpp b/src/devices/machine/wd33c9x.cpp index 89d89e3005117..43379722e2872 100644 --- a/src/devices/machine/wd33c9x.cpp +++ b/src/devices/machine/wd33c9x.cpp @@ -446,7 +446,7 @@ void wd33c9x_base_device::device_reset() // device_timer - device-specific timer handler //------------------------------------------------- -void wd33c9x_base_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void wd33c9x_base_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { step(true); } diff --git a/src/devices/machine/wd33c9x.h b/src/devices/machine/wd33c9x.h index bdfb84fe8d9b8..8f31bf4852e8d 100644 --- a/src/devices/machine/wd33c9x.h +++ b/src/devices/machine/wd33c9x.h @@ -43,7 +43,7 @@ class wd33c9x_base_device : public nscsi_device, public nscsi_slot_card_interfac virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void scsi_ctrl_changed() override; diff --git a/src/devices/machine/wd_fdc.cpp b/src/devices/machine/wd_fdc.cpp index 056faa5cdf5dd..14bd56a401869 100644 --- a/src/devices/machine/wd_fdc.cpp +++ b/src/devices/machine/wd_fdc.cpp @@ -258,7 +258,7 @@ WRITE_LINE_MEMBER(wd_fdc_device_base::dden_w) } } -void wd_fdc_device_base::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void wd_fdc_device_base::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { LOGEVENT("Event fired for timer %s\n", (id==TM_GEN)? "TM_GEN" : (id==TM_CMD)? "TM_CMD" : (id==TM_TRACK)? "TM_TRACK" : "TM_SECTOR"); live_sync(); diff --git a/src/devices/machine/wd_fdc.h b/src/devices/machine/wd_fdc.h index d681abd2d0376..c9c59a228f9d0 100644 --- a/src/devices/machine/wd_fdc.h +++ b/src/devices/machine/wd_fdc.h @@ -118,7 +118,7 @@ class wd_fdc_device_base : public device_t { virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual int calc_sector_size(uint8_t size, uint8_t command) const; virtual int settle_time() const; diff --git a/src/devices/machine/wozfdc.cpp b/src/devices/machine/wozfdc.cpp index 0c316a4c10816..828ec7fd26523 100644 --- a/src/devices/machine/wozfdc.cpp +++ b/src/devices/machine/wozfdc.cpp @@ -178,7 +178,7 @@ void appleiii_fdc_device::device_reset() enable1 = 1; } -void wozfdc_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void wozfdc_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if(active) lss_sync(); diff --git a/src/devices/machine/wozfdc.h b/src/devices/machine/wozfdc.h index 6c7a438be1786..ab8fed8d5031c 100644 --- a/src/devices/machine/wozfdc.h +++ b/src/devices/machine/wozfdc.h @@ -39,7 +39,7 @@ class wozfdc_device: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void control(int offset); void set_phase(uint8_t data); diff --git a/src/devices/machine/ym2148.cpp b/src/devices/machine/ym2148.cpp index 04a3e53e97e3b..7487c3d98395b 100644 --- a/src/devices/machine/ym2148.cpp +++ b/src/devices/machine/ym2148.cpp @@ -136,7 +136,7 @@ void ym2148_device::update_irq() } -void ym2148_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ym2148_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { receive_clock(); transmit_clock(); diff --git a/src/devices/machine/ym2148.h b/src/devices/machine/ym2148.h index 3cb13bf205895..f0f5f212817a7 100644 --- a/src/devices/machine/ym2148.h +++ b/src/devices/machine/ym2148.h @@ -40,7 +40,7 @@ class ym2148_device : public device_t, public device_serial_interface protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: devcb_write_line m_txd_handler; diff --git a/src/devices/machine/ym3802.cpp b/src/devices/machine/ym3802.cpp index 3f0e8080ba752..7e7dc8cc9fa29 100644 --- a/src/devices/machine/ym3802.cpp +++ b/src/devices/machine/ym3802.cpp @@ -54,7 +54,7 @@ void ym3802_device::device_reset() set_comms_mode(); } -void ym3802_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ym3802_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // TODO: support clock and timers switch(id) diff --git a/src/devices/machine/ym3802.h b/src/devices/machine/ym3802.h index 68cdf4d535d51..4ae51248b88e3 100644 --- a/src/devices/machine/ym3802.h +++ b/src/devices/machine/ym3802.h @@ -41,7 +41,7 @@ class ym3802_device : public device_t, public device_serial_interface protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum diff --git a/src/devices/machine/z8038.cpp b/src/devices/machine/z8038.cpp index b5c375b408e9b..202decf92a951 100644 --- a/src/devices/machine/z8038.cpp +++ b/src/devices/machine/z8038.cpp @@ -91,7 +91,7 @@ void z8038_device::device_start() //save_item(NAME(m_fifo)); - m_int_check = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(z8038_device::int_check), this)); + m_int_check = timer_alloc(*this, FUNC(z8038_device::int_check)); // suppress startup interrupt line changes m_port[0].int_asserted = false; diff --git a/src/devices/machine/z80ctc.cpp b/src/devices/machine/z80ctc.cpp index c3004b1fade85..17ed606d085d9 100644 --- a/src/devices/machine/z80ctc.cpp +++ b/src/devices/machine/z80ctc.cpp @@ -307,7 +307,7 @@ z80ctc_channel_device::z80ctc_channel_device(const machine_config &mconfig, cons void z80ctc_channel_device::device_start() { // initialize state - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(z80ctc_channel_device::timer_callback), this)); + m_timer = timer_alloc(*this, FUNC(z80ctc_channel_device::timer_callback)); // register for save states save_item(NAME(m_mode)); diff --git a/src/devices/machine/z80dma.cpp b/src/devices/machine/z80dma.cpp index 1a347cc2f249a..2d8f3aca18bf7 100644 --- a/src/devices/machine/z80dma.cpp +++ b/src/devices/machine/z80dma.cpp @@ -181,7 +181,8 @@ void z80dma_device::device_start() m_out_iorq_cb.resolve_safe(); // allocate timer - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(z80dma_device::timerproc), this)); + m_timer = timer_alloc(*this, FUNC(z80dma_device::timerproc)); + m_rdy_write_callback.init(*this, FUNC(z80dma_device::rdy_write_callback)); // register for state saving save_item(NAME(m_regs)); @@ -866,7 +867,7 @@ TIMER_CALLBACK_MEMBER(z80dma_device::rdy_write_callback) WRITE_LINE_MEMBER(z80dma_device::rdy_w) { LOG("Z80DMA RDY: %d Active High: %d\n", state, READY_ACTIVE_HIGH); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(z80dma_device::rdy_write_callback),this), state); + m_rdy_write_callback.synchronize(state); } diff --git a/src/devices/machine/z80dma.h b/src/devices/machine/z80dma.h index 14725329bd09a..c59fa6496614d 100644 --- a/src/devices/machine/z80dma.h +++ b/src/devices/machine/z80dma.h @@ -92,6 +92,7 @@ class z80dma_device : public device_t, void update_status(); TIMER_CALLBACK_MEMBER(rdy_write_callback); + transient_timer_factory m_rdy_write_callback; // internal state devcb_write_line m_out_busreq_cb; diff --git a/src/devices/machine/z80scc.cpp b/src/devices/machine/z80scc.cpp index 1a1dc0a3eda9f..0f0bdd1d9d76d 100644 --- a/src/devices/machine/z80scc.cpp +++ b/src/devices/machine/z80scc.cpp @@ -1185,7 +1185,7 @@ void z80scc_channel::device_reset() m_extint_states = m_rr0; } -void z80scc_channel::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void z80scc_channel::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // LOG("%s %d\n", FUNCNAME, id); @@ -1199,7 +1199,7 @@ void z80scc_channel::device_timer(emu_timer &timer, device_timer_id id, int para { // int rate = owner()->clock() / brconst; // attotime attorate = attotime::from_hz(rate); - // timer.adjust(attorate, id, attorate); + // baudtimer->adjust(attorate, id, attorate); txc_w(m_brg_counter & 1); rxc_w(m_brg_counter & 1); m_brg_counter++; // Will just keep track of state in timer mode, not hardware counter value. @@ -1207,7 +1207,7 @@ void z80scc_channel::device_timer(emu_timer &timer, device_timer_id id, int para else { LOG(" - turning off Baudrate timer\n"); - timer.adjust(attotime::never, 0, attotime::never); + baudtimer->adjust(attotime::never, 0, attotime::never); } } break; diff --git a/src/devices/machine/z80scc.h b/src/devices/machine/z80scc.h index 18d6ffffc5520..735df7e7825cc 100644 --- a/src/devices/machine/z80scc.h +++ b/src/devices/machine/z80scc.h @@ -64,7 +64,7 @@ class z80scc_channel : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_serial_interface overrides virtual void tra_callback() override; diff --git a/src/devices/machine/z80sio.cpp b/src/devices/machine/z80sio.cpp index 5095dd4cb9b59..bc6f44404afa9 100644 --- a/src/devices/machine/z80sio.cpp +++ b/src/devices/machine/z80sio.cpp @@ -1087,7 +1087,7 @@ void mk68564_channel::device_start() { z80sio_channel::device_start(); - m_brg_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mk68564_channel::brg_timeout), this)); + m_brg_timer = timer_alloc(*this, FUNC(mk68564_channel::brg_timeout)); save_item(NAME(m_tx_auto_enable)); save_item(NAME(m_brg_tc)); diff --git a/src/devices/machine/z80sti.cpp b/src/devices/machine/z80sti.cpp index 22d03323aa9b6..04b7e0caba0e0 100644 --- a/src/devices/machine/z80sti.cpp +++ b/src/devices/machine/z80sti.cpp @@ -179,7 +179,7 @@ void z80sti_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void z80sti_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void z80sti_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { timer_count(id); } diff --git a/src/devices/machine/z80sti.h b/src/devices/machine/z80sti.h index 24c23964f3dde..c5f9ac874eb57 100644 --- a/src/devices/machine/z80sti.h +++ b/src/devices/machine/z80sti.h @@ -148,7 +148,7 @@ class z80sti_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_serial_interface overrides virtual void tra_callback() override; diff --git a/src/devices/machine/z8536.cpp b/src/devices/machine/z8536.cpp index 6d4fe6825c523..4545fde20d2da 100644 --- a/src/devices/machine/z8536.cpp +++ b/src/devices/machine/z8536.cpp @@ -888,7 +888,7 @@ void z8536_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void cio_base_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cio_base_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (counter_enabled(TIMER_1) && !counter_external_count(TIMER_1)) { diff --git a/src/devices/machine/z8536.h b/src/devices/machine/z8536.h index e307ea0906903..3ae054b7f1b5d 100644 --- a/src/devices/machine/z8536.h +++ b/src/devices/machine/z8536.h @@ -109,7 +109,7 @@ class cio_base_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; bool is_reset() const { return (m_register[MASTER_INTERRUPT_CONTROL] & MICR_RESET) != 0; } diff --git a/src/devices/sound/ad1848.cpp b/src/devices/sound/ad1848.cpp index b9fec7e6125d6..3477ef436864d 100644 --- a/src/devices/sound/ad1848.cpp +++ b/src/devices/sound/ad1848.cpp @@ -156,7 +156,7 @@ void ad1848_device::dack_w(uint8_t data) m_drq_cb(CLEAR_LINE); } -void ad1848_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ad1848_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if(!m_play) return; diff --git a/src/devices/sound/ad1848.h b/src/devices/sound/ad1848.h index 2b98691befaac..f534b6f777e20 100644 --- a/src/devices/sound/ad1848.h +++ b/src/devices/sound/ad1848.h @@ -24,7 +24,7 @@ class ad1848_device : public device_t protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/sound/aica.cpp b/src/devices/sound/aica.cpp index 21d5fa081d067..4f1d127762d13 100644 --- a/src/devices/sound/aica.cpp +++ b/src/devices/sound/aica.cpp @@ -437,9 +437,9 @@ void aica_device::Init() space().specific(m_DSP.space); space().cache(m_DSP.cache); - m_timerA = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(aica_device::timerA_cb), this)); - m_timerB = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(aica_device::timerB_cb), this)); - m_timerC = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(aica_device::timerC_cb), this)); + m_timerA = timer_alloc(*this, FUNC(aica_device::timerA_cb)); + m_timerB = timer_alloc(*this, FUNC(aica_device::timerB_cb)); + m_timerC = timer_alloc(*this, FUNC(aica_device::timerC_cb)); for (i = 0; i < 0x400; ++i) { diff --git a/src/devices/sound/asc.cpp b/src/devices/sound/asc.cpp index 23ec35a27663a..375bb12c2da0a 100644 --- a/src/devices/sound/asc.cpp +++ b/src/devices/sound/asc.cpp @@ -107,7 +107,7 @@ void asc_device::device_reset() // device_timer - called when our device timer expires //------------------------------------------------- -void asc_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void asc_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { m_stream->update(); } diff --git a/src/devices/sound/asc.h b/src/devices/sound/asc.h index 9848646e2bbf8..04c062236335a 100644 --- a/src/devices/sound/asc.h +++ b/src/devices/sound/asc.h @@ -76,7 +76,7 @@ class asc_device : public device_t, public device_sound_interface // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/devices/sound/bsmt2000.cpp b/src/devices/sound/bsmt2000.cpp index 093926610799f..4bff0b0ca5a0f 100644 --- a/src/devices/sound/bsmt2000.cpp +++ b/src/devices/sound/bsmt2000.cpp @@ -145,7 +145,7 @@ void bsmt2000_device::device_reset() // resets as a timer callback //------------------------------------------------- -void bsmt2000_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void bsmt2000_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/sound/bsmt2000.h b/src/devices/sound/bsmt2000.h index 289457cffd9f2..1c7fe9d8ea3c5 100644 --- a/src/devices/sound/bsmt2000.h +++ b/src/devices/sound/bsmt2000.h @@ -50,7 +50,7 @@ class bsmt2000_device : public device_t, virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_sound_interface overrides virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/devices/sound/c140.cpp b/src/devices/sound/c140.cpp index b04a35a0f3129..ac967cac57b1d 100644 --- a/src/devices/sound/c140.cpp +++ b/src/devices/sound/c140.cpp @@ -117,7 +117,7 @@ void c140_device::device_start() m_sample_rate = m_baserate = clock(); m_int1_callback.resolve_safe(); - m_int1_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(c140_device::int1_on), this)); + m_int1_timer = timer_alloc(*this, FUNC(c140_device::int1_on)); m_stream = stream_alloc(0, 2, m_sample_rate); diff --git a/src/devices/sound/cdp1864.cpp b/src/devices/sound/cdp1864.cpp index 7f3811bf09b09..d13db44e78960 100644 --- a/src/devices/sound/cdp1864.cpp +++ b/src/devices/sound/cdp1864.cpp @@ -166,7 +166,7 @@ void cdp1864_device::device_reset() // device_timer - handle timer events //------------------------------------------------- -void cdp1864_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cdp1864_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { int scanline = screen().vpos(); diff --git a/src/devices/sound/cdp1864.h b/src/devices/sound/cdp1864.h index 589867997ddb7..4080f1d5259b5 100644 --- a/src/devices/sound/cdp1864.h +++ b/src/devices/sound/cdp1864.h @@ -112,7 +112,7 @@ class cdp1864_device : public device_t, virtual void device_config_complete() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // internal callbacks virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/devices/sound/cdp1869.cpp b/src/devices/sound/cdp1869.cpp index 9e28aa4c048ed..7fd3bebefb5e9 100644 --- a/src/devices/sound/cdp1869.cpp +++ b/src/devices/sound/cdp1869.cpp @@ -459,7 +459,7 @@ void cdp1869_device::device_post_load() // device_timer - handler timer events //------------------------------------------------- -void cdp1869_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cdp1869_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_write_prd(param); m_prd = param; diff --git a/src/devices/sound/cdp1869.h b/src/devices/sound/cdp1869.h index dc9c1501ea059..30ba34c551ef9 100644 --- a/src/devices/sound/cdp1869.h +++ b/src/devices/sound/cdp1869.h @@ -210,7 +210,7 @@ class cdp1869_device : public device_t, virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_post_load() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_memory_interface overrides virtual space_config_vector memory_space_config() const override; diff --git a/src/devices/sound/dave.cpp b/src/devices/sound/dave.cpp index b7f1487c025b9..342fe203e3510 100644 --- a/src/devices/sound/dave.cpp +++ b/src/devices/sound/dave.cpp @@ -149,7 +149,7 @@ void dave_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void dave_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void dave_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/sound/dave.h b/src/devices/sound/dave.h index 7d2da12065853..50c0a4680ea6e 100644 --- a/src/devices/sound/dave.h +++ b/src/devices/sound/dave.h @@ -41,7 +41,7 @@ class dave_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_memory_interface overrides virtual space_config_vector memory_space_config() const override; diff --git a/src/devices/sound/es1373.cpp b/src/devices/sound/es1373.cpp index 1c707599188d3..5087d26d37c58 100644 --- a/src/devices/sound/es1373.cpp +++ b/src/devices/sound/es1373.cpp @@ -224,7 +224,7 @@ void es1373_device::map_extra(uint64_t memory_window_start, uint64_t memory_wind //------------------------------------------------- // device_timer - called when our device timer expires //------------------------------------------------- -void es1373_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void es1373_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { m_stream->update(); } diff --git a/src/devices/sound/es1373.h b/src/devices/sound/es1373.h index 6e3cddb8a42b2..d608801a116e0 100644 --- a/src/devices/sound/es1373.h +++ b/src/devices/sound/es1373.h @@ -26,7 +26,7 @@ class es1373_device : public pci_device, public device_sound_interface virtual void device_start() override; virtual void device_stop() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; virtual void device_post_load() override; virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/devices/sound/es5503.cpp b/src/devices/sound/es5503.cpp index 576e779c93bc7..1bade0b4bd5e4 100644 --- a/src/devices/sound/es5503.cpp +++ b/src/devices/sound/es5503.cpp @@ -69,7 +69,7 @@ es5503_device::es5503_device(const machine_config &mconfig, const char *tag, dev // device_timer - called when our device timer expires //------------------------------------------------- -void es5503_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void es5503_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { m_stream->update(); } diff --git a/src/devices/sound/es5503.h b/src/devices/sound/es5503.h index 2fd316aad8e77..5fe6ab882de93 100644 --- a/src/devices/sound/es5503.h +++ b/src/devices/sound/es5503.h @@ -33,7 +33,7 @@ class es5503_device : public device_t, virtual void device_start() override; virtual void device_clock_changed() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) override; // device_sound_interface overrides virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/devices/sound/gb.cpp b/src/devices/sound/gb.cpp index 2fc1c81e5b0c7..58abcfecf1530 100644 --- a/src/devices/sound/gb.cpp +++ b/src/devices/sound/gb.cpp @@ -143,7 +143,7 @@ cgb04_apu_device::cgb04_apu_device(const machine_config &mconfig, const char *ta void gameboy_sound_device::device_start() { m_channel = stream_alloc(0, 2, SAMPLE_RATE_OUTPUT_ADAPTIVE); - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gameboy_sound_device::timer_callback),this)); + m_timer = timer_alloc(*this, FUNC(gameboy_sound_device::timer_callback)); m_timer->adjust(clocks_to_attotime(FRAME_CYCLES/128), 0, clocks_to_attotime(FRAME_CYCLES/128)); save_item(NAME(m_last_updated)); diff --git a/src/devices/sound/huc6230.cpp b/src/devices/sound/huc6230.cpp index 31e143fea8c0a..cbf09cb9a9b9c 100644 --- a/src/devices/sound/huc6230.cpp +++ b/src/devices/sound/huc6230.cpp @@ -176,7 +176,7 @@ void huc6230_device::device_start() m_vca_cb.resolve_safe(); m_stream = stream_alloc(2, 2, clock() / 6); - m_adpcm_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(huc6230_device::adpcm_timer),this)); + m_adpcm_timer = timer_alloc(*this, FUNC(huc6230_device::adpcm_timer)); for (int i = 0; i < 2; i++) { diff --git a/src/devices/sound/ics2115.cpp b/src/devices/sound/ics2115.cpp index 868bcb70bc40f..928c3f2a8fce9 100644 --- a/src/devices/sound/ics2115.cpp +++ b/src/devices/sound/ics2115.cpp @@ -61,8 +61,8 @@ void ics2115_device::device_start() space(0).cache(m_cache); - m_timer[0].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ics2115_device::timer_cb_0),this), this); - m_timer[1].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ics2115_device::timer_cb_1),this), this); + m_timer[0].timer = timer_alloc(*this, FUNC(ics2115_device::timer_cb_0)); + m_timer[1].timer = timer_alloc(*this, FUNC(ics2115_device::timer_cb_1)); m_stream = stream_alloc(0, 2, clock() / (32 * 32)); m_irq_cb.resolve_safe(); diff --git a/src/devices/sound/iopspu.cpp b/src/devices/sound/iopspu.cpp index 0267c31eadb6f..be0de6c2a4f4b 100644 --- a/src/devices/sound/iopspu.cpp +++ b/src/devices/sound/iopspu.cpp @@ -31,10 +31,10 @@ void iop_spu_device::device_start() m_ram = std::make_unique(2 * 1024 * 1024); // ? if (!m_core[0].m_autodma_done_timer_hack) - m_core[0].m_autodma_done_timer_hack = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(iop_spu_device::autodma_done_timer_hack), this), 0); + m_core[0].m_autodma_done_timer_hack = timer_alloc(*this, FUNC(iop_spu_device::autodma_done_timer_hack), 0); if (!m_core[1].m_autodma_done_timer_hack) - m_core[1].m_autodma_done_timer_hack = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(iop_spu_device::autodma_done_timer_hack), this), (void*)1); + m_core[1].m_autodma_done_timer_hack = timer_alloc(*this, FUNC(iop_spu_device::autodma_done_timer_hack), (void*)1); save_item(NAME(m_core[0].m_status)); save_item(NAME(m_core[0].m_start_port_addr)); diff --git a/src/devices/sound/k053260.cpp b/src/devices/sound/k053260.cpp index 7337b0c8b918a..873153eb3987c 100644 --- a/src/devices/sound/k053260.cpp +++ b/src/devices/sound/k053260.cpp @@ -164,7 +164,7 @@ void k053260_device::rom_bank_updated() } -void k053260_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void k053260_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(m_timer_state) { case 0: m_sh1_cb(ASSERT_LINE); break; diff --git a/src/devices/sound/k053260.h b/src/devices/sound/k053260.h index ad14244ceb967..2702160fd75e7 100644 --- a/src/devices/sound/k053260.h +++ b/src/devices/sound/k053260.h @@ -39,7 +39,7 @@ class k053260_device : public device_t, virtual void device_start() override; virtual void device_clock_changed() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // sound stream update overrides virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/devices/sound/k054539.cpp b/src/devices/sound/k054539.cpp index cba942e002f65..477714250455d 100644 --- a/src/devices/sound/k054539.cpp +++ b/src/devices/sound/k054539.cpp @@ -307,7 +307,7 @@ void k054539_device::sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/devices/sound/ks0164.cpp b/src/devices/sound/ks0164.cpp index 8fdcbf026ba86..f6ea3a433dd1d 100644 --- a/src/devices/sound/ks0164.cpp +++ b/src/devices/sound/ks0164.cpp @@ -98,7 +98,7 @@ void ks0164_device::device_reset() m_timer->adjust(attotime::from_msec(1), 0, attotime::from_msec(1)); } -void ks0164_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ks0164_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_timer_interrupt = true; if(m_irqen_76 & 0x40) diff --git a/src/devices/sound/ks0164.h b/src/devices/sound/ks0164.h index c82689f4ff1ce..6a605198d6b16 100644 --- a/src/devices/sound/ks0164.h +++ b/src/devices/sound/ks0164.h @@ -30,7 +30,7 @@ class ks0164_device : public device_t, public device_sound_interface, public dev virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; virtual void device_add_mconfig(machine_config &config) override; virtual space_config_vector memory_space_config() const override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void tra_callback() override; virtual void tra_complete() override; diff --git a/src/devices/sound/mea8000.cpp b/src/devices/sound/mea8000.cpp index 3cf2ad51a6eb7..e9d26dbad62ad 100644 --- a/src/devices/sound/mea8000.cpp +++ b/src/devices/sound/mea8000.cpp @@ -137,7 +137,7 @@ void mea8000_device::device_start() m_stream = stream_alloc(0, 1, clock() / 60); save_item(NAME(m_output)); - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mea8000_device::timer_expire),this)); + m_timer = timer_alloc(*this, FUNC(mea8000_device::timer_expire)); save_item(NAME(m_state)); save_item(NAME(m_buf)); diff --git a/src/devices/sound/mm5837.cpp b/src/devices/sound/mm5837.cpp index 6049b64d0fea0..0229ca5dc23d2 100644 --- a/src/devices/sound/mm5837.cpp +++ b/src/devices/sound/mm5837.cpp @@ -73,7 +73,7 @@ void mm5837_device::device_reset() // device_timer - handle timer callbacks //------------------------------------------------- -void mm5837_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mm5837_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_output_cb(m_source.clock()); } diff --git a/src/devices/sound/mm5837.h b/src/devices/sound/mm5837.h index 49374537b9cf6..5122e07f544da 100644 --- a/src/devices/sound/mm5837.h +++ b/src/devices/sound/mm5837.h @@ -168,7 +168,7 @@ class mm5837_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // internal state diff --git a/src/devices/sound/mos6560.cpp b/src/devices/sound/mos6560.cpp index fadef01dd200f..3aae461218a08 100644 --- a/src/devices/sound/mos6560.cpp +++ b/src/devices/sound/mos6560.cpp @@ -865,7 +865,7 @@ void mos6560_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void mos6560_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mos6560_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/sound/mos6560.h b/src/devices/sound/mos6560.h index 182cba47dba7a..f509284850c49 100644 --- a/src/devices/sound/mos6560.h +++ b/src/devices/sound/mos6560.h @@ -121,7 +121,7 @@ class mos6560_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // sound stream update overrides virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/devices/sound/mos7360.cpp b/src/devices/sound/mos7360.cpp index aa9604b3a78a6..686dc2922fa43 100644 --- a/src/devices/sound/mos7360.cpp +++ b/src/devices/sound/mos7360.cpp @@ -419,7 +419,7 @@ void mos7360_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void mos7360_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mos7360_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/sound/mos7360.h b/src/devices/sound/mos7360.h index c8733dc3e4610..dd714c1e9848d 100644 --- a/src/devices/sound/mos7360.h +++ b/src/devices/sound/mos7360.h @@ -107,7 +107,7 @@ class mos7360_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_sound_interface callbacks virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/devices/sound/msm5205.cpp b/src/devices/sound/msm5205.cpp index 9e889503ed944..b4a978474df76 100644 --- a/src/devices/sound/msm5205.cpp +++ b/src/devices/sound/msm5205.cpp @@ -176,7 +176,7 @@ void msm5205_device::compute_tables() // fires //------------------------------------------------- -void msm5205_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void msm5205_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -382,7 +382,7 @@ void msm5205_device::sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/devices/sound/pokey.cpp b/src/devices/sound/pokey.cpp index f749afad2aee2..813467336635b 100644 --- a/src/devices/sound/pokey.cpp +++ b/src/devices/sound/pokey.cpp @@ -358,7 +358,7 @@ void pokey_device::device_clock_changed() // our sound stream //------------------------------------------------- -void pokey_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pokey_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/sound/pokey.h b/src/devices/sound/pokey.h index 0717429aff341..e3d299a44a4e6 100644 --- a/src/devices/sound/pokey.h +++ b/src/devices/sound/pokey.h @@ -190,7 +190,7 @@ class pokey_device : public device_t, virtual void device_reset() override; virtual void device_post_load() override; virtual void device_clock_changed() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_sound_interface overrides virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/devices/sound/qs1000.cpp b/src/devices/sound/qs1000.cpp index 23b0ee76a44fc..b66f470c41688 100644 --- a/src/devices/sound/qs1000.cpp +++ b/src/devices/sound/qs1000.cpp @@ -315,7 +315,7 @@ void qs1000_device::device_reset() // device_timer - handle deferred writes and // resets as a timer callback //------------------------------------------------- -void qs1000_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void qs1000_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { } diff --git a/src/devices/sound/qs1000.h b/src/devices/sound/qs1000.h index aad353962a511..21cbd1dfeb0af 100644 --- a/src/devices/sound/qs1000.h +++ b/src/devices/sound/qs1000.h @@ -70,7 +70,7 @@ class qs1000_device : public device_t, virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_sound_interface overrides virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/devices/sound/qsound.cpp b/src/devices/sound/qsound.cpp index 29b2661add535..fbae400440104 100644 --- a/src/devices/sound/qsound.cpp +++ b/src/devices/sound/qsound.cpp @@ -159,9 +159,7 @@ void qsound_device::qsound_w(offs_t offset, u8 data) break; case 2: m_dsp_ready = 0U; - machine().scheduler().synchronize( - timer_expired_delegate(FUNC(qsound_device::set_cmd), this), - (unsigned(data) << 16) | m_new_data); + m_set_cmd.synchronize((unsigned(data) << 16) | m_new_data); break; default: logerror("QSound: host write to unknown register %01X = %02X (%s)\n", offset, data, machine().describe_context()); @@ -209,6 +207,9 @@ void qsound_device::device_start() // hope we get good synchronisation between the DSP and the sound system m_stream = stream_alloc(0, 2, clock() / 2 / 1248); + m_set_dsp_ready.init(*this, FUNC(qsound_device::set_dsp_ready)); + m_set_cmd.init(*this, FUNC(qsound_device::set_cmd)); + // save DSP communication state save_item(NAME(m_rom_bank)); save_item(NAME(m_rom_offset)); @@ -349,7 +350,7 @@ u16 qsound_device::dsp_pio_r() { m_cmd_pending = 0U; m_dsp->set_input_line(DSP16_INT_LINE, CLEAR_LINE); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(qsound_device::set_dsp_ready), this)); + m_set_dsp_ready.synchronize(); return m_cmd_addr; } else diff --git a/src/devices/sound/qsound.h b/src/devices/sound/qsound.h index 6a9be5dfbc2ec..915d77c2b43f0 100644 --- a/src/devices/sound/qsound.h +++ b/src/devices/sound/qsound.h @@ -48,7 +48,9 @@ class qsound_device : public device_t, public device_sound_interface, public dev DECLARE_WRITE_LINE_MEMBER(dsp_ock_w); u16 dsp_pio_r(); void set_dsp_ready(void *ptr, s32 param); + transient_timer_factory m_set_dsp_ready; void set_cmd(void *ptr, s32 param); + transient_timer_factory m_set_cmd; // MAME resources required_device m_dsp; diff --git a/src/devices/sound/scsp.cpp b/src/devices/sound/scsp.cpp index b340da3d2372b..f7df68508ebbe 100644 --- a/src/devices/sound/scsp.cpp +++ b/src/devices/sound/scsp.cpp @@ -579,9 +579,9 @@ void scsp_device::init() m_MidiOutR = m_MidiOutW = 0; m_DSP.space = &this->space(); - m_timerA = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(scsp_device::timerA_cb), this)); - m_timerB = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(scsp_device::timerB_cb), this)); - m_timerC = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(scsp_device::timerC_cb), this)); + m_timerA = timer_alloc(*this, FUNC(scsp_device::timerA_cb)); + m_timerB = timer_alloc(*this, FUNC(scsp_device::timerB_cb)); + m_timerC = timer_alloc(*this, FUNC(scsp_device::timerC_cb)); for (i = 0; i < 0x400; ++i) { diff --git a/src/devices/sound/sn76496.cpp b/src/devices/sound/sn76496.cpp index eac04a2d99fc1..9b0e4a3353755 100644 --- a/src/devices/sound/sn76496.cpp +++ b/src/devices/sound/sn76496.cpp @@ -298,7 +298,7 @@ void sn76496_base_device::stereo_w(u8 data) else fatalerror("sn76496_base_device: Call to stereo write with mono chip!\n"); } -void sn76496_base_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sn76496_base_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_ready_state = true; m_ready_handler(ASSERT_LINE); diff --git a/src/devices/sound/sn76496.h b/src/devices/sound/sn76496.h index da6ec178f3eff..1a5e28d8f8aae 100644 --- a/src/devices/sound/sn76496.h +++ b/src/devices/sound/sn76496.h @@ -49,7 +49,7 @@ class sn76496_base_device : public device_t, public device_sound_interface private: inline bool in_noise_mode(); void register_for_save_states(); - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; bool m_ready_state; devcb_write_line m_ready_handler; diff --git a/src/devices/sound/sp0250.cpp b/src/devices/sound/sp0250.cpp index 862b3781a7c5a..a78d7ecf6a872 100644 --- a/src/devices/sound/sp0250.cpp +++ b/src/devices/sound/sp0250.cpp @@ -99,7 +99,7 @@ void sp0250_device::device_start() save_item(NAME(m_fifo_pos)); } -void sp0250_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sp0250_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_stream->update(); } diff --git a/src/devices/sound/sp0250.h b/src/devices/sound/sp0250.h index d51ab2286bdd0..c5861119aae4f 100644 --- a/src/devices/sound/sp0250.h +++ b/src/devices/sound/sp0250.h @@ -19,7 +19,7 @@ class sp0250_device : public device_t, public device_sound_interface protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // sound stream update overrides virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/devices/sound/sp0256.cpp b/src/devices/sound/sp0256.cpp index 5188d3bc31f8d..0d0a4b9047e30 100644 --- a/src/devices/sound/sp0256.cpp +++ b/src/devices/sound/sp0256.cpp @@ -106,7 +106,7 @@ void sp0256_device::device_start() // TODO: because of this, check if the bitrev functions are even used anywhere else // bitrevbuff(m_rom, 0, 0xffff); - m_lrq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sp0256_device::set_lrq_timer_proc),this)); + m_lrq_timer = timer_alloc(*this, FUNC(sp0256_device::set_lrq_timer_proc)); // save device variables save_item(NAME(m_sby_line)); diff --git a/src/devices/sound/tms5110.cpp b/src/devices/sound/tms5110.cpp index 14bb55233223e..3f9627fc05710 100644 --- a/src/devices/sound/tms5110.cpp +++ b/src/devices/sound/tms5110.cpp @@ -1193,7 +1193,7 @@ uint8_t m58817_device::status_r() ******************************************************************************/ -void tms5110_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tms5110_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_romclk_hack_state = !m_romclk_hack_state; } @@ -1322,7 +1322,7 @@ void tmsprom_device::update_prom_cnt() m_prom_cnt &= 0x0f; } -void tmsprom_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tmsprom_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { /* only 16 bytes needed ... The original dump is bad. This * is what is needed to get speech to work. The prom data has diff --git a/src/devices/sound/tms5110.h b/src/devices/sound/tms5110.h index e3bb2078075b1..d208b2eb13327 100644 --- a/src/devices/sound/tms5110.h +++ b/src/devices/sound/tms5110.h @@ -57,7 +57,7 @@ class tms5110_device : public device_t, public device_sound_interface virtual void device_reset() override; virtual void device_clock_changed() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // sound stream update overrides virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; @@ -285,7 +285,7 @@ class tmsprom_device : public device_t // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void register_for_save_states(); diff --git a/src/devices/sound/tms5220.cpp b/src/devices/sound/tms5220.cpp index 05c5c3464df23..d1a0b3be8a476 100644 --- a/src/devices/sound/tms5220.cpp +++ b/src/devices/sound/tms5220.cpp @@ -1733,7 +1733,7 @@ void tms5220_device::device_reset() ***********************************************************************************************/ -void tms5220_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tms5220_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/sound/tms5220.h b/src/devices/sound/tms5220.h index 5c45a685e2108..e423b211282cc 100644 --- a/src/devices/sound/tms5220.h +++ b/src/devices/sound/tms5220.h @@ -72,7 +72,7 @@ class tms5220_device : public device_t, public device_sound_interface virtual void device_reset() override; virtual void device_clock_changed() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // sound stream update overrides virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/devices/sound/upd1771.cpp b/src/devices/sound/upd1771.cpp index 2ec1d767ba0f4..5fd3af2cfafec 100644 --- a/src/devices/sound/upd1771.cpp +++ b/src/devices/sound/upd1771.cpp @@ -253,7 +253,7 @@ void upd1771c_device::device_start() /* resolve callbacks */ m_ack_handler.resolve_safe(); - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(upd1771c_device::ack_callback),this)); + m_timer = timer_alloc(*this, FUNC(upd1771c_device::ack_callback)); m_channel = stream_alloc(0, 1, clock() / 4); diff --git a/src/devices/sound/upd7759.cpp b/src/devices/sound/upd7759.cpp index fc07c0f95abcd..c1ae6b10d1f85 100644 --- a/src/devices/sound/upd7759.cpp +++ b/src/devices/sound/upd7759.cpp @@ -593,7 +593,7 @@ void upd775x_device::advance_state() *************************************************************/ -void upd7759_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void upd7759_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { uint8_t olddrq = m_drq; diff --git a/src/devices/sound/upd7759.h b/src/devices/sound/upd7759.h index ab1ff98e3a2d3..3487f980d7a21 100644 --- a/src/devices/sound/upd7759.h +++ b/src/devices/sound/upd7759.h @@ -131,7 +131,7 @@ class upd7759_device : public upd775x_device virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; devcb_write_line m_drqcallback; emu_timer *m_timer; diff --git a/src/devices/sound/votrax.cpp b/src/devices/sound/votrax.cpp index 2c262ad3c42b6..61a6d1c761bf3 100644 --- a/src/devices/sound/votrax.cpp +++ b/src/devices/sound/votrax.cpp @@ -334,7 +334,7 @@ void votrax_sc01_device::device_clock_changed() // device_timer - handle device timer //------------------------------------------------- -void votrax_sc01_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void votrax_sc01_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_stream->update(); diff --git a/src/devices/sound/votrax.h b/src/devices/sound/votrax.h index 19d98ca1da71e..803333a640048 100644 --- a/src/devices/sound/votrax.h +++ b/src/devices/sound/votrax.h @@ -34,7 +34,7 @@ class votrax_sc01_device : public device_t, virtual void device_start() override; virtual void device_reset() override; virtual void device_clock_changed() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_sound_interface overrides virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/devices/sound/ym2154.cpp b/src/devices/sound/ym2154.cpp index 83613506833da..18b03431de64a 100644 --- a/src/devices/sound/ym2154.cpp +++ b/src/devices/sound/ym2154.cpp @@ -240,7 +240,7 @@ void ym2154_device::device_clock_changed() // sound_stream_update - generate sound data //------------------------------------------------- -void ym2154_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ym2154_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { update_irq_state(1); m_timer->adjust((2048 - m_timer_count) * attotime::from_hz(sample_rate())); diff --git a/src/devices/sound/ym2154.h b/src/devices/sound/ym2154.h index 58976f0177bc1..bb5d39fdb5122 100644 --- a/src/devices/sound/ym2154.h +++ b/src/devices/sound/ym2154.h @@ -37,7 +37,7 @@ class ym2154_device : public device_t, public device_sound_interface, public dev virtual void device_start() override; virtual void device_reset() override; virtual void device_clock_changed() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // sound overrides virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/devices/sound/ymf271.cpp b/src/devices/sound/ymf271.cpp index a473705b06505..0231d96516ca1 100644 --- a/src/devices/sound/ymf271.cpp +++ b/src/devices/sound/ymf271.cpp @@ -1309,7 +1309,7 @@ void ymf271_device::ymf271_write_pcm(uint8_t address, uint8_t data) } } -void ymf271_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ymf271_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/sound/ymf271.h b/src/devices/sound/ymf271.h index 1c628f34cf101..bb1778d525c85 100644 --- a/src/devices/sound/ymf271.h +++ b/src/devices/sound/ymf271.h @@ -24,7 +24,7 @@ class ymf271_device : public device_t, public device_sound_interface, public dev // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_clock_changed() override; // sound stream update overrides diff --git a/src/devices/sound/ymfm_mame.h b/src/devices/sound/ymfm_mame.h index d55be4f35f2c9..a2d1f2572151c 100644 --- a/src/devices/sound/ymfm_mame.h +++ b/src/devices/sound/ymfm_mame.h @@ -33,7 +33,6 @@ class ym_generic_device : public device_t, public device_sound_interface, public ym_generic_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, device_type type) : device_t(mconfig, type, tag, owner, clock), device_sound_interface(mconfig, *this), - m_timer{ nullptr, nullptr }, m_update_irq(*this), m_io_read{ *this, *this }, m_io_write{ *this, *this } @@ -61,7 +60,7 @@ class ym_generic_device : public device_t, public device_sound_interface, public // engine_mode_write() method virtual void ymfm_sync_mode_write(uint8_t data) override { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(ym_generic_device::fm_mode_write), this), data); + m_mode_write.synchronize(data); } // the chip implementation calls this when the chip's status has changed, @@ -72,9 +71,8 @@ class ym_generic_device : public device_t, public device_sound_interface, public { // if we're currently executing a CPU, schedule the interrupt check; // otherwise, do it directly - auto &scheduler = machine().scheduler(); - if (scheduler.currently_executing()) - scheduler.synchronize(timer_expired_delegate(FUNC(ym_generic_device::fm_check_interrupts), this)); + if (machine().scheduler().currently_executing()) + m_check_interrupts.synchronize(); else m_engine->engine_check_interrupts(); } @@ -86,9 +84,9 @@ class ym_generic_device : public device_t, public device_sound_interface, public virtual void ymfm_set_timer(uint32_t tnum, int32_t duration_in_clocks) override { if (duration_in_clocks >= 0) - m_timer[tnum]->adjust(attotime::from_ticks(duration_in_clocks, device_t::clock()), tnum); + m_timer[tnum].adjust(attotime::from_ticks(duration_in_clocks, device_t::clock()), tnum); else - m_timer[tnum]->enable(false); + m_timer[tnum].enable(false); } // the chip implementation calls this when the state of the IRQ signal has @@ -137,8 +135,10 @@ class ym_generic_device : public device_t, public device_sound_interface, public virtual void device_start() override { // allocate our timers - for (int tnum = 0; tnum < 2; tnum++) - m_timer[tnum] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ym_generic_device::fm_timer_handler), this)); + m_timer[0].init(*this, FUNC(ym_generic_device::fm_timer_handler)); + m_timer[1].init(*this, FUNC(ym_generic_device::fm_timer_handler)); + m_mode_write.init(*this, FUNC(ym_generic_device::fm_mode_write)); + m_check_interrupts.init(*this, FUNC(ym_generic_device::fm_check_interrupts)); // resolve the handlers m_update_irq.resolve(); @@ -152,16 +152,18 @@ class ym_generic_device : public device_t, public device_sound_interface, public } // timer callbacks - void fm_mode_write(void *ptr, int param) { m_engine->engine_mode_write(param); } - void fm_check_interrupts(void *ptr, int param) { m_engine->engine_check_interrupts(); } - void fm_timer_handler(void *ptr, int param) { m_engine->engine_timer_expired(param); } + void fm_mode_write(timer_instance const &timer) { m_engine->engine_mode_write(timer.param()); } + void fm_check_interrupts(timer_instance const &timer) { m_engine->engine_check_interrupts(); } + void fm_timer_handler(timer_instance const &timer) { m_engine->engine_timer_expired(timer.param()); } // internal state attotime m_busy_end; // busy end time - emu_timer *m_timer[2]; // two timers devcb_write_line m_update_irq; // IRQ update callback devcb_read8 m_io_read[2]; // up to 2 input port handlers devcb_write8 m_io_write[2]; // up to 2 output port handlers + persistent_timer m_timer[2]; // two timers + transient_timer_factory m_mode_write; + transient_timer_factory m_check_interrupts; }; diff --git a/src/devices/sound/ymz280b.cpp b/src/devices/sound/ymz280b.cpp index a9a87eb558f1c..f8c0ed00b94be 100644 --- a/src/devices/sound/ymz280b.cpp +++ b/src/devices/sound/ymz280b.cpp @@ -639,7 +639,7 @@ void ymz280b_device::device_reset() } -void ymz280b_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ymz280b_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id < 8) update_irq_state_timer_common( id ); diff --git a/src/devices/sound/ymz280b.h b/src/devices/sound/ymz280b.h index 5da3ea46cc301..c99c76600bc7a 100644 --- a/src/devices/sound/ymz280b.h +++ b/src/devices/sound/ymz280b.h @@ -32,7 +32,7 @@ class ymz280b_device : public device_t, public device_sound_interface, public de virtual void device_start() override; virtual void device_post_load() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_clock_changed() override; // sound stream update overrides diff --git a/src/devices/video/315_5124.cpp b/src/devices/video/315_5124.cpp index 43757c961596c..da48a60017f55 100644 --- a/src/devices/video/315_5124.cpp +++ b/src/devices/video/315_5124.cpp @@ -478,7 +478,7 @@ void sega315_5377_device::set_sega315_5124_compatibility_mode(bool sega315_5124_ } -void sega315_5124_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sega315_5124_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/video/315_5124.h b/src/devices/video/315_5124.h index cfb614c844766..21c9229ced41a 100644 --- a/src/devices/video/315_5124.h +++ b/src/devices/video/315_5124.h @@ -94,7 +94,7 @@ class sega315_5124_device : public device_t, virtual void device_post_load() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; virtual space_config_vector memory_space_config() const override; diff --git a/src/devices/video/315_5313.cpp b/src/devices/video/315_5313.cpp index ec0a9d8dc966c..fa9c085da2734 100644 --- a/src/devices/video/315_5313.cpp +++ b/src/devices/video/315_5313.cpp @@ -369,9 +369,9 @@ void sega315_5313_device::device_start() if (m_use_alt_timing) save_pointer(NAME(m_render_line), 1280); - m_irq6_on_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sega315_5313_device::irq6_on_timer_callback), this)); - m_irq4_on_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sega315_5313_device::irq4_on_timer_callback), this)); - m_render_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sega315_5313_device::render_scanline), this)); + m_irq6_on_timer = timer_alloc(*this, FUNC(sega315_5313_device::irq6_on_timer_callback)); + m_irq4_on_timer = timer_alloc(*this, FUNC(sega315_5313_device::irq4_on_timer_callback)); + m_render_timer = timer_alloc(*this, FUNC(sega315_5313_device::render_scanline)); m_space68k = &m_cpu68k->space(); diff --git a/src/devices/video/catseye.cpp b/src/devices/video/catseye.cpp index dba0c6ac43f32..afb4b917927ff 100644 --- a/src/devices/video/catseye.cpp +++ b/src/devices/video/catseye.cpp @@ -70,7 +70,7 @@ void catseye_device::device_start() { m_int_write_func.resolve_safe(); - m_blink_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(catseye_device::blink_callback), this)); + m_blink_timer = timer_alloc(*this, FUNC(catseye_device::blink_callback)); m_blink_timer->adjust(attotime::from_hz(3)); save_item(NAME(m_changed)); diff --git a/src/devices/video/cdp1861.cpp b/src/devices/video/cdp1861.cpp index 03bcd3e0e907b..a6ef1428f06f9 100644 --- a/src/devices/video/cdp1861.cpp +++ b/src/devices/video/cdp1861.cpp @@ -154,7 +154,7 @@ void cdp1861_device::device_reset() // device_timer - handle timer events //------------------------------------------------- -void cdp1861_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cdp1861_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { int scanline = screen().vpos(); diff --git a/src/devices/video/cdp1861.h b/src/devices/video/cdp1861.h index cf247d19e3e86..6dd12e7766d23 100644 --- a/src/devices/video/cdp1861.h +++ b/src/devices/video/cdp1861.h @@ -81,7 +81,7 @@ class cdp1861_device : public device_t, virtual void device_config_complete() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum diff --git a/src/devices/video/clgd542x.cpp b/src/devices/video/clgd542x.cpp index eff9f5473c8fa..b748628d9bd23 100644 --- a/src/devices/video/clgd542x.cpp +++ b/src/devices/video/clgd542x.cpp @@ -91,7 +91,7 @@ void cirrus_gd5428_device::device_start() save_pointer(vga.attribute.data,"Attribute Registers", 0x15); save_item(NAME(m_chip_id)); - m_vblank_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vga_device::vblank_timer_cb),this)); + m_vblank_timer = timer_alloc(*this, FUNC(vga_device::vblank_timer_cb)); m_chip_id = 0x98; // GD5428 - Rev 0 } diff --git a/src/devices/video/crt9007.cpp b/src/devices/video/crt9007.cpp index 3a32da74f4452..24ac8f055f29a 100644 --- a/src/devices/video/crt9007.cpp +++ b/src/devices/video/crt9007.cpp @@ -608,7 +608,7 @@ void crt9007_device::device_clock_changed() // device_timer - handle timer events //------------------------------------------------- -void crt9007_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void crt9007_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { int x = screen().hpos(); int y = screen().vpos(); diff --git a/src/devices/video/crt9007.h b/src/devices/video/crt9007.h index 3827451544773..ab7e18bf184f1 100644 --- a/src/devices/video/crt9007.h +++ b/src/devices/video/crt9007.h @@ -78,7 +78,7 @@ class crt9007_device : public device_t, virtual void device_reset() override; virtual void device_post_load() override; virtual void device_clock_changed() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_memory_interface overrides virtual space_config_vector memory_space_config() const override; diff --git a/src/devices/video/crtc_ega.cpp b/src/devices/video/crtc_ega.cpp index 06a691cf5bfc8..1ba1632c7de11 100644 --- a/src/devices/video/crtc_ega.cpp +++ b/src/devices/video/crtc_ega.cpp @@ -397,7 +397,7 @@ void crtc_ega_device::handle_line_timer() } -void crtc_ega_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void crtc_ega_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/video/crtc_ega.h b/src/devices/video/crtc_ega.h index e5a267bed902a..b7d506eda37fc 100644 --- a/src/devices/video/crtc_ega.h +++ b/src/devices/video/crtc_ega.h @@ -73,7 +73,7 @@ class crtc_ega_device : public device_t, virtual void device_start() override; virtual void device_reset() override; virtual void device_post_load() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: devcb_write_line m_res_out_de_cb; diff --git a/src/devices/video/dp8350.cpp b/src/devices/video/dp8350.cpp index 22e918b337431..69ae1f526ec26 100644 --- a/src/devices/video/dp8350.cpp +++ b/src/devices/video/dp8350.cpp @@ -218,10 +218,10 @@ void dp835x_device::device_resolve_objects() void dp835x_device::device_start() { // create timers - m_hblank_start_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(dp835x_device::hblank_start), this)); - m_hblank_near_end_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(dp835x_device::hblank_near_end), this)); - m_hsync_on_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(dp835x_device::hsync_update), this)); - m_hsync_off_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(dp835x_device::hsync_update), this)); + m_hblank_start_timer = timer_alloc(*this, FUNC(dp835x_device::hblank_start)); + m_hblank_near_end_timer = timer_alloc(*this, FUNC(dp835x_device::hblank_near_end)); + m_hsync_on_timer = timer_alloc(*this, FUNC(dp835x_device::hsync_update)); + m_hsync_off_timer = timer_alloc(*this, FUNC(dp835x_device::hsync_update)); // save state save_item(NAME(m_60hz_refresh)); diff --git a/src/devices/video/ef9340_1.cpp b/src/devices/video/ef9340_1.cpp index 45d88f88c125e..88210544f3330 100644 --- a/src/devices/video/ef9340_1.cpp +++ b/src/devices/video/ef9340_1.cpp @@ -107,7 +107,7 @@ void ef9340_1_device::device_start() } -void ef9340_1_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ef9340_1_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/video/ef9340_1.h b/src/devices/video/ef9340_1.h index 6aceef46708ca..6e6df930f0a97 100644 --- a/src/devices/video/ef9340_1.h +++ b/src/devices/video/ef9340_1.h @@ -68,7 +68,7 @@ class ef9340_1_device : public device_t, protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual const tiny_rom_entry *device_rom_region() const override; inline u16 ef9340_get_c_addr(u8 x, u8 y); diff --git a/src/devices/video/ef9345.cpp b/src/devices/video/ef9345.cpp index f5379b26b6f31..8d22b6db1992f 100644 --- a/src/devices/video/ef9345.cpp +++ b/src/devices/video/ef9345.cpp @@ -194,7 +194,7 @@ void ef9345_device::device_reset() //------------------------------------------------- // device_timer - handler timer events //------------------------------------------------- -void ef9345_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ef9345_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/video/ef9345.h b/src/devices/video/ef9345.h index aebd71f67ca60..aaa0e3e27cb81 100644 --- a/src/devices/video/ef9345.h +++ b/src/devices/video/ef9345.h @@ -52,7 +52,7 @@ class ef9345_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_config_memory_interface overrides virtual space_config_vector memory_space_config() const override; diff --git a/src/devices/video/ef9365.cpp b/src/devices/video/ef9365.cpp index 7697e6885e60f..fca9c5b7add31 100644 --- a/src/devices/video/ef9365.cpp +++ b/src/devices/video/ef9365.cpp @@ -377,7 +377,7 @@ void ef9365_device::update_interrupts() // device_timer - handler timer events //------------------------------------------------- -void ef9365_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ef9365_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/video/ef9365.h b/src/devices/video/ef9365.h index eb2ecf894d9d4..a496e37acc75b 100644 --- a/src/devices/video/ef9365.h +++ b/src/devices/video/ef9365.h @@ -61,7 +61,7 @@ class ef9365_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual const tiny_rom_entry *device_rom_region() const override; // device_config_memory_interface overrides diff --git a/src/devices/video/epic12.cpp b/src/devices/video/epic12.cpp index e8368f8bac9f9..d0244c8e2d432 100644 --- a/src/devices/video/epic12.cpp +++ b/src/devices/video/epic12.cpp @@ -58,7 +58,7 @@ void epic12_device::device_start() m_ram16_copy = std::make_unique(m_main_ramsize / 2); - m_blitter_delay_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(epic12_device::blitter_delay_callback),this)); + m_blitter_delay_timer = timer_alloc(*this, FUNC(epic12_device::blitter_delay_callback)); m_blitter_delay_timer->adjust(attotime::never); save_item(NAME(m_gfx_addr)); diff --git a/src/devices/video/fixfreq.h b/src/devices/video/fixfreq.h index 8e89edab3557d..0d6e8f698e60b 100644 --- a/src/devices/video/fixfreq.h +++ b/src/devices/video/fixfreq.h @@ -301,7 +301,7 @@ class fixedfreq_device : public device_t, public device_video_interface, virtual void device_start() override; virtual void device_reset() override; virtual void device_post_load() override; - //virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + //virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr); virtual ioport_constructor device_input_ports() const override; diff --git a/src/devices/video/gb_lcd.cpp b/src/devices/video/gb_lcd.cpp index 99dfc80282d72..8110c61cb2081 100644 --- a/src/devices/video/gb_lcd.cpp +++ b/src/devices/video/gb_lcd.cpp @@ -1917,7 +1917,7 @@ void dmg_ppu_device::increment_scanline() } -void dmg_ppu_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void dmg_ppu_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { update_state(); } diff --git a/src/devices/video/gb_lcd.h b/src/devices/video/gb_lcd.h index 9c4e260742033..9d01ded202603 100644 --- a/src/devices/video/gb_lcd.h +++ b/src/devices/video/gb_lcd.h @@ -80,7 +80,7 @@ class dmg_ppu_device : public device_t, public device_video_interface // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void common_start(); void common_reset(); diff --git a/src/devices/video/gba_lcd.cpp b/src/devices/video/gba_lcd.cpp index f5df7fa01e6e9..b5db386843799 100644 --- a/src/devices/video/gba_lcd.cpp +++ b/src/devices/video/gba_lcd.cpp @@ -1765,8 +1765,8 @@ void gba_lcd_device::device_start() screen().register_screen_bitmap(m_bitmap); /* create a timer to fire scanline functions */ - m_scan_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_lcd_device::perform_scan),this)); - m_hbl_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_lcd_device::perform_hbl),this)); + m_scan_timer = timer_alloc(*this, FUNC(gba_lcd_device::perform_scan)); + m_hbl_timer = timer_alloc(*this, FUNC(gba_lcd_device::perform_hbl)); m_scan_timer->adjust(screen().time_until_pos(0, 0)); save_item(NAME(m_regs)); diff --git a/src/devices/video/hd44352.cpp b/src/devices/video/hd44352.cpp index 1ca378723f340..1020e878f9a1c 100644 --- a/src/devices/video/hd44352.cpp +++ b/src/devices/video/hd44352.cpp @@ -115,7 +115,7 @@ void hd44352_device::device_reset() //------------------------------------------------- // device_timer - handler timer events //------------------------------------------------- -void hd44352_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hd44352_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/video/hd44352.h b/src/devices/video/hd44352.h index 4bf12e359e2f9..25f2ab5f0ed56 100644 --- a/src/devices/video/hd44352.h +++ b/src/devices/video/hd44352.h @@ -36,7 +36,7 @@ class hd44352_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_validity_check(validity_checker &valid) const override; private: diff --git a/src/devices/video/hd44780.cpp b/src/devices/video/hd44780.cpp index 8d6db247ba764..9b10d1e4323df 100644 --- a/src/devices/video/hd44780.cpp +++ b/src/devices/video/hd44780.cpp @@ -180,7 +180,7 @@ void hd44780_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void hd44780_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hd44780_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/video/hd44780.h b/src/devices/video/hd44780.h index b8d7923695584..0c57609383d55 100644 --- a/src/devices/video/hd44780.h +++ b/src/devices/video/hd44780.h @@ -57,7 +57,7 @@ class hd44780_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/devices/video/hd61830.cpp b/src/devices/video/hd61830.cpp index 235d250b4056c..2c52d70170ea9 100644 --- a/src/devices/video/hd61830.cpp +++ b/src/devices/video/hd61830.cpp @@ -138,7 +138,7 @@ void hd61830_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void hd61830_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hd61830_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // clear busy flag m_bf = false; diff --git a/src/devices/video/hd61830.h b/src/devices/video/hd61830.h index 56747935587db..c068f3731d0f7 100644 --- a/src/devices/video/hd61830.h +++ b/src/devices/video/hd61830.h @@ -41,7 +41,7 @@ class hd61830_device : public device_t, virtual const tiny_rom_entry *device_rom_region() const override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_memory_interface overrides virtual space_config_vector memory_space_config() const override; diff --git a/src/devices/video/hd63484.h b/src/devices/video/hd63484.h index 7b3d8fb12251e..ec84709638fa5 100644 --- a/src/devices/video/hd63484.h +++ b/src/devices/video/hd63484.h @@ -47,7 +47,7 @@ class hd63484_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - //virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + //virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr); inline uint16_t readword(offs_t address); inline void writeword(offs_t address, uint16_t data); diff --git a/src/devices/video/hlcd0438.h b/src/devices/video/hlcd0438.h index 2b1ec257d1ced..76af85e0df947 100644 --- a/src/devices/video/hlcd0438.h +++ b/src/devices/video/hlcd0438.h @@ -58,7 +58,7 @@ class hlcd0438_device : public device_t protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override { lcd_w(!m_lcd); } + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override { lcd_w(!m_lcd); } private: emu_timer *m_lcd_timer; diff --git a/src/devices/video/hlcd0488.cpp b/src/devices/video/hlcd0488.cpp index beed0221a3f82..865bdc7c58218 100644 --- a/src/devices/video/hlcd0488.cpp +++ b/src/devices/video/hlcd0488.cpp @@ -55,7 +55,7 @@ void hlcd0488_device::device_start() // handlers //------------------------------------------------- -void hlcd0488_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hlcd0488_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // Latch pulse, when high, resets the %8 latch address counter if (m_latch_pulse) diff --git a/src/devices/video/hlcd0488.h b/src/devices/video/hlcd0488.h index ed71ed09bc54a..1a3d2129cdf26 100644 --- a/src/devices/video/hlcd0488.h +++ b/src/devices/video/hlcd0488.h @@ -54,7 +54,7 @@ class hlcd0488_device : public device_t protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // pin state diff --git a/src/devices/video/hlcd0515.cpp b/src/devices/video/hlcd0515.cpp index 911b6f0320c16..43018a38e6948 100644 --- a/src/devices/video/hlcd0515.cpp +++ b/src/devices/video/hlcd0515.cpp @@ -102,7 +102,7 @@ void hlcd0515_device::device_start() // device_timer - handle timer events //------------------------------------------------- -void hlcd0515_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hlcd0515_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (m_rowout > m_rowmax) m_rowout = 0; diff --git a/src/devices/video/hlcd0515.h b/src/devices/video/hlcd0515.h index 868621c90d205..07025c6c9b6e9 100644 --- a/src/devices/video/hlcd0515.h +++ b/src/devices/video/hlcd0515.h @@ -60,7 +60,7 @@ class hlcd0515_device : public device_t // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void set_control(); void clock_data(int col = 0); diff --git a/src/devices/video/hlcd0538.h b/src/devices/video/hlcd0538.h index 2b17167b16051..a702513cb6d26 100644 --- a/src/devices/video/hlcd0538.h +++ b/src/devices/video/hlcd0538.h @@ -58,7 +58,7 @@ class hlcd0538_device : public device_t // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override { lcd_w(!m_lcd); } + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override { lcd_w(!m_lcd); } emu_timer *m_lcd_timer; diff --git a/src/devices/video/huc6260.cpp b/src/devices/video/huc6260.cpp index 08ca9abc5d9cd..ef61add366b56 100644 --- a/src/devices/video/huc6260.cpp +++ b/src/devices/video/huc6260.cpp @@ -63,7 +63,7 @@ huc6260_device::huc6260_device(const machine_config &mconfig, const char *tag, d } -void huc6260_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void huc6260_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { int vpos = screen().vpos(); int hpos = screen().hpos(); diff --git a/src/devices/video/huc6260.h b/src/devices/video/huc6260.h index 69b74f8394b6d..9fde2ec1622a7 100644 --- a/src/devices/video/huc6260.h +++ b/src/devices/video/huc6260.h @@ -43,7 +43,7 @@ class huc6260_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual uint32_t palette_entries() const override { return PALETTE_SIZE; } diff --git a/src/devices/video/huc6261.cpp b/src/devices/video/huc6261.cpp index 4ff0080777a68..440bc604ce6ed 100644 --- a/src/devices/video/huc6261.cpp +++ b/src/devices/video/huc6261.cpp @@ -94,7 +94,7 @@ void huc6261_device::apply_pal_offs(uint16_t *pix_data) *pix_data &= 0x1ff; } -void huc6261_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void huc6261_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { int vpos = screen().vpos(); int hpos = screen().hpos(); diff --git a/src/devices/video/huc6261.h b/src/devices/video/huc6261.h index 47e10c2a0e0da..f719522904fef 100644 --- a/src/devices/video/huc6261.h +++ b/src/devices/video/huc6261.h @@ -38,7 +38,7 @@ class huc6261_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_huc6270_a; diff --git a/src/devices/video/i8244.cpp b/src/devices/video/i8244.cpp index 48fd1180a28a9..b26d3410a52e1 100644 --- a/src/devices/video/i8244.cpp +++ b/src/devices/video/i8244.cpp @@ -188,7 +188,7 @@ void i8244_device::device_start() // device_timer - handle timer callbacks //------------------------------------------------- -void i8244_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void i8244_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/video/i8244.h b/src/devices/video/i8244.h index ca9b2173029af..6a7f6f8b03bce 100644 --- a/src/devices/video/i8244.h +++ b/src/devices/video/i8244.h @@ -108,7 +108,7 @@ class i8244_device : public device_t // device-level overrides virtual void device_config_complete() override; virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual const tiny_rom_entry *device_rom_region() const override; // device_sound_interface overrides diff --git a/src/devices/video/i82730.cpp b/src/devices/video/i82730.cpp index 70feabd79092e..4db6ceacdfaca 100644 --- a/src/devices/video/i82730.cpp +++ b/src/devices/video/i82730.cpp @@ -81,7 +81,7 @@ void i82730_device::device_start() m_update_row_cb.resolve(); // allocate row timer - m_row_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(i82730_device::row_update), this)); + m_row_timer = timer_alloc(*this, FUNC(i82730_device::row_update)); } //------------------------------------------------- diff --git a/src/devices/video/i8275.cpp b/src/devices/video/i8275.cpp index ed3204b8d9f6e..59865ee5aa29b 100644 --- a/src/devices/video/i8275.cpp +++ b/src/devices/video/i8275.cpp @@ -263,7 +263,7 @@ void i8275_device::dma_start() // device_timer - handle timer events //------------------------------------------------- -void i8275_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void i8275_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { //int y = screen().vpos(); //int x = screen().hpos(); diff --git a/src/devices/video/i8275.h b/src/devices/video/i8275.h index b43fcbdefa8fd..f3cb0d80db4e2 100644 --- a/src/devices/video/i8275.h +++ b/src/devices/video/i8275.h @@ -85,7 +85,7 @@ class i8275_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void vrtc_start(); void vrtc_end(); diff --git a/src/devices/video/imagetek_i4100.cpp b/src/devices/video/imagetek_i4100.cpp index 69dc3dcd775a8..2edaf7589546b 100644 --- a/src/devices/video/imagetek_i4100.cpp +++ b/src/devices/video/imagetek_i4100.cpp @@ -522,7 +522,7 @@ void imagetek_i4300_device::update_irq_state() m_irq_cb(level); } -void imagetek_i4100_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void imagetek_i4100_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/video/imagetek_i4100.h b/src/devices/video/imagetek_i4100.h index 4d40c585ff13e..64d52c7f8e006 100644 --- a/src/devices/video/imagetek_i4100.h +++ b/src/devices/video/imagetek_i4100.h @@ -75,7 +75,7 @@ class imagetek_i4100_device : public device_t, virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void update_irq_state(); diff --git a/src/devices/video/lc7985.cpp b/src/devices/video/lc7985.cpp index 40c7089385b75..7d0dee70431cf 100644 --- a/src/devices/video/lc7985.cpp +++ b/src/devices/video/lc7985.cpp @@ -66,7 +66,7 @@ void lc7985_device::busy(attotime time) m_busy_timer->adjust(time); } -void lc7985_device::device_timer(emu_timer &, device_timer_id, int, void *) +void lc7985_device::device_timer(timer_instance const &, device_timer_id, int, void *) { m_busy_flag = false; } diff --git a/src/devices/video/lc7985.h b/src/devices/video/lc7985.h index c528646852f0b..8dc83a5f5ee9f 100644 --- a/src/devices/video/lc7985.h +++ b/src/devices/video/lc7985.h @@ -27,7 +27,7 @@ class lc7985_device : public device_t protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual const tiny_rom_entry *device_rom_region() const override; private: diff --git a/src/devices/video/mc6845.cpp b/src/devices/video/mc6845.cpp index abf5692b7c785..d0c6abad81b54 100644 --- a/src/devices/video/mc6845.cpp +++ b/src/devices/video/mc6845.cpp @@ -948,7 +948,7 @@ void mc6845_device::handle_line_timer() } -void mc6845_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mc6845_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -1018,7 +1018,7 @@ void mc6845_device::device_timer(emu_timer &timer, device_timer_id id, int param } -void mos8563_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mos8563_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/video/mc6845.h b/src/devices/video/mc6845.h index 431c1a3608b0a..fee4edbfce974 100644 --- a/src/devices/video/mc6845.h +++ b/src/devices/video/mc6845.h @@ -132,7 +132,7 @@ class mc6845_device : public device_t, virtual void device_reset() override; virtual void device_post_load() override; virtual void device_clock_changed() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; attotime cclks_to_attotime(uint64_t clocks) const { return clocks_to_attotime(clocks * m_clk_scale); } uint64_t attotime_to_cclks(const attotime &duration) const { return attotime_to_clocks(duration) / m_clk_scale; } @@ -425,7 +425,7 @@ class mos8563_device : public mc6845_device, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_memory_interface overrides virtual space_config_vector memory_space_config() const override; diff --git a/src/devices/video/mc6847.cpp b/src/devices/video/mc6847.cpp index 56f14f3e30774..75c3bb3dd3d85 100644 --- a/src/devices/video/mc6847.cpp +++ b/src/devices/video/mc6847.cpp @@ -253,7 +253,7 @@ void mc6847_friend_device::update_field_sync_timer() // device_timer //------------------------------------------------- -void mc6847_friend_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mc6847_friend_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/devices/video/mc6847.h b/src/devices/video/mc6847.h index 51ecde9833427..f6ef2f4c7f02d 100644 --- a/src/devices/video/mc6847.h +++ b/src/devices/video/mc6847.h @@ -275,7 +275,7 @@ class mc6847_friend_device : public device_t, public device_video_interface // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_reset() override; virtual void device_post_load() override; diff --git a/src/devices/video/nt7534.cpp b/src/devices/video/nt7534.cpp index d972a4b99dd73..d0bf295490fc0 100644 --- a/src/devices/video/nt7534.cpp +++ b/src/devices/video/nt7534.cpp @@ -100,7 +100,7 @@ void nt7534_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void nt7534_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nt7534_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/video/nt7534.h b/src/devices/video/nt7534.h index ef36ba3688484..a6adc9568fe06 100644 --- a/src/devices/video/nt7534.h +++ b/src/devices/video/nt7534.h @@ -48,7 +48,7 @@ class nt7534_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // internal helper void set_busy_flag(uint16_t usec); diff --git a/src/devices/video/pc_vga.cpp b/src/devices/video/pc_vga.cpp index 2edaaca392ade..afab87e286baf 100644 --- a/src/devices/video/pc_vga.cpp +++ b/src/devices/video/pc_vga.cpp @@ -351,7 +351,7 @@ void vga_device::device_start() save_item(NAME(vga.dac.color)); save_item(NAME(vga.dac.dirty)); - m_vblank_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vga_device::vblank_timer_cb),this)); + m_vblank_timer = timer_alloc(*this, FUNC(vga_device::vblank_timer_cb)); } void svga_device::device_start() diff --git a/src/devices/video/pcf2100.cpp b/src/devices/video/pcf2100.cpp index 931ed6c414c2a..b16358cc41426 100644 --- a/src/devices/video/pcf2100.cpp +++ b/src/devices/video/pcf2100.cpp @@ -78,7 +78,7 @@ void pcf2100_device::device_start() // handlers //------------------------------------------------- -void pcf2100_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pcf2100_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // transfer latches to output m_write_segs(m_bpout, m_latch[m_bpout]); diff --git a/src/devices/video/pcf2100.h b/src/devices/video/pcf2100.h index bf452a9033669..136c50f2a3187 100644 --- a/src/devices/video/pcf2100.h +++ b/src/devices/video/pcf2100.h @@ -47,7 +47,7 @@ class pcf2100_device : public device_t // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; emu_timer *m_lcd_timer; diff --git a/src/devices/video/ppu2c0x.cpp b/src/devices/video/ppu2c0x.cpp index 793edf6cb036c..20bdf3ca30b37 100644 --- a/src/devices/video/ppu2c0x.cpp +++ b/src/devices/video/ppu2c0x.cpp @@ -505,7 +505,7 @@ void ppu2c04_clone_device::init_palette_tables() // device_timer - handle timer events //------------------------------------------------- -void ppu2c0x_device::device_timer(emu_timer& timer, device_timer_id id, int param, void* ptr) +void ppu2c0x_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void* ptr) { int blanked, vblank; diff --git a/src/devices/video/ppu2c0x.h b/src/devices/video/ppu2c0x.h index 532eec0e7f158..ba7d9cd48ddcc 100644 --- a/src/devices/video/ppu2c0x.h +++ b/src/devices/video/ppu2c0x.h @@ -177,7 +177,7 @@ class ppu2c0x_device : public device_t, ppu2c0x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock = 0); virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_config_complete() override; // device_config_memory_interface overrides diff --git a/src/devices/video/pwm.cpp b/src/devices/video/pwm.cpp index 64943c6c7ae01..2bbedca24fb80 100644 --- a/src/devices/video/pwm.cpp +++ b/src/devices/video/pwm.cpp @@ -90,7 +90,7 @@ void pwm_display_device::device_start() for (auto &bri : m_bri) std::fill(std::begin(bri), std::end(bri), 0.0); - m_frame_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pwm_display_device::frame_tick),this)); + m_frame_timer = timer_alloc(*this, FUNC(pwm_display_device::frame_tick)); m_sync_time = machine().time(); // register for savestates diff --git a/src/devices/video/scn2674.cpp b/src/devices/video/scn2674.cpp index 96e1e7d3ca580..e7405196be2be 100644 --- a/src/devices/video/scn2674.cpp +++ b/src/devices/video/scn2674.cpp @@ -112,9 +112,9 @@ void scn2674_device::device_start() m_mbc_cb.resolve_safe(); m_mbc_char_cb.resolve(); m_mbc_attr_cb.resolve(); - m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(scn2674_device::scanline_timer), this)); - m_breq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(scn2674_device::breq_timer), this)); - m_vblank_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(scn2674_device::vblank_timer), this)); + m_scanline_timer = timer_alloc(*this, FUNC(scn2674_device::scanline_timer)); + m_breq_timer = timer_alloc(*this, FUNC(scn2674_device::breq_timer)); + m_vblank_timer = timer_alloc(*this, FUNC(scn2674_device::vblank_timer)); screen().register_screen_bitmap(m_bitmap); m_char_space = &space(0); diff --git a/src/devices/video/sed1500.cpp b/src/devices/video/sed1500.cpp index 57d6fe5f2817d..8b307f5cc5343 100644 --- a/src/devices/video/sed1500.cpp +++ b/src/devices/video/sed1500.cpp @@ -84,7 +84,7 @@ void sed1500_device::device_start() // handlers //------------------------------------------------- -void sed1500_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sed1500_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { u64 data = 0; diff --git a/src/devices/video/sed1500.h b/src/devices/video/sed1500.h index e26360966bb32..0c25fa90d642f 100644 --- a/src/devices/video/sed1500.h +++ b/src/devices/video/sed1500.h @@ -44,7 +44,7 @@ class sed1500_device : public device_t // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; emu_timer *m_lcd_timer; diff --git a/src/devices/video/stvvdp1.cpp b/src/devices/video/stvvdp1.cpp index d3fce6d03baf7..ea842906641c3 100644 --- a/src/devices/video/stvvdp1.cpp +++ b/src/devices/video/stvvdp1.cpp @@ -2056,7 +2056,7 @@ void saturn_state::stv_vdp1_process_list( void ) /* TODO: what's the exact formula? Guess it should be a mix between number of pixels written and actual command data fetched. */ // if spritecount = 10000 don't send a vdp1 draw end // if(spritecount < 10000) - machine().scheduler().timer_set(m_maincpu->cycles_to_attotime(spritecount*16), timer_expired_delegate(FUNC(saturn_state::vdp1_draw_end),this)); + m_vdp1_draw_end.call_after(m_maincpu->cycles_to_attotime(spritecount*16)); if (VDP1_LOG) logerror ("End of list processing!\n"); } @@ -2215,5 +2215,8 @@ int saturn_state::stv_vdp1_start ( void ) save_item(NAME(m_vdp1.local_x)); save_item(NAME(m_vdp1.local_y)); machine().save().register_postload(save_prepost_delegate(FUNC(saturn_state::stv_vdp1_state_save_postload), this)); + + m_vdp1_draw_end.init(*this, FUNC(saturn_state::vdp1_draw_end)); + return 0; } diff --git a/src/devices/video/tms34061.cpp b/src/devices/video/tms34061.cpp index 16d7ba65fa868..8f604dfae851e 100644 --- a/src/devices/video/tms34061.cpp +++ b/src/devices/video/tms34061.cpp @@ -97,7 +97,7 @@ void tms34061_device::device_start() m_regs[TMS34061_VERCOUNTER] = 0x0000; /* start vertical interrupt timer */ - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tms34061_device::interrupt), this)); + m_timer = timer_alloc(*this, FUNC(tms34061_device::interrupt)); save_item(NAME(m_regs)); save_item(NAME(m_xmask)); diff --git a/src/devices/video/tms9927.cpp b/src/devices/video/tms9927.cpp index 7fef40f635e9b..e7feb212850f2 100644 --- a/src/devices/video/tms9927.cpp +++ b/src/devices/video/tms9927.cpp @@ -140,7 +140,7 @@ void tms9927_device::device_stop() // device_timer - handle timer events //------------------------------------------------- -void tms9927_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tms9927_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/video/tms9927.h b/src/devices/video/tms9927.h index 0acbf5a18742d..dcfa1e0726763 100644 --- a/src/devices/video/tms9927.h +++ b/src/devices/video/tms9927.h @@ -45,7 +45,7 @@ class tms9927_device : public device_t, public device_video_interface virtual void device_stop() override; virtual void device_reset() override; virtual void device_clock_changed() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_post_load() override; private: diff --git a/src/devices/video/tms9928a.cpp b/src/devices/video/tms9928a.cpp index 13b46c1592ad6..3f21944c173a6 100644 --- a/src/devices/video/tms9928a.cpp +++ b/src/devices/video/tms9928a.cpp @@ -351,7 +351,7 @@ void tms9928a_device::register_write(u8 data) } } -void tms9928a_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tms9928a_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // Handle GROM clock if present if (id==GROMCLK) diff --git a/src/devices/video/tms9928a.h b/src/devices/video/tms9928a.h index cc5a5192f149a..7772791c893aa 100644 --- a/src/devices/video/tms9928a.h +++ b/src/devices/video/tms9928a.h @@ -95,7 +95,7 @@ class tms9928a_device : public device_t, virtual void device_config_complete() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_memory_interface overrides virtual space_config_vector memory_space_config() const override; diff --git a/src/devices/video/topcat.cpp b/src/devices/video/topcat.cpp index 79b679b8e7746..5d1b404219edb 100644 --- a/src/devices/video/topcat.cpp +++ b/src/devices/video/topcat.cpp @@ -25,7 +25,7 @@ topcat_device::topcat_device(const machine_config &mconfig, const char *tag, dev void topcat_device::device_start() { m_int_write_func.resolve_safe(); - m_cursor_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(topcat_device::cursor_callback), this)); + m_cursor_timer = timer_alloc(*this, FUNC(topcat_device::cursor_callback)); m_cursor_timer->adjust(attotime::from_hz(3)); save_item(NAME(m_vblank)); diff --git a/src/devices/video/upd3301.cpp b/src/devices/video/upd3301.cpp index 9da9f70af7c03..5d8446e1cdca3 100644 --- a/src/devices/video/upd3301.cpp +++ b/src/devices/video/upd3301.cpp @@ -191,7 +191,7 @@ void upd3301_device::device_clock_changed() // device_timer - handle timer events //------------------------------------------------- -void upd3301_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void upd3301_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/video/upd3301.h b/src/devices/video/upd3301.h index 281c17a998093..a8efad45acb33 100644 --- a/src/devices/video/upd3301.h +++ b/src/devices/video/upd3301.h @@ -81,7 +81,7 @@ class upd3301_device : public device_t, virtual void device_start() override; virtual void device_reset() override; virtual void device_clock_changed() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum diff --git a/src/devices/video/upd7220.cpp b/src/devices/video/upd7220.cpp index da804b7f28651..424fa6d338c81 100644 --- a/src/devices/video/upd7220.cpp +++ b/src/devices/video/upd7220.cpp @@ -737,7 +737,7 @@ void upd7220_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void upd7220_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void upd7220_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/devices/video/upd7220.h b/src/devices/video/upd7220.h index 31ac30f4dac1f..81010da117fc1 100644 --- a/src/devices/video/upd7220.h +++ b/src/devices/video/upd7220.h @@ -85,7 +85,7 @@ class upd7220_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual const tiny_rom_entry *device_rom_region() const override; virtual space_config_vector memory_space_config() const override; diff --git a/src/devices/video/v9938.cpp b/src/devices/video/v9938.cpp index e82858056e7f7..3efaafdee50a3 100644 --- a/src/devices/video/v9938.cpp +++ b/src/devices/video/v9938.cpp @@ -172,7 +172,7 @@ void v99x8_device::device_config_complete() } -void v99x8_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void v99x8_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { int scanline = (m_scanline - (m_scanline_start + m_offset_y)); diff --git a/src/devices/video/v9938.h b/src/devices/video/v9938.h index 3d3b06f8771a5..d217e81e3c347 100644 --- a/src/devices/video/v9938.h +++ b/src/devices/video/v9938.h @@ -100,7 +100,7 @@ class v99x8_device : public device_t, virtual void device_config_complete() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_post_load() override; // device_memory_interface overrides diff --git a/src/devices/video/vic4567.cpp b/src/devices/video/vic4567.cpp index 99f2e5af47621..652cd87d1482c 100644 --- a/src/devices/video/vic4567.cpp +++ b/src/devices/video/vic4567.cpp @@ -309,6 +309,8 @@ void vic3_device::device_start() save_item(NAME(m_sprites[i].bitmap[6]), i); save_item(NAME(m_sprites[i].bitmap[7]), i); } + + m_timer_timeout.init(*this, FUNC(vic3_device::timer_timeout)); } //------------------------------------------------- @@ -1983,7 +1985,7 @@ void vic3_device::raster_interrupt_gen() if (LIGHTPEN_BUTTON) { /* lightpen timer start */ - machine().scheduler().timer_set(attotime(0, 0), timer_expired_delegate(FUNC(vic3_device::timer_timeout),this), 1); + m_timer_timeout.synchronize(1); } } diff --git a/src/devices/video/vic4567.h b/src/devices/video/vic4567.h index 64fedb3da1636..fdb90749f9893 100644 --- a/src/devices/video/vic4567.h +++ b/src/devices/video/vic4567.h @@ -173,6 +173,7 @@ class vic3_device : public device_t, void draw_bitplanes(); TIMER_CALLBACK_MEMBER(timer_timeout); + transient_timer_factory m_timer_timeout; vic3_type m_type; diff --git a/src/devices/video/zeus2.cpp b/src/devices/video/zeus2.cpp index cb3d02f7613bb..a1564978cf608 100644 --- a/src/devices/video/zeus2.cpp +++ b/src/devices/video/zeus2.cpp @@ -49,16 +49,16 @@ TIMER_CALLBACK_MEMBER(zeus2_device::display_irq_off) // vblank_period = screen().frame_period(); //vblank_timer->adjust(vblank_period); vblank_timer->adjust(screen().time_until_vblank_start()); - //machine().scheduler().timer_set(attotime::from_hz(30000000), timer_expired_delegate(FUNC(zeus2_device::display_irq), this)); + //vblank_timer->adjust(attotime::from_hz(30000000)); } TIMER_CALLBACK_MEMBER(zeus2_device::display_irq) { m_vblank(ASSERT_LINE); /* set a timer for the next off state */ - //machine().scheduler().timer_set(screen().time_until_pos(0), timer_expired_delegate(FUNC(zeus2_device::display_irq_off), this), 0, this); - machine().scheduler().timer_set(screen().time_until_vblank_end(), timer_expired_delegate(FUNC(zeus2_device::display_irq_off), this), 0, this); - //machine().scheduler().timer_set(attotime::from_hz(30000000), timer_expired_delegate(FUNC(zeus2_device::display_irq_off), this)); + //m_display_irq_off.call_after(screen().time_until_pos(0), 0); + m_display_irq_off.call_after(screen().time_until_vblank_end()); + //m_display_irq_off.call_after(attotime::from_hz(30000000)); } TIMER_CALLBACK_MEMBER(zeus2_device::int_timer_callback) @@ -88,9 +88,9 @@ void zeus2_device::device_start() /* we need to cleanup on exit */ //machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(&zeus2_device::exit_handler2, this)); - int_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(zeus2_device::int_timer_callback), this)); - - vblank_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(zeus2_device::display_irq), this)); + int_timer = timer_alloc(*this, FUNC(zeus2_device::int_timer_callback)); + vblank_timer = timer_alloc(*this, FUNC(zeus2_device::display_irq)); + m_display_irq_off.init(*this, FUNC(zeus2_device::display_irq_off)); //printf("%s\n", machine().system().name); // Set system type diff --git a/src/devices/video/zeus2.h b/src/devices/video/zeus2.h index 1b54634946838..482d4833a02f0 100644 --- a/src/devices/video/zeus2.h +++ b/src/devices/video/zeus2.h @@ -110,6 +110,7 @@ class zeus2_device : public device_t, public device_video_interface uint32_t zeus2_r(offs_t offset); void zeus2_w(offs_t offset, uint32_t data); TIMER_CALLBACK_MEMBER(display_irq_off); + transient_timer_factory m_display_irq_off; TIMER_CALLBACK_MEMBER(display_irq); auto vblank_callback() { return m_vblank.bind(); } diff --git a/src/emu/attotime.h b/src/emu/attotime.h index c6fa441733c12..a67e4092b978b 100644 --- a/src/emu/attotime.h +++ b/src/emu/attotime.h @@ -47,8 +47,8 @@ //************************************************************************** // core components of the attotime structure -typedef s64 attoseconds_t; -typedef s32 seconds_t; +using attoseconds_t = s64; +using seconds_t = s32; // core definitions constexpr attoseconds_t ATTOSECONDS_PER_SECOND_SQRT = 1'000'000'000; @@ -86,17 +86,139 @@ template inline constexpr attoseconds_t ATTOSECONDS_IN_NSEC(T &&x) // TYPE DEFINITIONS //***************************************************************************/ +class subseconds +{ + // save_manager needs direct access for save/restore purposes + friend class save_manager; + +public: + static constexpr u64 MAX_RAW = ATTOSECONDS_PER_SECOND; +// static constexpr subseconds MAX = subseconds(MAX_RAW); + + constexpr subseconds() : + m_subseconds(0) + { + } + + subseconds(subseconds const &src) : + m_subseconds(src.m_subseconds) + { + } + + subseconds &operator=(subseconds const &src) + { + m_subseconds = src.m_subseconds; + return *this; + } + + // math + subseconds &operator+=(subseconds const &right) noexcept + { + m_subseconds += right.m_subseconds; + return *this; + } + + subseconds &operator-=(subseconds const &right) noexcept + { + m_subseconds -= right.m_subseconds; + return *this; + } + + subseconds &operator*=(u32 factor) noexcept + { + m_subseconds *= factor; + return *this; + } + + subseconds &operator/=(u32 factor) + { + m_subseconds /= factor; + return *this; + } + + constexpr u64 raw() const { return m_subseconds; } + + // constants + static const subseconds max; + static const subseconds zero; + + // static creators + static constexpr subseconds from_raw(u64 raw) { return subseconds(raw); } + static constexpr subseconds from_msec(u64 msec) { return subseconds(msec * ATTOSECONDS_PER_MILLISECOND); } + static constexpr subseconds from_usec(u64 usec) { return subseconds(usec * ATTOSECONDS_PER_MICROSECOND); } + static constexpr subseconds from_nsec(u64 nsec) { return subseconds(nsec * ATTOSECONDS_PER_NANOSECOND); } + static constexpr subseconds from_hz(double hz) + { + u64 const hz_int = u64(hz); + if (hz == double(hz_int)) + return subseconds(MAX_RAW / s64(hz)); + return subseconds(u64(2e64 / hz)); + } + static constexpr subseconds from_hz(u32 hz) { return subseconds((hz > 1) ? (MAX_RAW / hz) : MAX_RAW); } + static constexpr subseconds from_hz(int hz) { return subseconds((hz > 1) ? (MAX_RAW / hz) : MAX_RAW); } + static subseconds from_hz(XTAL const &xtal) { return from_hz(xtal.dvalue()); } + + // friend functions + friend subseconds operator+(subseconds const &left, subseconds const &right) noexcept; + friend subseconds operator-(subseconds const &left, subseconds const &right) noexcept; + friend subseconds operator*(subseconds const &left, u32 factor) noexcept; + friend subseconds operator*(u32 factor, subseconds const &right) noexcept; + friend u64 operator/(subseconds const &left, subseconds const &right); + friend subseconds operator/(subseconds const &left, u32 factor); + friend constexpr bool operator==(subseconds const &left, subseconds const &right) noexcept; + friend constexpr bool operator!=(subseconds const &left, subseconds const &right) noexcept; + friend constexpr bool operator<(subseconds const &left, subseconds const &right) noexcept; + friend constexpr bool operator<=(subseconds const &left, subseconds const &right) noexcept; + friend constexpr bool operator>(subseconds const &left, subseconds const &right) noexcept; + friend constexpr bool operator>=(subseconds const &left, subseconds const &right) noexcept; + +private: + constexpr subseconds(u64 raw) : m_subseconds(raw) { } + + u64 m_subseconds; +}; + +inline subseconds operator+(subseconds const &left, subseconds const &right) noexcept +{ return subseconds(left.m_subseconds + right.m_subseconds); } +inline subseconds operator-(subseconds const &left, subseconds const &right) noexcept +{ return subseconds(left.m_subseconds - right.m_subseconds); } +inline subseconds operator*(subseconds const &left, u32 factor) noexcept +{ return subseconds(left.m_subseconds * factor); } +inline subseconds operator*(u32 factor, subseconds const &right) noexcept +{ return subseconds(factor * right.m_subseconds); } +inline u64 operator/(subseconds const &left, subseconds const &right) +{ return left.m_subseconds / right.m_subseconds; } +inline subseconds operator/(subseconds const &left, u32 factor) +{ return subseconds(left.m_subseconds / factor); } +inline constexpr bool operator==(subseconds const &left, subseconds const &right) noexcept +{ return left.m_subseconds == right.m_subseconds; } +inline constexpr bool operator!=(subseconds const &left, subseconds const &right) noexcept +{ return left.m_subseconds != right.m_subseconds; } +inline constexpr bool operator<(subseconds const &left, subseconds const &right) noexcept +{ return left.m_subseconds < right.m_subseconds; } +inline constexpr bool operator<=(subseconds const &left, subseconds const &right) noexcept +{ return left.m_subseconds <= right.m_subseconds; } +inline constexpr bool operator>(subseconds const &left, subseconds const &right) noexcept +{ return left.m_subseconds > right.m_subseconds; } +inline constexpr bool operator>=(subseconds const &left, subseconds const &right) noexcept +{ return left.m_subseconds >= right.m_subseconds; } + // the attotime structure itself class attotime { + // save_manager needs direct access for save/restore purposes + friend class save_manager; + public: // construction/destruction - constexpr attotime() noexcept : m_seconds(0), m_attoseconds(0) { } + constexpr attotime() noexcept : m_attoseconds(0), m_seconds(0) { } /** Constructs with @p secs seconds and @p attos attoseconds. */ - constexpr attotime(seconds_t secs, attoseconds_t attos) noexcept : m_seconds(secs), m_attoseconds(attos) { } + constexpr attotime(seconds_t secs, attoseconds_t attos) noexcept : m_attoseconds(attos), m_seconds(secs) { } + constexpr attotime(seconds_t secs, subseconds subs) noexcept : m_attoseconds(subs.raw()), m_seconds(secs) { } + constexpr attotime(subseconds subs) noexcept : m_attoseconds(subs.raw()), m_seconds(0) { } - constexpr attotime(const attotime& that) noexcept : m_seconds(that.m_seconds), m_attoseconds(that.m_attoseconds) { } + constexpr attotime(const attotime& that) noexcept : m_attoseconds(that.m_attoseconds), m_seconds(that.m_seconds) { } // assignment attotime &operator=(const attotime& that) noexcept @@ -114,6 +236,7 @@ class attotime // conversion to other forms constexpr double as_double() const noexcept { return double(m_seconds) + ATTOSECONDS_TO_DOUBLE(m_attoseconds); } constexpr attoseconds_t as_attoseconds() const noexcept; + constexpr subseconds as_subseconds() const noexcept; double as_hz() const noexcept { assert(!is_zero()); return m_seconds == 0 ? ATTOSECONDS_TO_HZ(m_attoseconds) : is_never() ? 0.0 : 1.0 / as_double(); } double as_khz() const noexcept { assert(!is_zero()); return m_seconds == 0 ? double(ATTOSECONDS_PER_MILLISECOND) / double(m_attoseconds) : is_never() ? 0.0 : 1e-3 / as_double(); } double as_mhz() const noexcept { assert(!is_zero()); return m_seconds == 0 ? double(ATTOSECONDS_PER_MICROSECOND) / double(m_attoseconds) : is_never() ? 0.0 : 1e-6 / as_double(); } @@ -130,6 +253,9 @@ class attotime /** @return the seconds portion. */ constexpr seconds_t seconds() const noexcept { return m_seconds; } + void set_seconds(seconds_t seconds) { m_seconds = seconds;} + void set_attoseconds(attoseconds_t attoseconds) { m_attoseconds = attoseconds;} + static attotime from_double(double _time); static attotime from_ticks(u64 ticks, u32 frequency); static attotime from_ticks(u64 ticks, const XTAL &xtal) { return from_ticks(ticks, xtal.value()); } @@ -142,8 +268,8 @@ class attotime /** Create an attotime from a integer count of nanoseconds @nsec */ static constexpr attotime from_nsec(s64 nsec) { return attotime(nsec / 1000000000, (nsec % 1000000000) * (ATTOSECONDS_PER_SECOND / 1000000000)); } /** Create an attotime from at the given frequency @frequency */ - static attotime from_hz(u32 frequency) { return (frequency > 1) ? attotime(0, HZ_TO_ATTOSECONDS(frequency)) : (frequency == 1) ? attotime(1, 0) : attotime::never; } - static attotime from_hz(int frequency) { return (frequency > 0) ? from_hz(u32(frequency)) : attotime::never; } + static constexpr attotime from_hz(u32 frequency) { return (frequency > 1) ? attotime(0, HZ_TO_ATTOSECONDS(frequency)) : (frequency == 1) ? attotime(1, 0) : attotime::never; } + static constexpr attotime from_hz(int frequency) { return (frequency > 0) ? from_hz(u32(frequency)) : attotime::never; } static attotime from_hz(const XTAL &xtal) { return (xtal.dvalue() > 1.0) ? attotime(0, HZ_TO_ATTOSECONDS(xtal)) : from_hz(xtal.dvalue()); } static attotime from_hz(double frequency) { @@ -164,17 +290,86 @@ class attotime attotime &operator*=(u32 factor); attotime &operator/=(u32 factor); - // members - seconds_t m_seconds; - attoseconds_t m_attoseconds; - // constants static const attotime never; static const attotime zero; + + // friend functions + friend attotime operator+(const attotime &left, const attotime &right) noexcept; + friend attotime operator-(const attotime &left, const attotime &right) noexcept; + friend attotime operator*(const attotime &left, u32 factor); + friend attotime operator*(u32 factor, const attotime &right); + friend attotime operator/(const attotime &left, u32 factor); + friend constexpr bool operator==(const attotime &left, const attotime &right) noexcept; + friend constexpr bool operator!=(const attotime &left, const attotime &right) noexcept; + friend constexpr bool operator<(const attotime &left, const attotime &right) noexcept; + friend constexpr bool operator<=(const attotime &left, const attotime &right) noexcept; + friend constexpr bool operator>(const attotime &left, const attotime &right) noexcept; + friend constexpr bool operator>=(const attotime &left, const attotime &right) noexcept; + +private: + // members + attoseconds_t m_attoseconds; + seconds_t m_seconds; }; /** @} */ +class precise_clock +{ +public: + precise_clock(u32 rate = 1, u32 divider = 1) : + m_rate(rate), + m_divider(1), + m_period((rate == 0) ? ATTOSECONDS_PER_SECOND : ((ATTOSECONDS_PER_SECOND + rate - 1) / rate)), + m_base(attotime::zero), + m_tick_base(0) + { + } + + void reset_tick_base() { m_tick_base = 0; } + + void set_rate(attotime const &base, u32 rate, u32 divider = 0) + { + // remember the ticks at the old rate at the base time before setting it + m_tick_base = tick(base); + m_base = base; + + // configure the new rate + m_rate = rate; + if (divider != 0) + m_divider = divider; + m_period = (rate == 0) ? ATTOSECONDS_PER_SECOND : ((ATTOSECONDS_PER_SECOND + rate - 1) / rate); + } + + u64 tick(attotime const &time) + { + attotime delta = time - m_base; + u64 count = delta.seconds() * m_rate + delta.attoseconds() / m_period; + return m_tick_base + ((m_divider == 1) ? count : (count / m_divider)); + } + + attotime tick_time(u64 ticknum) + { + // can't get time of ticks prior to the last rate switch + if (ticknum < m_tick_base) + return attotime::zero; + ticknum = (ticknum - m_tick_base) * m_divider; + + u64 seconds = ticknum / m_rate; + attotime delta(seconds, (ticknum - seconds * m_rate) * m_period); + return delta + m_base; + } + +private: + u32 m_rate; // integral rate in Hz + u32 m_divider; // clock divider (or 1 if no divider) + attoseconds_t m_period; // period, measured in attoseconds + attotime m_base; // time of last rate change + u64 m_tick_base; // ticks at last rate change +}; + + //************************************************************************** // INLINE FUNCTIONS //************************************************************************** @@ -337,6 +532,15 @@ inline constexpr attoseconds_t attotime::as_attoseconds() const noexcept -ATTOSECONDS_PER_SECOND; // out-of-range negative values } +/** Convert to an subseconds value, clamping to 0-1 second */ +inline constexpr subseconds attotime::as_subseconds() const noexcept +{ + return subseconds::from_raw( + (m_seconds == 0) ? m_attoseconds : // positive values between 0 and 1 second + (m_seconds < 0) ? 0 : // negative values between -1 and 0 seconds + subseconds::MAX_RAW); // out-of-range negative values +} + /** as_ticks - convert to ticks at @p frequency */ inline u64 attotime::as_ticks(u32 frequency) const diff --git a/src/emu/device.cpp b/src/emu/device.cpp index 51088b02d4a67..8d7753379fef4 100644 --- a/src/emu/device.cpp +++ b/src/emu/device.cpp @@ -457,28 +457,6 @@ u64 device_t::attotime_to_clocks(const attotime &duration) const noexcept } -//------------------------------------------------- -// timer_alloc - allocate a timer for our device -// callback -//------------------------------------------------- - -emu_timer *device_t::timer_alloc(device_timer_id id, void *ptr) -{ - return machine().scheduler().timer_alloc(*this, id, ptr); -} - - -//------------------------------------------------- -// timer_set - set a temporary timer that will -// call our device callback -//------------------------------------------------- - -void device_t::timer_set(const attotime &duration, device_timer_id id, int param, void *ptr) -{ - machine().scheduler().timer_set(duration, *this, id, param, ptr); -} - - //------------------------------------------------- // set_machine - notify that the machine now // exists @@ -488,8 +466,10 @@ void device_t::set_machine(running_machine &machine) { m_machine = &machine; m_save = &machine.save(); + m_scheduler = &machine.scheduler(); } + //------------------------------------------------- // findit - search for all objects in auto finder // list and return status @@ -567,6 +547,9 @@ void device_t::view_register(memory_view *view) void device_t::start() { + // register our timer callback + m_device_timer.init(*this, FUNC(device_t::device_timer)); + // prepare the logerror buffer if (m_machine->allow_logging()) m_string_buffer.reserve(1024); @@ -870,7 +853,7 @@ void device_t::device_debug_setup() // fires //------------------------------------------------- -void device_t::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void device_t::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // do nothing by default } diff --git a/src/emu/device.h b/src/emu/device.h index 774930690b7dd..d7e1c2733cd60 100644 --- a/src/emu/device.h +++ b/src/emu/device.h @@ -376,9 +376,6 @@ constexpr auto driver_device_creator = &emu::detail::driver_tag_func device_t // device_t represents a device @@ -387,6 +384,7 @@ class device_t : public delegate_late_bind DISABLE_COPYING(device_t); friend class simple_list; + friend class device_persistent_timer; friend class running_machine; friend class finder_base; friend class devcb_base; @@ -528,6 +526,7 @@ class device_t : public delegate_late_bind // getters bool has_running_machine() const { return m_machine != nullptr; } running_machine &machine() const { /*assert(m_machine != nullptr);*/ return *m_machine; } + device_scheduler &scheduler() const { return *m_scheduler; } const char *tag() const { return m_tag.c_str(); } const char *basetag() const { return m_basetag.c_str(); } device_type type() const { return m_type; } @@ -607,10 +606,23 @@ class device_t : public delegate_late_bind u64 attotime_to_clocks(const attotime &duration) const noexcept; // timer interfaces - emu_timer *timer_alloc(device_timer_id id = 0, void *ptr = nullptr); - void timer_set(const attotime &duration, device_timer_id id = 0, int param = 0, void *ptr = nullptr); - void synchronize(device_timer_id id = 0, int param = 0, void *ptr = nullptr) { timer_set(attotime::zero, id, param, ptr); } - void timer_expired(emu_timer &timer, device_timer_id id, int param, void *ptr) { device_timer(timer, id, param, ptr); } + template::value, bool> = true> + emu_timer *timer_alloc(DeviceType &device, FuncType callback, char const *name, void *ptr = nullptr) + { + return m_scheduler->timer_alloc(timer_expired_delegate(callback, name, &device), ptr); + } + emu_timer *timer_alloc(device_timer_id id = 0, void *ptr = nullptr) + { + return m_scheduler->timer_alloc(*this, id, ptr); + } + void timer_set(const attotime &duration, device_timer_id id = 0, u64 param = 0, u64 param2 = 0) + { + m_device_timer.call_after(duration, param, param2, id); + } + void synchronize(device_timer_id id, u64 param = 0, u64 param2 = 0) + { + m_device_timer.call_after(attotime::zero, param, param2, id); + } // state saving interfaces template @@ -797,7 +809,7 @@ class device_t : public delegate_late_bind virtual void device_clock_changed(); virtual void device_debug_setup(); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr); //------------------- end derived class overrides @@ -833,6 +845,7 @@ class device_t : public delegate_late_bind // private state; accessor use required running_machine * m_machine; save_manager * m_save; + device_scheduler * m_scheduler; std::string m_tag; // full tag for this instance std::string m_basetag; // base part of the tag bool m_config_complete; // have we completed our configuration? @@ -841,6 +854,7 @@ class device_t : public delegate_late_bind mutable std::vector m_rom_entries; std::list m_callbacks; std::vector m_viewlist; // list of views + transient_timer_factory m_device_timer; // string formatting buffer for logerror mutable util::ovectorstream m_string_buffer; @@ -1329,6 +1343,35 @@ class device_interface_enumerator }; +// ======================> device_persistent_timer + +class device_persistent_timer : public persistent_timer +{ +public: + // construction/destruction + device_persistent_timer() : + persistent_timer() { } + + // initialize with a device and ID; implicitly calls the device's device_timer method + persistent_timer &init(device_t &device, device_timer_id id, void *ptr = nullptr) + { + // turn the ID into a string as an additional uniquifier + char tempstr[64]; + sprintf(tempstr, "%d", id); + + // call through to the base class to register this + persistent_timer::init(device, FUNC(device_t::device_timer), tempstr).set_param(2, id); + m_callback.set_ptr(ptr); + return *this; + } + +protected: + + // device timers use param2 for the id, so hide the three-parameter form + persistent_timer &set_params(u64 param0, u64 param1, u64 param2) { return *this; } +}; + + //************************************************************************** // INLINE FUNCTIONS diff --git a/src/emu/diexec.cpp b/src/emu/diexec.cpp index 49dee5f650e3d..a612448e5924f 100644 --- a/src/emu/diexec.cpp +++ b/src/emu/diexec.cpp @@ -45,32 +45,28 @@ const int TRIGGER_SUSPENDTIME = -4000; device_execute_interface::device_execute_interface(const machine_config &mconfig, device_t &device) : device_interface(device, "execute") , m_scheduler(nullptr) - , m_disabled(false) - , m_vblank_interrupt(device) - , m_vblank_interrupt_screen(nullptr) - , m_timed_interrupt(device) - , m_timed_interrupt_period(attotime::zero) , m_nextexec(nullptr) - , m_driver_irq(device) - , m_timedint_timer(nullptr) - , m_profiler(PROFILER_IDLE) + , m_run_delegate(nullptr) , m_icountptr(nullptr) , m_cycles_running(0) , m_cycles_stolen(0) + , m_cycles_per_second(0) + , m_attoseconds_per_cycle(0) + , m_totalcycles(0) + , m_profiler(PROFILER_IDLE) , m_suspend(0) , m_nextsuspend(0) , m_eatcycles(0) , m_nexteatcycles(0) , m_trigger(0) , m_inttrigger(0) - , m_totalcycles(0) - , m_divisor(0) - , m_divshift(0) - , m_cycles_per_second(0) - , m_attoseconds_per_cycle(0) + , m_disabled(false) + , m_vblank_interrupt(device) + , m_vblank_interrupt_screen(nullptr) + , m_timed_interrupt(device) + , m_timed_interrupt_period(attotime::zero) + , m_driver_irq(device) { - memset(&m_localtime, 0, sizeof(m_localtime)); - // configure the fast accessor assert(!device.interfaces().m_execute); device.interfaces().m_execute = this; @@ -164,7 +160,7 @@ void device_execute_interface::spin_until_time(const attotime &duration) suspend_until_trigger(TRIGGER_SUSPENDTIME + timetrig, true); // then set a timer for it - m_scheduler->timer_set(duration, timer_expired_delegate(FUNC(device_execute_interface::timed_trigger_callback),this), TRIGGER_SUSPENDTIME + timetrig, this); + m_timed_trigger_callback.call_after(duration, TRIGGER_SUSPENDTIME + timetrig); timetrig = (timetrig + 1) % 256; } @@ -207,16 +203,16 @@ void device_execute_interface::trigger(int trigid) // for a device //------------------------------------------------- -attotime device_execute_interface::local_time() const noexcept +attotime device_execute_interface::local_time() noexcept { // if we're active, add in the time from the current slice if (executing()) { assert(m_cycles_running >= *m_icountptr); int cycles = m_cycles_running - *m_icountptr; - return m_localtime + cycles_to_attotime(cycles); + return m_localtime.absolute() + cycles_to_attotime(cycles); } - return m_localtime; + return m_localtime.absolute(); } @@ -372,6 +368,13 @@ void device_execute_interface::interface_validity_check(validity_checker &valid) void device_execute_interface::interface_pre_start() { m_scheduler = &device().machine().scheduler(); + m_localtime.set_base_seconds(m_scheduler->m_basetime.seconds()); + + // create execution delegates + m_run_fast_delegate = execute_delegate(&device_execute_interface::execute_run, this); + m_run_debug_delegate = execute_delegate(&device_execute_interface::run_debug, this); + m_suspend_delegate = execute_delegate(&device_execute_interface::run_suspend, this); + m_run_delegate = &m_run_fast_delegate; // bind delegates m_vblank_interrupt.resolve(); @@ -386,7 +389,11 @@ void device_execute_interface::interface_pre_start() // allocate timers if we need them if (m_timed_interrupt_period != attotime::zero) - m_timedint_timer = m_scheduler->timer_alloc(timer_expired_delegate(FUNC(device_execute_interface::trigger_periodic_interrupt), this)); + m_timedint_timer.init(*this, FUNC(device_execute_interface::trigger_periodic_interrupt)); + + m_irq_pulse_clear.init(*this, FUNC(device_execute_interface::irq_pulse_clear)); + m_timed_trigger_callback.init(*this, FUNC(device_execute_interface::trigger)); + m_empty_event_queue.init(*this, FUNC(device_execute_interface::empty_event_queue)); } @@ -408,7 +415,7 @@ void device_execute_interface::interface_post_start() device().save_item(NAME(m_nexteatcycles)); device().save_item(NAME(m_trigger)); device().save_item(NAME(m_totalcycles)); - device().save_item(NAME(m_localtime)); +// device().save_item(NAME(m_localtime)); // it's more efficient and causes less clutter to save these this way device().save_item(STRUCT_MEMBER(m_input, m_stored_vector)); @@ -464,8 +471,7 @@ void device_execute_interface::interface_post_reset() if (m_timed_interrupt_period != attotime::zero) { attotime timedint_period = m_timed_interrupt_period; - assert(m_timedint_timer != nullptr); - m_timedint_timer->adjust(timedint_period, 0, timedint_period); + m_timedint_timer.adjust(timedint_period, 0, timedint_period); } } @@ -481,6 +487,8 @@ void device_execute_interface::interface_clock_changed() if (device().clock() == 0) { suspend(SUSPEND_REASON_CLOCK, true); + m_attoseconds_per_cycle = ATTOSECONDS_PER_SECOND; + m_cycles_per_second = 0; return; } @@ -492,16 +500,6 @@ void device_execute_interface::interface_clock_changed() m_cycles_per_second = clocks_to_cycles(device().clock()); m_attoseconds_per_cycle = HZ_TO_ATTOSECONDS(m_cycles_per_second); - // update the device's divisor - s64 attos = m_attoseconds_per_cycle; - m_divshift = 0; - while (attos >= (1UL << 31)) - { - m_divshift++; - attos >>= 1; - } - m_divisor = attos; - // re-compute the perfect interleave factor m_scheduler->compute_perfect_interleave(); } @@ -615,7 +613,7 @@ void device_execute_interface::pulse_input_line(int irqline, const attotime &dur set_input_line(irqline, ASSERT_LINE); attotime target_time = local_time() + duration; - m_scheduler->timer_set(target_time - m_scheduler->time(), timer_expired_delegate(FUNC(device_execute_interface::irq_pulse_clear), this), irqline); + m_irq_pulse_clear.call_after(target_time - m_scheduler->time(), irqline); } } @@ -682,7 +680,7 @@ if (TEMPLOG) printf("setline(%s,%d,%d,%d)\n", m_execute->device().tag(), m_linen if (event_index >= std::size(m_queue)) { m_qindex--; - empty_event_queue(nullptr,0); + empty_event_queue(); event_index = m_qindex++; m_execute->device().logerror("Exceeded pending input line event queue on device '%s'!\n", m_execute->device().tag()); } @@ -696,7 +694,7 @@ if (TEMPLOG) printf("setline(%s,%d,%d,%d)\n", m_execute->device().tag(), m_linen // if this is the first one, set the timer if (event_index == 0) - m_execute->scheduler().synchronize(timer_expired_delegate(FUNC(device_execute_interface::device_input::empty_event_queue),this), 0, this); + m_execute->synchronize_event_queue(m_linenum); } } @@ -705,7 +703,7 @@ if (TEMPLOG) printf("setline(%s,%d,%d,%d)\n", m_execute->device().tag(), m_linen // empty_event_queue - empty our event queue //------------------------------------------------- -TIMER_CALLBACK_MEMBER(device_execute_interface::device_input::empty_event_queue) +void device_execute_interface::device_input::empty_event_queue() { if (TEMPLOG) printf("empty_queue(%s,%d,%d)\n", m_execute->device().tag(), m_linenum, m_qindex); // loop over all events @@ -797,3 +795,27 @@ int device_execute_interface::device_input::default_irq_callback() } return vector; } + + +//------------------------------------------------- +// run_debug - landing pad for debugging +//------------------------------------------------- + +void device_execute_interface::run_debug() +{ + debugger_start_cpu_hook(m_scheduler->basetime()); + execute_run(); + debugger_stop_cpu_hook(); +} + + +//------------------------------------------------- +// run_suspend - landing pad for suspended CPUs +//------------------------------------------------- + +void device_execute_interface::run_suspend() +{ + // do nothing except eat cycles if that's what we're supposed to do + if (m_eatcycles) + *m_icountptr = 0; +} diff --git a/src/emu/diexec.h b/src/emu/diexec.h index 065248a904650..d9e3a82a7a67f 100644 --- a/src/emu/diexec.h +++ b/src/emu/diexec.h @@ -82,10 +82,10 @@ enum // interrupt callback for VBLANK and timed interrupts -typedef device_delegate device_interrupt_delegate; +using device_interrupt_delegate = device_delegate; // IRQ callback to be called by executing devices when an IRQ is actually taken -typedef device_delegate device_irq_acknowledge_delegate; +using device_irq_acknowledge_delegate = device_delegate; @@ -95,6 +95,9 @@ class device_execute_interface : public device_interface { friend class device_scheduler; friend class testcpu_state; + friend class device_input; + + using execute_delegate = delegate; public: // construction/destruction @@ -183,8 +186,9 @@ class device_execute_interface : public device_interface void signal_interrupt_trigger() { trigger(m_inttrigger); } // time and cycle accounting - attotime local_time() const noexcept; + attotime local_time() noexcept; u64 total_cycles() const noexcept; + attotime minimum_quantum_time() const { return attotime(0, minimum_quantum()); } // required operation overrides void run() { execute_run(); } @@ -218,6 +222,10 @@ class device_execute_interface : public device_interface virtual void interface_post_reset() override; virtual void interface_clock_changed() override; + // device_scheduler helpers + attoseconds_t run_for(attoseconds_t attoseconds); + u32 update_suspend(); + // for use by devcpu for now... int current_input_state(unsigned i) const { return m_input[i].m_curstate; } void set_icountptr(int &icount) { assert(!m_icountptr); m_icountptr = &icount; } @@ -244,6 +252,18 @@ class device_execute_interface : public device_interface } private: + void suspend_resume_changed(); + attoseconds_t minimum_quantum() const; + + void run_debug(); + void run_suspend(); + + void on_vblank(screen_device &screen, bool vblank_state); + + TIMER_CALLBACK_MEMBER(trigger_periodic_interrupt); + TIMER_CALLBACK_MEMBER(irq_pulse_clear) { set_input_line(int(param), CLEAR_LINE); } + TIMER_CALLBACK_MEMBER(empty_event_queue) { m_input[param].empty_event_queue(); } + // internal information about the state of inputs class device_input { @@ -258,6 +278,7 @@ class device_execute_interface : public device_interface void set_state_synced(int state, int vector = USE_STORED_VECTOR); void set_vector(int vector) { m_stored_vector = vector; } int default_irq_callback(); + void empty_event_queue(); device_execute_interface *m_execute;// pointer to the execute interface int m_linenum; // which input line we are @@ -267,11 +288,10 @@ class device_execute_interface : public device_interface u8 m_curstate; // most recently processed state s32 m_queue[32]; // queue of pending events int m_qindex; // index within the queue - - private: - TIMER_CALLBACK_MEMBER(empty_event_queue); }; + void synchronize_event_queue(int line) { m_empty_event_queue.synchronize(line); } + // internal debugger hooks void debugger_start_cpu_hook(const attotime &endtime) { @@ -287,26 +307,20 @@ class device_execute_interface : public device_interface // scheduler device_scheduler * m_scheduler; // pointer to the machine scheduler - // configuration - bool m_disabled; // disabled from executing? - device_interrupt_delegate m_vblank_interrupt; // for interrupts tied to VBLANK - const char * m_vblank_interrupt_screen; // the screen that causes the VBLANK interrupt - device_interrupt_delegate m_timed_interrupt; // for interrupts not tied to VBLANK - attotime m_timed_interrupt_period; // period for periodic interrupts - - // execution lists + // core execution state: keep all these members close to the top + // so they live within the first 128 bytes of the object; this helps + // the super-hot execution loop stay lean & mean on x64 systems device_execute_interface *m_nextexec; // pointer to the next device to execute, in order - - // input states and IRQ callbacks - device_irq_acknowledge_delegate m_driver_irq; // driver-specific IRQ callback - device_input m_input[MAX_INPUT_LINES]; // data about inputs - emu_timer * m_timedint_timer; // reference to this device's periodic interrupt timer - - // cycle counting and executing - profile_type m_profiler; // profiler tag + execute_delegate * m_run_delegate; // currently active run delegate int * m_icountptr; // pointer to the icount int m_cycles_running; // number of cycles we are executing int m_cycles_stolen; // number of cycles we artificially stole + u32 m_cycles_per_second; // cycles per second, adjusted for multipliers + attoseconds_t m_attoseconds_per_cycle; // attoseconds per adjusted clock cycle + u64 m_totalcycles; // total device cycles executed + device_scheduler::basetime_relative m_localtime; // local time, relative to the scheduler's base + profile_type m_profiler; // profiler tag + // end core execution state // suspend states u32 m_suspend; // suspend reason mask (0 = not suspended) @@ -316,30 +330,123 @@ class device_execute_interface : public device_interface s32 m_trigger; // pending trigger to release a trigger suspension s32 m_inttrigger; // interrupt trigger index - // clock and timing information - u64 m_totalcycles; // total device cycles executed - attotime m_localtime; // local time, relative to the timer system's global time - s32 m_divisor; // 32-bit attoseconds_per_cycle divisor - u8 m_divshift; // right shift amount to fit the divisor into 32 bits - u32 m_cycles_per_second; // cycles per second, adjusted for multipliers - attoseconds_t m_attoseconds_per_cycle; // attoseconds per adjusted clock cycle - - // callbacks - TIMER_CALLBACK_MEMBER(timed_trigger_callback) { trigger(param); } - - void on_vblank(screen_device &screen, bool vblank_state); + // configuration + bool m_disabled; // disabled from executing? + device_interrupt_delegate m_vblank_interrupt; // for interrupts tied to VBLANK + const char * m_vblank_interrupt_screen; // the screen that causes the VBLANK interrupt + device_interrupt_delegate m_timed_interrupt; // for interrupts not tied to VBLANK + attotime m_timed_interrupt_period; // period for periodic interrupts - TIMER_CALLBACK_MEMBER(trigger_periodic_interrupt); - TIMER_CALLBACK_MEMBER(irq_pulse_clear) { set_input_line(int(param), CLEAR_LINE); } - void suspend_resume_changed(); + // execution delegates + execute_delegate m_run_fast_delegate; // normal run delegate + execute_delegate m_run_debug_delegate; // debugging run delegate + execute_delegate m_suspend_delegate; // suspend delegate - attoseconds_t minimum_quantum() const; + // timers + transient_timer_factory m_timed_trigger_callback; + transient_timer_factory m_irq_pulse_clear; + transient_timer_factory m_empty_event_queue; -public: - attotime minimum_quantum_time() const { return attotime(0, minimum_quantum()); } + // input states and IRQ callbacks + persistent_timer m_timedint_timer; // reference to this device's periodic interrupt timer + device_irq_acknowledge_delegate m_driver_irq; // driver-specific IRQ callback + device_input m_input[MAX_INPUT_LINES]; // data about inputs }; // iterator -typedef device_interface_enumerator execute_interface_enumerator; +using execute_interface_enumerator = device_interface_enumerator; + + +//------------------------------------------------- +// run_for - execute for the given number of +// attoseconds; note that this function is super +// hot, so be extremely careful making any +// changes here +//------------------------------------------------- + +inline attoseconds_t device_execute_interface::run_for(attoseconds_t attoseconds) +{ + g_profiler.start(m_profiler); + + // compute how many cycles we want to execute, rounding up + // note that we pre-cache attoseconds per cycle + u64 attoseconds_per_cycle = m_attoseconds_per_cycle; + u32 ran = u64(attoseconds) / attoseconds_per_cycle + 1; + + // store the number of cycles we've requested in the executing + // device + // TODO: do we need to do this? + m_cycles_running = ran; + + // set the device's icount value to the number of cycles we want + // the fact that we have a direct point to this is an artifact of + // the original MAME design + auto *icountptr = m_icountptr; + *icountptr = ran; + + // clear m_cycles_stolen, which gets updated if the timeslice + // is aborted (due to synchronization or setting a new timer to + // expire before the original timeslice end) + m_cycles_stolen = 0; + + // now run the device for the number of cycles + (*m_run_delegate)(); + + // now let's see how many cycles we actually ran; if the device's + // icount is negative, then we ran more than requested (this is both + // allowed and expected), so the subtract here typically will + // increase ran + assert(ran >= *icountptr); + ran -= *icountptr; + + // if cycles were stolen (i.e., icount was artificially decremented) + // then ran isn't actually correct, so remove the number of cycles + // that we did that for + assert(ran >= m_cycles_stolen); + ran -= m_cycles_stolen; + + // time should never go backwards, nor should we ever attempt to + // execute more than a full second (minimum quantum prevents that) + assert(ran >= 0 && ran < m_cycles_per_second); + + // update the device's count of total cycles executed with the + // true number of cycles + m_totalcycles += ran; + + // update the local time for the device so that it represents an + // integral number of cycles + m_localtime.add(attoseconds_per_cycle * ran); + + g_profiler.stop(); + + // return the current localtime as a basetime-relative value + return m_localtime.relative(); +} + + +//------------------------------------------------- +// update_suspend - clock the pending suspension +// states forward, updating execution delegates +// along the way +//------------------------------------------------- + +inline u32 device_execute_interface::update_suspend() +{ + // update the suspend and eatcycles states + u32 delta = m_suspend ^ m_nextsuspend; + m_suspend = m_nextsuspend; + m_nextsuspend &= ~SUSPEND_REASON_TIMESLICE; + m_eatcycles = m_nexteatcycles; + + // update the execution delegate + if (m_suspend != 0) + m_run_delegate = &m_suspend_delegate; + else if (!m_scheduler->machine().debug_enabled()) + m_run_delegate = &m_run_fast_delegate; + else + m_run_delegate = &m_run_debug_delegate; + + return delta; +} #endif // MAME_EMU_DIEXEC_H diff --git a/src/emu/dinetwork.cpp b/src/emu/dinetwork.cpp index 69cc7e9235f2a..ad81a026eac8a 100644 --- a/src/emu/dinetwork.cpp +++ b/src/emu/dinetwork.cpp @@ -19,8 +19,8 @@ device_network_interface::~device_network_interface() void device_network_interface::interface_pre_start() { - m_send_timer = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(device_network_interface::send_complete), this)); - m_recv_timer = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(device_network_interface::recv_complete), this)); + m_send_timer.init(*this, FUNC(device_network_interface::send_complete)); + m_recv_timer.init(*this, FUNC(device_network_interface::recv_complete)); } void device_network_interface::interface_post_start() @@ -44,7 +44,7 @@ int device_network_interface::send(u8 *buf, int len, int fcs) if (result) { // schedule receive complete callback - m_recv_timer->adjust(attotime::from_ticks(len, m_bandwidth * 1'000'000 / 8), result); + m_recv_timer.adjust(attotime::from_ticks(len, m_bandwidth * 1'000'000 / 8), result); } } else if (m_dev) @@ -56,19 +56,19 @@ int device_network_interface::send(u8 *buf, int len, int fcs) } // schedule transmit complete callback - m_send_timer->adjust(attotime::from_ticks(len, m_bandwidth * 1'000'000 / 8), result); + m_send_timer.adjust(attotime::from_ticks(len, m_bandwidth * 1'000'000 / 8), result); return result; } -TIMER_CALLBACK_MEMBER(device_network_interface::send_complete) +void device_network_interface::send_complete(timer_instance const &timer) { - send_complete_cb(param); + send_complete_cb(timer.param()); } void device_network_interface::recv_cb(u8 *buf, int len) { - if (m_recv_timer->enabled()) + if (m_recv_timer.enabled()) throw emu_fatalerror("%s(%s): attempted to receive while receive already in progress", device().shortname(), device().tag()); int result = 0; @@ -84,13 +84,13 @@ void device_network_interface::recv_cb(u8 *buf, int len) m_dev->stop(); // schedule receive complete callback - m_recv_timer->adjust(attotime::from_ticks(len, m_bandwidth * 1'000'000 / 8), result); + m_recv_timer.adjust(attotime::from_ticks(len, m_bandwidth * 1'000'000 / 8), result); } } -TIMER_CALLBACK_MEMBER(device_network_interface::recv_complete) +void device_network_interface::recv_complete(timer_instance const &timer) { - recv_complete_cb(param); + recv_complete_cb(timer.param()); // start receiving data from the network again if (m_dev && !m_loopback_control) @@ -132,7 +132,7 @@ void device_network_interface::set_loopback(bool loopback) { if (loopback) m_dev->stop(); - else if (!m_recv_timer->enabled()) + else if (!m_recv_timer.enabled()) m_dev->start(); } } diff --git a/src/emu/dinetwork.h b/src/emu/dinetwork.h index 99909e939059e..c9a499a6cad74 100644 --- a/src/emu/dinetwork.h +++ b/src/emu/dinetwork.h @@ -34,8 +34,8 @@ class device_network_interface : public device_interface virtual void recv_complete_cb(int result) {} protected: - TIMER_CALLBACK_MEMBER(send_complete); - TIMER_CALLBACK_MEMBER(recv_complete); + void send_complete(timer_instance const &timer); + void recv_complete(timer_instance const &timer); bool m_promisc; char m_mac[6]; @@ -44,8 +44,8 @@ class device_network_interface : public device_interface int m_intf; bool m_loopback_control; - emu_timer *m_send_timer; - emu_timer *m_recv_timer; + persistent_timer m_send_timer; + persistent_timer m_recv_timer; }; diff --git a/src/emu/diserial.cpp b/src/emu/diserial.cpp index 21da108c04565..8b2262cd94b23 100644 --- a/src/emu/diserial.cpp +++ b/src/emu/diserial.cpp @@ -36,8 +36,6 @@ device_serial_interface::device_serial_interface(const machine_config &mconfig, m_tra_flags(TRANSMIT_REGISTER_EMPTY), m_tra_bit_count_transmitted(0), m_tra_bit_count(0), - m_rcv_clock(nullptr), - m_tra_clock(nullptr), m_rcv_rate(attotime::never), m_tra_rate(attotime::never), m_rcv_line(0), @@ -67,10 +65,8 @@ device_serial_interface::~device_serial_interface() void device_serial_interface::interface_pre_start() { - if (!m_rcv_clock) - m_rcv_clock = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(device_serial_interface::rcv_clock), this)); - if (!m_tra_clock) - m_tra_clock = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(device_serial_interface::tra_clock), this)); + m_rcv_clock.init(*this, FUNC(device_serial_interface::rcv_clock)); + m_tra_clock.init(*this, FUNC(device_serial_interface::tra_clock)); m_rcv_clock_state = false; m_tra_clock_state = false; } @@ -103,14 +99,14 @@ void device_serial_interface::set_rcv_rate(const attotime &rate) { m_rcv_rate = rate/2; receive_register_reset(); - m_rcv_clock->adjust(attotime::never); + m_rcv_clock.adjust(attotime::never); } void device_serial_interface::set_tra_rate(const attotime &rate) { m_tra_rate = rate/2; transmit_register_reset(); - m_tra_clock->adjust(attotime::never); + m_tra_clock.adjust(attotime::never); } void device_serial_interface::tra_edge() @@ -124,7 +120,7 @@ void device_serial_interface::tra_edge() if (is_transmit_register_empty() && !m_tra_rate.is_never()) { - m_tra_clock->adjust(attotime::never); + m_tra_clock.adjust(attotime::never); } } @@ -133,7 +129,7 @@ void device_serial_interface::rcv_edge() rcv_callback(); if(is_receive_register_full()) { - m_rcv_clock->adjust(attotime::never); + m_rcv_clock.adjust(attotime::never); rcv_complete(); } } @@ -225,9 +221,9 @@ WRITE_LINE_MEMBER(device_serial_interface::rx_w) if(m_rcv_flags & RECEIVE_REGISTER_SYNCHRONISED) { LOGMASKED(LOG_RX, "Receiver is synchronized\n"); - if(m_rcv_clock && !(m_rcv_rate.is_never())) + if(!(m_rcv_rate.is_never())) // make start delay just a bit longer to make sure we are called after the sender - m_rcv_clock->adjust(((m_rcv_rate*3)/2), 0, m_rcv_rate); + m_rcv_clock.adjust(((m_rcv_rate*3)/2), 0, m_rcv_rate); else if(m_start_bit_hack_for_external_clocks) m_rcv_bit_count_received--; } @@ -369,8 +365,8 @@ void device_serial_interface::transmit_register_setup(u8 data_byte) int i; u8 transmit_data; - if(m_tra_clock && !m_tra_rate.is_never()) - m_tra_clock->adjust(m_tra_rate, 0, m_tra_rate); + if(!m_tra_rate.is_never()) + m_tra_clock.adjust(m_tra_rate, 0, m_tra_rate); m_tra_bit_count_transmitted = 0; m_tra_bit_count = 0; diff --git a/src/emu/diserial.h b/src/emu/diserial.h index 62b13c028a164..13525e52c0c43 100644 --- a/src/emu/diserial.h +++ b/src/emu/diserial.h @@ -129,8 +129,8 @@ class device_serial_interface : public device_interface const char *stop_bits_tostring(stop_bits_t stop_bits); private: - TIMER_CALLBACK_MEMBER(rcv_clock) { rx_clock_w(!m_rcv_clock_state); } - TIMER_CALLBACK_MEMBER(tra_clock) { tx_clock_w(!m_tra_clock_state); } + void rcv_clock(timer_instance const &timer) { rx_clock_w(!m_rcv_clock_state); } + void tra_clock(timer_instance const &timer) { tx_clock_w(!m_tra_clock_state); } u8 m_serial_parity_table[256]; @@ -169,8 +169,8 @@ class device_serial_interface : public device_interface /* length of data to send */ u8 m_tra_bit_count; - emu_timer *m_rcv_clock; - emu_timer *m_tra_clock; + persistent_timer m_rcv_clock; + persistent_timer m_tra_clock; attotime m_rcv_rate; attotime m_tra_rate; u8 m_rcv_line; diff --git a/src/emu/drivers/testcpu.cpp b/src/emu/drivers/testcpu.cpp index 574e6fc88b3a4..34c0b235101cc 100644 --- a/src/emu/drivers/testcpu.cpp +++ b/src/emu/drivers/testcpu.cpp @@ -38,7 +38,7 @@ class testcpu_state : public driver_device } // timer callback; used to wrest control of the system - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override { static const u32 sample_instructions[] = { diff --git a/src/emu/emu.h b/src/emu/emu.h index 481f414328c68..fd530a55fbeb5 100644 --- a/src/emu/emu.h +++ b/src/emu/emu.h @@ -53,6 +53,7 @@ // machine-wide utilities #include "romentry.h" #include "save.h" +#include "schedule.h" // I/O #include "input.h" @@ -73,7 +74,6 @@ #include "disound.h" #include "divideo.h" #include "dinvram.h" -#include "schedule.h" #include "dinetwork.h" // machine and driver configuration diff --git a/src/emu/emufwd.h b/src/emu/emufwd.h index b3969a8fc996e..408e03e074065 100644 --- a/src/emu/emufwd.h +++ b/src/emu/emufwd.h @@ -212,7 +212,7 @@ class rom_load_manager; // declared in schedule.h class device_scheduler; -class emu_timer; +class timer_instance; // declared in screen.h class screen_device; diff --git a/src/emu/machine.cpp b/src/emu/machine.cpp index 5568bb48e85b5..cacdde91574c4 100644 --- a/src/emu/machine.cpp +++ b/src/emu/machine.cpp @@ -120,7 +120,6 @@ running_machine::running_machine(const machine_config &_config, machine_manager m_paused(false), m_hard_reset_pending(false), m_exit_pending(false), - m_soft_reset_timer(nullptr), m_rand_seed(0x9d14abd7), m_ui_active(_config.options().ui_active()), m_basename(_config.gamedrv().name), @@ -194,7 +193,7 @@ void running_machine::start() m_bookkeeping = std::make_unique(*this); // allocate a soft_reset timer - m_soft_reset_timer = m_scheduler.timer_alloc(timer_expired_delegate(FUNC(running_machine::soft_reset), this)); + m_soft_reset_timer.init(m_scheduler, *this, FUNC(running_machine::soft_reset)); // initialize UI input m_ui_input = std::make_unique(*this); @@ -372,14 +371,14 @@ int running_machine::run(bool quiet) #endif // run the CPUs until a reset or exit + constexpr attoseconds_t minslice = HZ_TO_ATTOSECONDS(100); while ((!m_hard_reset_pending && !m_exit_pending) || m_saveload_schedule != saveload_schedule::NONE) { g_profiler.start(PROFILER_EXTRA); - // execute CPUs if not paused + // execute CPUs if not paused; otherwise, just pump video updates through if (!m_paused) - m_scheduler.timeslice(); - // otherwise, just pump video updates through + m_scheduler.timeslice(minslice); else m_video->frame_update(); @@ -484,7 +483,7 @@ void running_machine::schedule_hard_reset() void running_machine::schedule_soft_reset() { - m_soft_reset_timer->adjust(attotime::zero); + m_soft_reset_timer.adjust(attotime::zero); // we can't be paused since the timer needs to fire resume(); @@ -1347,18 +1346,16 @@ void running_machine::emscripten_main_loop() // Emscripten will call this function at 60Hz, so step the simulation // forward for the amount of time that has passed since the last frame - const attotime frametime(0,HZ_TO_ATTOSECONDS(60)); - const attotime stoptime(scheduler->time() + frametime); + constexpr attoseconds_t frametime = HZ_TO_ATTOSECONDS(60); + const attoseconds_t start = scheduler->time().attoseconds(); + const attoseconds_t end = ((start / frametime) + 1) * frametime; - while (!machine->m_paused && !machine->scheduled_event_pending() && scheduler->time() < stoptime) + scheduler->timeslice(end - start); + // handle save/load + if (machine->m_saveload_schedule != saveload_schedule::NONE) { - scheduler->timeslice(); - // handle save/load - if (machine->m_saveload_schedule != saveload_schedule::NONE) - { - machine->handle_saveload(); - break; - } + machine->handle_saveload(); + break; } } // otherwise, just pump video updates through diff --git a/src/emu/machine.h b/src/emu/machine.h index 83e1c51226850..8750def544bb1 100644 --- a/src/emu/machine.h +++ b/src/emu/machine.h @@ -299,7 +299,7 @@ class running_machine bool m_paused; // paused? bool m_hard_reset_pending; // is a hard reset pending? bool m_exit_pending; // is an exit pending? - emu_timer * m_soft_reset_timer; // timer used to schedule a soft reset + persistent_timer m_soft_reset_timer; // timer used to schedule a soft reset // misc state u32 m_rand_seed; // current random number seed diff --git a/src/emu/natkeyboard.cpp b/src/emu/natkeyboard.cpp index e5dcdc93dbcec..2edffca925251 100644 --- a/src/emu/natkeyboard.cpp +++ b/src/emu/natkeyboard.cpp @@ -331,7 +331,6 @@ natural_keyboard::natural_keyboard(running_machine &machine) , m_fieldnum(0) , m_status_keydown(false) , m_last_cr(false) - , m_timer(nullptr) , m_current_rate(attotime::zero) , m_queue_chars() , m_accept_char() @@ -342,7 +341,7 @@ natural_keyboard::natural_keyboard(running_machine &machine) if (!m_keyboards.empty()) { m_buffer.resize(KEY_BUFFER_SIZE); - m_timer = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(natural_keyboard::timer), this)); + m_timer.init(machine.scheduler(), *this, FUNC(natural_keyboard::timer)); } // retrieve option setting @@ -358,7 +357,6 @@ natural_keyboard::natural_keyboard(running_machine &machine) void natural_keyboard::configure(ioport_queue_chars_delegate queue_chars, ioport_accept_char_delegate accept_char, ioport_charqueue_empty_delegate charqueue_empty) { // set the callbacks - assert(m_timer != nullptr); m_queue_chars = std::move(queue_chars); m_accept_char = std::move(accept_char); m_charqueue_empty = std::move(charqueue_empty); @@ -846,7 +844,7 @@ void natural_keyboard::internal_post(char32_t ch) // need to start up the timer? if (empty()) { - m_timer->adjust(choose_delay(ch)); + m_timer.adjust(choose_delay(ch)); m_fieldnum = 0; m_status_keydown = false; } @@ -864,7 +862,7 @@ void natural_keyboard::internal_post(char32_t ch) // when posting a string of characters //------------------------------------------------- -void natural_keyboard::timer(void *ptr, int param) +void natural_keyboard::timer(timer_instance const &timer) { if (!m_queue_chars.isnull()) { @@ -920,7 +918,7 @@ void natural_keyboard::timer(void *ptr, int param) // need to make sure timerproc is called again if buffer not empty if (!empty()) - m_timer->adjust(choose_delay(m_buffer[m_bufbegin])); + m_timer.adjust(choose_delay(m_buffer[m_bufbegin])); } diff --git a/src/emu/natkeyboard.h b/src/emu/natkeyboard.h index c3454ee8dd415..e51266ed99a11 100644 --- a/src/emu/natkeyboard.h +++ b/src/emu/natkeyboard.h @@ -109,7 +109,7 @@ class natural_keyboard bool can_post_alternate(char32_t ch); attotime choose_delay(char32_t ch); void internal_post(char32_t ch); - void timer(void *ptr, int param); + void timer(timer_instance const &timer); std::string unicode_to_string(char32_t ch) const; const keycode_map_entry *find_code(char32_t ch) const; @@ -125,7 +125,7 @@ class natural_keyboard unsigned m_fieldnum; // current step in multi-key sequence bool m_status_keydown; // current keydown status bool m_last_cr; // was the last char a CR? - emu_timer * m_timer; // timer for posting characters + persistent_timer m_timer; // timer for posting characters attotime m_current_rate; // current rate for posting ioport_queue_chars_delegate m_queue_chars; // queue characters callback ioport_accept_char_delegate m_accept_char; // accept character callback diff --git a/src/emu/profiler.cpp b/src/emu/profiler.cpp index 765373e34e749..bc1a253c61ad9 100644 --- a/src/emu/profiler.cpp +++ b/src/emu/profiler.cpp @@ -120,7 +120,7 @@ const char *real_profiler_state::text(running_machine &machine) start(PROFILER_PROFILER); // get the current time - attotime current_time = machine.scheduler().time(); + attotime current_time = machine.time(); // we only want to update the text periodically if ((m_text_time == attotime::never) || ((current_time - m_text_time).as_double() >= TEXT_UPDATE_TIME)) diff --git a/src/emu/schedule.cpp b/src/emu/schedule.cpp index e32afb68f00d4..0a6b29d5f4a50 100644 --- a/src/emu/schedule.cpp +++ b/src/emu/schedule.cpp @@ -6,10 +6,21 @@ Core device execution and scheduling engine. +--- + + Still to do: + - Verify performance of calling through delegate ptr vs copying the delegate + - Rebuilding suspend/execute lists seems like it's doing a lot of work, consolidate? + - Test out save states + - Clean up timer devices + - Clean up more timers in devices/drivers + ***************************************************************************/ #include "emu.h" #include "debugger.h" +#include "hashing.h" + //************************************************************************** // DEBUGGING @@ -18,189 +29,250 @@ #define VERBOSE 0 #define LOG(...) do { if (VERBOSE) machine().logerror(__VA_ARGS__); } while (0) -#define PRECISION +#define PRECISION 18 //************************************************************************** -// CONSTANTS +// EMU TIMER CB //************************************************************************** -// internal trigger IDs -enum +//------------------------------------------------- +// timer_callback - constructor +//------------------------------------------------- + +timer_callback::timer_callback(persistent_timer *persistent) : + m_ptr(nullptr), + m_scheduler(nullptr), + m_next_registered(nullptr), + m_persistent(persistent), + m_device(nullptr), + m_unique_hash(0), + m_save_index(0) { - TRIGGER_INT = -2000, - TRIGGER_YIELDTIME = -3000, - TRIGGER_SUSPENDTIME = -4000 -}; +} +//------------------------------------------------- +// ~timer_callback - destructor +//------------------------------------------------- + +timer_callback::~timer_callback() +{ + if (m_scheduler != nullptr) + m_scheduler->deregister_callback(*this); +} -//************************************************************************** -// EMU TIMER -//************************************************************************** //------------------------------------------------- -// emu_timer - constructor +// timer_callback - copy constructor //------------------------------------------------- -emu_timer::emu_timer() : - m_machine(nullptr), - m_next(nullptr), - m_prev(nullptr), - m_param(0), - m_ptr(nullptr), - m_enabled(false), - m_temporary(false), - m_period(attotime::zero), - m_start(attotime::zero), - m_expire(attotime::never), - m_device(nullptr), - m_id(0) +timer_callback::timer_callback(timer_callback const &src) : + m_delegate(src.m_delegate), + m_ptr(src.m_ptr), + m_scheduler(src.m_scheduler), + m_next_registered(src.m_next_registered), + m_persistent(nullptr), + m_device(src.m_device), + m_unique_hash(src.m_unique_hash), + m_save_index(src.m_save_index), + m_unique_id(src.m_unique_id) { } //------------------------------------------------- -// ~emu_timer - destructor +// operator= - copy assignment //------------------------------------------------- -emu_timer::~emu_timer() +timer_callback &timer_callback::operator=(timer_callback const &src) { + if (&src != this) + { + m_delegate = src.m_delegate; + m_ptr = src.m_ptr; + m_device = src.m_device; + m_scheduler = src.m_scheduler; + m_next_registered = src.m_next_registered; + // deliberately do not touch m_persistent since it is + // an allocation-only property + m_unique_hash = src.m_unique_hash; + m_unique_id = src.m_unique_id; + } + return *this; } //------------------------------------------------- -// init - completely initialize the state when -// re-allocated as a non-device timer +// set_ptr - set the callback's pointer value; +// only valid at initialization //------------------------------------------------- -inline emu_timer &emu_timer::init(running_machine &machine, timer_expired_delegate callback, void *ptr, bool temporary) +timer_callback &timer_callback::set_ptr(void *ptr) { - // ensure the entire timer state is clean - m_machine = &machine; - m_next = nullptr; - m_prev = nullptr; - m_callback = callback; - m_param = 0; + // only allowed to set pointers prior to execution; use the save state + // registration_allowed() as a proxy for this + if (!m_scheduler->machine().save().registration_allowed()) + throw emu_fatalerror("Timer pointers must remain constant after creation."); m_ptr = ptr; - m_enabled = false; - m_temporary = temporary; - m_period = attotime::never; - m_start = machine.time(); - m_expire = attotime::never; - m_device = nullptr; - m_id = 0; - - // if we're not temporary, register ourselves with the save state system - if (!m_temporary) - register_save(); - - // insert into the list - machine.scheduler().timer_list_insert(*this); return *this; } //------------------------------------------------- -// init - completely initialize the state when -// re-allocated as a device timer +// set_device - set the callback's associated +// device; only valid at initialization //------------------------------------------------- -inline emu_timer &emu_timer::init(device_t &device, device_timer_id id, void *ptr, bool temporary) +timer_callback &timer_callback::set_device(device_t &device) { - // ensure the entire timer state is clean - m_machine = &device.machine(); - m_next = nullptr; - m_prev = nullptr; - m_callback = timer_expired_delegate(FUNC(emu_timer::device_timer_expired), this); - m_param = 0; - m_ptr = ptr; - m_enabled = false; - m_temporary = temporary; - m_period = attotime::never; - m_start = machine().time(); - m_expire = attotime::never; + // only allowed to set pointers prior to execution; use the save state + // registration_allowed() as a proxy for this + if (!m_scheduler->machine().save().registration_allowed()) + throw emu_fatalerror("Timer devices must remain constant after creation."); m_device = &device; - m_id = id; + return *this; +} + + +//------------------------------------------------- +// init_base - register a callback +//------------------------------------------------- + +timer_callback &timer_callback::init_base(device_scheduler &scheduler, timer_expired_delegate const &delegate, char const *unique, const char *unique2) +{ + // build the full name, appending the unique identifier(s) if present + std::string fullid = delegate.name(); + if (unique != nullptr) + { + fullid += "/"; + fullid += unique; + } + if (unique2 != nullptr) + { + fullid += "/"; + fullid += unique2; + } - // if we're not temporary, register ourselves with the save state system - if (!m_temporary) - register_save(); + // if not already registered, just pass through + if (m_next_registered == nullptr) + { + m_delegate = delegate; + m_scheduler = &scheduler; + m_unique_id = fullid; + m_unique_hash = util::crc32_creator::simple(fullid.c_str(), fullid.length()); + m_save_index = m_scheduler->register_callback(*this); + } - // insert into the list - machine().scheduler().timer_list_insert(*this); + // otherwise, make sure we match + else + { + if (m_delegate != delegate) + throw emu_fatalerror("timer_callback::init called multiple times on the same object with different callbacks."); + if (m_unique_id != fullid) + throw emu_fatalerror("timer_callback::init called multiple times on the same object with different ids (%s vs. %s).", m_unique_id.c_str(), fullid.c_str()); + } return *this; } //------------------------------------------------- -// release - release us from the global list -// management when deallocating +// init_device - register this callback, +// associated with a device //------------------------------------------------- -inline emu_timer &emu_timer::release() +timer_callback &timer_callback::init_device(device_t &device, timer_expired_delegate const &delegate, char const *unique) { - // unhook us from the global list - machine().scheduler().timer_list_remove(*this); + return init(device.machine().scheduler(), delegate, device.tag(), unique).set_device(device); +} + + +//------------------------------------------------- +// init_clone - initialize as a clone of another +// callback, but with a different delegate +//------------------------------------------------- + +timer_callback &timer_callback::init_clone(timer_callback const &src, timer_expired_delegate const &delegate) +{ + // start with a direct copy + *this = src; + + // replace the delegate and clear the registration + m_delegate = delegate; + m_next_registered = nullptr; return *this; } + +//************************************************************************** +// TIMER INSTANCE +//************************************************************************** + //------------------------------------------------- -// enable - enable/disable a timer +// timer_instance - constructor //------------------------------------------------- -bool emu_timer::enable(bool enable) +timer_instance::timer_instance() : + m_next(nullptr), + m_prev(nullptr), + m_start(attotime::zero), + m_expire(attotime::never), + m_callback(nullptr), + m_param{ 0, 0, 0 }, + m_active(false) { - // reschedule only if the state has changed - const bool old = m_enabled; - if (old != enable) - { - // set the enable flag - m_enabled = enable; +} - // remove the timer and insert back into the list - machine().scheduler().timer_list_remove(*this); - machine().scheduler().timer_list_insert(*this); - } - return old; + +//------------------------------------------------- +// ~timer_instance - destructor +//------------------------------------------------- + +timer_instance::~timer_instance() +{ } //------------------------------------------------- -// adjust - adjust the time when this timer will -// fire and specify a period for subsequent -// firings +// init_persistent - initialize a persistent +// system or device timer; persistent timers can +// be saved and start off in a disabled state //------------------------------------------------- -void emu_timer::adjust(attotime start_delay, s32 param, const attotime &period) +timer_instance &timer_instance::init_persistent(timer_callback &callback) { - // if this is the callback timer, mark it modified - device_scheduler &scheduler = machine().scheduler(); - if (scheduler.m_callback_timer == this) - scheduler.m_callback_timer_modified = true; + assert(callback.persistent() != nullptr); + m_callback = &callback; - // compute the time of the next firing and insert into the list - m_param = param; - m_enabled = true; + // everything else has been initialized by the constructor; + // unlike transient timers, we are embedded in the persistent_timer + // object, and so don't need to worry about re-use - // clamp negative times to 0 - if (start_delay.seconds() < 0) - start_delay = attotime::zero; + return *this; +} - // set the start and expire times - m_start = scheduler.time(); - m_expire = m_start + start_delay; - m_period = period; - // remove and re-insert the timer in its new order - scheduler.timer_list_remove(*this); - scheduler.timer_list_insert(*this); +//------------------------------------------------- +// init_transient - initialize a transient +// system timer; transient timers have a parameter +// and expiration time from the outset +//------------------------------------------------- - // if this was inserted as the head, abort the current timeslice and resync - if (this == scheduler.first_timer()) - scheduler.abort_timeslice(); +timer_instance &timer_instance::init_transient(timer_callback &callback, attotime const &duration) +{ + assert(callback.persistent() == nullptr); + m_callback = &callback; + + // ensure the entire timer state is clean, since we re-use these + // instances for fast allocation + m_param[0] = m_param[1] = m_param[2] = 0; + m_active = false; + + // add immediately to the active queue + attotime start = callback.scheduler().time(); + return insert(start, start + duration); } @@ -209,9 +281,9 @@ void emu_timer::adjust(attotime start_delay, s32 param, const attotime &period) // timer was started //------------------------------------------------- -attotime emu_timer::elapsed() const noexcept +attotime timer_instance::elapsed() const noexcept { - return machine().time() - m_start; + return scheduler().time() - m_start; } @@ -220,9 +292,9 @@ attotime emu_timer::elapsed() const noexcept // remaining until the timer expires //------------------------------------------------- -attotime emu_timer::remaining() const noexcept +attotime timer_instance::remaining() const noexcept { - attotime curtime = machine().time(); + attotime curtime = scheduler().time(); if (curtime >= m_expire) return attotime::zero; return m_expire - curtime; @@ -230,62 +302,64 @@ attotime emu_timer::remaining() const noexcept //------------------------------------------------- -// register_save - register ourself with the save -// state system +// save - save our state to the given save data +// structure //------------------------------------------------- -void emu_timer::register_save() +timer_instance &timer_instance::save(timer_instance_save &dst) { - // determine our instance number and name - int index = 0; - std::string name; + dst.start = m_start; + dst.expire = m_expire; + dst.param[0] = m_param[0]; + dst.param[1] = m_param[1]; + dst.param[2] = m_param[2]; + dst.hash = m_callback->unique_hash(); + dst.save_index = m_callback->save_index(); + return *this; +} - if (m_device == nullptr) - { - // for non-device timers, it is an index based on the callback function name - name = m_callback.name() ? m_callback.name() : "unnamed"; - for (emu_timer *curtimer = machine().scheduler().first_timer(); curtimer != nullptr; curtimer = curtimer->next()) - if (!curtimer->m_temporary && curtimer->m_device == nullptr) - { - if (curtimer->m_callback.name() != nullptr && m_callback.name() != nullptr && strcmp(curtimer->m_callback.name(), m_callback.name()) == 0) - index++; - else if (curtimer->m_callback.name() == nullptr && m_callback.name() == nullptr) - index++; - } - } - else - { - // for device timers, it is an index based on the device and timer ID - name = string_format("%s/%d", m_device->tag(), m_id); - for (emu_timer *curtimer = machine().scheduler().first_timer(); curtimer != nullptr; curtimer = curtimer->next()) - if (!curtimer->m_temporary && curtimer->m_device == m_device && curtimer->m_id == m_id) - index++; - } - // save the bits - machine().save().save_item(m_device, "timer", name.c_str(), index, NAME(m_param)); - machine().save().save_item(m_device, "timer", name.c_str(), index, NAME(m_enabled)); - machine().save().save_item(m_device, "timer", name.c_str(), index, NAME(m_period)); - machine().save().save_item(m_device, "timer", name.c_str(), index, NAME(m_start)); - machine().save().save_item(m_device, "timer", name.c_str(), index, NAME(m_expire)); +//------------------------------------------------- +// restore - restore our state from the given +// save data structure +//------------------------------------------------- + +timer_instance &timer_instance::restore(timer_instance_save const &src, timer_callback &callback, bool enabled) +{ + m_callback = &callback; + m_param[0] = src.param[0]; + m_param[1] = src.param[1]; + m_param[2] = src.param[2]; + m_active = false; + m_start = src.start; + m_expire = src.expire; + return enabled ? insert(src.start, src.expire) : *this; } //------------------------------------------------- -// schedule_next_period - schedule the next -// period +// insert - insert us into the scheduler's +// active timer queue //------------------------------------------------- -inline void emu_timer::schedule_next_period() +timer_instance &timer_instance::insert(attotime const &start, attotime const &expire) { - // advance by one period - m_start = m_expire; - m_expire += m_period; + m_start = start; + m_expire = expire; + m_active = true; + return m_callback->scheduler().instance_insert(*this); +} + - // remove and re-insert us - device_scheduler &scheduler = machine().scheduler(); - scheduler.timer_list_remove(*this); - scheduler.timer_list_insert(*this); +//------------------------------------------------- +// remove - remove us from the scheduler's +// active timer queue +//------------------------------------------------- + +timer_instance &timer_instance::remove() +{ + m_active = false; + return m_callback->scheduler().instance_remove(*this); } @@ -294,27 +368,325 @@ inline void emu_timer::schedule_next_period() // line in the error log //------------------------------------------------- -void emu_timer::dump() const +void timer_instance::dump() const +{ + persistent_timer *persistent = m_callback->persistent(); + + running_machine &machine = scheduler().machine(); + machine.logerror("%p: %s exp=%15s start=%15s ptr=%p param=%lld/%lld/%lld", + this, + (m_callback->persistent() != nullptr) ? "P" : "T", + m_expire.as_string(PRECISION), + m_start.as_string(PRECISION), + m_callback->ptr(), + m_param[0], m_param[1], m_param[2]); + + if (persistent != nullptr) + machine.logerror(" per=%15s", persistent->period().as_string(PRECISION)); + + if (m_callback->device() != nullptr) + machine.logerror(" dev=%s id=%d\n", m_callback->device()->tag(), int(param(2))); + else + machine.logerror(" cb=%s\n", m_callback->name()); +} + + + +//************************************************************************** +// PERSISTENT_TIMER +//************************************************************************** + +//------------------------------------------------- +// persistent_timer - constructor +//------------------------------------------------- + +persistent_timer::persistent_timer() : + m_modified(0), + m_callback(this), + m_periodic_callback(this) +{ +} + + +//------------------------------------------------- +// ~persistent_timer - destructor +//------------------------------------------------- + +persistent_timer::~persistent_timer() +{ +} + + +//------------------------------------------------- +// enable - enable a timer, returning the +// previous state +//------------------------------------------------- + +bool persistent_timer::enable(bool enable) +{ + // fetch the previous state and set the new one + bool old = enabled(); + m_enabled = enable; + + // if nothing changed, leave it alone + if (old == enable) + return old; + + // remove if previously active + if (m_instance.active()) + m_instance.remove(); + + // only re-insert if enabled + if (enable) + m_instance.insert(m_instance.start(), m_instance.expire()); + + // mark as modified + m_modified = true; + return old; +} + + +//------------------------------------------------- +// adjust - change the timer's start time, +// parameter, or period +//------------------------------------------------- + +persistent_timer &persistent_timer::adjust(attotime const &start_delay, s32 param, attotime const &period) +{ + // set the parameters first + m_instance.set_param(param); + + // adjust implicitly enables the timer + m_enabled = true; + + // set the period and adjust the callback appropriately + m_period = period.is_zero() ? attotime::never : period; + if (periodic()) + m_instance.m_callback = &m_periodic_callback; + else + m_instance.m_callback = &m_callback; + + // compute start/expire times + attotime start = m_callback.scheduler().time(); + attotime expire = start; + if (start_delay.seconds() >= 0) + expire += start_delay; + + // then insert into the active list, removing first if previously active + if (m_instance.active()) + m_instance.remove(); + if (!expire.is_never()) + m_instance.insert(start, expire); + + // mark as modified + m_modified = true; + return *this; +} + + +//------------------------------------------------- +// init_common - handle common initialization +// tasks +//------------------------------------------------- + +persistent_timer &persistent_timer::init_common() +{ + // initialize the timer instance + m_instance.init_persistent(m_callback); + + // create the periodic callback by cloning (but not registering) our periodic + // front-end callback + m_periodic_callback.init_clone(m_callback, timer_expired_delegate(FUNC(persistent_timer::periodic_callback), this)); + + return *this; +} + + +//------------------------------------------------- +// save - save persistent timer data to the given +// save data structure +//------------------------------------------------- + +persistent_timer &persistent_timer::save(timer_instance_save &dst) +{ + m_instance.save(dst); + + // overwrite the hash/save_index from the instance becuase it could be pointing + // to our periodic callback and we want the real underlying callback + dst.hash = m_callback.unique_hash(); + dst.save_index = m_callback.save_index(); + dst.period = m_period; + dst.enabled = enabled(); + return *this; +} + + +//------------------------------------------------- +// restore - restore persistent timer data from +// the given save data structure +//------------------------------------------------- + +persistent_timer &persistent_timer::restore(timer_instance_save const &src, timer_callback &callback) +{ + m_period = src.period; + m_enabled = src.enabled; + m_instance.restore(src, periodic() ? m_periodic_callback : m_callback, m_enabled); + return *this; +} + + +//------------------------------------------------- +// periodic_callback - callback to handle +// periodic timers +//------------------------------------------------- + +void persistent_timer::periodic_callback(timer_instance const &timer) +{ + // clear the modified state + m_modified = false; + + // call the real callback + m_callback(timer); + + // if the timer wasn't modified during the callback, advance by one period + if (!m_modified) + m_instance.insert(m_instance.m_expire, m_instance.m_expire + m_period); +} + + + +//************************************************************************** +// TRANSIENT TIMER FACTORY +//************************************************************************** + +//------------------------------------------------- +// transient_timer_factory - constructor +//------------------------------------------------- + +transient_timer_factory::transient_timer_factory() +{ +} + + + +//************************************************************************** +// BASETIME-RELATIVE +//************************************************************************** + +//------------------------------------------------- +// basetime_relative - constructor +//------------------------------------------------- + +device_scheduler::basetime_relative::basetime_relative() : + m_relative(0), + m_absolute(attotime::zero), + m_absolute_dirty(false), + m_base_seconds(0) +{ +} + + +//------------------------------------------------- +// set - set an absolute time, updating the +// base-relative time as well +//------------------------------------------------- + +void device_scheduler::basetime_relative::set(attotime const &src) { - machine().logerror("%p: en=%d temp=%d exp=%15s start=%15s per=%15s param=%d ptr=%p", this, m_enabled, m_temporary, m_expire.as_string(PRECISION), m_start.as_string(PRECISION), m_period.as_string(PRECISION), m_param, m_ptr); - if (m_device == nullptr) - if (m_callback.name() == nullptr) - machine().logerror(" cb=NULL\n"); + m_absolute = src; + m_absolute_dirty = false; + update_relative(); +} + + +//------------------------------------------------- +// add - add attoseconds to the base-relative +// time, marking the absolute time dirty for +// later conversion if needed +//------------------------------------------------- + +void device_scheduler::basetime_relative::add(attoseconds_t src) +{ + m_relative += src; + m_absolute_dirty = true; +} + + +//------------------------------------------------- +// set_base_seconds - set the base seconds value +//------------------------------------------------- + +void device_scheduler::basetime_relative::set_base_seconds(seconds_t base) +{ + // update the absolute time if dirty first + if (m_absolute_dirty) + update_absolute(); + + // then set and recompute the relative from the absolute time + m_base_seconds = base; + update_relative(); +} + + +//------------------------------------------------- +// update_relative - update the relative time +// from the absolute time +//------------------------------------------------- + +void device_scheduler::basetime_relative::update_relative() +{ + seconds_t delta = m_absolute.seconds() - m_base_seconds; + + // if the seconds match, then the relative time is fine as-is + m_relative = m_absolute.attoseconds(); + if (delta == 0) + return; + + // if the absolute time is ahead/behind, we need to add/subtract + // ATTOSECONDS_PER_SECOND; but only do it once + if (delta > 0) + { + if (delta == 1) + m_relative += ATTOSECONDS_PER_SECOND; else - machine().logerror(" cb=%s\n", m_callback.name()); + m_relative = MAX_RELATIVE; + } else - machine().logerror(" dev=%s id=%d\n", m_device->tag(), m_id); + { + if (delta == -1) + m_relative -= ATTOSECONDS_PER_SECOND; + else + m_relative = MIN_RELATIVE; + } } //------------------------------------------------- -// device_timer_expired - trampoline to avoid a -// conditional jump on the hot path +// update_absolute - update the absolute time +// from the relative time //------------------------------------------------- -void emu_timer::device_timer_expired(emu_timer &timer, void *ptr, s32 param) +void device_scheduler::basetime_relative::update_absolute() { - timer.m_device->timer_expired(timer, timer.m_id, param, ptr); + seconds_t secs = m_base_seconds; + attoseconds_t attos = m_relative; + + // if relative is outside of range, adjust the seconds + if (attos >= ATTOSECONDS_PER_SECOND) + { + attos -= ATTOSECONDS_PER_SECOND; + secs++; + } + else if (attos < 0) + { + attos += ATTOSECONDS_PER_SECOND; + secs--; + } + + // set the new value and clear any dirtiness + m_absolute.set_seconds(secs); + m_absolute.set_attoseconds(attos); + m_absolute_dirty = false; } @@ -332,21 +704,40 @@ device_scheduler::device_scheduler(running_machine &machine) : m_executing_device(nullptr), m_execute_list(nullptr), m_basetime(attotime::zero), - m_timer_list(nullptr), + m_active_timers_head(&m_active_timers_tail), + m_free_timers(nullptr), + m_registered_callbacks(nullptr), m_callback_timer(nullptr), - m_callback_timer_modified(false), m_callback_timer_expire_time(attotime::zero), m_suspend_changes_pending(true), m_quantum_minimum(ATTOSECONDS_IN_NSEC(1) / 1000) { - // append a single never-expiring timer so there is always one in the list - m_timer_list = &m_timer_allocator.alloc()->init(machine, timer_expired_delegate(), nullptr, true); - m_timer_list->adjust(attotime::never); - // register global states - machine.save().save_item(NAME(m_basetime)); - machine.save().register_presave(save_prepost_delegate(FUNC(device_scheduler::presave), this)); - machine.save().register_postload(save_prepost_delegate(FUNC(device_scheduler::postload), this)); + auto &save = machine.save(); + save.save_item(NAME(m_basetime)); + + // we could use STRUCT_MEMBER here if it worked on attotimes, but it doesn't + // currently, so do it the manual way + for (int index = 0; index < MAX_SAVE_INSTANCES; index++) + { + save.save_item(NAME(m_timer_save[index].start), index); + save.save_item(NAME(m_timer_save[index].expire), index); + save.save_item(NAME(m_timer_save[index].param), index); + save.save_item(NAME(m_timer_save[index].hash), index); + save.save_item(NAME(m_timer_save[index].save_index), index); + save.save_item(NAME(m_timer_save[index].enabled), index); + save.save_item(NAME(m_timer_save[index].period), index); + } + + // register for presave and postload + save.register_presave(save_prepost_delegate(FUNC(device_scheduler::presave), this)); + save.register_postload(save_prepost_delegate(FUNC(device_scheduler::postload), this)); + + // create a factory for empty timers + m_empty_timer.init(*this, *this, FUNC(device_scheduler::empty_timer)); + + // create a factory for trigger timers + m_timed_trigger.init(*this, *this, FUNC(device_scheduler::timed_trigger)); } @@ -356,9 +747,44 @@ device_scheduler::device_scheduler(running_machine &machine) : device_scheduler::~device_scheduler() { - // remove all timers - while (m_timer_list != nullptr) - m_timer_allocator.reclaim(m_timer_list->release()); +#if (COLLECT_SCHEDULER_STATS) + double seconds = m_basetime.as_double(); + printf("%12.2f timeslice\n", m_timeslice / seconds); + printf("%12.2f avg reps until minslice\n", (1.0 * m_timeslice_inner1) / m_timeslice); + printf("%12.2f avg reps through execution loop until timer\n", (1.0 * m_timeslice_inner2) / m_timeslice_inner1); + printf("%12.2f avg run_for called per execution loop\n", (1.0 * m_timeslice_inner3) / m_timeslice_inner2); + printf("%12.2f execute_timers: (%.2f avg)\n", m_execute_timers / seconds, 1.0 * m_execute_timers_average / m_execute_timers); + printf("%12.2f update_basetime\n", m_update_basetime / seconds); + printf("%12.2f apply_suspend_changes\n", m_apply_suspend_changes / seconds); + printf("%12.2f compute_perfect_interleave\n", m_compute_perfect_interleave / seconds); + printf("%12.2f rebuild_execute_list\n", m_rebuild_execute_list / seconds); + printf("%12.2f add_scheduling_quantum\n", m_add_scheduling_quantum / seconds); + printf("%12.2f instance_alloc (%lld full)\n", m_instance_alloc / seconds, m_instance_alloc_full); + u64 total_insert = m_instance_insert_head + m_instance_insert_tail + m_instance_insert_middle; + printf("%12.2f instance_insert:\n", total_insert / seconds); + printf("%12.2f head (%.2f%%)\n", m_instance_insert_head / seconds, (100.0 * m_instance_insert_head) / total_insert); + printf("%12.2f tail (%.2f%%)\n", m_instance_insert_tail / seconds, (100.0 * m_instance_insert_tail) / total_insert); + printf("%12.2f middle (%.2f%%, avg search = %.2f)\n", m_instance_insert_middle / seconds, (100.0 * m_instance_insert_middle) / total_insert, 1.0 * m_instance_insert_average / m_instance_insert_middle); + printf("%12.2f instance_remove\n", m_instance_remove / seconds); + printf("%12.2f empty_timer\n", m_empty_timer_calls / seconds); + printf("%12.2f timed_trigger\n", m_timed_trigger_calls / seconds); + printf("\ntimers:\n"); + + using cbptr = timer_callback *; + std::vector timers; + for (timer_callback *cb = m_registered_callbacks; cb != nullptr; cb = cb->m_next_registered) + if (cb->m_calls != 0) + timers.push_back(cb); + std::sort(timers.begin(), timers.end(), + [](cbptr const &a, cbptr const &b) + { + return (a->m_calls > b->m_calls); + }); + + static char const *forms[] = { "native", " void ", "device", " int ", "legacy", "intint", " int3 " }; + for (auto &cb : timers) + printf("%12.2f %s %s\n", cb->m_calls / seconds, forms[cb->m_delegate.m_form], cb->m_unique_id.c_str()); +#endif } @@ -380,168 +806,135 @@ attotime device_scheduler::time() const noexcept //------------------------------------------------- // can_save - return true if it's safe to save -// (i.e., no temporary timers outstanding) +// (i.e., no transient timers outstanding) //------------------------------------------------- bool device_scheduler::can_save() const { - // if any live temporary timers exit, fail - for (emu_timer *timer = m_timer_list; timer != nullptr; timer = timer->next()) - if (timer->m_temporary && !timer->expire().is_never()) - { - machine().logerror("Failed save state attempt due to anonymous timers:\n"); - dump_timers(); - return false; - } + // count the total number of active timers + int index = 0; + for (timer_instance *timer = m_active_timers_head; timer != &m_active_timers_tail; timer = timer->next()) + index++; - // otherwise, we're good - return true; + // also count the number of inactive persistent timers + for (timer_callback *cb = m_registered_callbacks; cb != nullptr && index < MAX_SAVE_INSTANCES; cb = cb->m_next_registered) + if (cb->persistent() != nullptr && !cb->persistent()->instance().active()) + index++; + + return (index <= MAX_SAVE_INSTANCES); } //------------------------------------------------- -// apply_suspend_changes - applies suspend/resume -// changes to all device_execute_interfaces +// timeslice - execute all devices for a single +// timeslice //------------------------------------------------- -inline void device_scheduler::apply_suspend_changes() +void device_scheduler::timeslice(attoseconds_t minslice) { - u32 suspendchanged = 0; - for (device_execute_interface *exec = m_execute_list; exec != nullptr; exec = exec->m_nextexec) + INCREMENT_SCHEDULER_STAT(m_timeslice); + + // run at least the given number of attoseconds + attoseconds_t basetime = m_basetime.attoseconds(); + attoseconds_t endslice = basetime + minslice; + while (basetime < endslice) { - suspendchanged |= exec->m_suspend ^ exec->m_nextsuspend; - exec->m_suspend = exec->m_nextsuspend; - exec->m_nextsuspend &= ~SUSPEND_REASON_TIMESLICE; - exec->m_eatcycles = exec->m_nexteatcycles; - } + INCREMENT_SCHEDULER_STAT(m_timeslice_inner1); - // recompute the execute list if any CPUs changed their suspension state - if (suspendchanged != 0) - rebuild_execute_list(); - else - m_suspend_changes_pending = false; -} + LOG("------------------\n"); + + // if the current quantum has expired, find a new one + while (m_basetime >= m_quantum_list.first()->m_expire) + m_quantum_allocator.reclaim(m_quantum_list.detach_head()); + // loop until we hit the next timer + while (basetime < m_first_timer_expire.relative()) + { + INCREMENT_SCHEDULER_STAT(m_timeslice_inner2); -//------------------------------------------------- -// timeslice - execute all devices for a single -// timeslice -//------------------------------------------------- + // by default, assume our target is the end of the next quantum + attoseconds_t target = basetime + m_quantum_list.first()->m_actual; + assert(target < basetime_relative::MAX_RELATIVE); -void device_scheduler::timeslice() -{ - bool call_debugger = ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0); + // however, if the next timer is going to fire before then, override + if (m_first_timer_expire.relative() < target) + target = m_first_timer_expire.relative(); - // build the execution list if we don't have one yet - if (UNEXPECTED(m_execute_list == nullptr)) - rebuild_execute_list(); + LOG("timeslice: target = %18lldas\n", target); - // if the current quantum has expired, find a new one - while (m_basetime >= m_quantum_list.first()->m_expire) - m_quantum_allocator.reclaim(m_quantum_list.detach_head()); + // do we have pending suspension changes? + if (m_suspend_changes_pending) + apply_suspend_changes(); - // loop until we hit the next timer - while (m_basetime < m_timer_list->m_expire) - { - // by default, assume our target is the end of the next quantum - attotime target(m_basetime + attotime(0, m_quantum_list.first()->m_actual)); + // loop over all executing devices + for (device_execute_interface *exec = m_execute_list; exec != nullptr; exec = exec->m_nextexec) + { + // compute how many attoseconds to execute this device + attoseconds_t delta = target - exec->m_localtime.relative() - 1; + assert(delta < basetime_relative::MAX_RELATIVE); - // however, if the next timer is going to fire before then, override - if (m_timer_list->m_expire < target) - target = m_timer_list->m_expire; + // if we're already ahead, do nothing; in theory we should do this 0 as + // well, but it's a rare case and the compiler tends to be able to + // optimize a strict < 0 check better than <= 0 + if (delta < 0) + continue; - LOG("------------------\n"); - LOG("cpu_timeslice: target = %s\n", target.as_string(PRECISION)); + INCREMENT_SCHEDULER_STAT(m_timeslice_inner3); - // do we have pending suspension changes? - if (m_suspend_changes_pending) - apply_suspend_changes(); + // store a pointer to the executing device so that we know the + // relevant active context + m_executing_device = exec; - // loop over all CPUs - for (device_execute_interface *exec = m_execute_list; exec != nullptr; exec = exec->m_nextexec) - { - // only process if this CPU is executing or truly halted (not yielding) - // and if our target is later than the CPU's current time (coarse check) - if (EXPECTED((exec->m_suspend == 0 || exec->m_eatcycles) && target.seconds() >= exec->m_localtime.seconds())) - { - // compute how many attoseconds to execute this CPU - attoseconds_t delta = target.attoseconds() - exec->m_localtime.attoseconds(); - if (delta < 0 && target.seconds() > exec->m_localtime.seconds()) - delta += ATTOSECONDS_PER_SECOND; - assert(delta == (target - exec->m_localtime).as_attoseconds()); +#if VERBOSE + u64 start_cycles = exec->m_total_cycles; + LOG(" %12.12s: t=%018lldas %018lldas = %dc; ", exec->device().tag(), exec->m_localtime.relative(), delta, u64(delta) / exec->m_attoseconds_per_cycle + 1); +#endif - if (exec->m_attoseconds_per_cycle == 0) - { - exec->m_localtime = target; - } - // if we have enough for at least 1 cycle, do the math - else if (delta >= exec->m_attoseconds_per_cycle) + // execute for the given number of attoseconds + attoseconds_t localtime = exec->run_for(delta); + +#if VERBOSE + LOG(" ran %dc, %dc total", s32(exec->m_totalcycles - start_cycles), s32(exec->m_totalcycles)); +#endif + + // if the new local device time is less than our target, move the + // target up, but not before the base + if (UNEXPECTED(localtime < target)) { - // compute how many cycles we want to execute - int ran = exec->m_cycles_running = divu_64x32(u64(delta) >> exec->m_divshift, exec->m_divisor); - LOG(" cpu '%s': %d (%d cycles)\n", exec->device().tag(), delta, exec->m_cycles_running); - - // if we're not suspended, actually execute - if (exec->m_suspend == 0) - { - g_profiler.start(exec->m_profiler); - - // note that this global variable cycles_stolen can be modified - // via the call to cpu_execute - exec->m_cycles_stolen = 0; - m_executing_device = exec; - *exec->m_icountptr = exec->m_cycles_running; - if (!call_debugger) - exec->run(); - else - { - exec->debugger_start_cpu_hook(target); - exec->run(); - exec->debugger_stop_cpu_hook(); - } - - // adjust for any cycles we took back - assert(ran >= *exec->m_icountptr); - ran -= *exec->m_icountptr; - assert(ran >= exec->m_cycles_stolen); - ran -= exec->m_cycles_stolen; - g_profiler.stop(); - } - - // account for these cycles - exec->m_totalcycles += ran; - - // update the local time for this CPU - attotime deltatime; - if (ran < exec->m_cycles_per_second) - deltatime = attotime(0, exec->m_attoseconds_per_cycle * ran); - else - { - u32 remainder; - s32 secs = divu_64x32_rem(ran, exec->m_cycles_per_second, remainder); - deltatime = attotime(secs, u64(remainder) * exec->m_attoseconds_per_cycle); - } - assert(deltatime >= attotime::zero); - exec->m_localtime += deltatime; - LOG(" %d ran, %d total, time = %s\n", ran, s32(exec->m_totalcycles), exec->m_localtime.as_string(PRECISION)); - - // if the new local CPU time is less than our target, move the target up, but not before the base - if (exec->m_localtime < target) - { - target = std::max(exec->m_localtime, m_basetime); - LOG(" (new target)\n"); - } + target = std::max(localtime, basetime); + LOG(" (new target)"); } + LOG("\n"); } + + // set the executing device to null, which indicates that there is + // no active context; this is used by machine.time() to return the + // context-appropriate value + m_executing_device = nullptr; + + // our final target becomes our new base time + basetime = target; } - m_executing_device = nullptr; - // update the base time - m_basetime = target; - } + // if basetime remained within the current second, we just have to + // update the attoseconds part; however, it if did overflow, we need to + // update all the basetime_relative structures in the system + if (basetime < ATTOSECONDS_PER_SECOND) + m_basetime.set_attoseconds(basetime); + else + { + basetime -= ATTOSECONDS_PER_SECOND; + endslice -= ATTOSECONDS_PER_SECOND; + assert(basetime < ATTOSECONDS_PER_SECOND); + m_basetime.set_attoseconds(basetime); + m_basetime.set_seconds(m_basetime.seconds() + 1); + update_basetime(); + } - // execute timers - execute_timers(); + // now that we've reached the expiration time of the first timer in the + // queue, execute pending ones + execute_timers(); + } } @@ -561,15 +954,11 @@ void device_scheduler::abort_timeslice() // trigger - generate a global trigger //------------------------------------------------- -void device_scheduler::trigger(int trigid, const attotime &after) +void device_scheduler::trigger(int trigid, attotime const &after) { - // ensure we have a list of executing devices - if (m_execute_list == nullptr) - rebuild_execute_list(); - // if we have a non-zero time, schedule a timer if (after != attotime::zero) - timer_set(after, timer_expired_delegate(FUNC(device_scheduler::timed_trigger), this), trigid); + m_timed_trigger.call_after(after, trigid); // send the trigger to everyone who cares else @@ -583,7 +972,7 @@ void device_scheduler::trigger(int trigid, const attotime &after) // interleave factor //------------------------------------------------- -void device_scheduler::boost_interleave(const attotime ×lice_time, const attotime &boost_duration) +void device_scheduler::boost_interleave(attotime const ×lice_time, attotime const &boost_duration) { // ignore timeslices > 1 second if (timeslice_time.seconds() > 0) @@ -593,48 +982,70 @@ void device_scheduler::boost_interleave(const attotime ×lice_time, const at //------------------------------------------------- -// timer_alloc - allocate a global non-device -// timer and return a pointer +// register_callback - register a timer +// expired callback //------------------------------------------------- -emu_timer *device_scheduler::timer_alloc(timer_expired_delegate callback, void *ptr) +u32 device_scheduler::register_callback(timer_callback &callback) { - return &m_timer_allocator.alloc()->init(machine(), callback, ptr, false); + // look for duplicates and compute a unique id + u32 index = 0; + for (timer_callback *scan = m_registered_callbacks; scan != nullptr; scan = scan->m_next_registered) + if (scan->unique_hash() == callback.unique_hash()) + index++; + + // now hook us in + callback.m_next_registered = m_registered_callbacks; + m_registered_callbacks = &callback; + return index; } //------------------------------------------------- -// timer_set - allocate an anonymous non-device -// timer and set it to go off after the given -// amount of time +// deregister_callback - deregister a timer +// expired callback //------------------------------------------------- -void device_scheduler::timer_set(const attotime &duration, timer_expired_delegate callback, int param, void *ptr) +void device_scheduler::deregister_callback(timer_callback &callback) { - m_timer_allocator.alloc()->init(machine(), callback, ptr, true).adjust(duration, param); + for (timer_callback **nextptr = &m_registered_callbacks; *nextptr != nullptr; nextptr = &(*nextptr)->m_next_registered) + if (*nextptr == &callback) + { + *nextptr = callback.m_next_registered; + return; + } } //------------------------------------------------- -// timer_alloc - allocate a global device timer +// timer_alloc - allocate a persistent timer // and return a pointer //------------------------------------------------- -emu_timer *device_scheduler::timer_alloc(device_t &device, device_timer_id id, void *ptr) +persistent_timer *device_scheduler::timer_alloc(timer_expired_delegate const &callback, void *ptr) { - return &m_timer_allocator.alloc()->init(device, id, ptr, false); + // allocate a new persistent timer and save it in a vector + m_allocated_persistents.push_back(std::make_unique()); + persistent_timer &timer = *m_allocated_persistents.back().get(); + + // initialize the timer instance + return &timer.init(*this, callback).set_ptr(ptr); } //------------------------------------------------- -// timer_set - allocate an anonymous device timer -// and set it to go off after the given amount of -// time +// timer_alloc - allocate a persistent device +// timer and return a pointer //------------------------------------------------- -void device_scheduler::timer_set(const attotime &duration, device_t &device, device_timer_id id, int param, void *ptr) +persistent_timer *device_scheduler::timer_alloc(device_t &device, device_timer_id id, void *ptr) { - m_timer_allocator.alloc()->init(device, id, ptr, true).adjust(duration, param); + // allocate a new persistent timer and save it in a vector + m_allocated_persistents.push_back(std::make_unique()); + device_persistent_timer &timer = static_cast(*m_allocated_persistents.back().get()); + + // initialize the timer instance + return &timer.init(device, id, ptr); } @@ -650,28 +1061,47 @@ void device_scheduler::eat_all_cycles() } -//------------------------------------------------- -// timed_trigger - generate a trigger after a -// given amount of time -//------------------------------------------------- - -void device_scheduler::timed_trigger(void *ptr, s32 param) -{ - trigger(param); -} - - //------------------------------------------------- // presave - before creating a save state //------------------------------------------------- void device_scheduler::presave() { - // report the timer state after a log - LOG("Prior to saving state:\n"); + int index = 0; + #if VERBOSE dump_timers(); #endif + + // copy in all the timer instance data to the save area + for (timer_instance *timer = m_active_timers_head; timer != &m_active_timers_tail && index < MAX_SAVE_INSTANCES; timer = timer->next()) + { + auto *persistent = timer->m_callback->persistent(); + if (persistent != nullptr) + persistent->save(m_timer_save[index++]); + else + timer->save(m_timer_save[index++]); + } + + // then copy in inactive persistent timers + for (timer_callback *cb = m_registered_callbacks; cb != nullptr && index < MAX_SAVE_INSTANCES; cb = cb->m_next_registered) + if (cb->persistent() != nullptr && !cb->persistent()->instance().active()) + cb->persistent()->save(m_timer_save[index++]); + + // zero out the remainder + for ( ; index < MAX_SAVE_INSTANCES; index++) + { + auto &dest = m_timer_save[index]; + dest.start = attotime::zero; + dest.expire = attotime::never; + dest.period = attotime::never; + dest.param[0] = dest.param[1] = dest.param[2] = 0; + dest.hash = 0; + dest.enabled = false; + } + + // report the timer state after a log + LOG("Prior to saving state:\n"); } @@ -681,26 +1111,45 @@ void device_scheduler::presave() void device_scheduler::postload() { - // remove all timers and make a private list of permanent ones - simple_list private_list; - while (m_timer_list != nullptr) + // first discard or capture active timers + while (m_active_timers_head != &m_active_timers_tail) { - emu_timer &timer = *m_timer_list; + auto &prevhead = *m_active_timers_head; + m_active_timers_head = prevhead.m_next; + instance_reclaim(prevhead); + } - // temporary timers go away entirely (except our special never-expiring one) - if (timer.m_temporary && !timer.expire().is_never()) - m_timer_allocator.reclaim(timer.release()); + // now go through the restored save area and recreate all the timers + for (int index = 0; index < MAX_SAVE_INSTANCES; index++) + { + // scan until we find a never-expiring timer + auto &dest = m_timer_save[index]; + if (dest.expire.is_never()) + break; + + // first find a matching callback + timer_callback *cb; + for (cb = m_registered_callbacks; cb != nullptr; cb = cb->m_next_registered) + if (cb->unique_hash() == dest.hash && cb->save_index() == dest.save_index) + break; + + // if we can't find the timer, that's a concern (probably fatal) + if (cb == nullptr) + { + osd_printf_warning("Unable to find matching callback for %08X\n", dest.hash); + continue; + } - // permanent ones get added to our private list + // if the callback is persistent, just configure the persistent timer + auto *persistent = cb->persistent(); + if (persistent != nullptr) + persistent->restore(dest, *cb); else - private_list.append(timer_list_remove(timer)); + instance_alloc().restore(dest, *cb); } - // now re-insert them; this effectively re-sorts them by time - emu_timer *timer; - while ((timer = private_list.detach_head()) != nullptr) - timer_list_insert(*timer); - + // force a refresh of things that are lazily updated + update_first_timer_expire(); m_suspend_changes_pending = true; rebuild_execute_list(); @@ -712,6 +1161,77 @@ void device_scheduler::postload() } +//------------------------------------------------- +// execute_timers - execute timers that are due +//------------------------------------------------- + +inline void device_scheduler::execute_timers() +{ + LOG("execute_timers: new=%s head->expire=%s\n", m_basetime.as_string(PRECISION), m_first_timer_expire.absolute().as_string(PRECISION)); + + INCREMENT_SCHEDULER_STAT(m_execute_timers); + + // now process any timers that are overdue; due to our never-expiring dummy + // instance, we don't need to check for nullptr on the head + while (m_active_timers_head->m_expire <= m_basetime) + { + INCREMENT_SCHEDULER_STAT(m_execute_timers_average); + + // pull the timer off the head of the queue + timer_instance &timer = *m_active_timers_head; + m_active_timers_head = timer.m_next; + m_active_timers_head->m_prev = nullptr; + timer.m_active = false; + + // set the global state of which callback we're in + m_callback_timer = &timer; + m_callback_timer_expire_time = timer.m_expire; + + // call the callback + g_profiler.start(PROFILER_TIMER_CALLBACK); + { + if (timer.m_callback->device() != nullptr) + LOG("execute_timers: timer device %s timer %d\n", timer.m_callback->device()->tag(), int(timer.param(2))); + else + LOG("execute_timers: timer callback %s\n", timer.m_callback->name()); + + (*timer.m_callback)(timer); + } + g_profiler.stop(); + + // reclaim the timer now that we're done with it + instance_reclaim(timer); + } + + // update the expiration time of the first timer + update_first_timer_expire(); + + // clear the callback timer global + m_callback_timer = nullptr; +} + + +//------------------------------------------------- +// update_basetime - update all the +// basetime_relative times now that the basetime +// has ticked over another second +//------------------------------------------------- + +void device_scheduler::update_basetime() +{ + INCREMENT_SCHEDULER_STAT(m_update_basetime); + + seconds_t base_seconds = m_basetime.seconds(); + + // update execute devices + for (device_execute_interface &exec : execute_interface_enumerator(machine().root_device())) + exec.m_localtime.set_base_seconds(base_seconds); + + // move timers from future list into current list + m_first_timer_expire.set_base_seconds(base_seconds); +} + + //------------------------------------------------- // compute_perfect_interleave - compute the // "perfect" interleave interval @@ -719,8 +1239,10 @@ void device_scheduler::postload() void device_scheduler::compute_perfect_interleave() { + INCREMENT_SCHEDULER_STAT(m_compute_perfect_interleave); + // ensure we have a list of executing devices - if (m_execute_list == nullptr) + if (UNEXPECTED(m_execute_list == nullptr)) rebuild_execute_list(); // start with the first one @@ -763,6 +1285,8 @@ void device_scheduler::compute_perfect_interleave() void device_scheduler::rebuild_execute_list() { + INCREMENT_SCHEDULER_STAT(m_rebuild_execute_list); + // if we haven't yet set a scheduling quantum, do it now if (m_quantum_list.empty()) { @@ -809,122 +1333,28 @@ void device_scheduler::rebuild_execute_list() //------------------------------------------------- -// timer_list_insert - insert a new timer into -// the list at the appropriate location +// apply_suspend_changes - applies suspend/resume +// changes to all device_execute_interfaces //------------------------------------------------- -inline emu_timer &device_scheduler::timer_list_insert(emu_timer &timer) +inline void device_scheduler::apply_suspend_changes() { - // disabled timers sort to the end - const attotime expire = timer.m_enabled ? timer.m_expire : attotime::never; - - // loop over the timer list - emu_timer *prevtimer = nullptr; - for (emu_timer *curtimer = m_timer_list; curtimer != nullptr; prevtimer = curtimer, curtimer = curtimer->next()) - { - // if the current list entry expires after us, we should be inserted before it - if (curtimer->m_expire > expire) - { - // link the new guy in before the current list entry - timer.m_prev = prevtimer; - timer.m_next = curtimer; - - if (prevtimer != nullptr) - prevtimer->m_next = &timer; - else - m_timer_list = &timer; - - curtimer->m_prev = &timer; - return timer; - } - } - - // need to insert after the last one - if (prevtimer != nullptr) - prevtimer->m_next = &timer; - else - m_timer_list = &timer; - - timer.m_prev = prevtimer; - timer.m_next = nullptr; - return timer; -} + INCREMENT_SCHEDULER_STAT(m_apply_suspend_changes); + // ensure we have a list of executing devices to work with + if (UNEXPECTED(m_execute_list == nullptr)) + rebuild_execute_list(); -//------------------------------------------------- -// timer_list_remove - remove a timer from the -// linked list -//------------------------------------------------- + // update the suspend state on all executing devices + u32 suspendchanged = 0; + for (device_execute_interface *exec = m_execute_list; exec != nullptr; exec = exec->m_nextexec) + suspendchanged |= exec->update_suspend(); -inline emu_timer &device_scheduler::timer_list_remove(emu_timer &timer) -{ - // remove it from the list - if (timer.m_prev != nullptr) - timer.m_prev->m_next = timer.m_next; + // recompute the execute list if any CPUs changed their suspension state + if (suspendchanged != 0) + rebuild_execute_list(); else - m_timer_list = timer.m_next; - - if (timer.m_next != nullptr) - timer.m_next->m_prev = timer.m_prev; - - return timer; -} - - -//------------------------------------------------- -// execute_timers - execute timers that are due -//------------------------------------------------- - -inline void device_scheduler::execute_timers() -{ - LOG("execute_timers: new=%s head->expire=%s\n", m_basetime.as_string(PRECISION), m_timer_list->m_expire.as_string(PRECISION)); - - // now process any timers that are overdue - while (m_timer_list->m_expire <= m_basetime) - { - // if this is a one-shot timer, disable it now - emu_timer &timer = *m_timer_list; - bool was_enabled = timer.m_enabled; - if (timer.m_period.is_zero() || timer.m_period.is_never()) - timer.m_enabled = false; - - // set the global state of which callback we're in - m_callback_timer_modified = false; - m_callback_timer = &timer; - m_callback_timer_expire_time = timer.m_expire; - - // call the callback - if (was_enabled) - { - g_profiler.start(PROFILER_TIMER_CALLBACK); - - if (!timer.m_callback.isnull()) - { - if (timer.m_device != nullptr) - LOG("execute_timers: timer device %s timer %d\n", timer.m_device->tag(), timer.m_id); - else - LOG("execute_timers: timer callback %s\n", timer.m_callback.name()); - timer.m_callback(timer.m_ptr, timer.m_param); - } - - g_profiler.stop(); - } - - // reset or remove the timer, but only if it wasn't modified during the callback - if (!m_callback_timer_modified) - { - // if the timer is temporary, remove it now - if (timer.m_temporary) - m_timer_allocator.reclaim(timer.release()); - - // otherwise, reschedule it - else - timer.schedule_next_period(); - } - } - - // clear the callback timer global - m_callback_timer = nullptr; + m_suspend_changes_pending = false; } @@ -934,8 +1364,10 @@ inline void device_scheduler::execute_timers() // that is in use //------------------------------------------------- -void device_scheduler::add_scheduling_quantum(const attotime &quantum, const attotime &duration) +void device_scheduler::add_scheduling_quantum(attotime const &quantum, attotime const &duration) { + INCREMENT_SCHEDULER_STAT(m_add_scheduling_quantum); + assert(quantum.seconds() == 0); attotime curtime = time(); @@ -973,6 +1405,163 @@ void device_scheduler::add_scheduling_quantum(const attotime &quantum, const att } +//------------------------------------------------- +// instance_alloc - allocate memory for a new +// timer instance, either by reclaiming a +// freed one, or allocating memory for a new one +//------------------------------------------------- + +timer_instance &device_scheduler::instance_alloc() +{ + INCREMENT_SCHEDULER_STAT(m_instance_alloc); + + // attempt to rescue one off the free list + timer_instance *instance = m_free_timers; + if (instance != nullptr) + { + m_free_timers = instance->m_next; + return *instance; + } + + INCREMENT_SCHEDULER_STAT(m_instance_alloc_full); + + // if none, allocate a new one + m_allocated_instances.push_back(std::make_unique()); + return *m_allocated_instances.back().get(); +} + + +//------------------------------------------------- +// instance_reclaim - reclaim memory for a +// timer instance by adding it to the free list +//------------------------------------------------- + +inline void device_scheduler::instance_reclaim(timer_instance &timer) +{ + // don't reclaim persistent instances because they are part of the + // persistent_timer object + if (timer.m_callback->persistent() != nullptr) + return; + + // reclaimed instances go back on the free list + timer.m_next = m_free_timers; + m_free_timers = &timer; +} + + +//------------------------------------------------- +// instance_insert - insert a timer instance at +// the the appropriate spot in the active +// timer queue +//------------------------------------------------- + +inline timer_instance &device_scheduler::instance_insert(timer_instance &timer) +{ + // special case insert at start; we always have at least a dummy never- + // expiring timer in the list, so no need to check for nullptr + if (timer.m_expire < m_active_timers_head->m_expire) + { + INCREMENT_SCHEDULER_STAT(m_instance_insert_head); + + // no previous, next is the head + timer.m_prev = nullptr; + timer.m_next = m_active_timers_head; + + // link the old head as the previous and make us head + m_active_timers_head = m_active_timers_head->m_prev = &timer; + + // since the head changed, the time of the first expirations changed + update_first_timer_expire(); + abort_timeslice(); + return timer; + } + + // special case insert at end; since we're not the head, we can be sure + // that there's at least one timer before the permanent tail + if (timer.m_expire >= m_active_timers_tail.m_prev->m_expire) + { + INCREMENT_SCHEDULER_STAT(m_instance_insert_tail); + + // hook us up in front of the tail + timer.m_prev = m_active_timers_tail.m_prev; + timer.m_next = &m_active_timers_tail; + m_active_timers_tail.m_prev = m_active_timers_tail.m_prev->m_next = &timer; + + // no need to recompute if changing a later timer + return timer; + } + + INCREMENT_SCHEDULER_STAT(m_instance_insert_middle); + + // scan to find out where we go + for (timer_instance *scan = m_active_timers_head->m_next; scan != nullptr; scan = scan->m_next) + { + INCREMENT_SCHEDULER_STAT(m_instance_insert_average); + if (timer.m_expire < scan->m_expire) + { + timer.m_prev = scan->m_prev; + timer.m_next = scan; + scan->m_prev = scan->m_prev->m_next = &timer; + + // no need to recompute if changing a later timer + return timer; + } + } + + // should never get here + return timer; +} + + +//------------------------------------------------- +// instance_remove - remove a timer from the +// active timer queue +//------------------------------------------------- + +inline timer_instance &device_scheduler::instance_remove(timer_instance &timer) +{ + INCREMENT_SCHEDULER_STAT(m_instance_remove); + + // link the previous to us; if no previous, we're the head + if (timer.m_prev != nullptr) + timer.m_prev->m_next = timer.m_next; + else + { + m_active_timers_head = timer.m_next; + update_first_timer_expire(); + } + + // link the next to us; we can't be the tail, so presume next is non-null + timer.m_next->m_prev = timer.m_prev; + + // return the timer back for chaining + return timer; +} + + +//------------------------------------------------- +// empty_timer - empty callback stub when +// timers provide nothing +//------------------------------------------------- + +void device_scheduler::empty_timer(timer_instance const &timer) +{ + INCREMENT_SCHEDULER_STAT(m_empty_timer_calls); +} + + +//------------------------------------------------- +// timed_trigger - generate a trigger after a +// given amount of time +//------------------------------------------------- + +void device_scheduler::timed_trigger(timer_instance const &timer) +{ + INCREMENT_SCHEDULER_STAT(m_timed_trigger_calls); + trigger(timer.param()); +} + + //------------------------------------------------- // dump_timers - dump the current timer state //------------------------------------------------- @@ -981,7 +1570,7 @@ void device_scheduler::dump_timers() const { machine().logerror("=============================================\n"); machine().logerror("Timer Dump: Time = %15s\n", time().as_string(PRECISION)); - for (emu_timer *timer = first_timer(); timer != nullptr; timer = timer->next()) + for (timer_instance *timer = m_active_timers_head; timer != nullptr; timer = timer->next()) timer->dump(); machine().logerror("=============================================\n"); } diff --git a/src/emu/schedule.h b/src/emu/schedule.h index 9e90ed68ed5b3..7f618b852bb9b 100644 --- a/src/emu/schedule.h +++ b/src/emu/schedule.h @@ -22,6 +22,15 @@ // MACROS //************************************************************************** +#define COLLECT_SCHEDULER_STATS (1) +#if (COLLECT_SCHEDULER_STATS) +#define INCREMENT_SCHEDULER_STAT(x) do { x += 1; } while (0) +#define SET_SCHEDULER_STAT(x, y) do { x = y; } while (0) +#else +#define INCREMENT_SCHEDULER_STAT(x) +#define SET_SCHEDULER_STAT(x) +#endif + #define TIMER_CALLBACK_MEMBER(name) void name(void *ptr, s32 param) @@ -29,80 +38,509 @@ // TYPE DEFINITIONS //************************************************************************** -// timer callbacks look like this -typedef named_delegate timer_expired_delegate; +// forward definitions +class persistent_timer; + +// timer IDs for devices +using device_timer_id = u32; + +// timer callbacks look like this natively +using timer_expired_delegate_native = named_delegate; + +// alternate form #1 takes no parameters +using timer_expired_delegate_form1 = named_delegate; + +// alternate form #2 matches the device_timer callback used by devices +using timer_expired_delegate_form2 = named_delegate; + +// alternate form #3 takes a single integer parameter of any type +template +using timer_expired_delegate_form3 = named_delegate; + +// alternate form #4 takes a pointer value and an integer parameter; this is the classic TIMER_CALLBACK +template +using timer_expired_delegate_form4 = named_delegate; + +// alternate form #5 takes two integer parameters of any type; maps to some write handlers +template +using timer_expired_delegate_form5 = named_delegate; + +// alternate form #6 takes three integer parameters of any type; maps to some write handlers +template +using timer_expired_delegate_form6 = named_delegate; + + +// ======================> timer_expired_delegate + +// a timer_expired_delegate represents a bound timer expired callback; it can wrap +// all of the above alternate forms via built-in trampolines +class timer_expired_delegate : public timer_expired_delegate_native +{ + // this is just a substitute for an arbitrary delegate; it presumes that + // all delegates are equivalent from a size/copy/move perspective + using generic_delegate = named_delegate; + +public: + // import direct constructors for native callbacks + using timer_expired_delegate_native::timer_expired_delegate_native; + + // copy constructor + timer_expired_delegate(timer_expired_delegate const &src) : + timer_expired_delegate_native(src), + m_sub_delegate(src.m_sub_delegate) + { + // if the delegate is bound to the source object, rebind it to the copy + if (src.has_sub_delegate()) + bind(reinterpret_cast(this)); + SET_SCHEDULER_STAT(m_form, src.m_form); + } + + // copy assignment + timer_expired_delegate &operator=(timer_expired_delegate const &src) + { + // copy the native and sub delegates + *static_cast(this) = src; + m_sub_delegate = src.m_sub_delegate; + SET_SCHEDULER_STAT(m_form, src.m_form); + + // if the delegate is bound to the source object, rebind it to the copy + if (src.has_sub_delegate()) + bind(reinterpret_cast(this)); + return *this; + } + + // equality + bool operator==(const timer_expired_delegate &rhs) const + { + if (has_sub_delegate()) + return rhs.has_sub_delegate() ? (m_sub_delegate == rhs.m_sub_delegate) : false; + else + return rhs.has_sub_delegate() ? false : timer_expired_delegate_native::operator==(rhs); + } + bool operator!=(const timer_expired_delegate &rhs) const + { + if (has_sub_delegate()) + return rhs.has_sub_delegate() ? (m_sub_delegate != rhs.m_sub_delegate) : false; + else + return rhs.has_sub_delegate() ? false : timer_expired_delegate_native::operator!=(rhs); + } + + // form 1 constructor: void timer_callback() + template + timer_expired_delegate(void (FuncDeviceType::*cb)(), char const *name, DeviceType *bindto) : + timer_expired_delegate_native(FUNC(timer_expired_delegate::form1_callback), this) + { + static_assert(sizeof(timer_expired_delegate_form1) == sizeof(generic_delegate)); + reinterpret_cast(m_sub_delegate) = timer_expired_delegate_form1(cb, name, bindto); + SET_SCHEDULER_STAT(m_form, 1); + } + + // form 2 constructor: void timer_callback(timer_instance const &timer, device_timer_id id, int param, void *ptr) + template + timer_expired_delegate(void (FuncDeviceType::*cb)(timer_instance const &, device_timer_id, int, void *), char const *name, DeviceType *bindto) : + timer_expired_delegate_native(FUNC(timer_expired_delegate::form2_callback), this) + { + static_assert(sizeof(timer_expired_delegate_form2) == sizeof(generic_delegate)); + reinterpret_cast(m_sub_delegate) = timer_expired_delegate_form2(cb, name, bindto); + SET_SCHEDULER_STAT(m_form, 2); + } + + // form 3 constructor: void timer_callback(int param) + template::value, bool> = true> + timer_expired_delegate(void (FuncDeviceType::*cb)(IntType), char const *name, DeviceType *bindto) : + timer_expired_delegate_native(FUNC(timer_expired_delegate::form3_callback), this) + { + static_assert(sizeof(timer_expired_delegate_form3) == sizeof(generic_delegate)); + reinterpret_cast &>(m_sub_delegate) = timer_expired_delegate_form3(cb, name, bindto); + SET_SCHEDULER_STAT(m_form, 3); + } + + // form 4 constructor: void timer_callback(void *ptr, int param) + template::value, bool> = true> + timer_expired_delegate(void (FuncDeviceType::*cb)(void *ptr, IntType), char const *name, DeviceType *bindto) : + timer_expired_delegate_native(FUNC(timer_expired_delegate::form4_callback), this) + { + static_assert(sizeof(timer_expired_delegate_form4) == sizeof(generic_delegate)); + reinterpret_cast &>(m_sub_delegate) = timer_expired_delegate_form4(cb, name, bindto); + SET_SCHEDULER_STAT(m_form, 4); + } + + // form 5 constructor: void timer_callback(int param, int param2) + template::value && std::is_integral::value, bool> = true> + timer_expired_delegate(void (FuncDeviceType::*cb)(u32, IntType), char const *name, DeviceType *bindto) : + timer_expired_delegate_native(FUNC((timer_expired_delegate::form5_callback)), this) + { + static_assert(sizeof(timer_expired_delegate_form5) == sizeof(generic_delegate)); + reinterpret_cast &>(m_sub_delegate) = timer_expired_delegate_form5(cb, name, bindto); + SET_SCHEDULER_STAT(m_form, 5); + } + + // form 6 constructor: void timer_callback(int param, int param2, int param3) + template::value && std::is_integral::value && std::is_integral::value, bool> = true> + timer_expired_delegate(void (FuncDeviceType::*cb)(u32, IntType, IntType), char const *name, DeviceType *bindto) : + timer_expired_delegate_native(FUNC((timer_expired_delegate::form6_callback)), this) + { + static_assert(sizeof(timer_expired_delegate_form6) == sizeof(generic_delegate)); + reinterpret_cast &>(m_sub_delegate) = timer_expired_delegate_form6(cb, name, bindto); + SET_SCHEDULER_STAT(m_form, 6); + } + + // return the name + char const *name() const { return has_sub_delegate() ? m_sub_delegate.name() : timer_expired_delegate_native::name(); } + +#if (COLLECT_SCHEDULER_STATS) + int m_form = 0; +#endif + +private: + // helper: true if this uses a subdelegate + bool has_sub_delegate() const + { + return (object() == const_cast(reinterpret_cast(this))); + } + + // callbacks for various forms + void form1_callback(timer_instance const &timer); + void form2_callback(timer_instance const &timer); + template void form3_callback(timer_instance const &timer); + template void form4_callback(timer_instance const &timer); + template void form5_callback(timer_instance const &timer); + template void form6_callback(timer_instance const &timer); + + // secondary delegate, which may be of a number of forms + generic_delegate m_sub_delegate; +}; + -// ======================> emu_timer +// ======================> timer_callback -class emu_timer +// a timer_callback represents a registered callback, along with a user-supplied +// pointer and other useful information; timer_callbacks are used internally by +// both the persistent_timer and transitent_timer_factory classes +class timer_callback { friend class device_scheduler; - friend class simple_list; - friend class fixed_allocator; + friend class persistent_timer; +public: // construction/destruction - emu_timer(); - ~emu_timer(); + timer_callback(persistent_timer *persistent = nullptr); + ~timer_callback(); - // allocation and re-use - emu_timer &init(running_machine &machine, timer_expired_delegate callback, void *ptr, bool temporary); - emu_timer &init(device_t &device, device_timer_id id, void *ptr, bool temporary); - emu_timer &release(); + // copy constructor + timer_callback(timer_callback const &src); + + // copy assignment + timer_callback &operator=(timer_callback const &src); + + // calling operator + void operator()(timer_instance const &timer) { INCREMENT_SCHEDULER_STAT(m_calls); m_delegate(timer); } + + // registration of a delegate directly + timer_callback &init(device_scheduler &scheduler, timer_expired_delegate const &delegate, char const *unique = nullptr, char const *unique2 = nullptr) + { + return init_base(scheduler, delegate, unique, unique2); + } + + // registration of an arbitrary member function bound to an arbitrary object; requires the + // device_scheduler as the first parameter since we don't know how to get one + template::value, bool> = true> + timer_callback &init(device_scheduler &scheduler, ObjectType &object, FuncType callback, char const *string, char const *unique = nullptr) + { + return init_base(scheduler, timer_expired_delegate(callback, string, &object), unique); + } + + // registration of a device member function bound to that device + template::value && std::is_member_function_pointer::value, bool> = true> + timer_callback &init(DeviceType &device, FuncType callback, char const *string, char const *unique = nullptr) + { + return init_device(device, timer_expired_delegate(callback, string, &device), unique); + } + + // registration of a device interface member function bound to the interface + // this is only enabled if the call is NOT a device_t (to prevent ambiguity) + template::value && !std::is_base_of::value, bool> = true> + timer_callback &init(IntfType &intf, FuncType callback, char const *string, char const *unique = nullptr) + { + return init_device(intf.device(), timer_expired_delegate(callback, string, &intf), unique); + } -public: // getters - emu_timer *next() const { return m_next; } - running_machine &machine() const noexcept { assert(m_machine != nullptr); return *m_machine; } - bool enabled() const { return m_enabled; } - int param() const { return m_param; } + device_scheduler &scheduler() const { assert(m_scheduler != nullptr); return *m_scheduler; } + char const *name() const { return m_delegate.name(); } void *ptr() const { return m_ptr; } + device_t *device() const { return m_device; } + persistent_timer *persistent() const { return m_persistent; } + u32 unique_hash() const { return m_unique_hash; } + u32 save_index() const { return m_save_index; } + char const *unique_id() const { return m_unique_id.c_str(); } // setters - bool enable(bool enable = true); - void set_param(int param) { m_param = param; } - void set_ptr(void *ptr) { m_ptr = ptr; } + timer_callback &set_ptr(void *ptr); + timer_callback &set_device(device_t &device); - // control - void reset(const attotime &duration = attotime::never) { adjust(duration, m_param, m_period); } - void adjust(attotime start_delay, s32 param = 0, const attotime &periodicity = attotime::never); +private: + // registration helpers + timer_callback &init_base(device_scheduler &scheduler, timer_expired_delegate const &delegate, char const *unique = nullptr, char const *unique2 = nullptr); + timer_callback &init_device(device_t &device, timer_expired_delegate const &delegate, char const *unique); + timer_callback &init_clone(timer_callback const &src, timer_expired_delegate const &delegate); + + // internal state + timer_expired_delegate m_delegate; // the full delegate + void *m_ptr; // user-supplied pointer + device_scheduler *m_scheduler; // pointer to the scheduler + timer_callback *m_next_registered; // link to the next registered item + persistent_timer *m_persistent; // pointer to our owning persistent timer, or nullptr + device_t *m_device; // pointer to device, for debugging/logging + u32 m_unique_hash; // hash of the unique ID + u32 m_save_index; // index for saving +#if (COLLECT_SCHEDULER_STATS) + u64 m_calls = 0; // number of calls made +#endif + std::string m_unique_id; // a unique ID string +}; + + +// ======================> timer_instance_save + +// timer_instance_save is an internal structure that holds a single saved +// timer instance, along with some persistent_timer data for instances that +// are owned by a persistent_timer +struct timer_instance_save +{ + attotime start; // saved/restore by timer_instance + attotime expire; // saved/restore by timer_instance + u64 param[3]; // saved/restore by timer_instance + u32 hash; // saved/restore by timer_instance/persistent_timer + u16 save_index; // saved/restore by persistent_timer + u8 enabled; // saved/restore by persistent_timer + attotime period; // saved/restore by persistent_timer +}; + + +// ======================> timer_instance + +// a timer_instance represents an intantiated instance of a timer; for persistent +// timers, there is one timer_instance embedded as part of the presistent_timer +// object; for transient timers, timer_instances are allocated on the fly whenever +// the transient_timer_factory is requested to issue a callback +class timer_instance +{ + friend class device_scheduler; + friend class persistent_timer; + friend class transient_timer_factory; + + DISABLE_COPYING(timer_instance); + +public: + // construction/destruction + timer_instance(); + ~timer_instance(); + + // allocation and re-use + timer_instance &init_transient(timer_callback &callback, attotime const &duration); + timer_instance &init_persistent(timer_callback &callback); + + // getters + device_scheduler &scheduler() const noexcept { return m_callback->scheduler(); } + timer_instance *prev() const { return m_prev; } + timer_instance *next() const { return m_next; } + u64 param(int index = 0) const { return m_param[index]; } + void *ptr() const { return m_callback->ptr(); } + bool active() const { return m_active; } // timing queries attotime elapsed() const noexcept; attotime remaining() const noexcept; - attotime start() const { return m_start; } - attotime expire() const { return m_expire; } - attotime period() const { return m_period; } + attotime const &start() const { return m_start; } + attotime const &expire() const { return m_expire; } private: + // internal setters + timer_instance &set_param(int index, u64 param) { m_param[index] = param; return *this; } + timer_instance &set_param(u64 param) { return set_param(0, param); } + timer_instance &set_params(u64 param0, u64 param1) { return set_param(0, param0).set_param(1, param1); } + timer_instance &set_params(u64 param0, u64 param1, u64 param2) { return set_param(0, param0).set_param(1, param1).set_param(2, param2); } + // internal helpers - void register_save(); - void schedule_next_period(); + timer_instance &save(timer_instance_save &dst); + timer_instance &restore(timer_instance_save const &src, timer_callback &callback, bool enabled = true); + timer_instance &insert(attotime const &start, attotime const &expire); + timer_instance &remove(); void dump() const; - static void device_timer_expired(emu_timer &timer, void *ptr, s32 param); // internal state - running_machine * m_machine; // reference to the owning machine - emu_timer * m_next; // next timer in order in the list - emu_timer * m_prev; // previous timer in order in the list - timer_expired_delegate m_callback; // callback function - s32 m_param; // integer parameter - void * m_ptr; // pointer parameter - bool m_enabled; // is the timer enabled? - bool m_temporary; // is the timer temporary? - attotime m_period; // the repeat frequency of the timer + timer_instance * m_next; // next timer in order in the list + timer_instance * m_prev; // previous timer in order in the list attotime m_start; // time when the timer was started attotime m_expire; // time when the timer will expire - device_t * m_device; // for device timers, a pointer to the device - device_timer_id m_id; // for device timers, the ID of the timer + timer_callback * m_callback; // pointer to the external callback + u64 m_param[3]; // integer parameters + bool m_active; // true if currently in the active list +}; + + +// ======================> transient_timer_factory + +// a transient_timer_factory contains a timer_callback and can dynamically +// create multiple timer_instances that call the callback after a certain +// elapsed time; these timers are fire-and-forget, and it is not possible to +// modify or cancel them once issued +class transient_timer_factory +{ + DISABLE_COPYING(transient_timer_factory); + +public: + // constructor + transient_timer_factory(); + + // initialization + template + transient_timer_factory &init(T &&... args) + { + m_callback.init(std::forward(args)...); + return *this; + } + + // getters + timer_callback const &callback() const { return m_callback; } + + // create a new timer_instance that will fire after the given duration + void call_after(attotime const &duration, u64 param = 0, u64 param2 = 0, u64 param3 = 0); + + // create a new timer_instance that will fire as soon as possible + void synchronize(u64 param = 0, u64 param2 = 0, u64 param3 = 0) + { + call_after(attotime::zero, param, param2, param3); + } + +private: + // internal state + timer_callback m_callback; // the embedded callback +}; + + +// ======================> persistent_timer + +// a persistent_timer contains a time_callback and a timer_instance, which +// can be manipulated +class persistent_timer +{ + friend class device_scheduler; + + DISABLE_COPYING(persistent_timer); + +public: + // construction/destruction + persistent_timer(); + virtual ~persistent_timer(); + + // initialization + template + persistent_timer &init(T &&... args) + { + m_callback.init(std::forward(args)...); + return init_common(); + } + + // getters + timer_instance const &instance() const { return m_instance; } + timer_callback const &callback() const { return m_callback; } + u64 param(int index = 0) const { return m_instance.param(index); } + void *ptr() const { return m_callback.ptr(); } + bool enabled() const { return m_enabled && m_instance.active(); } + bool periodic() const { return !m_period.is_never(); } + attotime elapsed() const noexcept { return m_instance.elapsed(); } + attotime remaining() const noexcept { return m_instance.remaining(); } + attotime const &start() const { return m_instance.start(); } + attotime const &expire() const { return m_instance.expire(); } + attotime const &period() const { return m_period; } + + // setters + persistent_timer &set_param(int index, u64 param) { m_instance.set_param(index, param); return *this; } + persistent_timer &set_param(u64 param) { return set_param(0, param); } + persistent_timer &set_params(u64 param0, u64 param1) { return set_param(0, param0).set_param(1, param1); } + persistent_timer &set_params(u64 param0, u64 param1, u64 param2) { return set_param(0, param0).set_param(1, param1).set_param(2, param2); } + persistent_timer &set_ptr(void *ptr) { m_callback.set_ptr(ptr); return *this; } + + // control + bool enable(bool enable = true); + bool disable() { return enable(false); } + persistent_timer &reset(attotime const &duration = attotime::never) { return adjust(duration, m_instance.param(), m_period); } + persistent_timer &adjust(attotime const &start_delay, s32 param = 0, attotime const &periodicity = attotime::never); + +protected: + // internal helpers + void periodic_callback(timer_instance const &timer); + persistent_timer &init_common(); + persistent_timer &save(timer_instance_save &dst); + persistent_timer &restore(timer_instance_save const &src, timer_callback &callback); + void register_save(); + + // internal state + attotime m_period; // the timer period, or attotime::never if not periodic + bool m_enabled; // true if enabled, false if disabled + bool m_modified; // true if modified + timer_instance m_instance; // the embedded timer instnace + timer_callback m_callback; // the embedded timer callback + timer_callback m_periodic_callback; // an wrapper callback for periodic timers }; +// eventually replace emu_timer with persistent_timer +using emu_timer = persistent_timer; + // ======================> device_scheduler class device_scheduler { friend class device_execute_interface; - friend class emu_timer; + friend class transient_timer_factory; + friend class timer_instance; + friend class device_t; // for access to timer_alloc/timer_set device forms + + // due to save state limitations this has to be fixed; vgmplay allocates 256 + // timers and needs room for active instances, so hoping 512 is enough + static constexpr int MAX_SAVE_INSTANCES = 512; + + // inner private class for maintaining base-time relative values for + // faster comparisons vs a full attotime + class basetime_relative + { + public: + // minima/maxima + static constexpr attoseconds_t MAX_RELATIVE = 2 * ATTOSECONDS_PER_SECOND; + static constexpr attoseconds_t MIN_RELATIVE = -MAX_RELATIVE; + + // construction/destruction + basetime_relative(); + + // set an absolute time + void set(attotime const &src); + + // add a number of attoseconds to the relative time + void add(attoseconds_t src); + + // set the base for the relative time + void set_base_seconds(seconds_t base); + + // return the relative time + attoseconds_t relative() const { return m_relative; } + + // return the absolute time, updating if dirty + attotime const &absolute() { if (m_absolute_dirty) update_absolute(); return m_absolute; } + + private: + // internal helpers + void update_relative(); + void update_absolute(); + + // internal state + attoseconds_t m_relative; + attotime m_absolute; + bool m_absolute_dirty; + seconds_t m_base_seconds; + }; public: // construction/destruction @@ -112,25 +550,26 @@ class device_scheduler // getters running_machine &machine() const noexcept { return m_machine; } attotime time() const noexcept; - emu_timer *first_timer() const { return m_timer_list; } device_execute_interface *currently_executing() const noexcept { return m_executing_device; } bool can_save() const; // execution - void timeslice(); + void timeslice(attoseconds_t minslice); void abort_timeslice(); - void trigger(int trigid, const attotime &after = attotime::zero); - void boost_interleave(const attotime ×lice_time, const attotime &boost_duration); + void trigger(int trigid, attotime const &after = attotime::zero); + void boost_interleave(attotime const ×lice_time, attotime const &boost_duration); void suspend_resume_changed() { m_suspend_changes_pending = true; } - // timers, specified by callback/name - emu_timer *timer_alloc(timer_expired_delegate callback, void *ptr = nullptr); - void timer_set(const attotime &duration, timer_expired_delegate callback, int param = 0, void *ptr = nullptr); - void synchronize(timer_expired_delegate callback = timer_expired_delegate(), int param = 0, void *ptr = nullptr) { timer_set(attotime::zero, callback, param, ptr); } + // timer callback registration + u32 register_callback(timer_callback &callback); + void deregister_callback(timer_callback &callback); - // timers, specified by device/id; generally devices should use the device_t methods instead - emu_timer *timer_alloc(device_t &device, device_timer_id id = 0, void *ptr = nullptr); - void timer_set(const attotime &duration, device_t &device, device_timer_id id = 0, int param = 0, void *ptr = nullptr); + // timers, specified by callback/name; using persistent_timer is preferred + persistent_timer *timer_alloc(timer_expired_delegate const &callback, void *ptr = nullptr); + void synchronize() { m_empty_timer.synchronize(); } + + // pointer to the current callback timer, if live + timer_instance *callback_timer() const { return m_callback_timer; } // debugging void dump_timers() const; @@ -139,38 +578,84 @@ class device_scheduler void eat_all_cycles(); private: + // timers, specified by device/id; generally devices should use the device_t methods instead + persistent_timer *timer_alloc(device_t &device, device_timer_id id = 0, void *ptr = nullptr); + void timer_set(attotime const &duration, device_t &device, device_timer_id id = 0, s32 param = 0, u64 param2 = 0, u64 param3 = 0); + // callbacks - void timed_trigger(void *ptr, s32 param); void presave(); void postload(); + // execution helpers + void execute_timers(); + void update_first_timer_expire() { m_first_timer_expire.set(m_active_timers_head->m_expire); } + void update_basetime(); + // scheduling helpers void compute_perfect_interleave(); void rebuild_execute_list(); void apply_suspend_changes(); - void add_scheduling_quantum(const attotime &quantum, const attotime &duration); + void add_scheduling_quantum(attotime const &quantum, attotime const &duration); - // timer helpers - emu_timer &timer_list_insert(emu_timer &timer); - emu_timer &timer_list_remove(emu_timer &timer); - void execute_timers(); + // timer instance management + timer_instance &instance_alloc(); + void instance_reclaim(timer_instance &timer); + timer_instance &instance_insert(timer_instance &instance); + timer_instance &instance_remove(timer_instance &instance); + + // internal timers + void empty_timer(timer_instance const &timer); + void timed_trigger(timer_instance const &timer); + + // basetime_relative helpers + attotime const &basetime() const { return m_basetime; } // internal state running_machine & m_machine; // reference to our machine device_execute_interface * m_executing_device; // pointer to currently executing device device_execute_interface * m_execute_list; // list of devices to be executed attotime m_basetime; // global basetime; everything moves forward from here - - // list of active timers - emu_timer * m_timer_list; // head of the active list - fixed_allocator m_timer_allocator; // allocator for timers + basetime_relative m_first_timer_expire; // time of the first timer expiration + + // timer allocation and management + timer_instance * m_active_timers_head; // head of the list of active timers + timer_instance m_active_timers_tail; // tail of the list, always present + timer_instance * m_free_timers; // simple list of free timers + timer_callback * m_registered_callbacks; // list of registered callbacks + transient_timer_factory m_empty_timer; // empty timer factory + transient_timer_factory m_timed_trigger; // timed trigger factory + std::vector> m_allocated_persistents; + std::vector> m_allocated_instances; // other internal states - emu_timer * m_callback_timer; // pointer to the current callback timer - bool m_callback_timer_modified; // true if the current callback timer was modified + timer_instance * m_callback_timer; // pointer to the current callback timer attotime m_callback_timer_expire_time; // the original expiration time bool m_suspend_changes_pending; // suspend/resume changes are pending + // statistics +#if (COLLECT_SCHEDULER_STATS) + u64 m_timeslice = 0; + u64 m_timeslice_inner1 = 0; + u64 m_timeslice_inner2 = 0; + u64 m_timeslice_inner3 = 0; + u64 m_execute_timers = 0; + u64 m_execute_timers_average = 0; + u64 m_update_basetime = 0; + u64 m_compute_perfect_interleave = 0; + u64 m_rebuild_execute_list = 0; + u64 m_apply_suspend_changes = 0; + u64 m_add_scheduling_quantum = 0; + u64 m_instance_alloc = 0; + u64 m_instance_alloc_full = 0; + u64 m_instance_insert_head = 0; + u64 m_instance_insert_tail = 0; + u64 m_instance_insert_middle = 0; + u64 m_instance_insert_average = 0; + u64 m_instance_remove = 0; + u64 m_empty_timer_calls = 0; + u64 m_timed_trigger_calls = 0; +#endif + // scheduling quanta class quantum_slot { @@ -187,7 +672,99 @@ class device_scheduler simple_list m_quantum_list; // list of active quanta fixed_allocator m_quantum_allocator; // allocator for quanta attoseconds_t m_quantum_minimum; // duration of minimum quantum + + // put this at the end since it's big + timer_instance_save m_timer_save[MAX_SAVE_INSTANCES]; // state saving area }; + +//************************************************************************** +// INLINE FUNCTIONS +//************************************************************************** + +//------------------------------------------------- +// form1_callback - wrapper delegate for a form 1 +// style callback +//------------------------------------------------- + +inline void timer_expired_delegate::form1_callback(timer_instance const &timer) +{ + reinterpret_cast(m_sub_delegate)(); +} + + +//------------------------------------------------- +// form2_callback - wrapper delegate for a form 2 +// style callback +//------------------------------------------------- + +inline void timer_expired_delegate::form2_callback(timer_instance const &timer) +{ + reinterpret_cast(m_sub_delegate)(timer, device_timer_id(timer.param(2)), timer.param(0), timer.ptr()); +} + + +//------------------------------------------------- +// form3_callback - wrapper delegate for a form 3 +// style callback +//------------------------------------------------- + +template +inline void timer_expired_delegate::form3_callback(timer_instance const &timer) +{ + reinterpret_cast &>(m_sub_delegate)(IntType(timer.param())); +} + + +//------------------------------------------------- +// form4_callback - wrapper delegate for a form 4 +// style callback +//------------------------------------------------- + +template +inline void timer_expired_delegate::form4_callback(timer_instance const &timer) +{ + reinterpret_cast &>(m_sub_delegate)(timer.ptr(), IntType(timer.param())); +} + + +//------------------------------------------------- +// form5_callback - wrapper delegate for a form 5 +// style callback +//------------------------------------------------- + +template +inline void timer_expired_delegate::form5_callback(timer_instance const &timer) +{ + reinterpret_cast &>(m_sub_delegate)(IntType(timer.param(0)), IntType2(timer.param(1))); +} + + +//------------------------------------------------- +// form6_callback - wrapper delegate for a form 6 +// style callback +//------------------------------------------------- + +template +inline void timer_expired_delegate::form6_callback(timer_instance const &timer) +{ + reinterpret_cast &>(m_sub_delegate)(IntType(timer.param(0)), IntType2(timer.param(1)), IntType3(timer.param(2))); +} + + +//------------------------------------------------- +// call_after - create a new timer that will +// call the callback after a given amount of time +//------------------------------------------------- + +inline void transient_timer_factory::call_after(attotime const &duration, u64 param, u64 param2, u64 param3) +{ + assert(!duration.is_never()); + m_callback.scheduler().instance_alloc().init_transient(m_callback, duration) + .set_params(param, param2, param3); +} + + + #endif // MAME_EMU_SCHEDULE_H diff --git a/src/emu/screen.cpp b/src/emu/screen.cpp index 1a1c5dee8ad76..158eae579cf3e 100644 --- a/src/emu/screen.cpp +++ b/src/emu/screen.cpp @@ -563,10 +563,6 @@ screen_device::screen_device(const machine_config &mconfig, const char *tag, dev , m_vblank_period(0) , m_vblank_start_time(attotime::zero) , m_vblank_end_time(attotime::zero) - , m_vblank_begin_timer(nullptr) - , m_vblank_end_timer(nullptr) - , m_scanline0_timer(nullptr) - , m_scanline_timer(nullptr) , m_frame_number(0) , m_partial_updates_this_frame(0) { @@ -834,15 +830,15 @@ void screen_device::device_start() m_container->set_user_settings(settings); // allocate the VBLANK timers - m_vblank_begin_timer = timer_alloc(TID_VBLANK_START); - m_vblank_end_timer = timer_alloc(TID_VBLANK_END); + m_vblank_begin_timer.init(*this, FUNC(screen_device::vblank_begin)); + m_vblank_end_timer.init(*this, FUNC(screen_device::vblank_end)); // allocate a timer to reset partial updates - m_scanline0_timer = timer_alloc(TID_SCANLINE0); + m_scanline0_timer.init(*this, TID_SCANLINE0); // allocate a timer to generate per-scanline updates if ((m_video_attributes & VIDEO_UPDATE_SCANLINE) != 0 || m_scanline_cb) - m_scanline_timer = timer_alloc(TID_SCANLINE); + m_scanline_timer.init(*this, TID_SCANLINE); // configure the screen with the default parameters configure(m_width, m_height, m_visarea, m_refresh); @@ -853,7 +849,7 @@ void screen_device::device_start() // start the timer to generate per-scanline updates if ((m_video_attributes & VIDEO_UPDATE_SCANLINE) != 0 || m_scanline_cb) - m_scanline_timer->adjust(time_until_pos(0)); + m_scanline_timer.adjust(time_until_pos(0)); // create burn-in bitmap if (machine().options().burnin()) @@ -934,20 +930,10 @@ void screen_device::device_post_load() // fires //------------------------------------------------- -void screen_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void screen_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { - // signal VBLANK start - case TID_VBLANK_START: - vblank_begin(); - break; - - // signal VBLANK end - case TID_VBLANK_END: - vblank_end(); - break; - // first scanline case TID_SCANLINE0: reset_partial_updates(); @@ -975,7 +961,7 @@ void screen_device::device_timer(emu_timer &timer, device_timer_id id, int param param++; if (param > m_visarea.bottom()) param = m_visarea.top(); - m_scanline_timer->adjust(time_until_pos(param), param); + m_scanline_timer.adjust(time_until_pos(param), param); break; } } @@ -1028,14 +1014,14 @@ void screen_device::configure(int width, int height, const rectangle &visarea, a if (delta >= m_frame_period) vblank_begin(); else - m_vblank_begin_timer->adjust(time_until_vblank_start()); + m_vblank_begin_timer.adjust(time_until_vblank_start()); // if we are on scanline 0 already, call the scanline 0 timer // by hand now; otherwise, adjust it for the future if (vpos() == 0) reset_partial_updates(); else - m_scanline0_timer->adjust(time_until_pos(0)); + m_scanline0_timer.adjust(time_until_pos(0)); // adjust speed if necessary machine().video().update_refresh_speed(); @@ -1059,14 +1045,14 @@ void screen_device::reset_origin(int beamy, int beamx) if (beamy == 0 && beamx == 0) reset_partial_updates(); else - m_scanline0_timer->adjust(time_until_pos(0)); + m_scanline0_timer.adjust(time_until_pos(0)); // if we are resetting relative to (visarea.bottom() + 1, 0) == VBLANK start, // call the VBLANK start timer now; otherwise, adjust it for the future if (beamy == ((m_visarea.bottom() + 1) % m_height) && beamx == 0) vblank_begin(); else - m_vblank_begin_timer->adjust(time_until_vblank_start()); + m_vblank_begin_timer.adjust(time_until_vblank_start()); } @@ -1409,7 +1395,7 @@ void screen_device::reset_partial_updates() m_last_partial_scan = 0; m_partial_scan_hpos = -1; m_partial_updates_this_frame = 0; - m_scanline0_timer->adjust(time_until_pos(0)); + m_scanline0_timer.adjust(time_until_pos(0)); } @@ -1662,13 +1648,13 @@ void screen_device::vblank_begin() m_screen_vblank(1); // reset the VBLANK start timer for the next frame - m_vblank_begin_timer->adjust(time_until_vblank_start()); + m_vblank_begin_timer.adjust(time_until_vblank_start()); // if no VBLANK period, call the VBLANK end callback immediately, otherwise reset the timer if (m_vblank_period == 0) vblank_end(); else - m_vblank_end_timer->adjust(time_until_vblank_end()); + m_vblank_end_timer.adjust(time_until_vblank_end()); } diff --git a/src/emu/screen.h b/src/emu/screen.h index bfff28d0f6f0a..0b051f55e9bda 100644 --- a/src/emu/screen.h +++ b/src/emu/screen.h @@ -429,10 +429,8 @@ class screen_device : public device_t class svg_renderer; // timer IDs - enum + enum : device_timer_id { - TID_VBLANK_START, - TID_VBLANK_END, TID_SCANLINE0, TID_SCANLINE }; @@ -445,7 +443,7 @@ class screen_device : public device_t virtual void device_reset() override; virtual void device_stop() override; virtual void device_post_load() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // internal helpers void set_container(render_container &container) { m_container = &container; } @@ -511,10 +509,10 @@ class screen_device : public device_t attoseconds_t m_vblank_period; // attoseconds per VBLANK period attotime m_vblank_start_time; // time of last VBLANK start attotime m_vblank_end_time; // time of last VBLANK end - emu_timer * m_vblank_begin_timer; // timer to signal VBLANK start - emu_timer * m_vblank_end_timer; // timer to signal VBLANK end - emu_timer * m_scanline0_timer; // scanline 0 timer - emu_timer * m_scanline_timer; // scanline timer + persistent_timer m_vblank_begin_timer; // timer to signal VBLANK start + persistent_timer m_vblank_end_timer; // timer to signal VBLANK end + device_persistent_timer m_scanline0_timer; // scanline 0 timer + device_persistent_timer m_scanline_timer; // scanline timer u64 m_frame_number; // the current frame number u32 m_partial_updates_this_frame;// partial update counter this frame diff --git a/src/emu/sound.cpp b/src/emu/sound.cpp index 8260762d1f842..9eaf89f307e51 100644 --- a/src/emu/sound.cpp +++ b/src/emu/sound.cpp @@ -250,7 +250,7 @@ u32 stream_buffer::time_to_buffer_index(attotime time, bool round_up, bool allow sound_assert(allow_expansion); m_end_sample = sample; - m_end_second = time.m_seconds; + m_end_second = time.seconds(); // due to round_up, we could tweak over the line into the next second if (sample >= size()) @@ -559,7 +559,6 @@ sound_stream::sound_stream(device_t &device, u32 inputs, u32 outputs, u32 output m_output_adaptive(sample_rate == SAMPLE_RATE_OUTPUT_ADAPTIVE), m_synchronous((flags & STREAM_SYNCHRONOUS) != 0), m_resampling_disabled((flags & STREAM_DISABLE_INPUT_RESAMPLING) != 0), - m_sync_timer(nullptr), m_input(inputs), m_input_view(inputs), m_empty_buffer(100), @@ -602,7 +601,7 @@ sound_stream::sound_stream(device_t &device, u32 inputs, u32 outputs, u32 output // create an update timer for synchronous streams if (synchronous()) - m_sync_timer = m_device.machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sound_stream::sync_update), this)); + m_sync_timer.init(m_device.scheduler(), *this, FUNC(sound_stream::sync_update)); // force an update to the sample rates sample_rate_changed(); @@ -876,7 +875,7 @@ void sound_stream::reprime_sync_timer() { attotime curtime = m_device.machine().time(); attotime target = m_output[0].end_time() + attotime(0, 1); - m_sync_timer->adjust(target - curtime); + m_sync_timer.adjust(target - curtime); } @@ -885,7 +884,7 @@ void sound_stream::reprime_sync_timer() // synchronous stream //------------------------------------------------- -void sound_stream::sync_update(void *, s32) +void sound_stream::sync_update(timer_instance const &timer) { update(); reprime_sync_timer(); @@ -1058,7 +1057,6 @@ void default_resampler_stream::resampler_sound_update(sound_stream &stream, std: sound_manager::sound_manager(running_machine &machine) : m_machine(machine), - m_update_timer(nullptr), m_update_number(0), m_last_update(attotime::zero), m_finalmix_leftover(0), @@ -1106,8 +1104,8 @@ sound_manager::sound_manager(running_machine &machine) : set_attenuation(machine.options().volume()); // start the periodic update flushing timer - m_update_timer = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(sound_manager::update), this)); - m_update_timer->adjust(STREAMS_UPDATE_ATTOTIME, 0, STREAMS_UPDATE_ATTOTIME); + m_update_timer.init(machine.scheduler(), *this, FUNC(sound_manager::update)); + m_update_timer.adjust(STREAMS_UPDATE_ATTOTIME, 0, STREAMS_UPDATE_ATTOTIME); } @@ -1456,7 +1454,7 @@ stream_buffer::sample_t sound_manager::adjust_toward_compressor_scale(stream_buf // and send it to the OSD layer //------------------------------------------------- -void sound_manager::update(void *ptr, int param) +void sound_manager::update() { VPRINTF(("sound_update\n")); diff --git a/src/emu/sound.h b/src/emu/sound.h index 2eccb3cdcc908..9e21658f2ceff 100644 --- a/src/emu/sound.h +++ b/src/emu/sound.h @@ -673,7 +673,7 @@ class sound_stream void reprime_sync_timer(); // timer callback for synchronous streams - void sync_update(void *, s32); + void sync_update(timer_instance const &timer); // return a view of 0 data covering the given time period read_stream_view empty_view(attotime start, attotime end); @@ -690,7 +690,7 @@ class sound_stream bool m_output_adaptive; // adaptive stream that runs at the sample rate of its output bool m_synchronous; // synchronous stream that runs at the rate of its input bool m_resampling_disabled; // is resampling of input streams disabled? - emu_timer *m_sync_timer; // update timer for synchronous streams + persistent_timer m_sync_timer; // update timer for synchronous streams // input information std::vector m_input; // list of streams we directly depend upon @@ -815,11 +815,11 @@ class sound_manager stream_buffer::sample_t adjust_toward_compressor_scale(stream_buffer::sample_t curscale, stream_buffer::sample_t prevsample, stream_buffer::sample_t rawsample); // periodic sound update, called STREAMS_UPDATE_FREQUENCY per second - void update(void *ptr = nullptr, s32 param = 0); + void update(); // internal state running_machine &m_machine; // reference to the running machine - emu_timer *m_update_timer; // timer that runs the update function + persistent_timer m_update_timer; // timer that runs the update function std::vector > m_speakers; u32 m_update_number; // current update index; used for sample rate updates diff --git a/src/emu/video.cpp b/src/emu/video.cpp index b6dada1c0b5c5..623486bc09898 100644 --- a/src/emu/video.cpp +++ b/src/emu/video.cpp @@ -72,7 +72,6 @@ static void video_notifier_callback(const char *outname, s32 value, void *param) video_manager::video_manager(running_machine &machine) : m_machine(machine) - , m_screenless_frame_timer(nullptr) , m_output_changed(false) , m_throttle_last_ticks(0) , m_throttle_realtime(attotime::zero) @@ -172,8 +171,8 @@ video_manager::video_manager(running_machine &machine) // if no screens, create a periodic timer to drive updates if (no_screens) { - m_screenless_frame_timer = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(video_manager::screenless_update_callback), this)); - m_screenless_frame_timer->adjust(screen_device::DEFAULT_FRAME_PERIOD, 0, screen_device::DEFAULT_FRAME_PERIOD); + m_screenless_frame_timer.init(machine.scheduler(), *this, FUNC(video_manager::screenless_update_callback)); + m_screenless_frame_timer.adjust(screen_device::DEFAULT_FRAME_PERIOD, 0, screen_device::DEFAULT_FRAME_PERIOD); machine.output().set_global_notifier(video_notifier_callback, this); } } @@ -395,8 +394,8 @@ std::string &video_manager::timecode_text(std::string &str) str = string_format(" %s%s%02d:%02d %s", m_timecode_text, m_timecode_text.empty() ? "" : " ", - (elapsed_time.m_seconds / 60) % 60, - elapsed_time.m_seconds % 60, + (elapsed_time.seconds() / 60) % 60, + elapsed_time.seconds() % 60, machine().paused() ? "[paused] " : ""); return str; } @@ -408,8 +407,8 @@ std::string &video_manager::timecode_total_text(std::string &str) elapsed_time += machine().time() - m_timecode_start; } str = string_format("TOTAL %02d:%02d ", - (elapsed_time.m_seconds / 60) % 60, - elapsed_time.m_seconds % 60); + (elapsed_time.seconds() / 60) % 60, + elapsed_time.seconds() % 60); return str; } diff --git a/src/emu/video.h b/src/emu/video.h index bd58db9ca1d43..874ac57fd21cc 100644 --- a/src/emu/video.h +++ b/src/emu/video.h @@ -126,7 +126,7 @@ class video_manager running_machine & m_machine; // reference to our machine // screenless systems - emu_timer * m_screenless_frame_timer; // timer to signal VBLANK start + persistent_timer m_screenless_frame_timer; // timer to signal VBLANK start bool m_output_changed; // did an output element change? // throttling calculations diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp index 2e93d725ed3d8..614ac665a31de 100644 --- a/src/frontend/mame/luaengine.cpp +++ b/src/frontend/mame/luaengine.cpp @@ -637,6 +637,8 @@ bool lua_engine::on_missing_mandatory_image(const std::string &instance_name) void lua_engine::attach_notifiers() { + m_resume.init(machine().scheduler(), *this, FUNC(lua_engine::resume)); + machine().add_notifier(MACHINE_NOTIFY_RESET, machine_notify_delegate(&lua_engine::on_machine_prestart, this), true); machine().add_notifier(MACHINE_NOTIFY_RESET, machine_notify_delegate(&lua_engine::on_machine_start, this)); machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(&lua_engine::on_machine_stop, this)); @@ -794,7 +796,7 @@ void lua_engine::initialize() if (ret == 1) return luaL_error(L, "cannot wait from outside coroutine"); int ref = luaL_ref(L, LUA_REGISTRYINDEX); - engine->machine().scheduler().timer_set(attotime::from_double(lua_tonumber(L, 1)), timer_expired_delegate(FUNC(lua_engine::resume), engine), ref, nullptr); + engine->m_resume.call_after(attotime::from_double(lua_tonumber(L, 1)), ref); return lua_yield(L, 0); }); emu["lang_translate"] = &lang_translate; diff --git a/src/frontend/mame/luaengine.h b/src/frontend/mame/luaengine.h index 973dfedfd8938..bd94855dd36e7 100644 --- a/src/frontend/mame/luaengine.h +++ b/src/frontend/mame/luaengine.h @@ -162,6 +162,8 @@ class lua_engine void on_machine_frame(); void resume(void *ptr, int nparam); + transient_timer_factory m_resume; + void register_function(sol::function func, const char *id); int enumerate_functions(const char *id, std::function &&callback); bool execute_function(const char *id); diff --git a/src/lib/util/delegate.h b/src/lib/util/delegate.h index 454045ba98ecd..a0575736a0fae 100644 --- a/src/lib/util/delegate.h +++ b/src/lib/util/delegate.h @@ -228,6 +228,7 @@ class delegate_mfp // comparison helpers bool operator==(const delegate_mfp &rhs) const { return (m_rawdata == rhs.m_rawdata); } + bool operator!=(const delegate_mfp &rhs) const { return (m_rawdata != rhs.m_rawdata); } bool isnull() const { return (m_rawdata == s_null_mfp); } // getters @@ -271,6 +272,7 @@ class delegate_mfp int data[((sizeof(void *) + 3 * sizeof(int)) + (sizeof(int) - 1)) / sizeof(int)]; #endif bool operator==(const raw_mfp_data &rhs) const { return (memcmp(data, rhs.data, sizeof(data)) == 0); } + bool operator!=(const raw_mfp_data &rhs) const { return (memcmp(data, rhs.data, sizeof(data)) != 0); } }; // internal state @@ -310,6 +312,7 @@ class delegate_mfp // comparison helpers bool operator==(const delegate_mfp &rhs) const { return (m_function == rhs.m_function && m_this_delta == rhs.m_this_delta); } + bool operator!=(const delegate_mfp &rhs) const { return (m_function != rhs.m_function || m_this_delta != rhs.m_this_delta); } bool isnull() const { return (m_function == 0 && m_this_delta == 0); } // getters @@ -365,6 +368,7 @@ class delegate_mfp // comparison helpers bool operator==(const delegate_mfp &rhs) const { return (m_function == rhs.m_function); } + bool operator!=(const delegate_mfp &rhs) const { return (m_function != rhs.m_function); } bool isnull() const { return (m_function == 0); } // getters @@ -500,6 +504,10 @@ class delegate_base { return (m_raw_function == rhs.m_raw_function && object() == rhs.object() && m_raw_mfp == rhs.m_raw_mfp); } + bool operator!=(const delegate_base &rhs) const + { + return (m_raw_function != rhs.m_raw_function || object() != rhs.object() || m_raw_mfp != rhs.m_raw_mfp); + } // call the function diff --git a/src/mame/audio/acan.cpp b/src/mame/audio/acan.cpp index 0df726ad8c905..5d64562018b42 100644 --- a/src/mame/audio/acan.cpp +++ b/src/mame/audio/acan.cpp @@ -71,7 +71,7 @@ void acan_sound_device::device_reset() m_dma_irq_handler(0); } -void acan_sound_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void acan_sound_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (m_regs[0x14] & 0x40) { diff --git a/src/mame/audio/acan.h b/src/mame/audio/acan.h index 0f6ac312a2dfe..e68acf5a2eed9 100644 --- a/src/mame/audio/acan.h +++ b/src/mame/audio/acan.h @@ -27,7 +27,7 @@ class acan_sound_device : public device_t, public device_sound_interface // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // sound stream update overrides virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/mame/audio/ad_sound.cpp b/src/mame/audio/ad_sound.cpp index 3a85470006fa8..72ff090f38b99 100644 --- a/src/mame/audio/ad_sound.cpp +++ b/src/mame/audio/ad_sound.cpp @@ -407,7 +407,7 @@ void ad_59mc07_device::device_start() save_item(NAME(m_cymvol)); save_item(NAME(m_hihatvol)); - m_adjuster_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ad_59mc07_device::frq_adjuster_callback), this)); + m_adjuster_timer = timer_alloc(*this, FUNC(ad_59mc07_device::frq_adjuster_callback)); m_adjuster_timer->adjust(attotime::from_hz(60), 0, attotime::from_hz(60)); } diff --git a/src/mame/audio/alesis.cpp b/src/mame/audio/alesis.cpp index b36a6fa060e31..18481ac52006b 100644 --- a/src/mame/audio/alesis.cpp +++ b/src/mame/audio/alesis.cpp @@ -77,7 +77,7 @@ void alesis_dm3ag_device::device_reset() //------------------------------------------------- // device_timer - handler timer events //------------------------------------------------- -void alesis_dm3ag_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void alesis_dm3ag_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (m_output_active) { diff --git a/src/mame/audio/bally.cpp b/src/mame/audio/bally.cpp index 7b5cdf494b345..9db4f8ab22f9d 100644 --- a/src/mame/audio/bally.cpp +++ b/src/mame/audio/bally.cpp @@ -91,7 +91,7 @@ DISCRETE_SOUND_END void bally_as2888_device::sound_select(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(bally_as2888_device::sound_select_sync), this), data); + m_sound_select_sync.synchronize(data); } @@ -106,7 +106,7 @@ TIMER_CALLBACK_MEMBER(bally_as2888_device::sound_select_sync) WRITE_LINE_MEMBER(bally_as2888_device::sound_int) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(bally_as2888_device::sound_int_sync), this), state); + m_sound_int_sync.synchronize(state); } TIMER_CALLBACK_MEMBER(bally_as2888_device::sound_int_sync) @@ -141,6 +141,9 @@ void bally_as2888_device::device_start() save_item(NAME(m_snd_sel)); save_item(NAME(m_snd_tone_gen)); save_item(NAME(m_snd_div)); + + m_sound_select_sync.init(*this, FUNC(bally_as2888_device::sound_select_sync)); + m_sound_int_sync.init(*this, FUNC(bally_as2888_device::sound_int_sync)); } TIMER_DEVICE_CALLBACK_MEMBER(bally_as2888_device::timer_s) @@ -198,7 +201,7 @@ INPUT_CHANGED_MEMBER(bally_as3022_device::sw1) void bally_as3022_device::sound_select(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(bally_as3022_device::sound_select_sync), this), data); + m_sound_select_sync.synchronize(data); } @@ -213,7 +216,7 @@ TIMER_CALLBACK_MEMBER(bally_as3022_device::sound_select_sync) WRITE_LINE_MEMBER(bally_as3022_device::sound_int) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(bally_as3022_device::sound_int_sync), this), state); + m_sound_int_sync.synchronize(state); } TIMER_CALLBACK_MEMBER(bally_as3022_device::sound_int_sync) @@ -285,6 +288,9 @@ void bally_as3022_device::device_start() m_ay->set_volume(1, 0); m_ay->set_volume(2, 0); + m_sound_select_sync.init(*this, FUNC(bally_as3022_device::sound_select_sync)); + m_sound_int_sync.init(*this, FUNC(bally_as3022_device::sound_int_sync)); + save_item(NAME(m_bc1)); save_item(NAME(m_bdir)); save_item(NAME(m_sound_select)); @@ -461,7 +467,7 @@ INPUT_CHANGED_MEMBER(bally_cheap_squeak_device::sw1) void bally_cheap_squeak_device::sound_select(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(bally_cheap_squeak_device::sound_select_sync), this), data); + m_sound_select_sync.synchronize(data); } TIMER_CALLBACK_MEMBER(bally_cheap_squeak_device::sound_select_sync) @@ -474,7 +480,7 @@ TIMER_CALLBACK_MEMBER(bally_cheap_squeak_device::sound_select_sync) //------------------------------------------------- WRITE_LINE_MEMBER(bally_cheap_squeak_device::sound_int) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(bally_cheap_squeak_device::sound_int_sync), this), state); + m_sound_int_sync.synchronize(state); } TIMER_CALLBACK_MEMBER(bally_cheap_squeak_device::sound_int_sync) @@ -517,6 +523,10 @@ void bally_cheap_squeak_device::device_add_mconfig(machine_config &config) void bally_cheap_squeak_device::device_start() { m_sound_ack_w_handler.resolve(); + + m_sound_select_sync.init(*this, FUNC(bally_cheap_squeak_device::sound_select_sync)); + m_sound_int_sync.init(*this, FUNC(bally_cheap_squeak_device::sound_int_sync)); + save_item(NAME(m_sound_select)); save_item(NAME(m_sound_int)); } @@ -591,7 +601,7 @@ INPUT_CHANGED_MEMBER(bally_squawk_n_talk_device::sw1) void bally_squawk_n_talk_device::sound_select(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(bally_squawk_n_talk_device::sound_select_sync), this), data); + m_sound_select_sync.synchronize(data); } TIMER_CALLBACK_MEMBER(bally_squawk_n_talk_device::sound_select_sync) @@ -605,7 +615,7 @@ TIMER_CALLBACK_MEMBER(bally_squawk_n_talk_device::sound_select_sync) WRITE_LINE_MEMBER(bally_squawk_n_talk_device::sound_int) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(bally_squawk_n_talk_device::sound_int_sync), this), state); + m_sound_int_sync.synchronize(state); } TIMER_CALLBACK_MEMBER(bally_squawk_n_talk_device::sound_int_sync) @@ -674,6 +684,9 @@ void bally_squawk_n_talk_device::device_add_mconfig(machine_config &config) void bally_squawk_n_talk_device::device_start() { save_item(NAME(m_sound_select)); + + m_sound_select_sync.init(*this, FUNC(bally_squawk_n_talk_device::sound_select_sync)); + m_sound_int_sync.init(*this, FUNC(bally_squawk_n_talk_device::sound_int_sync)); } //------------------------------------------------- diff --git a/src/mame/audio/bally.h b/src/mame/audio/bally.h index 6d6fe67033309..6dcaf8089f559 100644 --- a/src/mame/audio/bally.h +++ b/src/mame/audio/bally.h @@ -93,7 +93,9 @@ class bally_as2888_device : public device_t, public device_mixer_interface // internal communications TIMER_CALLBACK_MEMBER(sound_select_sync); + transient_timer_factory m_sound_select_sync; TIMER_CALLBACK_MEMBER(sound_int_sync); + transient_timer_factory m_sound_int_sync; TIMER_DEVICE_CALLBACK_MEMBER(timer_s); TIMER_DEVICE_CALLBACK_MEMBER(timer_as2888); }; @@ -161,7 +163,9 @@ class bally_as3022_device : public device_t, public device_mixer_interface // internal communications TIMER_CALLBACK_MEMBER(sound_select_sync); + transient_timer_factory m_sound_select_sync; TIMER_CALLBACK_MEMBER(sound_int_sync); + transient_timer_factory m_sound_int_sync; uint8_t pia_porta_r(); void pia_porta_w(uint8_t data); DECLARE_WRITE_LINE_MEMBER(pia_cb2_w); @@ -250,7 +254,9 @@ class bally_cheap_squeak_device : public device_t, public device_mixer_interface // internal communications TIMER_CALLBACK_MEMBER(sound_select_sync); + transient_timer_factory m_sound_select_sync; TIMER_CALLBACK_MEMBER(sound_int_sync); + transient_timer_factory m_sound_int_sync; void out_p1_cb(uint8_t data); uint8_t in_p2_cb(); void out_p2_cb(uint8_t data); @@ -323,7 +329,9 @@ class bally_squawk_n_talk_device : public device_t, public device_mixer_interfac private: // internal communications TIMER_CALLBACK_MEMBER(sound_select_sync); + transient_timer_factory m_sound_select_sync; TIMER_CALLBACK_MEMBER(sound_int_sync); + transient_timer_factory m_sound_int_sync; void pia1_portb_w(uint8_t data); DECLARE_WRITE_LINE_MEMBER(pia2_ca2_w); DECLARE_WRITE_LINE_MEMBER(pia_irq_w); diff --git a/src/mame/audio/cage.cpp b/src/mame/audio/cage.cpp index e0c9e9fae3774..e0ea786226078 100644 --- a/src/mame/audio/cage.cpp +++ b/src/mame/audio/cage.cpp @@ -150,6 +150,8 @@ void atari_cage_device::device_start() cage_cpu_clock_period = attotime::from_hz(m_cpu->clock()); m_cpu_h1_clock_period = cage_cpu_clock_period * 2; + m_cage_deferred_w.init(*this, FUNC(atari_cage_device::cage_deferred_w)); + if (m_speedup) { m_cpu->space(AS_PROGRAM).install_write_handler(m_speedup, m_speedup, write32s_delegate(*this, FUNC(atari_cage_device::speedup_w))); m_speedup_ram = m_cageram + m_speedup; @@ -189,7 +191,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( atari_cage_device::dma_timer_callback ) { if (m_dma_timer_enabled) { - timer.adjust(attotime::never); + m_dma_timer->adjust(attotime::never); m_dma_timer_enabled = 0; } return; @@ -513,7 +515,7 @@ void atari_cage_device::main_w(uint16_t data) { if (LOG_COMM) logerror("%s:Command to CAGE = %04X\n", machine().describe_context(), data); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(atari_cage_device::cage_deferred_w),this), data); + m_cage_deferred_w.synchronize(data); } diff --git a/src/mame/audio/cage.h b/src/mame/audio/cage.h index 39f9ca543939d..8ae4ced0dafdd 100644 --- a/src/mame/audio/cage.h +++ b/src/mame/audio/cage.h @@ -41,6 +41,7 @@ class atari_cage_device : public device_t void control_w(uint16_t data); TIMER_CALLBACK_MEMBER( cage_deferred_w ); + transient_timer_factory m_cage_deferred_w; void cage_map(address_map &map); protected: diff --git a/src/mame/audio/cinemat.cpp b/src/mame/audio/cinemat.cpp index 3d9cb981888e3..77c50d0da8574 100644 --- a/src/mame/audio/cinemat.cpp +++ b/src/mame/audio/cinemat.cpp @@ -326,7 +326,7 @@ WRITE_LINE_MEMBER(demon_state::demon_sound4_w) { /* watch for a 0->1 edge on bit 4 ("shift in") to clock in the new data */ if (state) - machine().scheduler().synchronize(timer_expired_delegate(FUNC(demon_state::synced_sound_w), this), ~m_outlatch->output_state() & 0x0f); + m_synced_sound_w.synchronize(~m_outlatch->output_state() & 0x0f); } @@ -371,6 +371,8 @@ void demon_state::sound_start() { cinemat_state::sound_start(); + m_synced_sound_w.init(*this, FUNC(demon_state::synced_sound_w)); + /* register for save states */ save_item(NAME(m_sound_fifo)); save_item(NAME(m_sound_fifo_in)); @@ -461,7 +463,7 @@ void demon_state::demon_sound(machine_config &config) void qb3_state::qb3_sound_fifo_w(u8 data) { u16 rega = m_maincpu->state_int(ccpu_cpu_device::CCPU_A); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(qb3_state::synced_sound_w), this), rega & 0x0f); + m_synced_sound_w.synchronize(rega & 0x0f); } diff --git a/src/mame/audio/cmi01a.cpp b/src/mame/audio/cmi01a.cpp index 5577805856f9d..ac8f0cdd6c61b 100644 --- a/src/mame/audio/cmi01a.cpp +++ b/src/mame/audio/cmi01a.cpp @@ -340,7 +340,7 @@ WRITE_LINE_MEMBER( cmi01a_device::cmi01a_irq ) m_irq_cb(state ? ASSERT_LINE : CLEAR_LINE); } -void cmi01a_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cmi01a_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/audio/cmi01a.h b/src/mame/audio/cmi01a.h index 743c50e582989..026db40e3a639 100644 --- a/src/mame/audio/cmi01a.h +++ b/src/mame/audio/cmi01a.h @@ -41,7 +41,7 @@ class cmi01a_device : public device_t, public device_sound_interface { virtual void device_start() override; virtual void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; static const device_timer_id TIMER_ZX = 0; static const device_timer_id TIMER_EOSI = 1; diff --git a/src/mame/audio/csd.cpp b/src/mame/audio/csd.cpp index 6550548a43bcf..f9d9a8d6a85c2 100644 --- a/src/mame/audio/csd.cpp +++ b/src/mame/audio/csd.cpp @@ -92,7 +92,7 @@ void midway_cheap_squeak_deluxe_device::device_start() // device_timer - timer callbacks //------------------------------------------------- -void midway_cheap_squeak_deluxe_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void midway_cheap_squeak_deluxe_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_pia->ca1_w(param); diff --git a/src/mame/audio/csd.h b/src/mame/audio/csd.h index 514480f7bae54..e4bbd8ef44a12 100644 --- a/src/mame/audio/csd.h +++ b/src/mame/audio/csd.h @@ -43,7 +43,7 @@ class midway_cheap_squeak_deluxe_device : public device_t, public device_mixer_i virtual void device_add_mconfig(machine_config &config) override; virtual const tiny_rom_entry *device_rom_region() const override; virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // devices diff --git a/src/mame/audio/dcs.cpp b/src/mame/audio/dcs.cpp index 8ce7402b59ec1..6d7b4c0cfda78 100644 --- a/src/mame/audio/dcs.cpp +++ b/src/mame/audio/dcs.cpp @@ -538,7 +538,7 @@ void dcs_audio_device::dcs_boot() * *************************************/ -TIMER_CALLBACK_MEMBER( dcs_audio_device::dcs_reset ) +void dcs_audio_device::dcs_reset() { if (LOG_DCS_IO) logerror("dcs_reset\n"); @@ -746,7 +746,7 @@ dcs_audio_device::dcs_audio_device(const machine_config &mconfig, device_type ty void dcs_audio_device::device_reset() { - dcs_reset(nullptr, 0); + dcs_reset(); } void dcs_audio_device::device_start() @@ -794,12 +794,21 @@ void dcs_audio_device::device_start() m_internal_timer = subdevice("dcs_int_timer"); m_reg_timer = subdevice("dcs_reg_timer"); + m_dcs_reset.init(*this, FUNC(dcs_audio_device::dcs_reset)); + m_dcs_delayed_data_w.init(*this, FUNC(dcs_audio_device::dcs_delayed_data_w)); + m_latch_delayed_w.init(*this, FUNC(dcs_audio_device::latch_delayed_w)); + m_delayed_ack_w.init(*this, FUNC(dcs_audio_device::delayed_ack_w)); + m_output_control_delayed_w.init(*this, FUNC(dcs_audio_device::output_control_delayed_w)); + m_s1_ack_callback2.init(*this, FUNC(dcs_audio_device::s1_ack_callback2)); + m_s1_ack_callback1.init(*this, FUNC(dcs_audio_device::s1_ack_callback1)); + m_s2_ack_callback.init(*this, FUNC(dcs_audio_device::s2_ack_callback)); + /* non-RAM based automatically acks */ m_auto_ack = true; /* register for save states */ dcs_register_state(); /* reset the system */ - dcs_reset(nullptr, 0); + dcs_reset(); } @@ -890,6 +899,15 @@ void dcs2_audio_device::device_start() /* we don't do auto-ack by default */ m_auto_ack = false; + m_dcs_reset.init(*this, FUNC(dcs_audio_device::dcs_reset)); + m_dcs_delayed_data_w.init(*this, FUNC(dcs_audio_device::dcs_delayed_data_w)); + m_latch_delayed_w.init(*this, FUNC(dcs_audio_device::latch_delayed_w)); + m_delayed_ack_w.init(*this, FUNC(dcs_audio_device::delayed_ack_w)); + m_output_control_delayed_w.init(*this, FUNC(dcs_audio_device::output_control_delayed_w)); + m_s1_ack_callback2.init(*this, FUNC(dcs_audio_device::s1_ack_callback2)); + m_s1_ack_callback1.init(*this, FUNC(dcs_audio_device::s1_ack_callback1)); + m_s2_ack_callback.init(*this, FUNC(dcs_audio_device::s2_ack_callback)); + /* install the speedup handler */ install_speedup(); @@ -902,7 +920,7 @@ void dcs2_audio_device::device_start() dcs_register_state(); /* reset the system */ - dcs_reset(nullptr, 0); + dcs_reset(); } @@ -1486,7 +1504,7 @@ void dcs_audio_device::reset_w(int state) // logerror("%s: DCS reset = %d\n", machine().describe_context(), state); /* just run through the init code again */ - machine().scheduler().synchronize(timer_expired_delegate(FUNC(dcs_audio_device::dcs_reset),this)); + m_dcs_reset.synchronize(); m_cpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); } @@ -1546,12 +1564,6 @@ void dcs_audio_device::dcs_delayed_data_w(uint16_t data) } -TIMER_CALLBACK_MEMBER( dcs_audio_device::dcs_delayed_data_w_callback ) -{ - dcs_delayed_data_w(param); -} - - void dcs_audio_device::data_w(uint16_t data) { /* preprocess the write */ @@ -1561,7 +1573,7 @@ void dcs_audio_device::data_w(uint16_t data) /* if we are DCS1, set a timer to latch the data */ if (m_sport0_timer == nullptr) - machine().scheduler().synchronize(timer_expired_delegate(FUNC(dcs_audio_device::dcs_delayed_data_w_callback),this), data); + m_dcs_delayed_data_w.synchronize(data); else dcs_delayed_data_w(data); } @@ -1602,7 +1614,7 @@ uint32_t dcs_audio_device::input_latch32_r() OUTPUT LATCH (data from DCS to host) ****************************************************************************/ -TIMER_CALLBACK_MEMBER( dcs_audio_device::latch_delayed_w ) +void dcs_audio_device::latch_delayed_w() { if (!m_last_output_full && !m_output_full_cb.isnull()) m_output_full_cb(m_last_output_full = 1); @@ -1617,7 +1629,7 @@ void dcs_audio_device::output_latch_w(uint16_t data) if (LOG_DCS_IO) logerror("%s output_latch_w(%04X) (empty=%d)\n", machine().describe_context(), data, IS_OUTPUT_EMPTY()); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(dcs_audio_device::latch_delayed_w),this), data>>8); + m_latch_delayed_w.synchronize(); } void dcs_audio_device::output_latch32_w(uint32_t data) @@ -1626,7 +1638,7 @@ void dcs_audio_device::output_latch32_w(uint32_t data) if (LOG_DCS_IO) logerror("%s output_latch32_w(%04X) (empty=%d)\n", machine().describe_context(), data>>8, IS_OUTPUT_EMPTY()); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(dcs_audio_device::latch_delayed_w),this), data>>8); + m_latch_delayed_w.synchronize(); } @@ -1636,17 +1648,11 @@ void dcs_audio_device::delayed_ack_w() } -TIMER_CALLBACK_MEMBER( dcs_audio_device::delayed_ack_w_callback ) -{ - delayed_ack_w(); -} - - void dcs_audio_device::ack_w() { if (LOG_DCS_IO) logerror("%s:ack_w\n", machine().describe_context()); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(dcs_audio_device::delayed_ack_w_callback),this)); + m_delayed_ack_w.synchronize(); } @@ -1673,7 +1679,7 @@ uint16_t dcs_audio_device::data_r() OUTPUT CONTROL BITS (has 3 additional lines to the host) ****************************************************************************/ -TIMER_CALLBACK_MEMBER( dcs_audio_device::output_control_delayed_w ) +void dcs_audio_device::output_control_delayed_w(uint16_t param) { //if (LOG_DCS_IO) // logerror("output_control = %04X\n", param); @@ -1686,7 +1692,7 @@ void dcs_audio_device::output_control_w(uint16_t data) { if (LOG_DCS_IO) logerror("%s output_control_w = %04X\n", machine().describe_context(), data); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(dcs_audio_device::output_control_delayed_w),this), data); + m_output_control_delayed_w.synchronize(data); } @@ -1759,7 +1765,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( dcs_audio_device::internal_timer_callback ) /* set the next timer, but only if it's for a reasonable number */ if (!m_timer_ignore && (m_timer_period > 10 || m_timer_scale > 1)) - timer.adjust(m_cpu->cycles_to_attotime(target_cycles)); + m_internal_timer->adjust(m_cpu->cycles_to_attotime(target_cycles)); /* the IRQ line is edge triggered */ m_cpu->set_input_line(ADSP2105_TIMER, ASSERT_LINE); @@ -2205,30 +2211,30 @@ TIMER_DEVICE_CALLBACK_MEMBER( dcs_audio_device::transfer_watchdog_callback ) } -TIMER_CALLBACK_MEMBER( dcs_audio_device::s1_ack_callback2 ) +void dcs_audio_device::s1_ack_callback2() { /* if the output is full, stall for a usec */ if (IS_OUTPUT_FULL()) { - machine().scheduler().timer_set(attotime::from_usec(1), timer_expired_delegate(FUNC(dcs_audio_device::s1_ack_callback2),this), param); + m_s1_ack_callback2.call_after(attotime::from_usec(1)); return; } output_latch_w(0x000a); } -TIMER_CALLBACK_MEMBER( dcs_audio_device::s1_ack_callback1 ) +void dcs_audio_device::s1_ack_callback1(uint16_t param) { /* if the output is full, stall for a usec */ if (IS_OUTPUT_FULL()) { - machine().scheduler().timer_set(attotime::from_usec(1), timer_expired_delegate(FUNC(dcs_audio_device::s1_ack_callback1),this), param); + m_s1_ack_callback1.call_after(attotime::from_usec(1), param); return; } output_latch_w(param); /* chain to the next word we need to write back */ - machine().scheduler().timer_set(attotime::from_usec(1), timer_expired_delegate(FUNC(dcs_audio_device::s1_ack_callback2),this)); + m_s1_ack_callback2.call_after(attotime::from_usec(1)); } @@ -2346,7 +2352,7 @@ int dcs_audio_device::preprocess_stage_1(uint16_t data) /* if we're done, start a timer to send the response words */ if (transfer.state == 0) - machine().scheduler().timer_set(attotime::from_usec(1), timer_expired_delegate(FUNC(dcs_audio_device::s1_ack_callback1),this), transfer.sum); + m_s1_ack_callback1.call_after(attotime::from_usec(1), transfer.sum); return 1; } break; @@ -2355,12 +2361,12 @@ int dcs_audio_device::preprocess_stage_1(uint16_t data) } -TIMER_CALLBACK_MEMBER( dcs_audio_device::s2_ack_callback ) +void dcs_audio_device::s2_ack_callback(uint16_t param) { /* if the output is full, stall for a usec */ if (IS_OUTPUT_FULL()) { - machine().scheduler().timer_set(attotime::from_usec(1), timer_expired_delegate(FUNC(dcs_audio_device::s2_ack_callback),this), param); + m_s2_ack_callback.call_after(attotime::from_usec(1), param); return; } output_latch_w(param); @@ -2459,7 +2465,7 @@ int dcs_audio_device::preprocess_stage_2(uint16_t data) /* if we're done, start a timer to send the response words */ if (transfer.state == 0) { - machine().scheduler().timer_set(attotime::from_usec(1), timer_expired_delegate(FUNC(dcs_audio_device::s2_ack_callback),this), transfer.sum); + m_s2_ack_callback.call_after(attotime::from_usec(1), transfer.sum); transfer.watchdog->reset(); } return 1; diff --git a/src/mame/audio/dcs.h b/src/mame/audio/dcs.h index 0cebee16dec4d..33f7f0b283ad7 100644 --- a/src/mame/audio/dcs.h +++ b/src/mame/audio/dcs.h @@ -49,7 +49,7 @@ class dcs_audio_device : public device_t // non public void dcs_boot(); - TIMER_CALLBACK_MEMBER( dcs_reset ); + void dcs_reset(); void dcs_register_state(); uint16_t dcs_dataram_r(offs_t offset); void dcs_dataram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); @@ -70,16 +70,14 @@ class dcs_audio_device : public device_t uint16_t latch_status_r(address_space &space); uint16_t fifo_input_r(); void dcs_delayed_data_w(uint16_t data); - TIMER_CALLBACK_MEMBER( dcs_delayed_data_w_callback ); void input_latch_ack_w(uint16_t data); uint16_t input_latch_r(); uint32_t input_latch32_r(); - TIMER_CALLBACK_MEMBER( latch_delayed_w ); + void latch_delayed_w(); void output_latch_w(uint16_t data); void output_latch32_w(uint32_t data); void delayed_ack_w(); - TIMER_CALLBACK_MEMBER( delayed_ack_w_callback ); - TIMER_CALLBACK_MEMBER( output_control_delayed_w ); + void output_control_delayed_w(uint16_t param); void output_control_w(uint16_t data); uint16_t output_control_r(); void update_timer_count(); @@ -97,10 +95,10 @@ class dcs_audio_device : public device_t uint32_t dcs_polling32_r(address_space &space); void dcs_polling32_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); TIMER_DEVICE_CALLBACK_MEMBER( transfer_watchdog_callback ); - TIMER_CALLBACK_MEMBER( s1_ack_callback2 ); - TIMER_CALLBACK_MEMBER( s1_ack_callback1 ); + void s1_ack_callback2(); + void s1_ack_callback1(uint16_t param); int preprocess_stage_1(uint16_t data); - TIMER_CALLBACK_MEMBER( s2_ack_callback ); + void s2_ack_callback(uint16_t param); int preprocess_stage_2(uint16_t data); int preprocess_write(uint16_t data); @@ -230,6 +228,15 @@ class dcs_audio_device : public device_t uint32_t m_timer_period; uint32_t m_timers_fired; + transient_timer_factory m_dcs_reset; + transient_timer_factory m_dcs_delayed_data_w; + transient_timer_factory m_latch_delayed_w; + transient_timer_factory m_delayed_ack_w; + transient_timer_factory m_output_control_delayed_w; + transient_timer_factory m_s1_ack_callback2; + transient_timer_factory m_s1_ack_callback1; + transient_timer_factory m_s2_ack_callback; + std::unique_ptr m_sram; uint16_t m_polling_value; uint32_t m_polling32_value; diff --git a/src/mame/audio/exidy.cpp b/src/mame/audio/exidy.cpp index 6c107bf15fe19..1a334f9747d5d 100644 --- a/src/mame/audio/exidy.cpp +++ b/src/mame/audio/exidy.cpp @@ -932,7 +932,7 @@ void victory_sound_device::command_w(uint8_t data) { if (VICTORY_LOG_SOUND) logerror("%s:!!!! Sound command = %02X\n", machine().describe_context(), data); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(victory_sound_device::delayed_command_w), this), data); + m_delayed_command_w.synchronize(data); } @@ -980,6 +980,8 @@ void victory_sound_device::device_start() save_item(NAME(m_pia_ca1)); save_item(NAME(m_pia_cb1)); + m_delayed_command_w.init(*this, FUNC(victory_sound_device::delayed_command_w)); + exidy_sh8253_sound_device::device_start(); } diff --git a/src/mame/audio/exidy.h b/src/mame/audio/exidy.h index 8e3ee42916a0b..c5cfcb018974c 100644 --- a/src/mame/audio/exidy.h +++ b/src/mame/audio/exidy.h @@ -223,6 +223,7 @@ class victory_sound_device : public exidy_sh8253_sound_device uint8_t m_victory_sound_response_ack_clk; /* 7474 @ F4 */ TIMER_CALLBACK_MEMBER( delayed_command_w ); + transient_timer_factory m_delayed_command_w; int m_pia_ca1; int m_pia_cb1; diff --git a/src/mame/audio/geebee.cpp b/src/mame/audio/geebee.cpp index 01858b5ecadb2..08b4a590138f0 100644 --- a/src/mame/audio/geebee.cpp +++ b/src/mame/audio/geebee.cpp @@ -54,7 +54,7 @@ void geebee_sound_device::device_start() save_item(NAME(m_vcount)); } -void geebee_sound_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void geebee_sound_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/audio/geebee.h b/src/mame/audio/geebee.h index 1bbddf36bbaa8..79f84b377fb73 100644 --- a/src/mame/audio/geebee.h +++ b/src/mame/audio/geebee.h @@ -24,7 +24,7 @@ class geebee_sound_device : public device_t, public device_sound_interface // sound stream update overrides virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // internal state diff --git a/src/mame/audio/gottlieb.cpp b/src/mame/audio/gottlieb.cpp index 8c8555f13be93..392d80e1b955a 100644 --- a/src/mame/audio/gottlieb.cpp +++ b/src/mame/audio/gottlieb.cpp @@ -731,7 +731,7 @@ void gottlieb_sound_r2_device::device_start() // device_timer - handle timer-based behaviors //------------------------------------------------- -void gottlieb_sound_r2_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void gottlieb_sound_r2_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/audio/gottlieb.h b/src/mame/audio/gottlieb.h index 8977c3181abd1..cf5e7e98fb7c9 100644 --- a/src/mame/audio/gottlieb.h +++ b/src/mame/audio/gottlieb.h @@ -155,7 +155,7 @@ class gottlieb_sound_r2_device : public device_t, public device_mixer_interface virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // internal helpers diff --git a/src/mame/audio/harddriv.cpp b/src/mame/audio/harddriv.cpp index eef4fe6e3a596..8d21da2bd3747 100644 --- a/src/mame/audio/harddriv.cpp +++ b/src/mame/audio/harddriv.cpp @@ -54,6 +54,7 @@ harddriv_sound_board_device::harddriv_sound_board_device(const machine_config &m void harddriv_sound_board_device::device_start() { + m_delayed_68k_w.init(*this, FUNC(harddriv_sound_board_device::delayed_68k_w)); } //------------------------------------------------- @@ -110,7 +111,7 @@ TIMER_CALLBACK_MEMBER( harddriv_sound_board_device::delayed_68k_w ) void harddriv_sound_board_device::hd68k_snd_data_w(uint16_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(harddriv_sound_board_device::delayed_68k_w), this), data); + m_delayed_68k_w.synchronize(data); logerror("%s:main write to sound=%04X\n", machine().describe_context(), data); } diff --git a/src/mame/audio/leland.cpp b/src/mame/audio/leland.cpp index ddeb4f1c2863c..f0b53b73e8292 100644 --- a/src/mame/audio/leland.cpp +++ b/src/mame/audio/leland.cpp @@ -317,6 +317,8 @@ void leland_80186_sound_device::device_start() save_item(NAME(m_ext_stop)); save_item(NAME(m_ext_active)); + m_delayed_response_r.init(*this, FUNC(leland_80186_sound_device::delayed_response_r)); + // zerofill m_peripheral = 0; m_last_control = 0; @@ -523,7 +525,7 @@ u8 leland_80186_sound_device::response_r() if (LOG_COMM) logerror("%04X:Read sound response latch = %02X\n", pc, m_sound_response); /* synchronize the response */ - machine().scheduler().synchronize(timer_expired_delegate(FUNC(leland_80186_sound_device::delayed_response_r), this), pc + 2); + m_delayed_response_r.synchronize(pc + 2); return m_sound_response; } diff --git a/src/mame/audio/leland.h b/src/mame/audio/leland.h index eaca7c0e6c4f4..33d9a4a94c1e1 100644 --- a/src/mame/audio/leland.h +++ b/src/mame/audio/leland.h @@ -72,6 +72,7 @@ class leland_80186_sound_device : public device_t private: void delayed_response_r(void *ptr, int param); + transient_timer_factory m_delayed_response_r; void set_clock_line(int which, int state) { m_clock_active = state ? (m_clock_active | (1<> 8] = param & 0xff; } @@ -653,7 +653,7 @@ void midway_sounds_good_device::device_reset() // device_timer - timer callbacks //------------------------------------------------- -void midway_sounds_good_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void midway_sounds_good_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_pia->portb_w((param >> 1) & 0x0f); m_pia->ca1_w(~param & 0x01); @@ -820,7 +820,7 @@ void midway_turbo_cheap_squeak_device::device_reset() // device_timer - timer callbacks //------------------------------------------------- -void midway_turbo_cheap_squeak_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void midway_turbo_cheap_squeak_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_pia->portb_w((param >> 1) & 0x0f); m_pia->ca1_w(~param & 0x01); diff --git a/src/mame/audio/midway.h b/src/mame/audio/midway.h index d633448ba794b..2604da305e542 100644 --- a/src/mame/audio/midway.h +++ b/src/mame/audio/midway.h @@ -85,7 +85,7 @@ class midway_ssio_device : public device_t, virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // internal helpers @@ -143,7 +143,7 @@ class midway_sounds_good_device : public device_t, virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // devices @@ -183,7 +183,7 @@ class midway_turbo_cheap_squeak_device : public device_t, virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // devices diff --git a/src/mame/audio/mw8080bw.cpp b/src/mame/audio/mw8080bw.cpp index 301a335d0105c..8c158405c846f 100644 --- a/src/mame/audio/mw8080bw.cpp +++ b/src/mame/audio/mw8080bw.cpp @@ -3109,7 +3109,7 @@ void spcenctr_audio_device::device_start() m_lamp.resolve(); m_strobe.resolve(); - m_strobe_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(spcenctr_audio_device::strobe_callback), this)); + m_strobe_timer = timer_alloc(*this, FUNC(spcenctr_audio_device::strobe_callback)); m_strobe_enable = 0U; diff --git a/src/mame/audio/n8080.cpp b/src/mame/audio/n8080.cpp index 16f78afbeddde..55cdf19487427 100644 --- a/src/mame/audio/n8080.cpp +++ b/src/mame/audio/n8080.cpp @@ -15,6 +15,12 @@ constexpr double ATTACK_RATE = 10e-6 * 500; constexpr double DECAY_RATE = 10e-6 * 16000; +void n8080_state::sound_start() +{ + m_delayed_sound_1_callback.init(*this, FUNC(n8080_state::delayed_sound_1_callback)); + m_delayed_sound_2_callback.init(*this, FUNC(n8080_state::delayed_sound_2_callback)); +} + void spacefev_state::update_SN76477_status() { double dblR0 = RES_M(1.0); @@ -251,12 +257,12 @@ TIMER_CALLBACK_MEMBER( n8080_state::delayed_sound_2_callback ) void n8080_state::n8080_sound_1_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(n8080_state::delayed_sound_1_callback), this), data); /* force CPUs to sync */ + m_delayed_sound_1_callback.synchronize(data); /* force CPUs to sync */ } void n8080_state::n8080_sound_2_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(n8080_state::delayed_sound_2_callback), this), data); /* force CPUs to sync */ + m_delayed_sound_2_callback.synchronize(data); /* force CPUs to sync */ } @@ -374,9 +380,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(helifire_state::dac_volume_timer) void spacefev_state::sound_start() { - m_sound_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(spacefev_state::stop_mono_flop_callback), this)); - m_sound_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(spacefev_state::stop_mono_flop_callback), this)); - m_sound_timer[2] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(spacefev_state::stop_mono_flop_callback), this)); + n8080_state::sound_start(); + + m_sound_timer[0] = timer_alloc(*this, FUNC(spacefev_state::stop_mono_flop_callback)); + m_sound_timer[1] = timer_alloc(*this, FUNC(spacefev_state::stop_mono_flop_callback)); + m_sound_timer[2] = timer_alloc(*this, FUNC(spacefev_state::stop_mono_flop_callback)); save_item(NAME(m_prev_snd_data)); save_item(NAME(m_prev_sound_pins)); @@ -400,8 +408,10 @@ void spacefev_state::sound_reset() void sheriff_state::sound_start() { - m_sound_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sheriff_state::stop_mono_flop_callback), this)); - m_sound_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sheriff_state::stop_mono_flop_callback), this)); + n8080_state::sound_start(); + + m_sound_timer[0] = timer_alloc(*this, FUNC(sheriff_state::stop_mono_flop_callback)); + m_sound_timer[1] = timer_alloc(*this, FUNC(sheriff_state::stop_mono_flop_callback)); save_item(NAME(m_prev_snd_data)); save_item(NAME(m_prev_sound_pins)); @@ -424,6 +434,8 @@ void sheriff_state::sound_reset() void helifire_state::sound_start() { + n8080_state::sound_start(); + save_item(NAME(m_prev_snd_data)); save_item(NAME(m_prev_sound_pins)); save_item(NAME(m_curr_sound_pins)); diff --git a/src/mame/audio/namco52.cpp b/src/mame/audio/namco52.cpp index 65e25c87382c9..5633e625b706c 100644 --- a/src/mame/audio/namco52.cpp +++ b/src/mame/audio/namco52.cpp @@ -108,7 +108,7 @@ void namco_52xx_device::O_w(uint8_t data) void namco_52xx_device::write(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(namco_52xx_device::latch_callback),this), data); + m_latch_callback.synchronize(data); // TODO: should use chip_select line for this m_cpu->pulse_input_line(0, m_irq_duration); @@ -163,10 +163,12 @@ void namco_52xx_device::device_start() m_romread.resolve_safe(0); m_si.resolve_safe(0); + m_latch_callback.init(*this, FUNC(namco_52xx_device::latch_callback)); + /* start the external clock */ if (m_extclock != 0) { - m_extclock_pulse_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(namco_52xx_device::external_clock_pulse), this)); + m_extclock_pulse_timer = timer_alloc(*this, FUNC(namco_52xx_device::external_clock_pulse)); m_extclock_pulse_timer->adjust(attotime(0, m_extclock), 0, attotime(0, m_extclock)); } diff --git a/src/mame/audio/namco52.h b/src/mame/audio/namco52.h index b4f56762c9deb..866ac320f448e 100644 --- a/src/mame/audio/namco52.h +++ b/src/mame/audio/namco52.h @@ -29,6 +29,7 @@ class namco_52xx_device : public device_t virtual void device_add_mconfig(machine_config &config) override; TIMER_CALLBACK_MEMBER( latch_callback ); + transient_timer_factory m_latch_callback; TIMER_CALLBACK_MEMBER( external_clock_pulse ); private: diff --git a/src/mame/audio/namco54.cpp b/src/mame/audio/namco54.cpp index 0c908b523eca3..2a0d98af6e873 100644 --- a/src/mame/audio/namco54.cpp +++ b/src/mame/audio/namco54.cpp @@ -92,7 +92,7 @@ void namco_54xx_device::R1_w(uint8_t data) void namco_54xx_device::write(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(namco_54xx_device::latch_callback),this), data); + m_latch_callback.synchronize(data); // TODO: should use chip_select line for this m_cpu->pulse_input_line(0, m_irq_duration); @@ -132,6 +132,8 @@ namco_54xx_device::namco_54xx_device(const machine_config &mconfig, const char * void namco_54xx_device::device_start() { + m_latch_callback.init(*this, FUNC(namco_54xx_device::latch_callback)); + save_item(NAME(m_latched_cmd)); } diff --git a/src/mame/audio/namco54.h b/src/mame/audio/namco54.h index b809a59a115cd..e9a6868c9e4be 100644 --- a/src/mame/audio/namco54.h +++ b/src/mame/audio/namco54.h @@ -27,6 +27,7 @@ class namco_54xx_device : public device_t virtual void device_add_mconfig(machine_config &config) override; TIMER_CALLBACK_MEMBER( latch_callback ); + transient_timer_factory m_latch_callback; private: // internal state diff --git a/src/mame/audio/pinsnd88.cpp b/src/mame/audio/pinsnd88.cpp index d3f36e3cd508c..45a4b17eb283d 100644 --- a/src/mame/audio/pinsnd88.cpp +++ b/src/mame/audio/pinsnd88.cpp @@ -159,7 +159,7 @@ void pinsnd88_device::pinsnd88_map(address_map &map) map(0xc000, 0xffff).rom().region("cpu",0x3c000); // fixed bank } -void pinsnd88_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pinsnd88_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { @@ -188,7 +188,7 @@ TIMER_CALLBACK_MEMBER(pinsnd88_device::deferred_sync_w) void pinsnd88_device::sync_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(pinsnd88_device::deferred_sync_w),this), 0); + m_deferred_sync_w.synchronize(0); } WRITE_LINE_MEMBER(pinsnd88_device::strobe_w) @@ -242,6 +242,7 @@ void pinsnd88_device::device_start() /* timer */ m_sync_timer = timer_alloc(TIMER_SYNC); m_sync_timer->adjust(attotime::never); + m_deferred_sync_w.init(*this, FUNC(pinsnd88_device::deferred_sync_w)); save_item(NAME(m_old_resetq_state)); save_item(NAME(m_data_in)); } diff --git a/src/mame/audio/pinsnd88.h b/src/mame/audio/pinsnd88.h index 13c06392fb5dc..b82a259a42743 100644 --- a/src/mame/audio/pinsnd88.h +++ b/src/mame/audio/pinsnd88.h @@ -45,6 +45,7 @@ class pinsnd88_device : public device_t, public device_mixer_interface virtual void device_add_mconfig(machine_config &config) override; TIMER_CALLBACK_MEMBER(deferred_sync_w); + transient_timer_factory m_deferred_sync_w; // members required_device m_cpu; @@ -55,7 +56,7 @@ class pinsnd88_device : public device_t, public device_mixer_interface static const device_timer_id TIMER_SYNC = 0; private: // overrides - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // members devcb_write_line m_syncq_cb; diff --git a/src/mame/audio/qix.cpp b/src/mame/audio/qix.cpp index d43c499f75a6c..a5f60325f778e 100644 --- a/src/mame/audio/qix.cpp +++ b/src/mame/audio/qix.cpp @@ -24,6 +24,11 @@ #define QIX_VOL_DATA_R NODE_04 +void qix_state::sound_start() +{ + m_deferred_sndpia1_porta_w.init(*this, FUNC(qix_state::deferred_sndpia1_porta_w)); +} + /*************************************************************************** Audio handlers @@ -111,7 +116,7 @@ TIMER_CALLBACK_MEMBER(qix_state::deferred_sndpia1_porta_w) void qix_state::sync_sndpia1_porta_w(uint8_t data) { /* we need to synchronize this so the sound CPU doesn't drop anything important */ - machine().scheduler().synchronize(timer_expired_delegate(FUNC(qix_state::deferred_sndpia1_porta_w), this), data); + m_deferred_sndpia1_porta_w.synchronize(data); } diff --git a/src/mame/audio/rax.cpp b/src/mame/audio/rax.cpp index 79c7a4baceaa1..3f9957d356739 100644 --- a/src/mame/audio/rax.cpp +++ b/src/mame/audio/rax.cpp @@ -229,7 +229,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( acclaim_rax_device::dma_timer_callback ) else m_cpu->pulse_input_line(ADSP2181_BDMA, m_cpu->minimum_quantum_time()); - timer.adjust(attotime::never); + m_dma_timer->adjust(attotime::never); } diff --git a/src/mame/audio/redalert.cpp b/src/mame/audio/redalert.cpp index a104dc3e6e729..b83990fcf6365 100644 --- a/src/mame/audio/redalert.cpp +++ b/src/mame/audio/redalert.cpp @@ -159,8 +159,8 @@ void redalert_state::panther_audio_map(address_map &map) void redalert_state::sound_start() { - m_audio_irq_on_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(redalert_state::audio_irq_on), this)); - m_audio_irq_off_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(redalert_state::audio_irq_off), this)); + m_audio_irq_on_timer = timer_alloc(*this, FUNC(redalert_state::audio_irq_on)); + m_audio_irq_off_timer = timer_alloc(*this, FUNC(redalert_state::audio_irq_off)); m_audio_irq_on_timer->adjust(REDALERT_AUDIO_CPU_IRQ_FREQ, 0, REDALERT_AUDIO_CPU_IRQ_FREQ); diff --git a/src/mame/audio/s11c_bg.cpp b/src/mame/audio/s11c_bg.cpp index 27e59b1eeaa95..62efacf1f33d6 100644 --- a/src/mame/audio/s11c_bg.cpp +++ b/src/mame/audio/s11c_bg.cpp @@ -325,12 +325,12 @@ TIMER_CALLBACK_MEMBER(s11c_bg_device::deferred_pb_w) WRITE_LINE_MEMBER( s11c_bg_device::pia40_cb2_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(s11c_bg_device::deferred_cb2_w),this), state); + m_deferred_cb2_w.synchronize(state); } void s11c_bg_device::pia40_pb_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(s11c_bg_device::deferred_pb_w),this), data); + m_deferred_pb_w.synchronize(data); } @@ -504,6 +504,8 @@ void s11c_bg_device::device_start() /* resolve lines */ m_cb2_cb.resolve(); m_pb_cb.resolve(); + m_deferred_cb2_w.init(*this, FUNC(s11c_bg_device::deferred_cb2_w)); + m_deferred_pb_w.init(*this, FUNC(s11c_bg_device::deferred_pb_w)); save_item(NAME(m_old_resetq_state)); } diff --git a/src/mame/audio/s11c_bg.h b/src/mame/audio/s11c_bg.h index 1df38b63900b5..6fa6fb6373d03 100644 --- a/src/mame/audio/s11c_bg.h +++ b/src/mame/audio/s11c_bg.h @@ -59,7 +59,9 @@ class s11c_bg_device : public device_t, public device_mixer_interface virtual void device_add_mconfig(machine_config &config) override; TIMER_CALLBACK_MEMBER(deferred_cb2_w); + transient_timer_factory m_deferred_cb2_w; TIMER_CALLBACK_MEMBER(deferred_pb_w); + transient_timer_factory m_deferred_pb_w; required_device m_cpu; required_device m_dac; diff --git a/src/mame/audio/segag80r.cpp b/src/mame/audio/segag80r.cpp index 32088ede5a48b..83c9aef00740b 100644 --- a/src/mame/audio/segag80r.cpp +++ b/src/mame/audio/segag80r.cpp @@ -48,7 +48,7 @@ void sega005_sound_device::device_start() m_sega005_stream = stream_alloc(0, 1, SEGA005_COUNTER_FREQ); /* create a timer for the 555 */ - m_sega005_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sega005_sound_device::sega005_auto_timer), this)); + m_sega005_sound_timer = timer_alloc(*this, FUNC(sega005_sound_device::sega005_auto_timer)); /* set the initial sound data */ state->m_sound_data = 0x00; diff --git a/src/mame/audio/segaspeech.cpp b/src/mame/audio/segaspeech.cpp index 81a743504762b..378adedcbc80b 100644 --- a/src/mame/audio/segaspeech.cpp +++ b/src/mame/audio/segaspeech.cpp @@ -54,6 +54,8 @@ sega_speech_device::sega_speech_device(const machine_config &mconfig, const char void sega_speech_device::device_start() { + m_delayed_speech_w.init(*this, FUNC(sega_speech_device::delayed_speech_w)); + save_item(NAME(m_latch)); save_item(NAME(m_t0)); save_item(NAME(m_p2)); @@ -74,7 +76,7 @@ READ_LINE_MEMBER( sega_speech_device::t0_r ) READ_LINE_MEMBER( sega_speech_device::t1_r ) { -//printf("%s: t1_r=%d\n", machine().scheduler().time().as_string(), m_drq); +//printf("%s: t1_r=%d\n", machine().time().as_string(), m_drq); return m_drq; } @@ -109,7 +111,7 @@ void sega_speech_device::p2_w(uint8_t data) WRITE_LINE_MEMBER(sega_speech_device::drq_w) { -//printf("%s: DRQ=%d\n", machine().scheduler().time().as_string(), state); +//printf("%s: DRQ=%d\n", machine().time().as_string(), state); m_drq = (state == ASSERT_LINE); } @@ -140,7 +142,7 @@ TIMER_CALLBACK_MEMBER( sega_speech_device::delayed_speech_w ) void sega_speech_device::data_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(sega_speech_device::delayed_speech_w), this), data); + m_delayed_speech_w.synchronize(data); } diff --git a/src/mame/audio/segaspeech.h b/src/mame/audio/segaspeech.h index 5250c359a2bfb..65cb3c9462221 100644 --- a/src/mame/audio/segaspeech.h +++ b/src/mame/audio/segaspeech.h @@ -52,6 +52,7 @@ class sega_speech_device : public device_t, public device_mixer_interface u8 m_p2; TIMER_CALLBACK_MEMBER( delayed_speech_w ); + transient_timer_factory m_delayed_speech_w; }; DECLARE_DEVICE_TYPE(SEGA_SPEECH_BOARD, sega_speech_device) diff --git a/src/mame/audio/segausb.cpp b/src/mame/audio/segausb.cpp index a84024512d30e..eb67d4a64644b 100644 --- a/src/mame/audio/segausb.cpp +++ b/src/mame/audio/segausb.cpp @@ -88,6 +88,8 @@ void usb_sound_device::device_start() save_item(NAME(m_work_ram_bank)); save_item(NAME(m_t1_clock)); + m_delayed_usb_data_w.init(*this, FUNC(usb_sound_device::delayed_usb_data_w)); + #if (ENABLE_SEGAUSB_NETLIST) for (int index = 0; index < 3; index++) @@ -231,7 +233,7 @@ TIMER_CALLBACK_MEMBER( usb_sound_device::delayed_usb_data_w ) void usb_sound_device::data_w(u8 data) { LOG("%s:usb_data_w = %02X\n", machine().describe_context(), data); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(usb_sound_device::delayed_usb_data_w), this), data); + m_delayed_usb_data_w.synchronize(data); // boost the interleave so that sequences can be sent machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(250)); @@ -626,7 +628,7 @@ void usb_sound_device::workram_w(offs_t offset, u8 data) case 0x02: // 8253 U41 case 0x03: // 8253 U41 if ((offset & 3) != 3) - printf("%s: 2.%d count=%d\n", machine().scheduler().time().as_string(), offset & 3, data); + printf("%s: 2.%d count=%d\n", machine().time().as_string(), offset & 3, data); m_pit[0]->write(offset & 3, data); break; @@ -645,7 +647,7 @@ void usb_sound_device::workram_w(offs_t offset, u8 data) case 0x0a: // 8253 U42 case 0x0b: // 8253 U42 if ((offset & 3) != 3) - printf("%s: 2.%d count=%d\n", machine().scheduler().time().as_string(), offset & 3, data); + printf("%s: 2.%d count=%d\n", machine().time().as_string(), offset & 3, data); m_pit[1]->write(offset & 3, data); break; @@ -664,7 +666,7 @@ void usb_sound_device::workram_w(offs_t offset, u8 data) case 0x12: // 8253 U43 case 0x13: // 8253 U43 if ((offset & 3) != 3) - printf("%s: 2.%d count=%d\n", machine().scheduler().time().as_string(), offset & 3, data); + printf("%s: 2.%d count=%d\n", machine().time().as_string(), offset & 3, data); m_pit[2]->write(offset & 3, data); break; diff --git a/src/mame/audio/segausb.h b/src/mame/audio/segausb.h index e96b6cd98b21b..0a5c94f3d59f9 100644 --- a/src/mame/audio/segausb.h +++ b/src/mame/audio/segausb.h @@ -159,6 +159,7 @@ class usb_sound_device : public device_t, public device_mixer_interface #endif TIMER_CALLBACK_MEMBER( delayed_usb_data_w ); + transient_timer_factory m_delayed_usb_data_w; void timer_w(int which, u8 offset, u8 data); void env_w(int which, u8 offset, u8 data); diff --git a/src/mame/audio/seibu.cpp b/src/mame/audio/seibu.cpp index 7c1517e433bc1..589d86415a87d 100644 --- a/src/mame/audio/seibu.cpp +++ b/src/mame/audio/seibu.cpp @@ -99,6 +99,8 @@ void seibu_sound_device::device_start() m_ym_read_cb.resolve_safe(0); m_ym_write_cb.resolve_safe(); + m_update_irq_synced.init(*this, FUNC(seibu_sound_device::update_irq_synced)); + if (m_sound_rom.found() && m_rom_bank.found()) { if (m_sound_rom.length() > 0x10000) @@ -135,7 +137,7 @@ void seibu_sound_device::device_reset() void seibu_sound_device::update_irq_lines(int param) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(seibu_sound_device::update_irq_synced), this), param); + m_update_irq_synced.synchronize(param); } TIMER_CALLBACK_MEMBER(seibu_sound_device::update_irq_synced) diff --git a/src/mame/audio/seibu.h b/src/mame/audio/seibu.h index a95e780fa705c..84eb1ca9925cb 100644 --- a/src/mame/audio/seibu.h +++ b/src/mame/audio/seibu.h @@ -80,6 +80,7 @@ class seibu_sound_device : public device_t private: void update_irq_lines(int param); TIMER_CALLBACK_MEMBER(update_irq_synced); + transient_timer_factory m_update_irq_synced; // device callbacks devcb_write_line m_int_cb; diff --git a/src/mame/audio/t5182.cpp b/src/mame/audio/t5182.cpp index c6e62079d296c..0cf3333789fe5 100644 --- a/src/mame/audio/t5182.cpp +++ b/src/mame/audio/t5182.cpp @@ -221,7 +221,7 @@ TIMER_CALLBACK_MEMBER( t5182_device::setirq_callback ) m_ourcpu->set_input_line(0,ASSERT_LINE); } -void t5182_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void t5182_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/audio/t5182.h b/src/mame/audio/t5182.h index c4280cc913a9b..ed343505b0e8c 100644 --- a/src/mame/audio/t5182.h +++ b/src/mame/audio/t5182.h @@ -42,7 +42,7 @@ class t5182_device : public device_t protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual const tiny_rom_entry *device_rom_region() const override; virtual ioport_constructor device_input_ports() const override; virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/mame/audio/turbo.cpp b/src/mame/audio/turbo.cpp index d002916213e2b..a96361cf8c6e9 100644 --- a/src/mame/audio/turbo.cpp +++ b/src/mame/audio/turbo.cpp @@ -11,9 +11,6 @@ #include "speaker.h" -#define DISCRETE_TEST (0) - - /************************************* * @@ -37,33 +34,6 @@ void turbo_state::update_samples() } -#if (DISCRETE_TEST) - -TIMER_CALLBACK_MEMBER(turbo_state::update_sound_a) -{ - discrete_device *discrete = machine.device("discrete"); - int data = param; - - // missing short crash sample, but I've never seen it triggered - discrete->write(0, !(data & 0x01)); - discrete->write(1, (data >> 1) & 1); - discrete->write(2, (data >> 2) & 1); - discrete->write(3, (data >> 3) & 1); - discrete->write(4, (data >> 4) & 1); - discrete->write(5, !(data & 0x20)); - discrete->write(6, !(data & 0x40)); - -if (!((data >> 1) & 1)) osd_printf_debug("/TRIG1\n"); -if (!((data >> 2) & 1)) osd_printf_debug("/TRIG2\n"); -if (!((data >> 3) & 1)) osd_printf_debug("/TRIG3\n"); -if (!((data >> 4) & 1)) osd_printf_debug("/TRIG4\n"); - -// osel = (osel & 6) | ((data >> 5) & 1); -// update_samples(samples); -} -#endif - - /************************************* * @@ -73,16 +43,10 @@ if (!((data >> 4) & 1)) osd_printf_debug("/TRIG4\n"); void turbo_state::sound_a_w(uint8_t data) { -#if (!DISCRETE_TEST) -#endif -#if (!DISCRETE_TEST) uint8_t diff = data ^ m_sound_state[0]; -#endif m_sound_state[0] = data; -#if (!DISCRETE_TEST) - - // /CRASH.S: channel 0 + /* /CRASH.S: channel 0 */ if ((diff & 0x01) && !(data & 0x01)) m_samples->start(0, 5); // /TRIG1: channel 1 @@ -105,20 +69,6 @@ void turbo_state::sound_a_w(uint8_t data) // /CRASH.L: channel 3 if ((diff & 0x80) && !(data & 0x80)) m_samples->start(3, 5); - - // update any samples - update_samples(); - -#else - - if (((data ^ m_last_sound_a) & 0x1e) && (m_last_sound_a & 0x1e) != 0x1e) - machine().scheduler().timer_set(attotime::from_hz(20000), FUNC(update_sound_a), data); - else - update_sound_a(data); - - m_last_sound_a = data; - -#endif } @@ -583,136 +533,3 @@ void buckrog_state::buckrog_samples(machine_config &config) m_samples->set_samples_names(buckrog_sample_names); m_samples->add_route(ALL_OUTPUTS, "mono", 0.25); } - - - -/************************************* - * - * Discrete test code - * - *************************************/ - -#if (DISCRETE_TEST) - -// Nodes - Inputs -#define TURBO_CRASH_EN NODE_01 -#define TURBO_TRIG1_INV NODE_02 -#define TURBO_TRIG2_INV NODE_03 -#define TURBO_TRIG3_INV NODE_04 -#define TURBO_TRIG4_INV NODE_05 -#define TURBO_SLIP_EN NODE_06 -#define TURBO_CRASHL_EN NODE_07 -#define TURBO_ACC_VAL NODE_08 -#define TURBO_AMBU_EN NODE_09 -#define TURBO_SPIN_EN NODE_10 -#define TURBO_OSEL_VAL NODE_11 -#define TURBO_BSEL_VAL NODE_12 - -// Nodes - Sounds -#define FIRETRUCK_NOISE NODE_20 - -static const discrete_555_desc turbo_alarm_555 = -{ - DISC_555_OUT_SQW | DISC_555_OUT_DC, - 5, // B+ voltage of 555 - DEFAULT_555_VALUES, -}; - -DISCRETE_SOUND_START(turbo_discrete) - /************************************************/ - /* Input register mapping for turbo */ - /************************************************/ - // NODE ADDR MASK GAIN OFFSET INIT - DISCRETE_INPUT(TURBO_CRASH_EN ,0x00,0x001f, 0.0) - DISCRETE_INPUT(TURBO_TRIG1_INV ,0x01,0x001f, 1.0) - DISCRETE_INPUT(TURBO_TRIG2_INV ,0x02,0x001f, 1.0) - DISCRETE_INPUT(TURBO_TRIG3_INV ,0x03,0x001f, 1.0) - DISCRETE_INPUT(TURBO_TRIG4_INV ,0x04,0x001f, 1.0) - DISCRETE_INPUT(TURBO_SLIP_EN ,0x05,0x001f, 0.0) - DISCRETE_INPUT(TURBO_CRASHL_EN ,0x06,0x001f, 0.0) - DISCRETE_INPUT(TURBO_ACC_VAL ,0x07,0x001f, 0.0) - DISCRETE_INPUT(TURBO_AMBU_EN ,0x08,0x001f, 0.0) - DISCRETE_INPUT(TURBO_SPIN_EN ,0x09,0x001f, 0.0) - DISCRETE_INPUT(TURBO_OSEL_VAL ,0x0a,0x001f, 0.0) - DISCRETE_INPUT(TURBO_BSEL_VAL ,0x0b,0x001f, 0.0) - - /************************************************/ - /* Alarm sounds */ - /************************************************/ - - // 5-5-5 counter provides the input clock - DISCRETE_555_ASTABLE(NODE_50,1,470,120,0.1e-6,&turbo_alarm_555) - // which clocks a 74393 dual 4-bit counter, clocked on the falling edge - DISCRETE_COUNTER(NODE_51,1,0,NODE_50,0,15,1,0,DISC_CLK_ON_F_EDGE) - // the high bit of this counter - DISCRETE_TRANSFORM2(NODE_52,NODE_51,8,"01/") - // clocks the other half of the 74393 - DISCRETE_COUNTER(NODE_53,1,0,NODE_52,0,15,1,0,DISC_CLK_ON_F_EDGE) - - // trig1 triggers a LS123 retriggerable multivibrator - DISCRETE_ONESHOT(NODE_60,TURBO_TRIG1_INV,5.0,(0.33e-9)*47*1e6, DISC_ONESHOT_FEDGE|DISC_ONESHOT_RETRIG|DISC_OUT_ACTIVE_HIGH) - // which interacts with bit 0 of the second counter - DISCRETE_TRANSFORM2(NODE_61,NODE_53,1,"01&") - // via a NAND - DISCRETE_LOGIC_NAND(NODE_62,1,NODE_60,NODE_61) - - // trig2 triggers a LS123 retriggerable multivibrator - DISCRETE_ONESHOT(NODE_65,TURBO_TRIG2_INV,5.0,(0.33e-9)*47*10e6,DISC_ONESHOT_FEDGE|DISC_ONESHOT_RETRIG|DISC_OUT_ACTIVE_HIGH) - // which interacts with bit 3 of the first counter via a NAND - DISCRETE_LOGIC_NAND(NODE_66,1,NODE_65,NODE_52) - - // trig3 triggers a LS123 retriggerable multivibrator - DISCRETE_ONESHOT(NODE_70,TURBO_TRIG3_INV,5.0,(0.33e-9)*47*33e6,DISC_ONESHOT_FEDGE|DISC_ONESHOT_RETRIG|DISC_OUT_ACTIVE_HIGH) - // which interacts with bit 2 of the first counter - DISCRETE_TRANSFORM3(NODE_71,NODE_51,4,1,"01/2&") - // via a NAND - DISCRETE_LOGIC_NAND(NODE_72,1,NODE_70,NODE_71) - - // trig4 triggers a LS123 retriggerable multivibrator - DISCRETE_ONESHOT(NODE_75,TURBO_TRIG4_INV,5.0,(0.33e-9)*47*10e6,DISC_ONESHOT_FEDGE|DISC_ONESHOT_RETRIG|DISC_OUT_ACTIVE_HIGH) - // which interacts with bit 1 of the first counter - DISCRETE_TRANSFORM3(NODE_76,NODE_51,2,1,"01/2&") - // via a NAND - DISCRETE_LOGIC_NAND(NODE_77,1,NODE_75,NODE_76) - - // everything is effectively NANDed together - DISCRETE_LOGIC_NAND4(NODE_80,1,NODE_62,NODE_66,NODE_72,NODE_77) - -/* - - the rest of the circuit looks like this: - - +5V +12V +---+ - ^ ^ +--------+ 1K v | - | | | |\ | +---NNN--NNN--+ - Z 1K 10K Z | | \ | | |\ 20K | +--|(----> ALARM_M - Z Z +-|- \ | | | \ | | 4.7u - | | | >--+---NNNN----+-|- \ | +--|(----> ALARM_F - +--NNNN--|(----+-----|+ / 22K | >-------+---+ 4.7u - +-\ | 5.1K 4.7u | | / +6V--|+ / +--|(----> ALARM_R - | >o---(NODE_62)--+ Z |/ | / | 4.7u - +-/ | 10K Z |/ +--|(----> ALARM_L - | | 4.7u - +-\ | v - | >o---(NODE_66)--+ GND - +-/ | - | - +-\ | - | >o---(NODE_72)--+ - +-/ | - | - +-\ | - | >o---(NODE_77)--+ - +-/ - - -*/ - - /************************************************/ - /* Combine all 7 sound sources. */ - /************************************************/ - - DISCRETE_OUTPUT(NODE_80, 16000) -DISCRETE_SOUND_END - -#endif diff --git a/src/mame/audio/tvc.cpp b/src/mame/audio/tvc.cpp index ddae30f94ed05..7d99e0704c2d3 100644 --- a/src/mame/audio/tvc.cpp +++ b/src/mame/audio/tvc.cpp @@ -52,7 +52,7 @@ void tvc_sound_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void tvc_sound_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tvc_sound_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_write_sndint(1); } diff --git a/src/mame/audio/tvc.h b/src/mame/audio/tvc.h index 004ed6975bfad..55ab3314e529a 100644 --- a/src/mame/audio/tvc.h +++ b/src/mame/audio/tvc.h @@ -33,7 +33,7 @@ class tvc_sound_device : public device_t, public device_sound_interface // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; private: diff --git a/src/mame/audio/vboy.cpp b/src/mame/audio/vboy.cpp index 3d6abbe6b89a4..e92ae0bd9d693 100644 --- a/src/mame/audio/vboy.cpp +++ b/src/mame/audio/vboy.cpp @@ -259,7 +259,7 @@ void vboysnd_device::device_reset() // device_timer - called when our device timer expires //------------------------------------------------- -void vboysnd_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void vboysnd_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { m_stream->update(); } diff --git a/src/mame/audio/vboy.h b/src/mame/audio/vboy.h index ca4de746db343..ad69794b41dd5 100644 --- a/src/mame/audio/vboy.h +++ b/src/mame/audio/vboy.h @@ -70,7 +70,7 @@ class vboysnd_device : public device_t, public device_sound_interface virtual void device_start() override; virtual void device_clock_changed() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; diff --git a/src/mame/audio/warpwarp.cpp b/src/mame/audio/warpwarp.cpp index 5ef7e52659c85..69e8c44a3fb7d 100644 --- a/src/mame/audio/warpwarp.cpp +++ b/src/mame/audio/warpwarp.cpp @@ -71,7 +71,7 @@ void warpwarp_sound_device::device_start() save_item(NAME(m_mcount)); } -void warpwarp_sound_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void warpwarp_sound_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/audio/warpwarp.h b/src/mame/audio/warpwarp.h index d4bcdc15d2372..e98b8e884c156 100644 --- a/src/mame/audio/warpwarp.h +++ b/src/mame/audio/warpwarp.h @@ -29,7 +29,7 @@ class warpwarp_sound_device : public device_t, public device_sound_interface // sound stream update overrides virtual void sound_stream_update(sound_stream &stream, std::vector const &inputs, std::vector &outputs) override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // internal state diff --git a/src/mame/audio/williams.cpp b/src/mame/audio/williams.cpp index 20424857d7787..75b764609da3b 100644 --- a/src/mame/audio/williams.cpp +++ b/src/mame/audio/williams.cpp @@ -245,7 +245,7 @@ void williams_cvsd_sound_device::device_reset() // device_timer - timer callbacks //------------------------------------------------- -void williams_cvsd_sound_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void williams_cvsd_sound_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // process incoming data write m_pia->portb_w(param & 0xff); @@ -581,7 +581,7 @@ void williams_narc_sound_device::device_reset() // device_timer - timer callbacks //------------------------------------------------- -void williams_narc_sound_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void williams_narc_sound_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -817,7 +817,7 @@ void williams_adpcm_sound_device::device_reset() // device_timer - timer callbacks //------------------------------------------------- -void williams_adpcm_sound_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void williams_adpcm_sound_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/audio/williams.h b/src/mame/audio/williams.h index db15bfab4bb11..5c76067b0fa46 100644 --- a/src/mame/audio/williams.h +++ b/src/mame/audio/williams.h @@ -57,7 +57,7 @@ class williams_cvsd_sound_device : public device_t, virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // devices @@ -112,7 +112,7 @@ class williams_narc_sound_device : public device_t, virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // timer IDs @@ -176,7 +176,7 @@ class williams_adpcm_sound_device : public device_t, virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // devices diff --git a/src/mame/drivers/2mindril.cpp b/src/mame/drivers/2mindril.cpp index 97f6b24516748..8d8be545a1d1e 100644 --- a/src/mame/drivers/2mindril.cpp +++ b/src/mame/drivers/2mindril.cpp @@ -88,7 +88,7 @@ class _2mindril_state : public taito_f3_state }; protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr); #endif }; @@ -132,7 +132,7 @@ void _2mindril_state::coins_w(u8 data) PORT_DIPSETTING( 0x0800, DEF_STR( On ) ) */ #ifdef UNUSED_FUNCTION -void _2mindril_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void _2mindril_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/a7800.cpp b/src/mame/drivers/a7800.cpp index 580c7f8fc06be..187f2c3c4455a 100644 --- a/src/mame/drivers/a7800.cpp +++ b/src/mame/drivers/a7800.cpp @@ -139,6 +139,7 @@ class a7800_state : public driver_device void a7800_palette(palette_device &palette) const; TIMER_DEVICE_CALLBACK_MEMBER(interrupt); TIMER_CALLBACK_MEMBER(maria_startdma); + transient_timer_factory m_maria_startdma; uint8_t riot_joystick_r(); uint8_t riot_console_button_r(); void riot_button_pullup_w(uint8_t data); @@ -276,7 +277,7 @@ void a7800_state::tia_w(offs_t offset, uint8_t data) TIMER_DEVICE_CALLBACK_MEMBER(a7800_state::interrupt) { // DMA Begins 7 cycles after hblank - machine().scheduler().timer_set(m_maincpu->cycles_to_attotime(7), timer_expired_delegate(FUNC(a7800_state::maria_startdma), this)); + m_maria_startdma.call_after(m_maincpu->cycles_to_attotime(7)); m_maria->interrupt(m_lines); } diff --git a/src/mame/drivers/abc80.cpp b/src/mame/drivers/abc80.cpp index 42e2c09386b8a..0d8be8a0fa5a5 100644 --- a/src/mame/drivers/abc80.cpp +++ b/src/mame/drivers/abc80.cpp @@ -378,7 +378,7 @@ void abc80_state::kbd_w(u8 data) // device_timer - handler timer events //------------------------------------------------- -void abc80_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void abc80_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/accomm.cpp b/src/mame/drivers/accomm.cpp index 9228cefd3133e..cde8c9a05881e 100644 --- a/src/mame/drivers/accomm.cpp +++ b/src/mame/drivers/accomm.cpp @@ -94,7 +94,7 @@ class accomm_state : public driver_device virtual void machine_start() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -481,7 +481,7 @@ uint32_t accomm_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap } -void accomm_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void accomm_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_SCANLINE_INTERRUPT) { diff --git a/src/mame/drivers/acefruit.cpp b/src/mame/drivers/acefruit.cpp index f8fc8e8b06548..830a8235c71a4 100644 --- a/src/mame/drivers/acefruit.cpp +++ b/src/mame/drivers/acefruit.cpp @@ -55,7 +55,7 @@ class acefruit_state : public driver_device virtual void machine_start() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void acefruit_colorram_w(offs_t offset, uint8_t data); @@ -108,7 +108,7 @@ void acefruit_state::acefruit_update_irq(int vpos) } -void acefruit_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void acefruit_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { int vpos = m_screen->vpos(); diff --git a/src/mame/drivers/aces1.cpp b/src/mame/drivers/aces1.cpp index 618e0a62971c0..89ecef4ed6728 100644 --- a/src/mame/drivers/aces1.cpp +++ b/src/mame/drivers/aces1.cpp @@ -263,8 +263,8 @@ void aces1_state::machine_start() m_reel_clock[reel] =0; m_reel_phase[reel] =0; } - m_aces1_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(aces1_state::m_aces1_irq_timer_callback),this), nullptr); - m_aces1_nmi_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(aces1_state::m_aces1_nmi_timer_callback),this), nullptr); + m_aces1_irq_timer = timer_alloc(*this, FUNC(aces1_state::m_aces1_irq_timer_callback)); + m_aces1_nmi_timer = timer_alloc(*this, FUNC(aces1_state::m_aces1_nmi_timer_callback)); m_digits.resolve(); m_lamps.resolve(); diff --git a/src/mame/drivers/alfaskop41xx.cpp b/src/mame/drivers/alfaskop41xx.cpp index 6895e955c247a..9f898ea73537b 100644 --- a/src/mame/drivers/alfaskop41xx.cpp +++ b/src/mame/drivers/alfaskop41xx.cpp @@ -116,7 +116,7 @@ class alfaskop4110_state : public driver_device TIMER_POLL_START, TIMER_POLL_BIT }; - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // DEBUG stuff, will be removed when hooked up towards remote peer /* zero extended SDLC poll message frame to feed into receiver as a test @@ -480,7 +480,7 @@ void alfaskop4110_state::machine_start() timer_set(attotime::from_msec(5000), TIMER_POLL_START); } -void alfaskop4110_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void alfaskop4110_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // Debug, inserts a poll SDLC frame through the ADLC, it ends up at address 0x140 in RAM through DMA switch (id) diff --git a/src/mame/drivers/alpha68k_n.cpp b/src/mame/drivers/alpha68k_n.cpp index 49931423cd0dd..c7a3313436fb4 100644 --- a/src/mame/drivers/alpha68k_n.cpp +++ b/src/mame/drivers/alpha68k_n.cpp @@ -1023,7 +1023,7 @@ void sstingray_state::init_sstingry() m_coin_id = 0x22 | (0x22 << 8); m_game_id = 0; - m_alpha8511_sync_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sstingray_state::alpha8511_sync), this)); + m_alpha8511_sync_timer = timer_alloc(*this, FUNC(sstingray_state::alpha8511_sync)); save_item(NAME(m_alpha8511_address)); save_item(NAME(m_alpha8511_control)); save_item(NAME(m_alpha8511_read_mode)); diff --git a/src/mame/drivers/alphatpc16.cpp b/src/mame/drivers/alphatpc16.cpp index 9f492e23df00f..ea30b7c7387c1 100644 --- a/src/mame/drivers/alphatpc16.cpp +++ b/src/mame/drivers/alphatpc16.cpp @@ -528,7 +528,7 @@ void alphatpc16_state::alphatpc16(machine_config &config) EF9345(config, m_ef9345, 0); m_ef9345->set_palette_tag("palette"); - TIMER(config, "scanline").configure_scanline(NAME([this](timer_device &t, void *ptr, s32 p){m_ef9345->update_scanline((uint16_t)p);}), screen, 0, 10); + TIMER(config, "scanline").configure_scanline(NAME([this](void *ptr, s32 p){m_ef9345->update_scanline((uint16_t)p);}), screen, 0, 10); // these are supported by the bios, they may not have been available on real hardware RAM(config, m_ram).set_default_size("64K").set_extra_options("128K,192K,256K,384K,448K,512K"); diff --git a/src/mame/drivers/alto2.cpp b/src/mame/drivers/alto2.cpp index ac25897f4eb72..3032a75fcc8de 100644 --- a/src/mame/drivers/alto2.cpp +++ b/src/mame/drivers/alto2.cpp @@ -31,7 +31,7 @@ class alto2_state : public driver_device void alto2(machine_config &config); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: u16 kb_r(offs_t offset); @@ -306,7 +306,7 @@ void alto2_state::init_alto2() m_vblank_timer->adjust(attotime::from_hz(2*30),0,attotime::from_hz(30*2)); } -void alto2_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void alto2_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { alto2_cpu_device* cpu = downcast(m_maincpu.target()); switch (id) { diff --git a/src/mame/drivers/amico2k.cpp b/src/mame/drivers/amico2k.cpp index d6518c21966a4..c41742252053d 100644 --- a/src/mame/drivers/amico2k.cpp +++ b/src/mame/drivers/amico2k.cpp @@ -208,7 +208,7 @@ void amico2k_state::ppi_pb_w(uint8_t data) void amico2k_state::machine_start() { m_digits.resolve(); - m_led_refresh_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(amico2k_state::led_refresh),this)); + m_led_refresh_timer = timer_alloc(*this, FUNC(amico2k_state::led_refresh)); // state saving save_item(NAME(m_ls145_p)); diff --git a/src/mame/drivers/amiga.cpp b/src/mame/drivers/amiga.cpp index 709f5c93e9677..cb0a94e4de7d9 100644 --- a/src/mame/drivers/amiga.cpp +++ b/src/mame/drivers/amiga.cpp @@ -144,8 +144,8 @@ class a1000_kbreset_device : public device_t virtual void device_start() override { // allocate resources - m_c813_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(a1000_kbreset_device::c813_charged), this)); - m_c814_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(a1000_kbreset_device::c814_charged), this)); + m_c813_timer = timer_alloc(*this, FUNC(a1000_kbreset_device::c813_charged)); + m_c814_timer = timer_alloc(*this, FUNC(a1000_kbreset_device::c814_charged)); // start in idle state m_kbclk = 1U; diff --git a/src/mame/drivers/apexc.cpp b/src/mame/drivers/apexc.cpp index e16a3660312bd..1d70fe6f7821c 100644 --- a/src/mame/drivers/apexc.cpp +++ b/src/mame/drivers/apexc.cpp @@ -139,7 +139,7 @@ static INPUT_PORTS_START(apexc) PORT_BIT(0x00000001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Toggle bit #32") PORT_CODE(KEYCODE_C) INPUT_PORTS_END -void apexc_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void apexc_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_POLL_INPUTS) { diff --git a/src/mame/drivers/apple1.cpp b/src/mame/drivers/apple1.cpp index cdc46753200b8..525e2cffcc469 100644 --- a/src/mame/drivers/apple1.cpp +++ b/src/mame/drivers/apple1.cpp @@ -389,9 +389,9 @@ void apple1_state::machine_start() m_reset_down = m_clear_down = false; - m_ready_start_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(apple1_state::ready_start_cb), this)); - m_ready_end_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(apple1_state::ready_end_cb), this)); - m_kbd_strobe_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(apple1_state::keyboard_strobe_cb), this)); + m_ready_start_timer = timer_alloc(*this, FUNC(apple1_state::ready_start_cb)); + m_ready_end_timer = timer_alloc(*this, FUNC(apple1_state::ready_end_cb)); + m_kbd_strobe_timer = timer_alloc(*this, FUNC(apple1_state::keyboard_strobe_cb)); // setup save states save_item(NAME(m_vram)); diff --git a/src/mame/drivers/aristmk4.cpp b/src/mame/drivers/aristmk4.cpp index 12b5a0c3146b7..9ae16e1846011 100644 --- a/src/mame/drivers/aristmk4.cpp +++ b/src/mame/drivers/aristmk4.cpp @@ -383,7 +383,7 @@ class aristmk4_state : public driver_device TIMER_POWER_FAIL }; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; required_device m_maincpu; required_device m_rtc; @@ -455,8 +455,11 @@ class aristmk4_state : public driver_device void lions_palette(palette_device &palette) const; uint32_t screen_update_aristmk4(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(note_input_reset); + transient_timer_factory m_note_input_reset; TIMER_CALLBACK_MEMBER(coin_input_reset); + transient_timer_factory m_coin_input_reset; TIMER_CALLBACK_MEMBER(hopper_reset); + transient_timer_factory m_hopper_reset; void power_fail(); inline void uBackgroundColour(); @@ -634,7 +637,7 @@ uint8_t aristmk4_state::bv_p0() case 0x02: bv_p0_ret=0x89; m_insnote++; - machine().scheduler().timer_set(attotime::from_msec(150), timer_expired_delegate(FUNC(aristmk4_state::note_input_reset),this)); + m_note_input_reset.call_after(attotime::from_msec(150)); break; default: break; //timer will reset the input @@ -834,7 +837,7 @@ uint8_t aristmk4_state::via_b_r() case 0x02: ret=ret^0x20; m_inscrd++; - machine().scheduler().timer_set(attotime::from_msec(150), timer_expired_delegate(FUNC(aristmk4_state::coin_input_reset),this)); + m_coin_input_reset.call_after(attotime::from_msec(150)); break; default: break; //timer will reset the input @@ -846,7 +849,7 @@ uint8_t aristmk4_state::via_b_r() { case 0x00: ret=ret^0x40; - machine().scheduler().timer_set(attotime::from_msec(175), timer_expired_delegate(FUNC(aristmk4_state::hopper_reset),this)); + m_hopper_reset.call_after(attotime::from_msec(175)); m_hopper_motor = 0x02; m_hopper_motor_out = 2; break; @@ -1729,6 +1732,9 @@ void aristmk4_state::machine_start() m_hopper_motor_out.resolve(); m_lamps.resolve(); m_power_timer = timer_alloc(TIMER_POWER_FAIL); + m_note_input_reset.init(*this, FUNC(aristmk4_state::note_input_reset)); + m_hopper_reset.init(*this, FUNC(aristmk4_state::hopper_reset)); + m_coin_input_reset.init(*this, FUNC(aristmk4_state::coin_input_reset)); } void aristmk4_state::machine_reset() @@ -1747,7 +1753,7 @@ void aristmk4_state::machine_reset() m_power_timer->adjust(attotime::from_hz(1), 0, attotime::from_hz(1)); } -void aristmk4_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void aristmk4_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/aristmk5.cpp b/src/mame/drivers/aristmk5.cpp index 03720f892caed..bd1a0fe3a8816 100644 --- a/src/mame/drivers/aristmk5.cpp +++ b/src/mame/drivers/aristmk5.cpp @@ -2270,8 +2270,8 @@ void aristmk5_state::machine_start() m_coin_start_cycles = 0ULL; - m_mk5_2KHz_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(aristmk5_state::mk5_2KHz_callback),this)); - m_spi_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(aristmk5_state::spi_timer), this)); + m_mk5_2KHz_timer = timer_alloc(*this, FUNC(aristmk5_state::mk5_2KHz_callback)); + m_spi_timer = timer_alloc(*this, FUNC(aristmk5_state::spi_timer)); m_lamps.resolve(); } diff --git a/src/mame/drivers/artmagic.cpp b/src/mame/drivers/artmagic.cpp index 4c7f43c87b20c..87fde987d7774 100644 --- a/src/mame/drivers/artmagic.cpp +++ b/src/mame/drivers/artmagic.cpp @@ -119,7 +119,7 @@ void artmagic_state::control_w(offs_t offset, uint16_t data, uint16_t mem_mask) * *************************************/ -void artmagic_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void artmagic_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/asterix.cpp b/src/mame/drivers/asterix.cpp index 50efb9afe5908..d4ef0973ebea1 100644 --- a/src/mame/drivers/asterix.cpp +++ b/src/mame/drivers/asterix.cpp @@ -65,7 +65,7 @@ INTERRUPT_GEN_MEMBER(asterix_state::asterix_interrupt) device.execute().set_input_line(5, HOLD_LINE); /* ??? All irqs have the same vector, and the mask used is 0 or 7 */ } -void asterix_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void asterix_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/astinvad.cpp b/src/mame/drivers/astinvad.cpp index e3427f01480fa..e859b71b1792e 100644 --- a/src/mame/drivers/astinvad.cpp +++ b/src/mame/drivers/astinvad.cpp @@ -105,7 +105,7 @@ class astinvad_state : public driver_device void spaceint_map(address_map &map); void spaceint_portmap(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void plot_byte( bitmap_rgb32 &bitmap, uint8_t y, uint8_t x, uint8_t data, uint8_t color ); std::unique_ptr m_colorram; @@ -251,7 +251,7 @@ uint32_t astinvad_state::screen_update_spaceint(screen_device &screen, bitmap_rg * *************************************/ -void astinvad_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void astinvad_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/asuka.cpp b/src/mame/drivers/asuka.cpp index 435b1932c16ba..b51a375ccaec7 100644 --- a/src/mame/drivers/asuka.cpp +++ b/src/mame/drivers/asuka.cpp @@ -235,7 +235,7 @@ DIP locations verified for: INTERRUPTS ***********************************************************/ -void asuka_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void asuka_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/atarist.cpp b/src/mame/drivers/atarist.cpp index 971a888b382c0..f4e4320b0863a 100644 --- a/src/mame/drivers/atarist.cpp +++ b/src/mame/drivers/atarist.cpp @@ -52,7 +52,7 @@ static const double DMASOUND_RATE[] = { Y2/640.0/8.0, Y2/640.0/4.0, Y2/640.0/2.0 // TIMERS //************************************************************************** -void st_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void st_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -825,7 +825,7 @@ void ste_state::dmasound_tick() } -void ste_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ste_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/atarisy2.cpp b/src/mame/drivers/atarisy2.cpp index 306cdd9a271b5..d95c299bb8e29 100644 --- a/src/mame/drivers/atarisy2.cpp +++ b/src/mame/drivers/atarisy2.cpp @@ -222,6 +222,8 @@ void atarisy2_state::machine_start() m_p2portwr_state = false; m_p2portrd_state = false; + m_delayed_int_enable_w.init(*this, FUNC(atarisy2_state::delayed_int_enable_w)); + save_item(NAME(m_interrupt_enable)); save_item(NAME(m_scanline_int_state)); save_item(NAME(m_video_int_state)); @@ -287,7 +289,7 @@ TIMER_CALLBACK_MEMBER(atarisy2_state::delayed_int_enable_w) void atarisy2_state::int_enable_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(atarisy2_state::delayed_int_enable_w),this), data); + m_delayed_int_enable_w.synchronize(data); } diff --git a/src/mame/drivers/atetris.cpp b/src/mame/drivers/atetris.cpp index 1d28e15043379..fc47ced59bccc 100644 --- a/src/mame/drivers/atetris.cpp +++ b/src/mame/drivers/atetris.cpp @@ -104,7 +104,7 @@ void atetris_state::machine_start() m_slapstic_bank->configure_entries(2, 2, m_slapstic_region, 0x4000); /* Allocate interrupt timer */ - m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(atetris_state::interrupt_gen),this)); + m_interrupt_timer = timer_alloc(*this, FUNC(atetris_state::interrupt_gen)); } diff --git a/src/mame/drivers/atlantis.cpp b/src/mame/drivers/atlantis.cpp index 0555fc2c32851..1ab757df07138 100644 --- a/src/mame/drivers/atlantis.cpp +++ b/src/mame/drivers/atlantis.cpp @@ -125,7 +125,7 @@ class atlantis_state : public driver_device protected: virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_maincpu; @@ -660,7 +660,7 @@ void atlantis_state::machine_reset() /************************************* * Timer *************************************/ -void atlantis_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void atlantis_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // ADC Ready Timer board_ctrl[STATUS] |= (1 << A2D_IRQ_SHIFT); diff --git a/src/mame/drivers/aviion88k.cpp b/src/mame/drivers/aviion88k.cpp index 38315cea85818..27ca6d32888df 100644 --- a/src/mame/drivers/aviion88k.cpp +++ b/src/mame/drivers/aviion88k.cpp @@ -134,7 +134,7 @@ void aviion88k_state::machine_start() m_leds.resolve(); for (emu_timer *&pit : m_pit) - pit = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(aviion88k_state::pit_timer), this)); + pit = timer_alloc(*this, FUNC(aviion88k_state::pit_timer)); } void aviion88k_state::machine_reset() diff --git a/src/mame/drivers/beaminv.cpp b/src/mame/drivers/beaminv.cpp index 91b9e7b664d2a..a873f00e031c6 100644 --- a/src/mame/drivers/beaminv.cpp +++ b/src/mame/drivers/beaminv.cpp @@ -134,7 +134,7 @@ TIMER_CALLBACK_MEMBER(beaminv_state::interrupt_callback) void beaminv_state::create_interrupt_timer() { - m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(beaminv_state::interrupt_callback),this)); + m_interrupt_timer = timer_alloc(*this, FUNC(beaminv_state::interrupt_callback)); } diff --git a/src/mame/drivers/beezer.cpp b/src/mame/drivers/beezer.cpp index 9e6e456b88693..ff842f259515c 100644 --- a/src/mame/drivers/beezer.cpp +++ b/src/mame/drivers/beezer.cpp @@ -108,7 +108,7 @@ class beezer_state : public driver_device TIMER_SCANLINE }; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_maincpu; @@ -297,7 +297,7 @@ uint8_t beezer_state::line_r() // AUDIO //************************************************************************** -void beezer_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void beezer_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/berzerk.cpp b/src/mame/drivers/berzerk.cpp index 6d45d41f3aaeb..db7167a76c8bd 100644 --- a/src/mame/drivers/berzerk.cpp +++ b/src/mame/drivers/berzerk.cpp @@ -249,7 +249,7 @@ TIMER_CALLBACK_MEMBER(berzerk_state::irq_callback) void berzerk_state::create_irq_timer() { - m_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(berzerk_state::irq_callback),this)); + m_irq_timer = timer_alloc(*this, FUNC(berzerk_state::irq_callback)); } @@ -326,7 +326,7 @@ TIMER_CALLBACK_MEMBER(berzerk_state::nmi_callback) void berzerk_state::create_nmi_timer() { - m_nmi_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(berzerk_state::nmi_callback),this)); + m_nmi_timer = timer_alloc(*this, FUNC(berzerk_state::nmi_callback)); } diff --git a/src/mame/drivers/beta.cpp b/src/mame/drivers/beta.cpp index 4639ec0fcde4b..9d83c526136c7 100644 --- a/src/mame/drivers/beta.cpp +++ b/src/mame/drivers/beta.cpp @@ -320,7 +320,7 @@ void beta_state::machine_start() m_digits.resolve(); m_leds.resolve(); - m_led_refresh_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(beta_state::led_refresh),this)); + m_led_refresh_timer = timer_alloc(*this, FUNC(beta_state::led_refresh)); m_eprom_rom.resize(0x800); diff --git a/src/mame/drivers/bfcobra.cpp b/src/mame/drivers/bfcobra.cpp index 647b2d68310f6..61c704762091b 100644 --- a/src/mame/drivers/bfcobra.cpp +++ b/src/mame/drivers/bfcobra.cpp @@ -1841,7 +1841,7 @@ void bfcobjam_state::init_bfcobjam() membank("bank2")->set_base(memregion("user1")->base()+0x08000); membank("bank3")->set_base(memregion("user1")->base()+0x0c000); - m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bfcobjam_state::scanline_callback),this)); + m_scanline_timer = timer_alloc(*this, FUNC(bfcobjam_state::scanline_callback)); /* Finish this */ save_item(NAME(m_data_r)); diff --git a/src/mame/drivers/bigevglf.cpp b/src/mame/drivers/bigevglf.cpp index c9c585b8ed69d..ecf04caf9f106 100644 --- a/src/mame/drivers/bigevglf.cpp +++ b/src/mame/drivers/bigevglf.cpp @@ -95,22 +95,22 @@ TIMER_CALLBACK_MEMBER(bigevglf_state::deferred_ls74_w) /* do this on a timer to let the CPUs synchronize */ void bigevglf_state::beg13_a_clr_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(bigevglf_state::deferred_ls74_w),this), (0 << 8) | 0); + m_deferred_ls74_w.synchronize((0 << 8) | 0); } void bigevglf_state::beg13_b_clr_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(bigevglf_state::deferred_ls74_w),this), (1 << 8) | 0); + m_deferred_ls74_w.synchronize((1 << 8) | 0); } void bigevglf_state::beg13_a_set_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(bigevglf_state::deferred_ls74_w),this), (0 << 8) | 1); + m_deferred_ls74_w.synchronize((0 << 8) | 1); } void bigevglf_state::beg13_b_set_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(bigevglf_state::deferred_ls74_w),this), (1 << 8) | 1); + m_deferred_ls74_w.synchronize((1 << 8) | 1); } uint8_t bigevglf_state::beg_status_r() @@ -350,6 +350,8 @@ GFXDECODE_END void bigevglf_state::machine_start() { + m_deferred_ls74_w.init(*this, FUNC(bigevglf_state::deferred_ls74_w)); + save_item(NAME(m_vidram_bank)); save_item(NAME(m_plane_selected)); save_item(NAME(m_plane_visible)); diff --git a/src/mame/drivers/blockade.cpp b/src/mame/drivers/blockade.cpp index 64568e8908c6c..86529263783fe 100644 --- a/src/mame/drivers/blockade.cpp +++ b/src/mame/drivers/blockade.cpp @@ -62,7 +62,7 @@ class blockade_state : public driver_device protected: virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_maincpu; @@ -455,7 +455,7 @@ void blockade_state::machine_reset() m_coin_inserted = 0; } -void blockade_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void blockade_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // resume cpu, on the real system, this is connected the READY input m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); diff --git a/src/mame/drivers/boxer.cpp b/src/mame/drivers/boxer.cpp index ca836a2da038f..2ebc762921ae2 100644 --- a/src/mame/drivers/boxer.cpp +++ b/src/mame/drivers/boxer.cpp @@ -65,7 +65,7 @@ class boxer_state : public driver_device virtual void machine_reset() override; void boxer_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: /* memory pointers */ @@ -92,7 +92,7 @@ class boxer_state : public driver_device * *************************************/ -void boxer_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void boxer_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/drivers/btoads.cpp b/src/mame/drivers/btoads.cpp index 19c4476cfd25e..c5d94de3cfd64 100644 --- a/src/mame/drivers/btoads.cpp +++ b/src/mame/drivers/btoads.cpp @@ -66,7 +66,7 @@ uint8_t btoads_state::nvram_r(offs_t offset) * *************************************/ -void btoads_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void btoads_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/capbowl.cpp b/src/mame/drivers/capbowl.cpp index 53b7b58321104..d42bed68658cb 100644 --- a/src/mame/drivers/capbowl.cpp +++ b/src/mame/drivers/capbowl.cpp @@ -122,7 +122,7 @@ INTERRUPT_GEN_MEMBER(capbowl_state::interrupt) * *************************************/ -void capbowl_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void capbowl_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/cat.cpp b/src/mame/drivers/cat.cpp index 18dbf71eb9493..06b50450b398f 100644 --- a/src/mame/drivers/cat.cpp +++ b/src/mame/drivers/cat.cpp @@ -277,7 +277,7 @@ class cat_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_maincpu; @@ -898,7 +898,7 @@ static INPUT_PORTS_START( cat ) INPUT_PORTS_END -void cat_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cat_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/cave.cpp b/src/mame/drivers/cave.cpp index c890feaf45b60..dc8d2373cf7a9 100644 --- a/src/mame/drivers/cave.cpp +++ b/src/mame/drivers/cave.cpp @@ -2033,7 +2033,7 @@ GFXDECODE_END void cave_state::machine_start() { m_led_outputs.resolve(); - m_vblank_end_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cave_state::vblank_end), this)); + m_vblank_end_timer = timer_alloc(*this, FUNC(cave_state::vblank_end)); save_item(NAME(m_soundbuf_wptr)); save_item(NAME(m_soundbuf_rptr)); diff --git a/src/mame/drivers/cball.cpp b/src/mame/drivers/cball.cpp index f7db130071bec..01017cb9a7bd8 100644 --- a/src/mame/drivers/cball.cpp +++ b/src/mame/drivers/cball.cpp @@ -61,7 +61,7 @@ class cball_state : public driver_device void cball(machine_config &config); void cpu_map(address_map &map); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; @@ -102,7 +102,7 @@ uint32_t cball_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, } -void cball_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cball_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/cbm2.cpp b/src/mame/drivers/cbm2.cpp index 6a4e1eb5cd6cb..71e3972c2f141 100644 --- a/src/mame/drivers/cbm2.cpp +++ b/src/mame/drivers/cbm2.cpp @@ -139,7 +139,7 @@ class cbm2_state : public driver_device required_ioport_array<8> m_pb; required_ioport m_lock; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; DECLARE_MACHINE_START( cbm2 ); DECLARE_MACHINE_START( cbm2_ntsc ); @@ -2046,7 +2046,7 @@ void cbm2_state::ext_cia_pb_w(uint8_t data) // device_timer - handler timer events //------------------------------------------------- -void cbm2_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cbm2_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_tpi1->i0_w(m_todclk); diff --git a/src/mame/drivers/ccastles.cpp b/src/mame/drivers/ccastles.cpp index b6c2b02f5458b..7300b4b3010c9 100644 --- a/src/mame/drivers/ccastles.cpp +++ b/src/mame/drivers/ccastles.cpp @@ -215,7 +215,7 @@ void ccastles_state::machine_start() membank("bank1")->configure_entries(0, 2, memregion("maincpu")->base() + 0xa000, 0x6000); /* create a timer for IRQs and set up the first callback */ - m_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ccastles_state::clock_irq),this)); + m_irq_timer = timer_alloc(*this, FUNC(ccastles_state::clock_irq)); m_irq_state = 0; schedule_next_irq(0); diff --git a/src/mame/drivers/cdc721.cpp b/src/mame/drivers/cdc721.cpp index 1643cf91350ed..d2913368da5e3 100644 --- a/src/mame/drivers/cdc721.cpp +++ b/src/mame/drivers/cdc721.cpp @@ -54,6 +54,7 @@ class cdc721_state : public driver_device template DECLARE_WRITE_LINE_MEMBER(int_w); TIMER_CALLBACK_MEMBER(update_interrupts); + transient_timer_factory m_update_interrupts; IRQ_CALLBACK_MEMBER(restart_cb); template DECLARE_WRITE_LINE_MEMBER(foreign_char_bank_w); @@ -84,7 +85,7 @@ class cdc721_state : public driver_device void cdc721_state::interrupt_mask_w(u8 data) { m_interrupt_mask = data ^ 0xff; - machine().scheduler().synchronize(timer_expired_delegate(FUNC(cdc721_state::update_interrupts), this)); + m_update_interrupts.synchronize(); } template @@ -98,7 +99,7 @@ WRITE_LINE_MEMBER(cdc721_state::int_w) else m_pending_interrupts &= ~(0x01 << Line); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(cdc721_state::update_interrupts), this)); + m_update_interrupts.synchronize(); } TIMER_CALLBACK_MEMBER(cdc721_state::update_interrupts) @@ -225,6 +226,8 @@ void cdc721_state::machine_start() m_interrupt_mask = 0; m_foreign_char_bank = 0; + m_update_interrupts.init(*this, FUNC(cdc721_state::update_interrupts)); + save_item(NAME(m_pending_interrupts)); save_item(NAME(m_active_interrupts)); save_item(NAME(m_interrupt_mask)); diff --git a/src/mame/drivers/cgang.cpp b/src/mame/drivers/cgang.cpp index fd3f42c719c2f..1d79056ec0c99 100644 --- a/src/mame/drivers/cgang.cpp +++ b/src/mame/drivers/cgang.cpp @@ -203,7 +203,7 @@ class cgang_state : public driver_device void cgang_state::machine_start() { for (int i = 0; i < 5; i++) - m_sol_filter[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cgang_state::output_sol),this)); + m_sol_filter[i] = timer_alloc(*this, FUNC(cgang_state::output_sol)); // resolve outputs m_gun_lamps.resolve(); diff --git a/src/mame/drivers/chexx.cpp b/src/mame/drivers/chexx.cpp index b40d3e0b6dae8..0058402e0128c 100644 --- a/src/mame/drivers/chexx.cpp +++ b/src/mame/drivers/chexx.cpp @@ -131,7 +131,7 @@ class chexx_state : public driver_device TIMER_UPDATE }; - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void update(); @@ -283,7 +283,7 @@ void chexx_state::mem(address_map &map) map(0xf800, 0xffff).rom().region("maincpu", 0); } -void chexx_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void chexx_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/cidelsa.cpp b/src/mame/drivers/cidelsa.cpp index f95ab22ae49c4..d3513b6466a84 100644 --- a/src/mame/drivers/cidelsa.cpp +++ b/src/mame/drivers/cidelsa.cpp @@ -356,7 +356,7 @@ INPUT_PORTS_END /* Machine Start */ -void cidelsa_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cidelsa_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/clayshoo.cpp b/src/mame/drivers/clayshoo.cpp index 3af7ad14ed875..7ed8ebdde7835 100644 --- a/src/mame/drivers/clayshoo.cpp +++ b/src/mame/drivers/clayshoo.cpp @@ -153,8 +153,8 @@ uint8_t clayshoo_state::analog_r() void clayshoo_state::create_analog_timers( ) { - m_analog_timer_1 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(clayshoo_state::reset_analog_bit),this)); - m_analog_timer_2 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(clayshoo_state::reset_analog_bit),this)); + m_analog_timer_1 = timer_alloc(*this, FUNC(clayshoo_state::reset_analog_bit)); + m_analog_timer_2 = timer_alloc(*this, FUNC(clayshoo_state::reset_analog_bit)); } diff --git a/src/mame/drivers/clickstart.cpp b/src/mame/drivers/clickstart.cpp index 815767491761b..ccb99c602cdc8 100644 --- a/src/mame/drivers/clickstart.cpp +++ b/src/mame/drivers/clickstart.cpp @@ -101,7 +101,7 @@ class clickstart_state : public driver_device DECLARE_INPUT_CHANGED_MEMBER(key_update); private: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; static const device_timer_id TIMER_UART_TX = 0; @@ -205,7 +205,7 @@ DEVICE_IMAGE_LOAD_MEMBER(clickstart_state::cart_load) return image_init_result::PASS; } -void clickstart_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void clickstart_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_UART_TX) { diff --git a/src/mame/drivers/cliffhgr.cpp b/src/mame/drivers/cliffhgr.cpp index 339866ab13c10..d52a57ff9a384 100644 --- a/src/mame/drivers/cliffhgr.cpp +++ b/src/mame/drivers/cliffhgr.cpp @@ -235,7 +235,7 @@ TIMER_CALLBACK_MEMBER(cliffhgr_state::irq_callback) void cliffhgr_state::machine_start() { m_led.resolve(); - m_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cliffhgr_state::irq_callback),this)); + m_irq_timer = timer_alloc(*this, FUNC(cliffhgr_state::irq_callback)); save_item(NAME(m_port_bank)); save_item(NAME(m_philips_code)); diff --git a/src/mame/drivers/cloud9.cpp b/src/mame/drivers/cloud9.cpp index fb28a5eca59e3..4e73a45443e58 100644 --- a/src/mame/drivers/cloud9.cpp +++ b/src/mame/drivers/cloud9.cpp @@ -183,7 +183,7 @@ void cloud9_state::machine_start() m_screen->configure(320, 256, visarea, HZ_TO_ATTOSECONDS(PIXEL_CLOCK) * VTOTAL * HTOTAL); /* create a timer for IRQs and set up the first callback */ - m_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cloud9_state::clock_irq),this)); + m_irq_timer = timer_alloc(*this, FUNC(cloud9_state::clock_irq)); m_irq_state = 0; schedule_next_irq(0-64); diff --git a/src/mame/drivers/cmi.cpp b/src/mame/drivers/cmi.cpp index 4d368c1799781..cfbcbc9849645 100644 --- a/src/mame/drivers/cmi.cpp +++ b/src/mame/drivers/cmi.cpp @@ -228,7 +228,7 @@ class cmi_state : public driver_device virtual void machine_reset() override; virtual void machine_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; static const device_timer_id TIMER_MAP_SWITCH = 0; static const device_timer_id TIMER_HBLANK = 1; @@ -965,7 +965,7 @@ template void cmi_state::irq_ram_w(offs_t offset, uint8_t data) m_scratch_ram[cpunum][0xf8 + offset] = data; } -void cmi_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cmi_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/coleco.cpp b/src/mame/drivers/coleco.cpp index 8c7e32e7c6c1e..579285cdc22bb 100644 --- a/src/mame/drivers/coleco.cpp +++ b/src/mame/drivers/coleco.cpp @@ -511,9 +511,9 @@ void coleco_state::machine_start() // init paddles for (int port = 0; port < 2; port++) { - m_joy_pulse_timer[port] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(coleco_state::paddle_pulse_callback),this)); - m_joy_d7_timer[port] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(coleco_state::paddle_d7reset_callback),this)); - m_joy_irq_timer[port] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(coleco_state::paddle_irqreset_callback),this)); + m_joy_pulse_timer[port] = timer_alloc(*this, FUNC(coleco_state::paddle_pulse_callback)); + m_joy_d7_timer[port] = timer_alloc(*this, FUNC(coleco_state::paddle_d7reset_callback)); + m_joy_irq_timer[port] = timer_alloc(*this, FUNC(coleco_state::paddle_irqreset_callback)); m_joy_irq_state[port] = 0; m_joy_d7_state[port] = 0; diff --git a/src/mame/drivers/comx35.cpp b/src/mame/drivers/comx35.cpp index 12d4842427ee1..93d0efe5cc686 100644 --- a/src/mame/drivers/comx35.cpp +++ b/src/mame/drivers/comx35.cpp @@ -542,7 +542,7 @@ WRITE_LINE_MEMBER( comx35_state::irq_w ) // device_timer - handler timer events //------------------------------------------------- -void comx35_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void comx35_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/cops.cpp b/src/mame/drivers/cops.cpp index 52d4d37d92732..aaff00e225d9b 100644 --- a/src/mame/drivers/cops.cpp +++ b/src/mame/drivers/cops.cpp @@ -876,7 +876,7 @@ INPUT_PORTS_END void cops_state::machine_start() { - m_ld_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cops_state::ld_timer_callback),this)); + m_ld_timer = timer_alloc(*this, FUNC(cops_state::ld_timer_callback)); m_ld_timer->adjust(attotime::from_hz(167*5), 0, attotime::from_hz(167*5)); diff --git a/src/mame/drivers/cps2.cpp b/src/mame/drivers/cps2.cpp index 1ed6c8cb0b786..a9ace2c6b90d9 100644 --- a/src/mame/drivers/cps2.cpp +++ b/src/mame/drivers/cps2.cpp @@ -10169,7 +10169,7 @@ void cps2_state::init_digital_volume() m_cps2disabledigitalvolume = 0; // create a timer to update our volume state from the fake switches - read it every 6 frames or so to enable some granularity - m_digital_volume_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cps2_state::cps2_update_digital_volume), this)); + m_digital_volume_timer = timer_alloc(*this, FUNC(cps2_state::cps2_update_digital_volume)); m_digital_volume_timer->adjust(attotime::from_msec(100), 0, attotime::from_msec(100)); } diff --git a/src/mame/drivers/cubeqst.cpp b/src/mame/drivers/cubeqst.cpp index ee4c26987ea31..5555a223cbd5f 100644 --- a/src/mame/drivers/cubeqst.cpp +++ b/src/mame/drivers/cubeqst.cpp @@ -86,6 +86,7 @@ class cubeqst_state : public driver_device uint32_t screen_update_cubeqst(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(vblank_irq); TIMER_CALLBACK_MEMBER(delayed_bank_swap); + transient_timer_factory m_delayed_bank_swap; void swap_linecpu_banks(); void cubeqst(machine_config &config); void line_sound_map(address_map &map); @@ -281,7 +282,7 @@ TIMER_CALLBACK_MEMBER(cubeqst_state::delayed_bank_swap) void cubeqst_state::swap_linecpu_banks() { /* Best sync up before we switch banks around */ - machine().scheduler().synchronize(timer_expired_delegate(FUNC(cubeqst_state::delayed_bank_swap),this)); + m_delayed_bank_swap.synchronize(); } @@ -464,6 +465,8 @@ void cubeqst_state::machine_start() /* TODO: Use resistor values */ int i; + m_delayed_bank_swap.init(*this, FUNC(cubeqst_state::delayed_bank_swap)); + m_colormap = std::make_unique(65536); for (i = 0; i < 65536; ++i) { diff --git a/src/mame/drivers/cvs.cpp b/src/mame/drivers/cvs.cpp index b792caffdb401..c1d1641684656 100644 --- a/src/mame/drivers/cvs.cpp +++ b/src/mame/drivers/cvs.cpp @@ -296,7 +296,7 @@ TIMER_CALLBACK_MEMBER(cvs_state::cvs_393hz_timer_cb) void cvs_state::start_393hz_timer() { - m_cvs_393hz_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cvs_state::cvs_393hz_timer_cb),this)); + m_cvs_393hz_timer = timer_alloc(*this, FUNC(cvs_state::cvs_393hz_timer_cb)); m_cvs_393hz_timer->adjust(attotime::from_hz(30*393), 0, attotime::from_hz(30*393)); } diff --git a/src/mame/drivers/cxhumax.cpp b/src/mame/drivers/cxhumax.cpp index a7d9f7c9054eb..9b0805a66e60c 100644 --- a/src/mame/drivers/cxhumax.cpp +++ b/src/mame/drivers/cxhumax.cpp @@ -986,7 +986,7 @@ void cxhumax_state::machine_start() int index = 0; for(index = 0; index < MAX_CX_TIMERS; index++) { - m_timer_regs.timer[index].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cxhumax_state::timer_tick),this)); + m_timer_regs.timer[index].timer = timer_alloc(*this, FUNC(cxhumax_state::timer_tick)); m_timer_regs.timer[index].timer->adjust(attotime::never, index); } } diff --git a/src/mame/drivers/dec8.cpp b/src/mame/drivers/dec8.cpp index 53b9530af3e5a..0e5d04cd106bf 100644 --- a/src/mame/drivers/dec8.cpp +++ b/src/mame/drivers/dec8.cpp @@ -132,7 +132,7 @@ uint8_t dec8_state::gondo_player_2_r(offs_t offset) * ***************************************************/ -void dec8_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void dec8_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/dectalk.cpp b/src/mame/drivers/dectalk.cpp index 6d00a517ae060..b3eace17095c6 100644 --- a/src/mame/drivers/dectalk.cpp +++ b/src/mame/drivers/dectalk.cpp @@ -326,7 +326,7 @@ class dectalk_state : public driver_device void tms32010_io(address_map &map); void tms32010_mem(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; @@ -839,7 +839,7 @@ INPUT_PORTS_END /****************************************************************************** Machine Drivers ******************************************************************************/ -void dectalk_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void dectalk_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/destroyr.cpp b/src/mame/drivers/destroyr.cpp index fd86344005093..36deb25d4d40d 100644 --- a/src/mame/drivers/destroyr.cpp +++ b/src/mame/drivers/destroyr.cpp @@ -56,7 +56,7 @@ class destroyr_state : public driver_device private: virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; static const device_timer_id TIMER_DIAL = 0; static const device_timer_id TIMER_FRAME = 1; @@ -180,7 +180,7 @@ uint32_t destroyr_state::screen_update(screen_device &screen, bitmap_ind16 &bitm } -void destroyr_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void destroyr_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/dpb7000.cpp b/src/mame/drivers/dpb7000.cpp index 0a702bf235e73..d7014882c132f 100644 --- a/src/mame/drivers/dpb7000.cpp +++ b/src/mame/drivers/dpb7000.cpp @@ -111,7 +111,7 @@ class dpb7000_state : public driver_device private: virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; template uint32_t store_screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); @@ -1062,7 +1062,7 @@ void dpb7000_state::machine_reset() m_tablet_state = 0; } -void dpb7000_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void dpb7000_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_DISKSEQ_COMPLETE) req_b_w(1); diff --git a/src/mame/drivers/dvk_kcgd.cpp b/src/mame/drivers/dvk_kcgd.cpp index 0844a6781e4d1..5efe80f44001f 100644 --- a/src/mame/drivers/dvk_kcgd.cpp +++ b/src/mame/drivers/dvk_kcgd.cpp @@ -83,7 +83,7 @@ class kcgd_state : public driver_device TIMER_ID_VSYNC_OFF, TIMER_ID_500HZ }; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; uint16_t vram_addr_r(); uint16_t vram_data_r(); @@ -136,7 +136,7 @@ void kcgd_state::kcgd_mem(address_map &map) // map(0177560, 0177567).ram(); // USART3 -- keyboard } -void kcgd_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void kcgd_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/dvk_ksm.cpp b/src/mame/drivers/dvk_ksm.cpp index 4a6bc1afa6571..bb60beb4feecf 100644 --- a/src/mame/drivers/dvk_ksm.cpp +++ b/src/mame/drivers/dvk_ksm.cpp @@ -115,7 +115,7 @@ class ksm_state : public driver_device virtual void video_start() override; uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; DECLARE_WRITE_LINE_MEMBER(write_keyboard_clock); @@ -220,7 +220,7 @@ static INPUT_PORTS_START( ksm ) PORT_DIPSETTING(0x0E, "75") INPUT_PORTS_END -void ksm_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ksm_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_ID_BRG) { diff --git a/src/mame/drivers/eispc.cpp b/src/mame/drivers/eispc.cpp index 4ec53e0152032..29e5b130688d5 100644 --- a/src/mame/drivers/eispc.cpp +++ b/src/mame/drivers/eispc.cpp @@ -527,7 +527,7 @@ void epc_state::machine_reset() void epc_state::init_epc() { /* Keyboard UART Rxc/Txc is 19.2 kHz from x960 divider */ - m_kbdclk_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(epc_state::rxtxclk_w), this)); + m_kbdclk_timer = timer_alloc(*this, FUNC(epc_state::rxtxclk_w)); m_kbdclk_timer->adjust(attotime::from_hz(XTAL(18'432'000) / 960) / 2); } diff --git a/src/mame/drivers/enigma2.cpp b/src/mame/drivers/enigma2.cpp index 53350bda7d3fc..b828b25c53dae 100644 --- a/src/mame/drivers/enigma2.cpp +++ b/src/mame/drivers/enigma2.cpp @@ -274,8 +274,8 @@ TIMER_CALLBACK_MEMBER(enigma2_state::interrupt_assert_callback) void enigma2_state::create_interrupt_timers( ) { - m_interrupt_clear_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(enigma2_state::interrupt_clear_callback),this)); - m_interrupt_assert_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(enigma2_state::interrupt_assert_callback),this)); + m_interrupt_clear_timer = timer_alloc(*this, FUNC(enigma2_state::interrupt_clear_callback)); + m_interrupt_assert_timer = timer_alloc(*this, FUNC(enigma2_state::interrupt_assert_callback)); } diff --git a/src/mame/drivers/esh.cpp b/src/mame/drivers/esh.cpp index f47cbf90200f3..76d9c4dcef171 100644 --- a/src/mame/drivers/esh.cpp +++ b/src/mame/drivers/esh.cpp @@ -55,7 +55,7 @@ class esh_state : public driver_device protected: virtual void machine_start() override; - //virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + //virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_laserdisc; diff --git a/src/mame/drivers/esripsys.cpp b/src/mame/drivers/esripsys.cpp index edaa9ff6ca3a8..b80967c727b4b 100644 --- a/src/mame/drivers/esripsys.cpp +++ b/src/mame/drivers/esripsys.cpp @@ -163,7 +163,7 @@ TIMER_CALLBACK_MEMBER(esripsys_state::delayed_bank_swap) void esripsys_state::frame_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(esripsys_state::delayed_bank_swap),this)); + m_delayed_bank_swap.synchronize(); m_frame_vbl = 1; } @@ -633,6 +633,8 @@ void esripsys_state::init_esripsys() membank("bank3")->set_base(&rom[0x4000]); membank("bank4")->set_base(&rom[0x8000]); + m_delayed_bank_swap.init(*this, FUNC(esripsys_state::delayed_bank_swap)); + /* Register stuff for state saving */ save_pointer(NAME(m_fdt_a), FDT_RAM_SIZE); save_pointer(NAME(m_fdt_b), FDT_RAM_SIZE); diff --git a/src/mame/drivers/eurocom2.cpp b/src/mame/drivers/eurocom2.cpp index 6f52ef191ab12..0dfca241f9870 100644 --- a/src/mame/drivers/eurocom2.cpp +++ b/src/mame/drivers/eurocom2.cpp @@ -105,7 +105,7 @@ class eurocom2_state : public driver_device // driver_device overrides virtual void machine_reset() override; virtual void machine_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; emu_timer *m_sst; @@ -245,7 +245,7 @@ WRITE_LINE_MEMBER(eurocom2_state::pia1_cb2_w) // reset single-step timer } -void eurocom2_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void eurocom2_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_sst_state = !m_sst_state; m_pia1->ca2_w(m_sst_state); diff --git a/src/mame/drivers/exidy440.cpp b/src/mame/drivers/exidy440.cpp index ca2185b56f163..a5476c1e1a938 100644 --- a/src/mame/drivers/exidy440.cpp +++ b/src/mame/drivers/exidy440.cpp @@ -365,7 +365,7 @@ TIMER_CALLBACK_MEMBER(exidy440_state::delayed_sound_command_w) void exidy440_state::sound_command_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(exidy440_state::delayed_sound_command_w), this), data); + m_delayed_sound_command_w.synchronize(data); } @@ -448,6 +448,8 @@ void exidy440_state::machine_start() /* the EEROM lives in the uppermost 8k of the top bank */ uint8_t *rom = memregion("maincpu")->base(); + m_delayed_sound_command_w.init(*this, FUNC(exidy440_state::delayed_sound_command_w)); + subdevice("nvram")->set_base(&rom[0x10000 + 15 * 0x4000 + 0x2000], 0x2000); } diff --git a/src/mame/drivers/exorciser.cpp b/src/mame/drivers/exorciser.cpp index 8c6dd039509d7..0e66b7e51e560 100644 --- a/src/mame/drivers/exorciser.cpp +++ b/src/mame/drivers/exorciser.cpp @@ -221,7 +221,7 @@ class exorciser_state : public driver_device u8 m_restart_count; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void pia_dbg_pa_w(u8 data); DECLARE_READ_LINE_MEMBER(pia_dbg_ca1_r); @@ -510,7 +510,7 @@ WRITE_LINE_MEMBER(exorciser_state::pia_dbg_ca2_w) } -void exorciser_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void exorciser_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/famibox.cpp b/src/mame/drivers/famibox.cpp index daafda79f573d..1c104c2a33ed4 100644 --- a/src/mame/drivers/famibox.cpp +++ b/src/mame/drivers/famibox.cpp @@ -519,8 +519,8 @@ void famibox_state::machine_start() famicombox_bankswitch(0); - m_attract_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(famibox_state::famicombox_attract_timer_callback),this)); - m_gameplay_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(famibox_state::famicombox_gameplay_timer_callback),this)); + m_attract_timer = timer_alloc(*this, FUNC(famibox_state::famicombox_attract_timer_callback)); + m_gameplay_timer = timer_alloc(*this, FUNC(famibox_state::famicombox_gameplay_timer_callback)); m_exception_cause = 0xff; m_exception_mask = 0; m_attract_timer_period = 0; diff --git a/src/mame/drivers/fgoal.cpp b/src/mame/drivers/fgoal.cpp index b985bcc6d525c..5faacc2494cd8 100644 --- a/src/mame/drivers/fgoal.cpp +++ b/src/mame/drivers/fgoal.cpp @@ -64,7 +64,7 @@ void fgoal_state::fgoal_palette(palette_device &palette) const } -void fgoal_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void fgoal_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/firebeat.cpp b/src/mame/drivers/firebeat.cpp index e3b5e08df0212..5e67296ee1c00 100644 --- a/src/mame/drivers/firebeat.cpp +++ b/src/mame/drivers/firebeat.cpp @@ -1216,7 +1216,7 @@ WRITE_LINE_MEMBER(firebeat_state::sound_irq_callback) void firebeat_spu_state::machine_start() { firebeat_state::machine_start(); - m_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(firebeat_spu_state::spu_dma_callback), this)); + m_dma_timer = timer_alloc(*this, FUNC(firebeat_spu_state::spu_dma_callback)); } void firebeat_spu_state::machine_reset() @@ -1814,7 +1814,7 @@ void firebeat_kbm_state::init_kbm_overseas() void firebeat_kbm_state::init_keyboard() { // set keyboard timer -// m_keyboard_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(firebeat_state::keyboard_timer_callback),this)); +// m_keyboard_timer = timer_alloc(*this, FUNC(firebeat_state::keyboard_timer_callback)); // m_keyboard_timer->adjust(attotime::from_msec(10), 0, attotime::from_msec(10)); } diff --git a/src/mame/drivers/flyball.cpp b/src/mame/drivers/flyball.cpp index ee657e4a41ee1..b95e2a9e9cc5d 100644 --- a/src/mame/drivers/flyball.cpp +++ b/src/mame/drivers/flyball.cpp @@ -84,7 +84,7 @@ class flyball_state : public driver_device TIMER_CALLBACK_MEMBER(quarter_callback); void flyball_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; /* devices */ required_device m_maincpu; @@ -181,7 +181,7 @@ uint32_t flyball_state::screen_update(screen_device &screen, bitmap_ind16 &bitma } -void flyball_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void flyball_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/fm7.cpp b/src/mame/drivers/fm7.cpp index 2b5be155949c0..896882850e2f8 100644 --- a/src/mame/drivers/fm7.cpp +++ b/src/mame/drivers/fm7.cpp @@ -1723,10 +1723,10 @@ void fm7_state::init_fm7() { // m_shared_ram = std::make_unique(0x80); m_video_ram = make_unique_clear(0x18000); // 2 pages on some systems - m_beeper_off_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(fm7_state::beeper_off), this)); - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(fm7_state::timer_irq), this)); - m_subtimer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(fm7_state::subtimer_irq), this)); - m_keyboard_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(fm7_state::keyboard_poll), this)); + m_beeper_off_timer = timer_alloc(*this, FUNC(fm7_state::beeper_off)); + m_timer = timer_alloc(*this, FUNC(fm7_state::timer_irq)); + m_subtimer = timer_alloc(*this, FUNC(fm7_state::subtimer_irq)); + m_keyboard_timer = timer_alloc(*this, FUNC(fm7_state::keyboard_poll)); m_init_rom_en = false; } @@ -1746,9 +1746,9 @@ MACHINE_START_MEMBER(fm7_state,fm7) MACHINE_START_MEMBER(fm77_state,fm77av) { - m_encoder_ack_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(fm77_state::av_encoder_ack), this)); - m_alu_task_end_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(fm77_state::av_alu_task_end), this)); - m_vsync_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(fm77_state::av_vsync), this)); + m_encoder_ack_timer = timer_alloc(*this, FUNC(fm77_state::av_encoder_ack)); + m_alu_task_end_timer = timer_alloc(*this, FUNC(fm77_state::av_alu_task_end)); + m_vsync_timer = timer_alloc(*this, FUNC(fm77_state::av_vsync)); memset(m_shared_ram,0xff,0x80); @@ -1765,9 +1765,9 @@ MACHINE_START_MEMBER(fm77_state,fm77av) MACHINE_START_MEMBER(fm11_state,fm11) { - m_encoder_ack_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(fm11_state::av_encoder_ack), this)); - m_alu_task_end_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(fm11_state::av_alu_task_end), this)); - m_vsync_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(fm11_state::av_vsync), this)); + m_encoder_ack_timer = timer_alloc(*this, FUNC(fm11_state::av_encoder_ack)); + m_alu_task_end_timer = timer_alloc(*this, FUNC(fm11_state::av_alu_task_end)); + m_vsync_timer = timer_alloc(*this, FUNC(fm11_state::av_vsync)); memset(m_shared_ram,0xff,0x80); m_type = SYS_FM11; diff --git a/src/mame/drivers/fmtowns.cpp b/src/mame/drivers/fmtowns.cpp index ac87d0bcbf704..133b00783b4ba 100644 --- a/src/mame/drivers/fmtowns.cpp +++ b/src/mame/drivers/fmtowns.cpp @@ -439,7 +439,7 @@ uint8_t towns_state::towns_intervaltimer2_r(offs_t offset) return 0xff; } -void towns_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void towns_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { @@ -2747,7 +2747,7 @@ void towns_state::driver_start() memset(&m_towns_cd,0,sizeof(struct towns_cdrom_controller)); m_towns_cd.status = 0x01; // CDROM controller ready m_towns_cd.buffer_ptr = -1; - m_towns_cd.read_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(towns_state::towns_cdrom_read_byte),this), (void*)m_dma_1.target()); + m_towns_cd.read_timer = timer_alloc(*this, FUNC(towns_state::towns_cdrom_read_byte), (void*)m_dma_1.target()); save_pointer(m_video.towns_crtc_reg,"CRTC registers",32); save_pointer(m_video.towns_video_reg,"Video registers",2); diff --git a/src/mame/drivers/foodf.cpp b/src/mame/drivers/foodf.cpp index fabdbf84618ba..ca35cba79081a 100644 --- a/src/mame/drivers/foodf.cpp +++ b/src/mame/drivers/foodf.cpp @@ -135,7 +135,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(foodf_state::scanline_update_timer) scanline = 0; /* set a timer for it */ - timer.adjust(m_screen->time_until_pos(scanline), scanline); + m_scan_timer->adjust(m_screen->time_until_pos(scanline), scanline); } diff --git a/src/mame/drivers/fp6000.cpp b/src/mame/drivers/fp6000.cpp index 51bec4e968270..4856efe3f61bf 100644 --- a/src/mame/drivers/fp6000.cpp +++ b/src/mame/drivers/fp6000.cpp @@ -439,7 +439,7 @@ void fp6000_state::pit_timer2_w(int state) void fp6000_state::machine_start() { - m_pit_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(fp6000_state::pit_timer0_clear), this)); + m_pit_timer = timer_alloc(*this, FUNC(fp6000_state::pit_timer0_clear)); } void fp6000_state::machine_reset() diff --git a/src/mame/drivers/fs3216.cpp b/src/mame/drivers/fs3216.cpp index 905037f069d9c..caac49a4dc7e0 100644 --- a/src/mame/drivers/fs3216.cpp +++ b/src/mame/drivers/fs3216.cpp @@ -119,7 +119,7 @@ void fs3216_state::machine_start() m_fdc_select = 0; m_fdc_dma_count = 0; - m_fdc_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(fs3216_state::fdc_dma), this)); + m_fdc_dma_timer = timer_alloc(*this, FUNC(fs3216_state::fdc_dma)); save_item(NAME(m_mmu_reg)); save_item(NAME(m_from_reset)); diff --git a/src/mame/drivers/fuukifg2.cpp b/src/mame/drivers/fuukifg2.cpp index b7ea76c6351c6..533a3449e1072 100644 --- a/src/mame/drivers/fuukifg2.cpp +++ b/src/mame/drivers/fuukifg2.cpp @@ -416,7 +416,7 @@ GFXDECODE_END also used for water effects and titlescreen linescroll on gogomile */ -void fuuki16_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void fuuki16_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/fuukifg3.cpp b/src/mame/drivers/fuukifg3.cpp index c5cf7414eb1e0..d512e801fa91e 100644 --- a/src/mame/drivers/fuukifg3.cpp +++ b/src/mame/drivers/fuukifg3.cpp @@ -481,7 +481,7 @@ GFXDECODE_END ***************************************************************************/ -void fuuki32_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void fuuki32_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/galaga.cpp b/src/mame/drivers/galaga.cpp index 3e086ca8fdeaf..f23abeed1d7fa 100644 --- a/src/mame/drivers/galaga.cpp +++ b/src/mame/drivers/galaga.cpp @@ -827,7 +827,7 @@ void galaga_state::machine_start() { m_leds.resolve(); /* create the interrupt timer */ - m_cpu3_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(galaga_state::cpu3_interrupt_callback),this)); + m_cpu3_interrupt_timer = timer_alloc(*this, FUNC(galaga_state::cpu3_interrupt_callback)); save_item(NAME(m_main_irq_mask)); save_item(NAME(m_sub_irq_mask)); save_item(NAME(m_sub2_nmi_mask)); diff --git a/src/mame/drivers/gamate.cpp b/src/mame/drivers/gamate.cpp index 607e3f6704be6..769e2e3a5426b 100644 --- a/src/mame/drivers/gamate.cpp +++ b/src/mame/drivers/gamate.cpp @@ -147,8 +147,8 @@ INPUT_PORTS_END void gamate_state::init_gamate() { - timer1 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gamate_state::gamate_timer),this)); - timer2 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gamate_state::gamate_timer2),this)); + timer1 = timer_alloc(*this, FUNC(gamate_state::gamate_timer)); + timer2 = timer_alloc(*this, FUNC(gamate_state::gamate_timer2)); } void gamate_state::machine_start() diff --git a/src/mame/drivers/gameking.cpp b/src/mame/drivers/gameking.cpp index 8d398756c3819..06edc65b7dc97 100644 --- a/src/mame/drivers/gameking.cpp +++ b/src/mame/drivers/gameking.cpp @@ -234,8 +234,8 @@ uint32_t gameking_state::screen_update_gameking3(screen_device& screen, bitmap_r void gameking_state::init_gameking() { - timer1 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gameking_state::gameking_timer), this)); - timer2 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gameking_state::gameking_timer2), this)); + timer1 = timer_alloc(*this, FUNC(gameking_state::gameking_timer)); + timer2 = timer_alloc(*this, FUNC(gameking_state::gameking_timer2)); } TIMER_CALLBACK_MEMBER(gameking_state::gameking_timer) diff --git a/src/mame/drivers/gaplus.cpp b/src/mame/drivers/gaplus.cpp index 19fe6e4fd7132..add05d4383eea 100644 --- a/src/mame/drivers/gaplus.cpp +++ b/src/mame/drivers/gaplus.cpp @@ -210,7 +210,7 @@ void gaplus_base_state::machine_reset() m_subcpu->set_input_line(0, CLEAR_LINE); } -void gaplus_base_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void gaplus_base_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/gba.cpp b/src/mame/drivers/gba.cpp index 6cd1436753748..1d30d4e4fa5f1 100644 --- a/src/mame/drivers/gba.cpp +++ b/src/mame/drivers/gba.cpp @@ -1324,27 +1324,27 @@ void gba_state::machine_reset() void gba_state::machine_start() { /* and one for each DMA channel */ - m_dma_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_state::dma_complete),this)); - m_dma_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_state::dma_complete),this)); - m_dma_timer[2] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_state::dma_complete),this)); - m_dma_timer[3] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_state::dma_complete),this)); + m_dma_timer[0] = timer_alloc(*this, FUNC(gba_state::dma_complete)); + m_dma_timer[1] = timer_alloc(*this, FUNC(gba_state::dma_complete)); + m_dma_timer[2] = timer_alloc(*this, FUNC(gba_state::dma_complete)); + m_dma_timer[3] = timer_alloc(*this, FUNC(gba_state::dma_complete)); m_dma_timer[0]->adjust(attotime::never); m_dma_timer[1]->adjust(attotime::never, 1); m_dma_timer[2]->adjust(attotime::never, 2); m_dma_timer[3]->adjust(attotime::never, 3); /* also one for each timer (heh) */ - m_tmr_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_state::timer_expire),this)); - m_tmr_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_state::timer_expire),this)); - m_tmr_timer[2] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_state::timer_expire),this)); - m_tmr_timer[3] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_state::timer_expire),this)); + m_tmr_timer[0] = timer_alloc(*this, FUNC(gba_state::timer_expire)); + m_tmr_timer[1] = timer_alloc(*this, FUNC(gba_state::timer_expire)); + m_tmr_timer[2] = timer_alloc(*this, FUNC(gba_state::timer_expire)); + m_tmr_timer[3] = timer_alloc(*this, FUNC(gba_state::timer_expire)); m_tmr_timer[0]->adjust(attotime::never); m_tmr_timer[1]->adjust(attotime::never, 1); m_tmr_timer[2]->adjust(attotime::never, 2); m_tmr_timer[3]->adjust(attotime::never, 3); /* and an IRQ handling timer */ - m_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gba_state::handle_irq),this)); + m_irq_timer = timer_alloc(*this, FUNC(gba_state::handle_irq)); m_irq_timer->adjust(attotime::never); save_item(NAME(m_regs)); diff --git a/src/mame/drivers/gijoe.cpp b/src/mame/drivers/gijoe.cpp index 9097877a9f6c9..71ecb9a46a435 100644 --- a/src/mame/drivers/gijoe.cpp +++ b/src/mame/drivers/gijoe.cpp @@ -281,7 +281,7 @@ INPUT_PORTS_END void gijoe_state::machine_start() { - m_dmadelay_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gijoe_state::dmaend_callback),this)); + m_dmadelay_timer = timer_alloc(*this, FUNC(gijoe_state::dmaend_callback)); save_item(NAME(m_cur_control2)); } diff --git a/src/mame/drivers/gottlieb.cpp b/src/mame/drivers/gottlieb.cpp index 65149c633e92b..540bf11a1eb27 100644 --- a/src/mame/drivers/gottlieb.cpp +++ b/src/mame/drivers/gottlieb.cpp @@ -691,7 +691,7 @@ void gottlieb_state::qbert_knocker(machine_config &config) * *************************************/ -void gottlieb_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void gottlieb_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/goupil.cpp b/src/mame/drivers/goupil.cpp index fa4d657a34bd7..eead3773afe15 100644 --- a/src/mame/drivers/goupil.cpp +++ b/src/mame/drivers/goupil.cpp @@ -119,7 +119,7 @@ class goupil_g1_state : public goupil_base_state TIMER_SCANLINE }; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void mem(address_map &map); @@ -165,7 +165,7 @@ class goupil_g2_state : public goupil_base_state * Keyboard I/O Handlers * ***********************************/ -void goupil_g1_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void goupil_g1_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/gp32.cpp b/src/mame/drivers/gp32.cpp index 120093ef053f3..895a51575129f 100644 --- a/src/mame/drivers/gp32.cpp +++ b/src/mame/drivers/gp32.cpp @@ -1606,18 +1606,18 @@ void gp32_state::s3c240x_mmc_w(offs_t offset, uint32_t data, uint32_t mem_mask) void gp32_state::s3c240x_machine_start() { - m_s3c240x_pwm_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gp32_state::s3c240x_pwm_timer_exp),this), (void *)(uintptr_t)0); - m_s3c240x_pwm_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gp32_state::s3c240x_pwm_timer_exp),this), (void *)(uintptr_t)1); - m_s3c240x_pwm_timer[2] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gp32_state::s3c240x_pwm_timer_exp),this), (void *)(uintptr_t)2); - m_s3c240x_pwm_timer[3] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gp32_state::s3c240x_pwm_timer_exp),this), (void *)(uintptr_t)3); - m_s3c240x_pwm_timer[4] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gp32_state::s3c240x_pwm_timer_exp),this), (void *)(uintptr_t)4); - m_s3c240x_dma_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gp32_state::s3c240x_dma_timer_exp),this), (void *)(uintptr_t)0); - m_s3c240x_dma_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gp32_state::s3c240x_dma_timer_exp),this), (void *)(uintptr_t)1); - m_s3c240x_dma_timer[2] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gp32_state::s3c240x_dma_timer_exp),this), (void *)(uintptr_t)2); - m_s3c240x_dma_timer[3] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gp32_state::s3c240x_dma_timer_exp),this), (void *)(uintptr_t)3); - m_s3c240x_iic_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gp32_state::s3c240x_iic_timer_exp),this), (void *)(uintptr_t)0); - m_s3c240x_iis_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gp32_state::s3c240x_iis_timer_exp),this), (void *)(uintptr_t)0); - m_s3c240x_lcd_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gp32_state::s3c240x_lcd_timer_exp),this), (void *)(uintptr_t)0); + m_s3c240x_pwm_timer[0] = timer_alloc(*this, FUNC(gp32_state::s3c240x_pwm_timer_exp), (void *)(uintptr_t)0); + m_s3c240x_pwm_timer[1] = timer_alloc(*this, FUNC(gp32_state::s3c240x_pwm_timer_exp), (void *)(uintptr_t)1); + m_s3c240x_pwm_timer[2] = timer_alloc(*this, FUNC(gp32_state::s3c240x_pwm_timer_exp), (void *)(uintptr_t)2); + m_s3c240x_pwm_timer[3] = timer_alloc(*this, FUNC(gp32_state::s3c240x_pwm_timer_exp), (void *)(uintptr_t)3); + m_s3c240x_pwm_timer[4] = timer_alloc(*this, FUNC(gp32_state::s3c240x_pwm_timer_exp), (void *)(uintptr_t)4); + m_s3c240x_dma_timer[0] = timer_alloc(*this, FUNC(gp32_state::s3c240x_dma_timer_exp), (void *)(uintptr_t)0); + m_s3c240x_dma_timer[1] = timer_alloc(*this, FUNC(gp32_state::s3c240x_dma_timer_exp), (void *)(uintptr_t)1); + m_s3c240x_dma_timer[2] = timer_alloc(*this, FUNC(gp32_state::s3c240x_dma_timer_exp), (void *)(uintptr_t)2); + m_s3c240x_dma_timer[3] = timer_alloc(*this, FUNC(gp32_state::s3c240x_dma_timer_exp), (void *)(uintptr_t)3); + m_s3c240x_iic_timer = timer_alloc(*this, FUNC(gp32_state::s3c240x_iic_timer_exp), (void *)(uintptr_t)0); + m_s3c240x_iis_timer = timer_alloc(*this, FUNC(gp32_state::s3c240x_iis_timer_exp), (void *)(uintptr_t)0); + m_s3c240x_lcd_timer = timer_alloc(*this, FUNC(gp32_state::s3c240x_lcd_timer_exp), (void *)(uintptr_t)0); m_eeprom_data = std::make_unique(0x2000); // a dump of the EEPROM (S524AB0X91) resulted to be 0x1000 m_nvram->set_base(m_eeprom_data.get(), 0x2000); smc_init(); diff --git a/src/mame/drivers/gpworld.cpp b/src/mame/drivers/gpworld.cpp index d9d008b31b7c1..88555a300265a 100644 --- a/src/mame/drivers/gpworld.cpp +++ b/src/mame/drivers/gpworld.cpp @@ -100,7 +100,7 @@ class gpworld_state : public driver_device void mainmem(address_map &map); void mainport(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; @@ -454,7 +454,7 @@ static INPUT_PORTS_START( gpworld ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) INPUT_PORTS_END -void gpworld_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void gpworld_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/grchamp.cpp b/src/mame/drivers/grchamp.cpp index 1212c698bd456..7f5ac62ce27ce 100644 --- a/src/mame/drivers/grchamp.cpp +++ b/src/mame/drivers/grchamp.cpp @@ -98,6 +98,9 @@ void grchamp_state::machine_start() m_digits.resolve(); m_soundlatch_data = 0x00; m_soundlatch_flag = false; + m_soundlatch_w_cb.init(*this, FUNC(grchamp_state::soundlatch_w_cb)); + m_soundlatch_clear7_w_cb.init(*this, FUNC(grchamp_state::soundlatch_clear7_w_cb)); + m_main_to_sub_comm_sync_w.init(*this, FUNC(grchamp_state::main_to_sub_comm_sync_w)); save_item(NAME(m_cpu0_out)); save_item(NAME(m_cpu1_out)); save_item(NAME(m_comm_latch)); @@ -219,7 +222,7 @@ void grchamp_state::cpu0_outputs_w(offs_t offset, uint8_t data) case 0x0e: /* OUT14 */ /* O-21 connector */ - machine().scheduler().synchronize(timer_expired_delegate(FUNC(grchamp_state::soundlatch_w_cb), this), data); // soundlatch write, needs to synchronize + m_soundlatch_w_cb.synchronize(data); // soundlatch write, needs to synchronize break; } } @@ -423,7 +426,7 @@ TIMER_CALLBACK_MEMBER(grchamp_state::main_to_sub_comm_sync_w) void grchamp_state::main_to_sub_comm_w(offs_t offset, uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(grchamp_state::main_to_sub_comm_sync_w),this), data | (offset << 8)); + m_main_to_sub_comm_sync_w.synchronize(data | (offset << 8)); } @@ -469,7 +472,7 @@ uint8_t grchamp_state::soundlatch_r() // WR5000 void grchamp_state::soundlatch_clear7_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(grchamp_state::soundlatch_clear7_w_cb), this), data); + m_soundlatch_clear7_w_cb.synchronize(data); } // RD5001 diff --git a/src/mame/drivers/gridlee.cpp b/src/mame/drivers/gridlee.cpp index e2c7413dbff5f..f1fb08a966209 100644 --- a/src/mame/drivers/gridlee.cpp +++ b/src/mame/drivers/gridlee.cpp @@ -146,10 +146,10 @@ void gridlee_state::machine_start() save_item(NAME(m_last_analog_input)); save_item(NAME(m_last_analog_output)); - m_irq_off = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gridlee_state::irq_off_tick),this)); - m_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gridlee_state::irq_timer_tick),this)); - m_firq_off = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gridlee_state::firq_off_tick),this)); - m_firq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gridlee_state::firq_timer_tick),this)); + m_irq_off = timer_alloc(*this, FUNC(gridlee_state::irq_off_tick)); + m_irq_timer = timer_alloc(*this, FUNC(gridlee_state::irq_timer_tick)); + m_firq_off = timer_alloc(*this, FUNC(gridlee_state::firq_off_tick)); + m_firq_timer = timer_alloc(*this, FUNC(gridlee_state::firq_timer_tick)); } diff --git a/src/mame/drivers/gticlub.cpp b/src/mame/drivers/gticlub.cpp index 63da6555c0b4a..336c9377c3d59 100644 --- a/src/mame/drivers/gticlub.cpp +++ b/src/mame/drivers/gticlub.cpp @@ -466,7 +466,7 @@ void gticlub_state::machine_start() // configure fast RAM regions for DRC m_maincpu->ppcdrc_add_fastram(0x00000000, 0x000fffff, false, m_work_ram); - m_sound_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gticlub_state::sound_irq), this)); + m_sound_irq_timer = timer_alloc(*this, FUNC(gticlub_state::sound_irq)); } void gticlub_state::gticlub_map(address_map &map) diff --git a/src/mame/drivers/gunbustr.cpp b/src/mame/drivers/gunbustr.cpp index f6911548736be..3b12d3efd8bb7 100644 --- a/src/mame/drivers/gunbustr.cpp +++ b/src/mame/drivers/gunbustr.cpp @@ -59,7 +59,7 @@ /*********************************************************************/ -void gunbustr_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void gunbustr_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/gunpey.cpp b/src/mame/drivers/gunpey.cpp index 866157d1bf7a5..b5bc958827352 100644 --- a/src/mame/drivers/gunpey.cpp +++ b/src/mame/drivers/gunpey.cpp @@ -352,7 +352,7 @@ void gunpey_state::video_start() m_vram = std::make_unique(0x400000); std::fill_n(&m_vram[0], 0x400000, 0xff); - m_blitter_end_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gunpey_state::blitter_end), this)); + m_blitter_end_timer = timer_alloc(*this, FUNC(gunpey_state::blitter_end)); save_item(NAME(m_vram_bank)); save_item(NAME(m_vreg_addr)); diff --git a/src/mame/drivers/h01x.cpp b/src/mame/drivers/h01x.cpp index 58719f739b328..41d5c0352a912 100644 --- a/src/mame/drivers/h01x.cpp +++ b/src/mame/drivers/h01x.cpp @@ -443,7 +443,7 @@ void h01x_state::machine_start() save_item(NAME(m_bank)); save_item(NAME(m_cassette_data)); - m_cassette_data_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(h01x_state::cassette_data_callback), this)); + m_cassette_data_timer = timer_alloc(*this, FUNC(h01x_state::cassette_data_callback)); m_cassette_data_timer->adjust(attotime::zero, 0, attotime::from_hz(48000)); } diff --git a/src/mame/drivers/h19.cpp b/src/mame/drivers/h19.cpp index fc296c17392c6..db0a5961e1fd4 100644 --- a/src/mame/drivers/h19.cpp +++ b/src/mame/drivers/h19.cpp @@ -115,7 +115,7 @@ class h19_state : public driver_device void io_map(address_map &map); void mem_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; required_device m_palette; @@ -137,7 +137,7 @@ class h19_state : public driver_device uint16_t translate_mm5740_b(uint16_t b); }; -void h19_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void h19_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/halleys.cpp b/src/mame/drivers/halleys.cpp index 3eaa92e4af706..5a4a02dd5d9fa 100644 --- a/src/mame/drivers/halleys.cpp +++ b/src/mame/drivers/halleys.cpp @@ -2248,7 +2248,7 @@ void halleys_state::init_benberob() init_common(); - m_blitter_reset_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(halleys_state::blitter_reset),this)); + m_blitter_reset_timer = timer_alloc(*this, FUNC(halleys_state::blitter_reset)); } diff --git a/src/mame/drivers/hazeltin.cpp b/src/mame/drivers/hazeltin.cpp index ba0ea2f53c325..3b30757eb0610 100644 --- a/src/mame/drivers/hazeltin.cpp +++ b/src/mame/drivers/hazeltin.cpp @@ -141,7 +141,7 @@ class hazl1500_state : public driver_device private: virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; static const device_timer_id TIMER_IOWQ = 0; @@ -253,7 +253,7 @@ void hazl1500_state::machine_reset() m_kbd_status_latch = 0; } -void hazl1500_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hazl1500_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_cpu_iowq->write(1); m_cpu_ba4->write(1); @@ -394,7 +394,7 @@ WRITE_LINE_MEMBER(hazl1500_state::ay3600_data_ready_w) NETDEV_ANALOG_CALLBACK_MEMBER(hazl1500_state::vblank_cb) { - synchronize(); + scheduler().synchronize(); if (int(data) > 1) { m_kbd_status_latch &= ~KBD_STATUS_TV_UB; @@ -407,7 +407,7 @@ NETDEV_ANALOG_CALLBACK_MEMBER(hazl1500_state::vblank_cb) NETDEV_ANALOG_CALLBACK_MEMBER(hazl1500_state::tvinterq_cb) { - synchronize(); + scheduler().synchronize(); if (int(data) > 1) { m_kbd_status_latch &= ~KBD_STATUS_TV_INT; @@ -422,7 +422,7 @@ NETDEV_ANALOG_CALLBACK_MEMBER(hazl1500_state::tvinterq_cb) NETDEV_ANALOG_CALLBACK_MEMBER(hazl1500_state::video_out_cb) { - synchronize(); + scheduler().synchronize(); attotime second_fraction(0, time.attoseconds()); attotime frame_fraction(0, (second_fraction * 60).attoseconds()); attotime pixel_time = frame_fraction * (SCREEN_HTOTAL * SCREEN_VTOTAL); @@ -461,7 +461,7 @@ NETDEV_ANALOG_CALLBACK_MEMBER(hazl1500_state::video_out_cb) void hazl1500_state::refresh_address_w(uint8_t data) { - synchronize(); + scheduler().synchronize(); //printf("refresh: %02x, %d, %d\n", data, m_screen->hpos(), m_screen->vpos()); m_iowq_timer->adjust(attotime::from_hz(XTAL(18'000'000)/9)); m_cpu_iowq->write(0); diff --git a/src/mame/drivers/hh_sm510.cpp b/src/mame/drivers/hh_sm510.cpp index 32396888c494b..4493582c21212 100644 --- a/src/mame/drivers/hh_sm510.cpp +++ b/src/mame/drivers/hh_sm510.cpp @@ -153,7 +153,7 @@ void hh_sm510_state::machine_start() } // 1kHz display decay ticks - m_display_decay_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hh_sm510_state::display_decay_tick),this)); + m_display_decay_timer = timer_alloc(*this, FUNC(hh_sm510_state::display_decay_tick)); m_display_decay_timer->adjust(attotime::from_hz(1024), 0, attotime::from_hz(1024)); // zerofill diff --git a/src/mame/drivers/hng64.cpp b/src/mame/drivers/hng64.cpp index 2598f38de5c79..aeb33bf35d8a5 100644 --- a/src/mame/drivers/hng64.cpp +++ b/src/mame/drivers/hng64.cpp @@ -2047,8 +2047,8 @@ void hng64_state::machine_start() m_irq_pending = 0; - m_3dfifo_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hng64_state::hng64_3dfifo_processed), this)); - m_comhack_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hng64_state::comhack_callback), this)); + m_3dfifo_timer = timer_alloc(*this, FUNC(hng64_state::hng64_3dfifo_processed)); + m_comhack_timer = timer_alloc(*this, FUNC(hng64_state::comhack_callback)); init_io(); } @@ -2365,8 +2365,8 @@ TIMER_CALLBACK_MEMBER(hng64_state::tempio_irqoff_callback) void hng64_state::init_io() { - m_tempio_irqon_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hng64_state::tempio_irqon_callback), this)); - m_tempio_irqoff_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hng64_state::tempio_irqoff_callback), this)); + m_tempio_irqon_timer = timer_alloc(*this, FUNC(hng64_state::tempio_irqon_callback)); + m_tempio_irqoff_timer = timer_alloc(*this, FUNC(hng64_state::tempio_irqoff_callback)); m_port7 = 0x00; m_port1 = 0x00; diff --git a/src/mame/drivers/hornet.cpp b/src/mame/drivers/hornet.cpp index 80abb1d943313..1b6760277b745 100644 --- a/src/mame/drivers/hornet.cpp +++ b/src/mame/drivers/hornet.cpp @@ -1067,7 +1067,7 @@ void hornet_state::machine_start() save_pointer(NAME(m_jvs_sdata), 1024); save_item(NAME(m_jvs_sdata_ptr)); - m_sound_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hornet_state::sound_irq), this)); + m_sound_irq_timer = timer_alloc(*this, FUNC(hornet_state::sound_irq)); } void hornet_state::machine_reset() diff --git a/src/mame/drivers/hp9k_3xx.cpp b/src/mame/drivers/hp9k_3xx.cpp index 16185c7338f90..2d69eea409b90 100644 --- a/src/mame/drivers/hp9k_3xx.cpp +++ b/src/mame/drivers/hp9k_3xx.cpp @@ -233,7 +233,7 @@ void hp9k3xx_state::machine_reset() void hp9k3xx_state::machine_start() { - m_bus_error_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hp9k3xx_state::bus_error_timeout), this)); + m_bus_error_timer = timer_alloc(*this, FUNC(hp9k3xx_state::bus_error_timeout)); m_bus_error = false; save_item(NAME(m_bus_error)); } diff --git a/src/mame/drivers/hp_ipc.cpp b/src/mame/drivers/hp_ipc.cpp index dedef6ed4e7e5..47ccbdf0e18f6 100644 --- a/src/mame/drivers/hp_ipc.cpp +++ b/src/mame/drivers/hp_ipc.cpp @@ -411,7 +411,7 @@ class hp_ipc_state : public driver_device protected: virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint16_t mem_r(offs_t offset, uint16_t mem_mask); @@ -476,7 +476,7 @@ class hp_ipc_state : public driver_device }; -void hp_ipc_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hp_ipc_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_bus_error = false; } diff --git a/src/mame/drivers/hyprduel.cpp b/src/mame/drivers/hyprduel.cpp index 4ec2e900453da..05b9c83e1c93f 100644 --- a/src/mame/drivers/hyprduel.cpp +++ b/src/mame/drivers/hyprduel.cpp @@ -399,7 +399,7 @@ void hyprduel_state::machine_start() save_item(NAME(m_subcpu_resetline)); save_item(NAME(m_cpu_trigger)); - m_vblank_end_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hyprduel_state::vblank_end_callback), this)); + m_vblank_end_timer = timer_alloc(*this, FUNC(hyprduel_state::vblank_end_callback)); } void hyprduel_state::i4220_config(machine_config &config) diff --git a/src/mame/drivers/ibmpcjr.cpp b/src/mame/drivers/ibmpcjr.cpp index 05d6714ac0a93..9470362282cb4 100644 --- a/src/mame/drivers/ibmpcjr.cpp +++ b/src/mame/drivers/ibmpcjr.cpp @@ -99,7 +99,7 @@ class pcjr_state : public driver_device int m_signal_count; uint8_t m_nmi_enabled; - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; emu_timer *m_pc_int_delay_timer; emu_timer *m_pcjr_watchdog; emu_timer *m_keyb_signal_timer; @@ -153,7 +153,7 @@ void pcjr_state::machine_reset() m_nmi_enabled = 0x80; } -void pcjr_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pcjr_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/drivers/intellec4.cpp b/src/mame/drivers/intellec4.cpp index 2362381aa41ec..c70e8e2f978c2 100644 --- a/src/mame/drivers/intellec4.cpp +++ b/src/mame/drivers/intellec4.cpp @@ -639,7 +639,7 @@ INPUT_CHANGED_MEMBER(intellec4_state::sw_do_enable) void intellec4_state::driver_start() { - m_reset_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(intellec4_state::reset_expired), this)); + m_reset_timer = timer_alloc(*this, FUNC(intellec4_state::reset_expired)); m_led_address.resolve(); m_led_instruction.resolve(); @@ -1170,7 +1170,7 @@ void mod4_state::driver_start() m_led_status_cpu.resolve(); - m_one_shot_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mod4_state::one_shot_expired), this)); + m_one_shot_timer = timer_alloc(*this, FUNC(mod4_state::one_shot_expired)); save_item(NAME(m_one_shot)); @@ -1400,7 +1400,7 @@ void mod40_state::driver_start() m_led_status_run.resolve(); - m_single_step_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mod40_state::single_step_expired), this)); + m_single_step_timer = timer_alloc(*this, FUNC(mod40_state::single_step_expired)); save_item(NAME(m_stp_ack)); save_item(NAME(m_single_step)); diff --git a/src/mame/drivers/intv.cpp b/src/mame/drivers/intv.cpp index 6890b609f80ef..1c237aaf775be 100644 --- a/src/mame/drivers/intv.cpp +++ b/src/mame/drivers/intv.cpp @@ -424,7 +424,7 @@ void intv_state::intvkbd2_mem(address_map &map) map(0xe000, 0xffff).r(FUNC(intv_state::intvkb_iocart_r)); } -void intv_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void intv_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/iphone2g.cpp b/src/mame/drivers/iphone2g.cpp index 9b2ab7b7441e8..48f522095de81 100644 --- a/src/mame/drivers/iphone2g.cpp +++ b/src/mame/drivers/iphone2g.cpp @@ -31,7 +31,7 @@ class iphone2g_spi_device : public device_t, public device_memory_interface virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual space_config_vector memory_space_config() const override; @@ -49,7 +49,7 @@ class iphone2g_spi_device : public device_t, public device_memory_interface DECLARE_DEVICE_TYPE(IPHONE2G_SPI, iphone2g_spi_device) -void iphone2g_spi_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void iphone2g_spi_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_out_irq_func(1); } @@ -138,7 +138,7 @@ class iphone2g_timer_device : public device_t, public device_memory_interface virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual space_config_vector memory_space_config() const override; @@ -161,7 +161,7 @@ class iphone2g_timer_device : public device_t, public device_memory_interface DECLARE_DEVICE_TYPE(IPHONE2G_TIMER, iphone2g_timer_device) -void iphone2g_timer_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void iphone2g_timer_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_out_irq_func(1); } diff --git a/src/mame/drivers/irisha.cpp b/src/mame/drivers/irisha.cpp index 0a51a6b624e24..34d56e747ac11 100644 --- a/src/mame/drivers/irisha.cpp +++ b/src/mame/drivers/irisha.cpp @@ -355,7 +355,7 @@ uint8_t irisha_state::keyboard_r() void irisha_state::machine_start() { - m_key_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(irisha_state::irisha_key),this)); + m_key_timer = timer_alloc(*this, FUNC(irisha_state::irisha_key)); m_key_timer->adjust(attotime::from_msec(30), 0, attotime::from_msec(30)); save_item(NAME(m_sg1_line)); save_item(NAME(m_keypressed)); diff --git a/src/mame/drivers/itech8.cpp b/src/mame/drivers/itech8.cpp index 72fd6292d5c0f..bff67faf4a671 100644 --- a/src/mame/drivers/itech8.cpp +++ b/src/mame/drivers/itech8.cpp @@ -674,7 +674,7 @@ void grmatch_state::machine_reset() m_palette_timer->adjust(m_screen->time_until_pos(m_screen->vpos()+1)); } -void itech8_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void itech8_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/jangou.cpp b/src/mame/drivers/jangou.cpp index 3cb350b349dcf..e81fc17f07c7f 100644 --- a/src/mame/drivers/jangou.cpp +++ b/src/mame/drivers/jangou.cpp @@ -914,7 +914,7 @@ void jangou_state::machine_start() save_item(NAME(m_cvsd_shift_cnt)); /* Create a timer to feed the CVSD DAC with sample bits */ - m_cvsd_bit_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(jangou_state::cvsd_bit_timer_callback), this)); + m_cvsd_bit_timer = timer_alloc(*this, FUNC(jangou_state::cvsd_bit_timer_callback)); m_cvsd_bit_timer->adjust(attotime::from_hz(MASTER_CLOCK / 1024), 0, attotime::from_hz(MASTER_CLOCK / 1024)); } diff --git a/src/mame/drivers/jedi.cpp b/src/mame/drivers/jedi.cpp index a6c35a061d593..e5677680929ae 100644 --- a/src/mame/drivers/jedi.cpp +++ b/src/mame/drivers/jedi.cpp @@ -158,7 +158,7 @@ void jedi_state::main_irq_ack_w(u8 data) void jedi_state::machine_start() { /* set a timer to run the interrupts */ - m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(jedi_state::generate_interrupt),this)); + m_interrupt_timer = timer_alloc(*this, FUNC(jedi_state::generate_interrupt)); m_interrupt_timer->adjust(m_screen->time_until_pos(32), 32); /* configure the banks */ diff --git a/src/mame/drivers/jpmsys5.cpp b/src/mame/drivers/jpmsys5.cpp index a37e0ebe4d998..3876b3e7b7554 100644 --- a/src/mame/drivers/jpmsys5.cpp +++ b/src/mame/drivers/jpmsys5.cpp @@ -734,7 +734,7 @@ void jpmsys5v_state::machine_start() m_rombank->configure_entries(0, 32, memregion("maincpu")->base() + 0x20000, 0x20000); m_rombank->set_entry(0); - m_touch_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(jpmsys5v_state::touch_cb),this)); + m_touch_timer = timer_alloc(*this, FUNC(jpmsys5v_state::touch_cb)); } void jpmsys5v_state::machine_reset() diff --git a/src/mame/drivers/jr100.cpp b/src/mame/drivers/jr100.cpp index 0f1342e4fdfec..60fca57d9f566 100644 --- a/src/mame/drivers/jr100.cpp +++ b/src/mame/drivers/jr100.cpp @@ -206,7 +206,7 @@ INPUT_PORTS_END void jr100_state::machine_start() { if (!m_sound_timer) - m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(jr100_state::sound_tick), this)); + m_sound_timer = timer_alloc(*this, FUNC(jr100_state::sound_tick)); save_item(NAME(m_keyboard_line)); save_item(NAME(m_use_pcg)); diff --git a/src/mame/drivers/jr200.cpp b/src/mame/drivers/jr200.cpp index eabbbd154b4bf..73e5da184ea61 100644 --- a/src/mame/drivers/jr200.cpp +++ b/src/mame/drivers/jr200.cpp @@ -520,7 +520,7 @@ GFXDECODE_END void jr200_state::machine_start() { - m_timer_d = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(jr200_state::timer_d_callback),this)); + m_timer_d = timer_alloc(*this, FUNC(jr200_state::timer_d_callback)); } void jr200_state::machine_reset() diff --git a/src/mame/drivers/kinst.cpp b/src/mame/drivers/kinst.cpp index 233c2a0fa4c6b..1b2cba4b9b908 100644 --- a/src/mame/drivers/kinst.cpp +++ b/src/mame/drivers/kinst.cpp @@ -212,7 +212,7 @@ class kinst_state : public driver_device protected: virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_shared_ptr m_rambase; @@ -346,7 +346,7 @@ uint32_t kinst_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, * *************************************/ -void kinst_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void kinst_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/konamigx.cpp b/src/mame/drivers/konamigx.cpp index 5686028927984..f708b14ff59e3 100644 --- a/src/mame/drivers/konamigx.cpp +++ b/src/mame/drivers/konamigx.cpp @@ -3924,8 +3924,8 @@ void konamigx_state::init_konamigx() m_esc_cb = nullptr; m_resume_trigger = 0; - m_dmadelay_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(konamigx_state::dmaend_callback),this)); - m_boothack_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(konamigx_state::boothack_callback),this)); + m_dmadelay_timer = timer_alloc(*this, FUNC(konamigx_state::dmaend_callback)); + m_boothack_timer = timer_alloc(*this, FUNC(konamigx_state::boothack_callback)); int i = 0, match = 0, readback = 0; while ((gameDefs[i].cfgport != 0xff) && (!match)) diff --git a/src/mame/drivers/ladyfrog.cpp b/src/mame/drivers/ladyfrog.cpp index b7afba6d1a645..d1f6dd73f3379 100644 --- a/src/mame/drivers/ladyfrog.cpp +++ b/src/mame/drivers/ladyfrog.cpp @@ -89,7 +89,7 @@ TIMER_CALLBACK_MEMBER(ladyfrog_state::nmi_callback) void ladyfrog_state::sound_command_w(uint8_t data) { m_soundlatch->write(data); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(ladyfrog_state::nmi_callback),this), data); + m_nmi_callback.synchronize(data); } void ladyfrog_state::nmi_disable_w(uint8_t data) @@ -269,6 +269,8 @@ GFXDECODE_END void ladyfrog_state::machine_start() { + m_nmi_callback.init(*this, FUNC(ladyfrog_state::nmi_callback)); + save_item(NAME(m_tilebank)); save_item(NAME(m_palette_bank)); save_item(NAME(m_sound_nmi_enable)); diff --git a/src/mame/drivers/laserbat.cpp b/src/mame/drivers/laserbat.cpp index 833ff5806b06c..aa4c652e71622 100644 --- a/src/mame/drivers/laserbat.cpp +++ b/src/mame/drivers/laserbat.cpp @@ -459,7 +459,7 @@ void laserbat_state::machine_start() save_item(NAME(m_keys)); } -void laserbat_state_base::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void laserbat_state_base::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/ldplayer.cpp b/src/mame/drivers/ldplayer.cpp index e0d92cf59970f..c178ff100132d 100644 --- a/src/mame/drivers/ldplayer.cpp +++ b/src/mame/drivers/ldplayer.cpp @@ -42,7 +42,7 @@ class ldplayer_state : public driver_device protected: // device overrides - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void machine_reset() override; @@ -113,7 +113,7 @@ class pr8210_state : public ldplayer_state void pr8210(machine_config &config); protected: // device overrides - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void machine_reset() override; @@ -293,7 +293,7 @@ void ldplayer_state::process_commands() } -void ldplayer_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ldplayer_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -350,7 +350,7 @@ void pr8210_state::add_command(uint8_t command) } -void pr8210_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pr8210_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/m10.cpp b/src/mame/drivers/m10.cpp index 05b90831b7076..8b256aced02a3 100644 --- a/src/mame/drivers/m10.cpp +++ b/src/mame/drivers/m10.cpp @@ -162,7 +162,7 @@ void m1x_state::palette(palette_device &palette) const void m1x_state::machine_start() { - m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m1x_state::interrupt_callback), this)); + m_interrupt_timer = timer_alloc(*this, FUNC(m1x_state::interrupt_callback)); save_item(NAME(m_flip)); save_item(NAME(m_last)); diff --git a/src/mame/drivers/m68705prg.cpp b/src/mame/drivers/m68705prg.cpp index 0bd877b0cf263..600b3b3a7c6b1 100644 --- a/src/mame/drivers/m68705prg.cpp +++ b/src/mame/drivers/m68705prg.cpp @@ -191,7 +191,7 @@ class m68705prg_state : public m68705prg_state_base m_mcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); } - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override { switch (id) { diff --git a/src/mame/drivers/m72.cpp b/src/mame/drivers/m72.cpp index 8551b377b14cd..b91b6a55b6ff5 100644 --- a/src/mame/drivers/m72.cpp +++ b/src/mame/drivers/m72.cpp @@ -209,12 +209,20 @@ other supported games as well. void m72_state::machine_start() { - m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m72_state::scanline_interrupt),this)); + m_synch_callback.init(*this, FUNC(m72_state::synch_callback)); + m_delayed_ram16_w.init(*this, FUNC(m72_state::delayed_ram16_w)); + m_delayed_ram8_w.init(*this, FUNC(m72_state::delayed_ram8_w)); + + m_scanline_timer = timer_alloc(*this, FUNC(m72_state::scanline_interrupt)); } MACHINE_START_MEMBER(m72_state,kengo) { - m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m72_state::kengo_scanline_interrupt),this)); + m_synch_callback.init(*this, FUNC(m72_state::synch_callback)); + m_delayed_ram16_w.init(*this, FUNC(m72_state::delayed_ram16_w)); + m_delayed_ram8_w.init(*this, FUNC(m72_state::delayed_ram8_w)); + + m_scanline_timer = timer_alloc(*this, FUNC(m72_state::kengo_scanline_interrupt)); } TIMER_CALLBACK_MEMBER(m72_state::synch_callback) @@ -229,7 +237,7 @@ void m72_state::machine_reset() //m_mcu_snd_cmd_latch = 0; m_scanline_timer->adjust(m_screen->time_until_pos(0)); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(m72_state::synch_callback),this)); + m_synch_callback.synchronize(); // Hold sound CPU in reset if main CPU has to upload the program into RAM if (m_soundram.found()) @@ -332,12 +340,12 @@ TIMER_CALLBACK_MEMBER(m72_state::delayed_ram8_w) void m72_state::main_mcu_w(offs_t offset, u16 data, u16 mem_mask) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(m72_state::delayed_ram16_w), this), offset << 16 | data | (mem_mask & 0x0180) << 20); + m_delayed_ram16_w.synchronize(offset << 16 | data | (mem_mask & 0x0180) << 20); } void m72_state::mcu_data_w(offs_t offset, u8 data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(m72_state::delayed_ram8_w), this), offset << 8 | u32(data)); + m_delayed_ram8_w.synchronize(offset << 8 | u32(data)); } u8 m72_state::mcu_data_r(offs_t offset) diff --git a/src/mame/drivers/m79152pc.cpp b/src/mame/drivers/m79152pc.cpp index 2f05839a30c00..d27b66314231a 100644 --- a/src/mame/drivers/m79152pc.cpp +++ b/src/mame/drivers/m79152pc.cpp @@ -246,8 +246,8 @@ void m79152pc_state::machine_start() m_line_count = 0; m_hsync = false; - m_hsync_on_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m79152pc_state::hsync_on), this)); - m_hsync_off_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m79152pc_state::hsync_off), this)); + m_hsync_on_timer = timer_alloc(*this, FUNC(m79152pc_state::hsync_on)); + m_hsync_off_timer = timer_alloc(*this, FUNC(m79152pc_state::hsync_off)); m_hsync_off_timer->adjust(m_screen->time_until_pos(9, 0), 0, m_screen->scan_period()); save_item(NAME(m_latch_full)); diff --git a/src/mame/drivers/mac128.cpp b/src/mame/drivers/mac128.cpp index 49d7985fe64fe..7d426009b7e95 100644 --- a/src/mame/drivers/mac128.cpp +++ b/src/mame/drivers/mac128.cpp @@ -282,8 +282,8 @@ void mac128_state::machine_start() m_ram_mask = m_ram_size - 1; m_rom_ptr = (u16*)memregion("bootrom")->base(); - m_scan_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mac128_state::mac_scanline), this)); - m_hblank_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mac128_state::mac_hblank), this)); + m_scan_timer = timer_alloc(*this, FUNC(mac128_state::mac_scanline)); + m_hblank_timer = timer_alloc(*this, FUNC(mac128_state::mac_hblank)); save_item(NAME(m_overlay)); save_item(NAME(m_irq_count)); diff --git a/src/mame/drivers/macprtb.cpp b/src/mame/drivers/macprtb.cpp index 89eef74209870..4f64049d2d4a8 100644 --- a/src/mame/drivers/macprtb.cpp +++ b/src/mame/drivers/macprtb.cpp @@ -291,7 +291,7 @@ void macportable_state::machine_start() m_pmu_ack = m_pmu_req = 0; m_adb_line = 1; - m_6015_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(macportable_state::mac_6015_tick),this)); + m_6015_timer = timer_alloc(*this, FUNC(macportable_state::mac_6015_tick)); m_6015_timer->adjust(attotime::never); } diff --git a/src/mame/drivers/macpwrbk030.cpp b/src/mame/drivers/macpwrbk030.cpp index e6d7f55785aed..7a374de2e89a9 100644 --- a/src/mame/drivers/macpwrbk030.cpp +++ b/src/mame/drivers/macpwrbk030.cpp @@ -390,7 +390,7 @@ void macpb030_state::machine_start() m_last_taken_interrupt = -1; m_irq_count = m_ca1_data = m_ca2_data = 0; - m_6015_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(macpb030_state::mac_6015_tick),this)); + m_6015_timer = timer_alloc(*this, FUNC(macpb030_state::mac_6015_tick)); m_6015_timer->adjust(attotime::never); } diff --git a/src/mame/drivers/macquadra700.cpp b/src/mame/drivers/macquadra700.cpp index 4d72cfba1b684..c135ea9cc46bd 100644 --- a/src/mame/drivers/macquadra700.cpp +++ b/src/mame/drivers/macquadra700.cpp @@ -247,7 +247,7 @@ void macquadra_state::machine_start() m_last_taken_interrupt = -1; m_irq_count = m_ca2_data = 0; - m_6015_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(macquadra_state::mac_6015_tick),this)); + m_6015_timer = timer_alloc(*this, FUNC(macquadra_state::mac_6015_tick)); m_6015_timer->adjust(attotime::never); } @@ -351,8 +351,8 @@ TIMER_CALLBACK_MEMBER(macquadra_state::dafb_cursor_tick) void macquadra_state::video_start() // DAFB { - m_vbl_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(macquadra_state::dafb_vbl_tick),this)); - m_cursor_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(macquadra_state::dafb_cursor_tick),this)); + m_vbl_timer = timer_alloc(*this, FUNC(macquadra_state::dafb_vbl_tick)); + m_cursor_timer = timer_alloc(*this, FUNC(macquadra_state::dafb_cursor_tick)); m_vbl_timer->adjust(attotime::never); m_cursor_timer->adjust(attotime::never); diff --git a/src/mame/drivers/magmax.cpp b/src/mame/drivers/magmax.cpp index 2e5aafef7bbe0..64c4be0b0cd56 100644 --- a/src/mame/drivers/magmax.cpp +++ b/src/mame/drivers/magmax.cpp @@ -69,7 +69,7 @@ TIMER_CALLBACK_MEMBER(magmax_state::scanline_callback) void magmax_state::machine_start() { // Create interrupt timer - m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(magmax_state::scanline_callback),this)); + m_interrupt_timer = timer_alloc(*this, FUNC(magmax_state::scanline_callback)); // Set up save state save_item(NAME(m_sound_latch)); diff --git a/src/mame/drivers/mappy.cpp b/src/mame/drivers/mappy.cpp index bd4a0b76f8cdc..e1735de7cd00e 100644 --- a/src/mame/drivers/mappy.cpp +++ b/src/mame/drivers/mappy.cpp @@ -1306,8 +1306,8 @@ void mappy_state::machine_start() { m_leds.resolve(); - m_namcoio_run_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mappy_state::namcoio_run_timer<0>), this)); - m_namcoio_run_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mappy_state::namcoio_run_timer<1>), this)); + m_namcoio_run_timer[0] = timer_alloc(*this, FUNC(mappy_state::namcoio_run_timer<0>)); + m_namcoio_run_timer[1] = timer_alloc(*this, FUNC(mappy_state::namcoio_run_timer<1>)); save_item(NAME(m_main_irq_mask)); save_item(NAME(m_sub_irq_mask)); diff --git a/src/mame/drivers/mazerbla.cpp b/src/mame/drivers/mazerbla.cpp index 6eda5e0cf7c0d..b838205a974ed 100644 --- a/src/mame/drivers/mazerbla.cpp +++ b/src/mame/drivers/mazerbla.cpp @@ -162,7 +162,9 @@ class mazerbla_state : public driver_device DECLARE_WRITE_LINE_MEMBER(screen_vblank); INTERRUPT_GEN_MEMBER(sound_interrupt); TIMER_CALLBACK_MEMBER(deferred_ls670_0_w); + transient_timer_factory m_deferred_ls670_0_w; TIMER_CALLBACK_MEMBER(deferred_ls670_1_w); + transient_timer_factory m_deferred_ls670_1_w; IRQ_CALLBACK_MEMBER(irq_callback); void greatgun_cpu3_io_map(address_map &map); void greatgun_io_map(address_map &map); @@ -305,7 +307,7 @@ TIMER_CALLBACK_MEMBER(mazerbla_state::deferred_ls670_0_w) void mazerbla_state::ls670_0_w(offs_t offset, uint8_t data) { /* do this on a timer to let the CPUs synchronize */ - machine().scheduler().synchronize(timer_expired_delegate(FUNC(mazerbla_state::deferred_ls670_0_w),this), (offset << 8) | data); + m_deferred_ls670_0_w.synchronize((offset << 8) | data); } uint8_t mazerbla_state::ls670_1_r(offs_t offset) @@ -327,7 +329,7 @@ TIMER_CALLBACK_MEMBER(mazerbla_state::deferred_ls670_1_w) void mazerbla_state::ls670_1_w(offs_t offset, uint8_t data) { /* do this on a timer to let the CPUs synchronize */ - machine().scheduler().synchronize(timer_expired_delegate(FUNC(mazerbla_state::deferred_ls670_1_w),this), (offset << 8) | data); + m_deferred_ls670_1_w.synchronize((offset << 8) | data); } @@ -935,6 +937,9 @@ void mazerbla_state::machine_start() membank("bank1")->configure_entries(0, 256, memregion("sub2")->base() + 0x10000, 0x2000); + m_deferred_ls670_0_w.init(*this, FUNC(mazerbla_state::deferred_ls670_0_w)); + m_deferred_ls670_1_w.init(*this, FUNC(mazerbla_state::deferred_ls670_1_w)); + save_item(NAME(m_port02_status)); save_item(NAME(m_gfx_rom_bank)); diff --git a/src/mame/drivers/mc1502.cpp b/src/mame/drivers/mc1502.cpp index 3c91623c04cb6..200a7b3316e01 100644 --- a/src/mame/drivers/mc1502.cpp +++ b/src/mame/drivers/mc1502.cpp @@ -191,7 +191,7 @@ void mc1502_state::machine_start() m_pic8259->ir1_w(1); memset(&m_kbd, 0, sizeof(m_kbd)); m_kbd.keyb_signal_timer = - machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mc1502_state::keyb_signal_callback), this)); + timer_alloc(*this, FUNC(mc1502_state::keyb_signal_callback)); m_kbd.keyb_signal_timer->adjust(attotime::from_msec(20), 0, attotime::from_msec(20)); } diff --git a/src/mame/drivers/mdisk.cpp b/src/mame/drivers/mdisk.cpp index cfda2eb10908a..109b8db63ce8e 100644 --- a/src/mame/drivers/mdisk.cpp +++ b/src/mame/drivers/mdisk.cpp @@ -130,7 +130,7 @@ void mdisk_state::fdc_side_w(uint8_t data) void mdisk_state::machine_start() { // timer to switch rom to ram - m_rom_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mdisk_state::rom_timer_callback), this), nullptr); + m_rom_timer = timer_alloc(*this, FUNC(mdisk_state::rom_timer_callback)); // register for save states save_item(NAME(m_uart1_rxrdy)); diff --git a/src/mame/drivers/mdt60.cpp b/src/mame/drivers/mdt60.cpp index 45623589d4fa3..d7f5d599031d1 100644 --- a/src/mame/drivers/mdt60.cpp +++ b/src/mame/drivers/mdt60.cpp @@ -75,7 +75,7 @@ class mdt60_state : public driver_device void mdt60_state::machine_start() { - m_baud_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mdt60_state::baud_timer), this)); + m_baud_timer = timer_alloc(*this, FUNC(mdt60_state::baud_timer)); m_baud_timer->adjust(attotime::zero); save_item(NAME(m_keyin)); diff --git a/src/mame/drivers/mediagx.cpp b/src/mame/drivers/mediagx.cpp index 9c91f7eca593d..ecd0a9ccecff8 100644 --- a/src/mame/drivers/mediagx.cpp +++ b/src/mame/drivers/mediagx.cpp @@ -99,6 +99,7 @@ class mediagx_state : public pcat_base_state m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), + m_sound_timer(*this, "sound_timer"), m_ports(*this, "IN%u", 0U) { } @@ -171,6 +172,7 @@ class mediagx_state : public pcat_base_state required_device m_gfxdecode; required_device m_screen; required_device m_palette; + required_device m_sound_timer; uint8_t m_pal[768]; optional_ioport_array<9> m_ports; // but parallel_pointer takes values 0 -> 23 @@ -655,7 +657,7 @@ void mediagx_state::parallel_port_w(offs_t offset, uint32_t data, uint32_t mem_m TIMER_DEVICE_CALLBACK_MEMBER(mediagx_state::sound_timer_callback) { m_ad1847_sample_counter = 0; - timer.adjust(attotime::from_msec(10)); + m_sound_timer->adjust(attotime::from_msec(10)); m_dmadac[0]->transfer(1, 0, 1, m_dacl_ptr, m_dacl.get()); m_dmadac[1]->transfer(1, 0, 1, m_dacr_ptr, m_dacr.get()); @@ -858,8 +860,7 @@ void mediagx_state::machine_reset() memcpy(m_bios_ram, rom, 0x40000); m_maincpu->reset(); - timer_device *sound_timer = subdevice("sound_timer"); - sound_timer->adjust(attotime::from_msec(10)); + m_sound_timer->adjust(attotime::from_msec(10)); m_dmadac[0]->enable(1); m_dmadac[1]->enable(1); diff --git a/src/mame/drivers/megadriv.cpp b/src/mame/drivers/megadriv.cpp index 54134a63f9b17..f6db360584072 100644 --- a/src/mame/drivers/megadriv.cpp +++ b/src/mame/drivers/megadriv.cpp @@ -287,7 +287,7 @@ void md_cons_state::machine_start() // setup timers for 6 button pads for (int i = 0; i < 3; i++) - m_io_timeout[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(md_base_state::io_timeout_timer_callback),this), (void*)(uintptr_t)i); + m_io_timeout[i] = timer_alloc(*this, FUNC(md_base_state::io_timeout_timer_callback), (void*)(uintptr_t)i); m_vdp->stop_timers(); diff --git a/src/mame/drivers/megadriv_acbl.cpp b/src/mame/drivers/megadriv_acbl.cpp index 3183a590535d9..c9d3411bc749b 100644 --- a/src/mame/drivers/megadriv_acbl.cpp +++ b/src/mame/drivers/megadriv_acbl.cpp @@ -1074,7 +1074,7 @@ void md_boot_6button_state::machine_start() // Setup timers for 6 button pads for (int i = 0; i < 3; i++) - m_io_timeout[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(md_base_state::io_timeout_timer_callback),this), (void*)(uintptr_t)i); + m_io_timeout[i] = timer_alloc(*this, FUNC(md_base_state::io_timeout_timer_callback), (void*)(uintptr_t)i); } void md_boot_6button_state::megadrvb_6b(machine_config &config) diff --git a/src/mame/drivers/megadriv_rad.cpp b/src/mame/drivers/megadriv_rad.cpp index 6d56d1812c18f..7ee8829f61e06 100644 --- a/src/mame/drivers/megadriv_rad.cpp +++ b/src/mame/drivers/megadriv_rad.cpp @@ -363,7 +363,7 @@ void megadriv_radica_6button_state::machine_start() // setup timers for 6 button pads for (int i = 0; i < 3; i++) - m_io_timeout[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(md_base_state::io_timeout_timer_callback),this), (void*)(uintptr_t)i); + m_io_timeout[i] = timer_alloc(*this, FUNC(md_base_state::io_timeout_timer_callback), (void*)(uintptr_t)i); save_item(NAME(m_bank)); } @@ -395,7 +395,7 @@ void megadriv_ra145_state::machine_start() // setup timers for 6 button pads for (int i = 0; i < 3; i++) - m_io_timeout[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(md_base_state::io_timeout_timer_callback),this), (void*)(uintptr_t)i); + m_io_timeout[i] = timer_alloc(*this, FUNC(md_base_state::io_timeout_timer_callback), (void*)(uintptr_t)i); m_a1630a = 0; save_item(NAME(m_a1630a)); diff --git a/src/mame/drivers/mekd1.cpp b/src/mame/drivers/mekd1.cpp index bd5e09a041bb5..7b82d57980725 100644 --- a/src/mame/drivers/mekd1.cpp +++ b/src/mame/drivers/mekd1.cpp @@ -150,7 +150,7 @@ class mekd1_state : public driver_device DECLARE_WRITE_LINE_MEMBER(write_f11_clock); DECLARE_WRITE_LINE_MEMBER(write_f13_clock); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; emu_timer *m_bit_rate_timer; emu_timer *m_bit_rate_half_timer; @@ -277,7 +277,7 @@ WRITE_LINE_MEMBER(mekd1_state::pia0_cb2_w) // This is a tape reader control line. } -void mekd1_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mekd1_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/mekd5.cpp b/src/mame/drivers/mekd5.cpp index dbea468ce457d..770972a2b8e36 100644 --- a/src/mame/drivers/mekd5.cpp +++ b/src/mame/drivers/mekd5.cpp @@ -139,7 +139,7 @@ class mekd5_state : public driver_device bool keypad_key_pressed(); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; uint8_t m_segment; uint8_t m_digit; virtual void machine_start() override; @@ -240,7 +240,7 @@ INPUT_PORTS_END ************************************************************/ -void mekd5_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mekd5_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/metro.cpp b/src/mame/drivers/metro.cpp index c09951cd743e8..3745ac5a596e4 100644 --- a/src/mame/drivers/metro.cpp +++ b/src/mame/drivers/metro.cpp @@ -128,7 +128,7 @@ void metro_state::cpu_space_map(address_map &map) } -void metro_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void metro_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -236,7 +236,7 @@ READ_LINE_MEMBER(metro_state::rxd_r) void metro_state::sound_data_w(u8 data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(metro_state::sound_data_sync), this), data); + m_sound_data_sync.synchronize(data); m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); // seen rxd_r } @@ -5343,6 +5343,8 @@ ROM_END void metro_state::init_metro() { + m_sound_data_sync.init(*this, FUNC(metro_state::sound_data_sync)); + if (m_audiobank.found()) { m_audiobank->configure_entries(0, 8, memregion("audiocpu")->base(), 0x4000); diff --git a/src/mame/drivers/mgolf.cpp b/src/mame/drivers/mgolf.cpp index 1bb5ab14d7c86..3ebe5e9178199 100644 --- a/src/mame/drivers/mgolf.cpp +++ b/src/mame/drivers/mgolf.cpp @@ -52,7 +52,7 @@ class mgolf_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void cpu_map(address_map &map); /* devices */ @@ -146,7 +146,7 @@ void mgolf_state::update_plunger( ) } -void mgolf_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mgolf_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/microterm_f8.cpp b/src/mame/drivers/microterm_f8.cpp index da4d83cd617b0..718ebd262917a 100644 --- a/src/mame/drivers/microterm_f8.cpp +++ b/src/mame/drivers/microterm_f8.cpp @@ -93,7 +93,7 @@ void microterm_f8_state::machine_start() m_attrlatch = 0; m_vram = make_unique_clear(0x800); // 6x MM2114 with weird addressing - m_baud_clock = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(microterm_f8_state::baud_clock), this)); + m_baud_clock = timer_alloc(*this, FUNC(microterm_f8_state::baud_clock)); m_baud_clock->adjust(attotime::zero, 0); save_item(NAME(m_port00)); diff --git a/src/mame/drivers/midzeus.cpp b/src/mame/drivers/midzeus.cpp index 65425549b9661..1750eeba37340 100644 --- a/src/mame/drivers/midzeus.cpp +++ b/src/mame/drivers/midzeus.cpp @@ -137,13 +137,13 @@ void midzeus_state::machine_start() { m_digits.resolve(); - m_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate()); - m_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate()); + m_timer[0] = timer_alloc(); + m_timer[1] = timer_alloc(); - m_gun_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(midzeus_state::invasn_gun_callback), this)); - m_gun_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(midzeus_state::invasn_gun_callback), this)); + m_gun_timer[0] = timer_alloc(*this, FUNC(midzeus_state::invasn_gun_callback)); + m_gun_timer[1] = timer_alloc(*this, FUNC(midzeus_state::invasn_gun_callback)); - m_display_irq_off_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(midzeus_state::display_irq_off), this)); + m_display_irq_off_timer = timer_alloc(*this, FUNC(midzeus_state::display_irq_off)); save_item(NAME(m_crusnexo_leds_select)); save_item(NAME(m_disk_asic_jr)); diff --git a/src/mame/drivers/missile.cpp b/src/mame/drivers/missile.cpp index 857f69f810efe..1e8e62fc78093 100644 --- a/src/mame/drivers/missile.cpp +++ b/src/mame/drivers/missile.cpp @@ -551,11 +551,11 @@ void missile_state::machine_start() m_ctrld = 0; /* create a timer to speed/slow the CPU */ - m_cpu_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(missile_state::adjust_cpu_speed),this)); + m_cpu_timer = timer_alloc(*this, FUNC(missile_state::adjust_cpu_speed)); m_cpu_timer->adjust(m_screen->time_until_pos(v_to_scanline(0), 0)); /* create a timer for IRQs and set up the first callback */ - m_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(missile_state::clock_irq),this)); + m_irq_timer = timer_alloc(*this, FUNC(missile_state::clock_irq)); m_irq_state = 0; schedule_next_irq(-32); diff --git a/src/mame/drivers/mjsister.cpp b/src/mame/drivers/mjsister.cpp index 2176fc5c1440d..efa09d5bb34fb 100644 --- a/src/mame/drivers/mjsister.cpp +++ b/src/mame/drivers/mjsister.cpp @@ -41,7 +41,7 @@ class mjsister_state : public driver_device protected: virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum @@ -160,7 +160,7 @@ MC6845_UPDATE_ROW( mjsister_state::crtc_update_row ) * *************************************/ -void mjsister_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mjsister_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/drivers/mlanding.cpp b/src/mame/drivers/mlanding.cpp index 533022851e69a..ba652840a2da0 100644 --- a/src/mame/drivers/mlanding.cpp +++ b/src/mame/drivers/mlanding.cpp @@ -103,7 +103,7 @@ class mlanding_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum @@ -424,7 +424,7 @@ u32 mlanding_state::exec_dma() } -void mlanding_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mlanding_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/model3.cpp b/src/mame/drivers/model3.cpp index f0521a5309e52..911f70f85f4ea 100644 --- a/src/mame/drivers/model3.cpp +++ b/src/mame/drivers/model3.cpp @@ -1325,33 +1325,33 @@ MACHINE_START_MEMBER(model3_state,model3_10) { configure_fast_ram(); - m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_sound_timer_tick),this)); - m_real3d_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::real3d_dma_timer_callback),this)); - m_scan_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_scan_timer_tick),this)); + m_sound_timer = timer_alloc(*this, FUNC(model3_state::model3_sound_timer_tick)); + m_real3d_dma_timer = timer_alloc(*this, FUNC(model3_state::real3d_dma_timer_callback)); + m_scan_timer = timer_alloc(*this, FUNC(model3_state::model3_scan_timer_tick)); } MACHINE_START_MEMBER(model3_state,model3_15) { configure_fast_ram(); - m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_sound_timer_tick),this)); - m_real3d_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::real3d_dma_timer_callback),this)); - m_scan_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_scan_timer_tick),this)); + m_sound_timer = timer_alloc(*this, FUNC(model3_state::model3_sound_timer_tick)); + m_real3d_dma_timer = timer_alloc(*this, FUNC(model3_state::real3d_dma_timer_callback)); + m_scan_timer = timer_alloc(*this, FUNC(model3_state::model3_scan_timer_tick)); } MACHINE_START_MEMBER(model3_state,model3_20) { configure_fast_ram(); - m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_sound_timer_tick),this)); - m_real3d_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::real3d_dma_timer_callback),this)); - m_scan_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_scan_timer_tick),this)); + m_sound_timer = timer_alloc(*this, FUNC(model3_state::model3_sound_timer_tick)); + m_real3d_dma_timer = timer_alloc(*this, FUNC(model3_state::real3d_dma_timer_callback)); + m_scan_timer = timer_alloc(*this, FUNC(model3_state::model3_scan_timer_tick)); } MACHINE_START_MEMBER(model3_state,model3_21) { configure_fast_ram(); - m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_sound_timer_tick),this)); - m_real3d_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::real3d_dma_timer_callback),this)); - m_scan_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_scan_timer_tick),this)); + m_sound_timer = timer_alloc(*this, FUNC(model3_state::model3_sound_timer_tick)); + m_real3d_dma_timer = timer_alloc(*this, FUNC(model3_state::real3d_dma_timer_callback)); + m_scan_timer = timer_alloc(*this, FUNC(model3_state::model3_scan_timer_tick)); } void model3_state::model3_init(int step) diff --git a/src/mame/drivers/moo.cpp b/src/mame/drivers/moo.cpp index db8d89c01b697..6d9990687f0c3 100644 --- a/src/mame/drivers/moo.cpp +++ b/src/mame/drivers/moo.cpp @@ -473,7 +473,7 @@ MACHINE_START_MEMBER(moo_state,moo) save_item(NAME(m_layerpri)); save_item(NAME(m_protram)); - m_dmaend_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(moo_state::dmaend_callback),this)); + m_dmaend_timer = timer_alloc(*this, FUNC(moo_state::dmaend_callback)); } MACHINE_RESET_MEMBER(moo_state,moo) diff --git a/src/mame/drivers/mpf1.cpp b/src/mame/drivers/mpf1.cpp index ee1192aeff51e..1c9a8378ee70f 100644 --- a/src/mame/drivers/mpf1.cpp +++ b/src/mame/drivers/mpf1.cpp @@ -338,7 +338,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(mpf1_state::check_halt_callback) void mpf1_state::machine_start() { - m_led_refresh_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mpf1_state::led_refresh),this)); + m_led_refresh_timer = timer_alloc(*this, FUNC(mpf1_state::led_refresh)); m_digits.resolve(); m_leds.resolve(); diff --git a/src/mame/drivers/mpu3.cpp b/src/mame/drivers/mpu3.cpp index 79b301e6b0809..eea6108f4a31c 100644 --- a/src/mame/drivers/mpu3.cpp +++ b/src/mame/drivers/mpu3.cpp @@ -726,7 +726,7 @@ INPUT_PORTS_END /* Common configurations */ void mpu3_state::machine_start() { - m_ic21_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mpu3_state::ic21_timeout),this)); + m_ic21_timer = timer_alloc(*this, FUNC(mpu3_state::ic21_timeout)); m_triac.resolve(); m_digit.resolve(); diff --git a/src/mame/drivers/msisaac.cpp b/src/mame/drivers/msisaac.cpp index f934e7857b806..53c7ff7515801 100644 --- a/src/mame/drivers/msisaac.cpp +++ b/src/mame/drivers/msisaac.cpp @@ -35,7 +35,7 @@ TIMER_CALLBACK_MEMBER(msisaac_state::nmi_callback) void msisaac_state::sound_command_w(uint8_t data) { m_soundlatch->write(data); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(msisaac_state::nmi_callback),this), data); + m_nmi_callback.synchronize(data); } void msisaac_state::nmi_disable_w(uint8_t data) @@ -409,6 +409,8 @@ GFXDECODE_END void msisaac_state::machine_start() { + m_nmi_callback.init(*this, FUNC(msisaac_state::nmi_callback)); + /* video */ save_item(NAME(m_bg2_textbank)); /* sound */ diff --git a/src/mame/drivers/multigam.cpp b/src/mame/drivers/multigam.cpp index 43ceeed8699cb..913a31bd01a71 100644 --- a/src/mame/drivers/multigam.cpp +++ b/src/mame/drivers/multigam.cpp @@ -212,6 +212,7 @@ class multigam_state : public driver_device DECLARE_MACHINE_RESET(multigm3); DECLARE_MACHINE_START(supergm3); TIMER_CALLBACK_MEMBER(mmc1_resync_callback); + transient_timer_factory m_mmc1_resync_callback; void set_videorom_bank( int start, int count, int bank, int bank_size_in_kb); void set_videoram_bank( int start, int count, int bank, int bank_size_in_kb); void multigam_init_mmc3(uint8_t *prg_base, int prg_size, int chr_bank_base); @@ -759,7 +760,7 @@ void multigam_state::mmc1_rom_switch_w(offs_t offset, uint8_t data) else { m_mmc1_reg_write_enable = 0; - machine().scheduler().synchronize(timer_expired_delegate(FUNC(multigam_state::mmc1_resync_callback),this)); + m_mmc1_resync_callback.synchronize(); } int reg = (offset >> 13); @@ -1159,6 +1160,8 @@ MACHINE_RESET_MEMBER(multigam_state,multigm3) void multigam_state::machine_start() { + m_mmc1_resync_callback.init(*this, FUNC(multigam_state::mmc1_resync_callback)); + m_nt_ram = std::make_unique(0x1000); m_nt_page[0] = m_nt_ram.get(); m_nt_page[1] = m_nt_ram.get() + 0x400; diff --git a/src/mame/drivers/mw8080bw.cpp b/src/mame/drivers/mw8080bw.cpp index c1ff1682ae3bd..7d54095c433e3 100644 --- a/src/mame/drivers/mw8080bw.cpp +++ b/src/mame/drivers/mw8080bw.cpp @@ -886,7 +886,7 @@ MACHINE_START_MEMBER(mw8080bw_state,maze) mw8080bw_state::machine_start(); /* create astable timer for IC B1 */ - m_maze_tone_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mw8080bw_state::maze_tone_timing_timer_callback), this)); + m_maze_tone_timer = timer_alloc(*this, FUNC(mw8080bw_state::maze_tone_timing_timer_callback)); m_maze_tone_timer->adjust(MAZE_555_B1_PERIOD, 0, MAZE_555_B1_PERIOD); /* initialize state of Tone Timing FF, IC C1 */ diff --git a/src/mame/drivers/myb3k.cpp b/src/mame/drivers/myb3k.cpp index ebfe5b95628ca..ad8ffe47aa089 100644 --- a/src/mame/drivers/myb3k.cpp +++ b/src/mame/drivers/myb3k.cpp @@ -209,7 +209,7 @@ class myb3k_state : public driver_device { TIMER_ID_KEY_INTERRUPT }; - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; /* Status bits */ enum @@ -281,7 +281,7 @@ void myb3k_state::kbd_set_data_and_interrupt(u8 data) { timer_set(attotime::from_msec(1), TIMER_ID_KEY_INTERRUPT); } -void myb3k_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void myb3k_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/namcofl.cpp b/src/mame/drivers/namcofl.cpp index bd6639e637851..a724f509a3c7e 100644 --- a/src/mame/drivers/namcofl.cpp +++ b/src/mame/drivers/namcofl.cpp @@ -501,9 +501,9 @@ TIMER_DEVICE_CALLBACK_MEMBER(namcofl_state::mcu_irq2_cb) void namcofl_state::machine_start() { - m_raster_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(namcofl_state::raster_interrupt_callback),this)); - m_network_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(namcofl_state::network_interrupt_callback),this)); - m_vblank_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(namcofl_state::vblank_interrupt_callback),this)); + m_raster_interrupt_timer = timer_alloc(*this, FUNC(namcofl_state::raster_interrupt_callback)); + m_network_interrupt_timer = timer_alloc(*this, FUNC(namcofl_state::network_interrupt_callback)); + m_vblank_interrupt_timer = timer_alloc(*this, FUNC(namcofl_state::vblank_interrupt_callback)); } diff --git a/src/mame/drivers/namcona1.cpp b/src/mame/drivers/namcona1.cpp index cc270b6a861ee..cc32d5c698baa 100644 --- a/src/mame/drivers/namcona1.cpp +++ b/src/mame/drivers/namcona1.cpp @@ -952,7 +952,7 @@ void namcona1_state::scanline_interrupt(int scanline) } } -void namcona1_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void namcona1_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_SCANLINE) { diff --git a/src/mame/drivers/namcos23.cpp b/src/mame/drivers/namcos23.cpp index c9ad236666ec6..64600f5e30678 100644 --- a/src/mame/drivers/namcos23.cpp +++ b/src/mame/drivers/namcos23.cpp @@ -3518,7 +3518,7 @@ void namcos23_state::machine_start() { m_lamps.resolve(); - m_c361.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(namcos23_state::c361_timer_cb),this)); + m_c361.timer = timer_alloc(*this, FUNC(namcos23_state::c361_timer_cb)); m_c361.timer->adjust(attotime::never); m_maincpu->add_fastram(0, m_mainram.bytes()-1, false, reinterpret_cast(memshare("mainram")->ptr())); diff --git a/src/mame/drivers/nc.cpp b/src/mame/drivers/nc.cpp index 28b3a06ac85cb..6b1ccacb0cd3a 100644 --- a/src/mame/drivers/nc.cpp +++ b/src/mame/drivers/nc.cpp @@ -1124,7 +1124,7 @@ void nc_state::machine_start() m_card_size = 0; /* keyboard timer */ - m_keyboard_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(nc_state::nc_keyboard_timer_callback),this)); + m_keyboard_timer = timer_alloc(*this, FUNC(nc_state::nc_keyboard_timer_callback)); m_keyboard_timer->adjust(attotime::from_msec(10)); m_nvram->set_base(m_ram->pointer(), m_ram->size()); diff --git a/src/mame/drivers/nds.cpp b/src/mame/drivers/nds.cpp index da6acaaa1777e..da347de1fdb4f 100644 --- a/src/mame/drivers/nds.cpp +++ b/src/mame/drivers/nds.cpp @@ -647,14 +647,14 @@ void nds_state::machine_start() for (i = 0; i < 8; i++) { - m_dma_timer[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(nds_state::dma_complete),this)); + m_dma_timer[i] = timer_alloc(*this, FUNC(nds_state::dma_complete)); m_dma_timer[i]->adjust(attotime::never, i); - m_tmr_timer[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(nds_state::timer_expire),this)); + m_tmr_timer[i] = timer_alloc(*this, FUNC(nds_state::timer_expire)); m_tmr_timer[i]->adjust(attotime::never, i); } - m_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(nds_state::handle_irq),this)); + m_irq_timer = timer_alloc(*this, FUNC(nds_state::handle_irq)); m_irq_timer->adjust(attotime::never); } diff --git a/src/mame/drivers/neogeo.cpp b/src/mame/drivers/neogeo.cpp index 80e66732eaf20..1750bd2c0b3d6 100644 --- a/src/mame/drivers/neogeo.cpp +++ b/src/mame/drivers/neogeo.cpp @@ -860,9 +860,9 @@ TIMER_CALLBACK_MEMBER(neogeo_base_state::vblank_interrupt_callback) void neogeo_base_state::create_interrupt_timers() { - m_display_position_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(neogeo_base_state::display_position_interrupt_callback),this)); - m_display_position_vblank_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(neogeo_base_state::display_position_vblank_callback),this)); - m_vblank_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(neogeo_base_state::vblank_interrupt_callback),this)); + m_display_position_interrupt_timer = timer_alloc(*this, FUNC(neogeo_base_state::display_position_interrupt_callback)); + m_display_position_vblank_timer = timer_alloc(*this, FUNC(neogeo_base_state::display_position_vblank_callback)); + m_vblank_interrupt_timer = timer_alloc(*this, FUNC(neogeo_base_state::vblank_interrupt_callback)); } diff --git a/src/mame/drivers/newbrain.cpp b/src/mame/drivers/newbrain.cpp index cb17c4652b4bc..928cd64212add 100644 --- a/src/mame/drivers/newbrain.cpp +++ b/src/mame/drivers/newbrain.cpp @@ -777,7 +777,7 @@ void newbrain_state::machine_reset() // device_timer - handler timer events //------------------------------------------------- -void newbrain_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void newbrain_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/news_38xx.cpp b/src/mame/drivers/news_38xx.cpp index d10fe4a1bde82..062389ce5d2b9 100644 --- a/src/mame/drivers/news_38xx.cpp +++ b/src/mame/drivers/news_38xx.cpp @@ -161,7 +161,7 @@ void news_38xx_state::machine_start() save_item(NAME(m_inten)); save_item(NAME(m_int_state)); - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(news_38xx_state::timer), this)); + m_timer = timer_alloc(*this, FUNC(news_38xx_state::timer)); m_intst = 0; m_inten = 0x6d; diff --git a/src/mame/drivers/news_68k.cpp b/src/mame/drivers/news_68k.cpp index e5629c29186a0..2ee6b7af950c8 100644 --- a/src/mame/drivers/news_68k.cpp +++ b/src/mame/drivers/news_68k.cpp @@ -158,7 +158,7 @@ void news_68k_state::machine_start() m_net_ram = std::make_unique(8192); - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(news_68k_state::timer), this)); + m_timer = timer_alloc(*this, FUNC(news_68k_state::timer)); m_intst = 0; for (bool &int_state : m_int_state) diff --git a/src/mame/drivers/news_r3k.cpp b/src/mame/drivers/news_r3k.cpp index 20bae67c4300e..c2163f26f7859 100644 --- a/src/mame/drivers/news_r3k.cpp +++ b/src/mame/drivers/news_r3k.cpp @@ -173,7 +173,7 @@ void news_r3k_state::machine_start() save_item(NAME(m_lcd_enable)); save_item(NAME(m_lcd_dim)); - m_itimer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(news_r3k_state::itimer), this)); + m_itimer = timer_alloc(*this, FUNC(news_r3k_state::itimer)); for (bool &int_state : m_int_state) int_state = false; diff --git a/src/mame/drivers/next.cpp b/src/mame/drivers/next.cpp index a9a06161ce663..f4eea8cfac169 100644 --- a/src/mame/drivers/next.cpp +++ b/src/mame/drivers/next.cpp @@ -660,7 +660,7 @@ void next_state::phy_w(offs_t offset, uint32_t data, uint32_t mem_mask) logerror("phy_w %d %08x (%08x)\n", offset, phy[offset], maincpu->pc()); } -void next_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void next_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { irq_set(29, true); timer_data = timer_next_data; diff --git a/src/mame/drivers/nexus3d.cpp b/src/mame/drivers/nexus3d.cpp index 81c218bb8862b..0d49be4a47cb7 100644 --- a/src/mame/drivers/nexus3d.cpp +++ b/src/mame/drivers/nexus3d.cpp @@ -290,7 +290,7 @@ INPUT_PORTS_END void nexus3d_state::machine_start() { - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(nexus3d_state::timercb),this), 0); + m_timer = timer_alloc(*this, FUNC(nexus3d_state::timercb)); } diff --git a/src/mame/drivers/ngp.cpp b/src/mame/drivers/ngp.cpp index c0e8e51e98de7..a742b7d862ae1 100644 --- a/src/mame/drivers/ngp.cpp +++ b/src/mame/drivers/ngp.cpp @@ -706,7 +706,7 @@ void ngp_state::machine_start() m_maincpu->space(AS_PROGRAM).unmap_read(0x800000, 0x9fffff); } - m_seconds_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ngp_state::ngp_seconds_callback),this)); + m_seconds_timer = timer_alloc(*this, FUNC(ngp_state::ngp_seconds_callback)); m_seconds_timer->adjust(attotime::from_seconds(1), 0, attotime::from_seconds(1)); save_item(NAME(m_io_reg)); diff --git a/src/mame/drivers/nightgal.cpp b/src/mame/drivers/nightgal.cpp index 23526104d2f0c..7a978f2f43361 100644 --- a/src/mame/drivers/nightgal.cpp +++ b/src/mame/drivers/nightgal.cpp @@ -765,7 +765,7 @@ INPUT_PORTS_END void nightgal_state::machine_start() { - m_z80_wait_ack_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(nightgal_state::z80_wait_ack_cb), this)); + m_z80_wait_ack_timer = timer_alloc(*this, FUNC(nightgal_state::z80_wait_ack_cb)); save_item(NAME(m_nsc_latch)); save_item(NAME(m_z80_latch)); diff --git a/src/mame/drivers/nightmare.cpp b/src/mame/drivers/nightmare.cpp index 5dda8921429fd..8bf2368c936d2 100644 --- a/src/mame/drivers/nightmare.cpp +++ b/src/mame/drivers/nightmare.cpp @@ -249,7 +249,7 @@ class nightmare_state : public driver_device void nightmare_sound_io_map(address_map &map); uint32_t screen_update_nightmare(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void machine_reset() override; @@ -263,7 +263,7 @@ class nightmare_state : public driver_device int m_reset; }; -void nightmare_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nightmare_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/nokia_3310.cpp b/src/mame/drivers/nokia_3310.cpp index 0007ecba6ed64..0bb670ff6cf48 100644 --- a/src/mame/drivers/nokia_3310.cpp +++ b/src/mame/drivers/nokia_3310.cpp @@ -232,10 +232,10 @@ void noki3310_state::machine_start() m_dsp_ram = std::make_unique(0x800); // DSP shared RAM // allocate timers - m_timer0 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(noki3310_state::timer0), this)); - m_timer1 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(noki3310_state::timer1), this)); - m_timer_watchdog = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(noki3310_state::timer_watchdog), this)); - m_timer_fiq8 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(noki3310_state::timer_fiq8), this)); + m_timer0 = timer_alloc(*this, FUNC(noki3310_state::timer0)); + m_timer1 = timer_alloc(*this, FUNC(noki3310_state::timer1)); + m_timer_watchdog = timer_alloc(*this, FUNC(noki3310_state::timer_watchdog)); + m_timer_fiq8 = timer_alloc(*this, FUNC(noki3310_state::timer_fiq8)); } void noki3310_state::machine_reset() diff --git a/src/mame/drivers/norautp.cpp b/src/mame/drivers/norautp.cpp index 53efbe3ead5ec..7ef4889c2d78c 100644 --- a/src/mame/drivers/norautp.cpp +++ b/src/mame/drivers/norautp.cpp @@ -725,7 +725,7 @@ void norautp_state::counterlamps_w(uint8_t data) WRITE_LINE_MEMBER(norautp_state::ppi2_obf_w) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(norautp_state::ppi2_ack), this), state); + m_ppi2_ack.synchronize(state); } TIMER_CALLBACK_MEMBER(norautp_state::ppi2_ack) @@ -1314,6 +1314,12 @@ GFXDECODE_END * Machine Drivers * *************************/ +void norautp_state::machine_start() +{ + m_lamps.resolve(); + m_ppi2_ack.init(*this, FUNC(norautp_state::ppi2_ack)); +} + void norautp_state::noraut_base(machine_config &config) { /* basic machine hardware */ diff --git a/src/mame/drivers/notetaker.cpp b/src/mame/drivers/notetaker.cpp index 68598ce5146f5..aacea2e4b793b 100644 --- a/src/mame/drivers/notetaker.cpp +++ b/src/mame/drivers/notetaker.cpp @@ -243,10 +243,10 @@ class notetaker_state : public driver_device void ep_io(address_map &map); void ep_mem(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; -void notetaker_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void notetaker_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -758,7 +758,7 @@ void notetaker_state::machine_start() // allocate RAM m_mainram = make_unique_clear(0x100000/2); // allocate the DAC timer, and set it to fire NEVER. We'll set it up properly in IPReset. - m_FIFO_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(notetaker_state::timer_fifoclk),this)); + m_FIFO_timer = timer_alloc(*this, FUNC(notetaker_state::timer_fifoclk)); m_FIFO_timer->adjust(attotime::never); // FDC: /DDEN is tied permanently LOW so MFM mode is ALWAYS ON m_fdc->dden_w(0); diff --git a/src/mame/drivers/novag_sexpert.cpp b/src/mame/drivers/novag_sexpert.cpp index b769dd645234f..10ede00f1f7a1 100644 --- a/src/mame/drivers/novag_sexpert.cpp +++ b/src/mame/drivers/novag_sexpert.cpp @@ -188,7 +188,7 @@ class sforte_state : public sexpert_state void sforte_state::machine_start() { sexpert_state::machine_start(); - m_beeptimer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sforte_state::beep),this)); + m_beeptimer = timer_alloc(*this, FUNC(sforte_state::beep)); } diff --git a/src/mame/drivers/nwk-tr.cpp b/src/mame/drivers/nwk-tr.cpp index 006e69c1bbbd7..c6b80e06b2ef6 100644 --- a/src/mame/drivers/nwk-tr.cpp +++ b/src/mame/drivers/nwk-tr.cpp @@ -507,7 +507,7 @@ void nwktr_state::machine_start() // configure fast RAM regions for DRC m_maincpu->ppcdrc_add_fastram(0x00000000, 0x003fffff, false, m_work_ram); - m_sound_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(nwktr_state::sound_irq), this)); + m_sound_irq_timer = timer_alloc(*this, FUNC(nwktr_state::sound_irq)); } void nwktr_state::ppc_map(address_map &map) diff --git a/src/mame/drivers/octopus.cpp b/src/mame/drivers/octopus.cpp index b0652893429c9..932c019699aa2 100644 --- a/src/mame/drivers/octopus.cpp +++ b/src/mame/drivers/octopus.cpp @@ -233,7 +233,7 @@ class octopus_state : public driver_device void octopus_sub_mem(address_map &map); void octopus_vram(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; required_device m_maincpu; required_device m_subcpu; @@ -369,7 +369,7 @@ static INPUT_PORTS_START( octopus ) PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) INPUT_PORTS_END -void octopus_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void octopus_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/drivers/olyboss.cpp b/src/mame/drivers/olyboss.cpp index df710367f37b0..bace564a6f2ef 100644 --- a/src/mame/drivers/olyboss.cpp +++ b/src/mame/drivers/olyboss.cpp @@ -84,7 +84,7 @@ class olyboss_state : public driver_device protected: virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: u8 keyboard_read(); @@ -149,7 +149,7 @@ void olyboss_state::machine_reset() m_timer->adjust(attotime::from_hz(30), 0, attotime::from_hz(30)); // unknown timer freq, possibly com2651 BRCLK } -void olyboss_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void olyboss_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_timstate = !m_timstate; if(m_pic) diff --git a/src/mame/drivers/olytext.cpp b/src/mame/drivers/olytext.cpp index ebcb69b614d1c..fd194dea6f4ef 100644 --- a/src/mame/drivers/olytext.cpp +++ b/src/mame/drivers/olytext.cpp @@ -51,7 +51,7 @@ class olytext_state : public driver_device protected: virtual void machine_start() override; virtual void machine_reset() override; -// virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; +// virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); diff --git a/src/mame/drivers/omegrace.cpp b/src/mame/drivers/omegrace.cpp index 18782be08ea6b..a389e9e2782f7 100644 --- a/src/mame/drivers/omegrace.cpp +++ b/src/mame/drivers/omegrace.cpp @@ -286,7 +286,7 @@ void omegrace_state::machine_start() // Interrupt caused by overflow pulses from 74LS161 clocked by 74LS393 dividing .75 MHz output of 74LS161 attotime period = attotime::from_hz(12_MHz_XTAL/16/256/12); // ~250 Hz - m_gbnmi = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(omegrace_state::periodic_int), this)); + m_gbnmi = timer_alloc(*this, FUNC(omegrace_state::periodic_int)); m_gbnmi->adjust(period, 0, period); // first NMI must not arrive immediately } diff --git a/src/mame/drivers/orbit.cpp b/src/mame/drivers/orbit.cpp index 1cd1a45117e47..9a30af2a20141 100644 --- a/src/mame/drivers/orbit.cpp +++ b/src/mame/drivers/orbit.cpp @@ -248,7 +248,7 @@ GFXDECODE_END void orbit_state::machine_start() { - m_irq_off_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(orbit_state::irq_off), this)); + m_irq_off_timer = timer_alloc(*this, FUNC(orbit_state::irq_off)); save_item(NAME(m_flip_screen)); } diff --git a/src/mame/drivers/oric.cpp b/src/mame/drivers/oric.cpp index 3781bc85a4412..66c01e766569b 100644 --- a/src/mame/drivers/oric.cpp +++ b/src/mame/drivers/oric.cpp @@ -401,7 +401,7 @@ void oric_state::machine_start_common() m_ext_irq = false; if (!m_tape_timer) - m_tape_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(oric_state::update_tape), this)); + m_tape_timer = timer_alloc(*this, FUNC(oric_state::update_tape)); save_item(NAME(m_blink_counter)); save_item(NAME(m_pattr)); diff --git a/src/mame/drivers/osbexec.cpp b/src/mame/drivers/osbexec.cpp index 7e35a8fd47f02..2279811008942 100644 --- a/src/mame/drivers/osbexec.cpp +++ b/src/mame/drivers/osbexec.cpp @@ -504,7 +504,7 @@ void osbexec_state::init_osbexec() m_vram = make_unique_clear(0x2000); m_fontram = make_unique_clear(0x1000); - m_video_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(osbexec_state::osbexec_video_callback),this)); + m_video_timer = timer_alloc(*this, FUNC(osbexec_state::osbexec_video_callback)); } diff --git a/src/mame/drivers/overdriv.cpp b/src/mame/drivers/overdriv.cpp index 54030633581d5..7b28d13c9e6c6 100644 --- a/src/mame/drivers/overdriv.cpp +++ b/src/mame/drivers/overdriv.cpp @@ -300,7 +300,7 @@ INPUT_PORTS_END void overdriv_state::machine_start() { m_led.resolve(); - m_objdma_end_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(overdriv_state::objdma_end_cb), this)); + m_objdma_end_timer = timer_alloc(*this, FUNC(overdriv_state::objdma_end_cb)); save_item(NAME(m_cpuB_ctrl)); save_item(NAME(m_sprite_colorbase)); diff --git a/src/mame/drivers/parodius.cpp b/src/mame/drivers/parodius.cpp index 45c04850f612b..a50c03ecd8ac3 100644 --- a/src/mame/drivers/parodius.cpp +++ b/src/mame/drivers/parodius.cpp @@ -66,7 +66,7 @@ void parodius_state::sound_nmi_callback( int param ) } #endif -void parodius_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void parodius_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/pasopia.cpp b/src/mame/drivers/pasopia.cpp index 4c80db70115dc..fe925b073336e 100644 --- a/src/mame/drivers/pasopia.cpp +++ b/src/mame/drivers/pasopia.cpp @@ -218,7 +218,7 @@ void pasopia_state::machine_start() { m_p_vram = make_unique_clear(0x4000); - m_pio_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pasopia_state::pio_timer), this)); + m_pio_timer = timer_alloc(*this, FUNC(pasopia_state::pio_timer)); m_pio_timer->adjust(attotime::from_hz(50), 0, attotime::from_hz(50)); m_hblank = 0; diff --git a/src/mame/drivers/pasopia7.cpp b/src/mame/drivers/pasopia7.cpp index 45424660a47fe..68eb5c8ba2f53 100644 --- a/src/mame/drivers/pasopia7.cpp +++ b/src/mame/drivers/pasopia7.cpp @@ -918,14 +918,14 @@ ROM_END void pasopia7_state::init_p7_raster() { m_screen_type = 1; - m_pio_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pasopia7_state::pio_timer), this)); + m_pio_timer = timer_alloc(*this, FUNC(pasopia7_state::pio_timer)); m_pio_timer->adjust(attotime::from_hz(5000), 0, attotime::from_hz(5000)); } void pasopia7_state::init_p7_lcd() { m_screen_type = 0; - m_pio_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pasopia7_state::pio_timer), this)); + m_pio_timer = timer_alloc(*this, FUNC(pasopia7_state::pio_timer)); m_pio_timer->adjust(attotime::from_hz(5000), 0, attotime::from_hz(5000)); } diff --git a/src/mame/drivers/patinho_feio.cpp b/src/mame/drivers/patinho_feio.cpp index f9f7154cacab2..1ce5423c1298d 100644 --- a/src/mame/drivers/patinho_feio.cpp +++ b/src/mame/drivers/patinho_feio.cpp @@ -186,8 +186,8 @@ DEVICE_IMAGE_LOAD_MEMBER( patinho_feio_state::tape_load ) } void patinho_feio_state::machine_start(){ - m_teletype_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(patinho_feio_state::teletype_callback),this)); - m_decwriter_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(patinho_feio_state::decwriter_callback),this)); + m_teletype_timer = timer_alloc(*this, FUNC(patinho_feio_state::teletype_callback)); + m_decwriter_timer = timer_alloc(*this, FUNC(patinho_feio_state::decwriter_callback)); // Copy some programs directly into RAM. // This is a hack for setting up the computer diff --git a/src/mame/drivers/pb1000.cpp b/src/mame/drivers/pb1000.cpp index f0f075490f055..1af4e9b512aef 100644 --- a/src/mame/drivers/pb1000.cpp +++ b/src/mame/drivers/pb1000.cpp @@ -455,7 +455,7 @@ void pb1000_state::machine_start() membank("bank1")->set_base(m_rom_reg->base()); - m_kb_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pb1000_state::keyboard_timer),this)); + m_kb_timer = timer_alloc(*this, FUNC(pb1000_state::keyboard_timer)); m_kb_timer->adjust(attotime::from_hz(192), 0, attotime::from_hz(192)); } diff --git a/src/mame/drivers/pbaction.cpp b/src/mame/drivers/pbaction.cpp index 033cdd32271f9..a04a405e15ba0 100644 --- a/src/mame/drivers/pbaction.cpp +++ b/src/mame/drivers/pbaction.cpp @@ -418,7 +418,7 @@ GFXDECODE_END void pbaction_state::machine_start() { - m_soundcommand_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pbaction_state::sound_trigger), this)); + m_soundcommand_timer = timer_alloc(*this, FUNC(pbaction_state::sound_trigger)); save_item(NAME(m_nmi_mask)); save_item(NAME(m_scroll)); } @@ -508,7 +508,7 @@ void pbaction_tecfri_state::machine_start() { pbaction_state::machine_start(); - m_subcommand_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pbaction_tecfri_state::sub_trigger), this)); + m_subcommand_timer = timer_alloc(*this, FUNC(pbaction_tecfri_state::sub_trigger)); m_digits.resolve(); } diff --git a/src/mame/drivers/pc6001.cpp b/src/mame/drivers/pc6001.cpp index 3672fc61228a2..c8d592bb2dac2 100644 --- a/src/mame/drivers/pc6001.cpp +++ b/src/mame/drivers/pc6001.cpp @@ -1336,7 +1336,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(pc6001_state::keyboard_callback) void pc6001_state::machine_start() { - m_timer_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pc6001_state::audio_callback),this)); + m_timer_irq_timer = timer_alloc(*this, FUNC(pc6001_state::audio_callback)); } inline void pc6001_state::set_videoram_bank(uint32_t offs) diff --git a/src/mame/drivers/pc8801.cpp b/src/mame/drivers/pc8801.cpp index a29690c88be09..0b09f8e2567ef 100644 --- a/src/mame/drivers/pc8801.cpp +++ b/src/mame/drivers/pc8801.cpp @@ -1632,7 +1632,7 @@ uint8_t pc8801_state::upd765_tc_r() m_fdc->tc_w(true); //TODO: I'm not convinced that this works correctly with current hook-up ... 1000 usec is needed by Aploon, a bigger value breaks Alpha. //OTOH, 50 seems more than enough for the new upd... - machine().scheduler().timer_set(attotime::from_usec(50), timer_expired_delegate(FUNC(pc8801_state::pc8801fd_upd765_tc_to_zero),this)); + m_pc8801fd_upd765_tc_to_zero.call_after(attotime::from_usec(50)); return 0xff; // value is meaningless } @@ -2154,6 +2154,8 @@ void pc8801_state::machine_start() m_kanji_rom = memregion("kanji")->base(); m_cg_rom = memregion("cgrom")->base(); + m_pc8801fd_upd765_tc_to_zero.init(*this, FUNC(pc8801_state::pc8801fd_upd765_tc_to_zero)); + save_pointer(NAME(m_work_ram), 0x10000); save_pointer(NAME(m_hi_work_ram), 0x1000); save_pointer(NAME(m_ext_work_ram), 0x8000*0x100); diff --git a/src/mame/drivers/pc88va.cpp b/src/mame/drivers/pc88va.cpp index 7e6bc817e809a..33403f521ae33 100644 --- a/src/mame/drivers/pc88va.cpp +++ b/src/mame/drivers/pc88va.cpp @@ -368,7 +368,7 @@ uint32_t pc88va_state::screen_update_pc88va(screen_device &screen, bitmap_rgb32 return 0; } -void pc88va_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pc88va_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/pcfx.cpp b/src/mame/drivers/pcfx.cpp index 6d0caeb387fd4..299562f225b91 100644 --- a/src/mame/drivers/pcfx.cpp +++ b/src/mame/drivers/pcfx.cpp @@ -35,7 +35,7 @@ class pcfx_state : public driver_device protected: virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum @@ -141,7 +141,7 @@ uint16_t pcfx_state::pad_r(offs_t offset) return res; } -void pcfx_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pcfx_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/pcw.cpp b/src/mame/drivers/pcw.cpp index 3826a6b226a6f..2ca6c42131c26 100644 --- a/src/mame/drivers/pcw.cpp +++ b/src/mame/drivers/pcw.cpp @@ -1030,12 +1030,12 @@ void pcw_state::init_pcw() m_roller_ram_offset = 0; /* timer interrupt */ - m_beep_setup_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pcw_state::setup_beep), this)); + m_beep_setup_timer = timer_alloc(*this, FUNC(pcw_state::setup_beep)); m_beep_setup_timer->adjust(attotime::zero); - m_prn_stepper = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pcw_state::pcw_stepper_callback), this)); - m_prn_pins = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pcw_state::pcw_pins_callback), this)); - m_pulse_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pcw_state::pcw_timer_pulse), this)); + m_prn_stepper = timer_alloc(*this, FUNC(pcw_state::pcw_stepper_callback)); + m_prn_pins = timer_alloc(*this, FUNC(pcw_state::pcw_pins_callback)); + m_pulse_timer = timer_alloc(*this, FUNC(pcw_state::pcw_timer_pulse)); } diff --git a/src/mame/drivers/pcxt.cpp b/src/mame/drivers/pcxt.cpp index 1a02af6f5d931..1c7a0aad41d9c 100644 --- a/src/mame/drivers/pcxt.cpp +++ b/src/mame/drivers/pcxt.cpp @@ -83,7 +83,7 @@ class pcxt_state : public driver_device protected: virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: int m_lastvalue; @@ -509,7 +509,7 @@ static INPUT_PORTS_START( tetriskr ) PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) INPUT_PORTS_END -void pcxt_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pcxt_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_cvsd->digit_w(BIT(m_samples->as_u8(m_vaddr), m_bit)); m_cvsd->clock_w(1); diff --git a/src/mame/drivers/pdp1.cpp b/src/mame/drivers/pdp1.cpp index 980c6740601fe..294dba29d82b6 100644 --- a/src/mame/drivers/pdp1.cpp +++ b/src/mame/drivers/pdp1.cpp @@ -599,7 +599,7 @@ void pdp1_state::machine_start() machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(&pdp1_state::pdp1_machine_stop,this)); - m_dpy_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pdp1_state::dpy_callback),this)); + m_dpy_timer = timer_alloc(*this, FUNC(pdp1_state::dpy_callback)); } @@ -625,7 +625,7 @@ void pdp1_readtape_image_device::device_resolve_objects() void pdp1_readtape_image_device::device_start() { - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pdp1_readtape_image_device::reader_callback),this)); + m_timer = timer_alloc(*this, FUNC(pdp1_readtape_image_device::reader_callback)); m_timer->adjust(attotime::zero, 0, attotime::from_hz(2500)); m_timer->enable(0); } @@ -649,7 +649,7 @@ void pdp1_punchtape_image_device::device_resolve_objects() void pdp1_punchtape_image_device::device_start() { - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pdp1_punchtape_image_device::puncher_callback),this)); + m_timer = timer_alloc(*this, FUNC(pdp1_punchtape_image_device::puncher_callback)); } @@ -675,7 +675,7 @@ void pdp1_typewriter_device::device_resolve_objects() void pdp1_typewriter_device::device_start() { - m_tyo_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pdp1_typewriter_device::tyo_callback),this)); + m_tyo_timer = timer_alloc(*this, FUNC(pdp1_typewriter_device::tyo_callback)); m_color = m_pos = m_case_shift = 0; } @@ -1317,7 +1317,7 @@ void pdp1_cylinder_image_device::parallel_drum_init(pdp1_state *state) m_rotation_timer = machine().scheduler().timer_alloc(); m_rotation_timer->adjust(PARALLEL_DRUM_ROTATION_TIME, 0, PARALLEL_DRUM_ROTATION_TIME); - m_il_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pdp1_cylinder_image_device::il_timer_callback),this)); + m_il_timer = timer_alloc(*this, FUNC(pdp1_cylinder_image_device::il_timer_callback)); set_il(0); } #endif diff --git a/src/mame/drivers/pentagon.cpp b/src/mame/drivers/pentagon.cpp index cef525a20eeb9..22ae46ac9c9cd 100644 --- a/src/mame/drivers/pentagon.cpp +++ b/src/mame/drivers/pentagon.cpp @@ -34,7 +34,7 @@ class pentagon_state : public spectrum_128_state protected: virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum @@ -130,7 +130,7 @@ void pentagon_state::pentagon_scr2_w(offs_t offset, uint8_t data) *((uint8_t*)m_bank4->base() + offset) = data; } -void pentagon_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pentagon_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/peplus.cpp b/src/mame/drivers/peplus.cpp index ee66998159bc7..1b21d7afbd1c7 100644 --- a/src/mame/drivers/peplus.cpp +++ b/src/mame/drivers/peplus.cpp @@ -1348,7 +1348,7 @@ void peplus_state::machine_start() m_bnkb.resolve(); m_bnkc.resolve(); - m_assert_lp_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(peplus_state::assert_lp), this)); + m_assert_lp_timer = timer_alloc(*this, FUNC(peplus_state::assert_lp)); save_item(NAME(m_last_cycles)); save_item(NAME(m_coin_state)); diff --git a/src/mame/drivers/pet.cpp b/src/mame/drivers/pet.cpp index f67490ba38a62..fe8803d4c232c 100644 --- a/src/mame/drivers/pet.cpp +++ b/src/mame/drivers/pet.cpp @@ -1536,7 +1536,7 @@ MACHINE_START_MEMBER( pet_state, pet ) } if (!m_sync_timer) - m_sync_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pet_state::sync_tick), this)); + m_sync_timer = timer_alloc(*this, FUNC(pet_state::sync_tick)); // state saving save_item(NAME(m_key)); diff --git a/src/mame/drivers/pipeline.cpp b/src/mame/drivers/pipeline.cpp index 861ac1fd89b07..b65cd7746854a 100644 --- a/src/mame/drivers/pipeline.cpp +++ b/src/mame/drivers/pipeline.cpp @@ -118,6 +118,7 @@ class pipeline_state : public driver_device u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(protection_deferred_w); + transient_timer_factory m_protection_deferred_w; void cpu0_mem(address_map &map); void cpu1_mem(address_map &map); @@ -143,6 +144,7 @@ class pipeline_state : public driver_device void pipeline_state::machine_start() { save_item(NAME(m_from_mcu)); + m_protection_deferred_w.init(*this, FUNC(pipeline_state::protection_deferred_w)); } TILE_GET_INFO_MEMBER(pipeline_state::get_tile_info) @@ -218,7 +220,7 @@ TIMER_CALLBACK_MEMBER(pipeline_state::protection_deferred_w) void pipeline_state::protection_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(pipeline_state::protection_deferred_w),this), data); + m_protection_deferred_w.synchronize(data); machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100)); } diff --git a/src/mame/drivers/pockstat.cpp b/src/mame/drivers/pockstat.cpp index 16e4d0833e1f0..c851fa23e4fa7 100644 --- a/src/mame/drivers/pockstat.cpp +++ b/src/mame/drivers/pockstat.cpp @@ -882,7 +882,7 @@ void pockstat_state::machine_start() { for (uint32_t index = 0; index < TIMER_COUNT; index++) { - m_timers[index].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pockstat_state::timer_tick), this)); + m_timers[index].timer = timer_alloc(*this, FUNC(pockstat_state::timer_tick)); m_timers[index].timer->adjust(attotime::never, index); m_timers[index].count = 0; } @@ -890,7 +890,7 @@ void pockstat_state::machine_start() m_rtc_regs.time = 0x01000000; m_rtc_regs.date = 0x19990101; - m_rtc_regs.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pockstat_state::rtc_tick),this)); + m_rtc_regs.timer = timer_alloc(*this, FUNC(pockstat_state::rtc_tick)); m_rtc_regs.timer->adjust(attotime::from_hz(1), TIMER_COUNT); std::string region_tag; diff --git a/src/mame/drivers/pokemini.cpp b/src/mame/drivers/pokemini.cpp index d99f74beb14d6..72cc58d930dd8 100644 --- a/src/mame/drivers/pokemini.cpp +++ b/src/mame/drivers/pokemini.cpp @@ -51,7 +51,7 @@ class pokemini_state : public driver_device TIMER_PRC }; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void video_start() override; virtual void machine_start() override; @@ -1696,7 +1696,7 @@ void pokemini_state::machine_start() } -void pokemini_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pokemini_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/poly.cpp b/src/mame/drivers/poly.cpp index 81b9107b93ca8..058506af8dc16 100644 --- a/src/mame/drivers/poly.cpp +++ b/src/mame/drivers/poly.cpp @@ -196,6 +196,7 @@ INPUT_PORTS_END void poly_state::machine_start() { m_dat_bank = 0; + m_set_protect.init(*this, FUNC(poly_state::set_protect)); } diff --git a/src/mame/drivers/popper.cpp b/src/mame/drivers/popper.cpp index 2df587d50d613..a18e4233566d9 100644 --- a/src/mame/drivers/popper.cpp +++ b/src/mame/drivers/popper.cpp @@ -76,7 +76,7 @@ class popper_state : public driver_device protected: virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_maincpu; @@ -291,7 +291,7 @@ void popper_state::popper_palette(palette_device &palette) const // VIDEO EMULATION //************************************************************************** -void popper_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void popper_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { int y = m_screen->vpos(); diff --git a/src/mame/drivers/pp.cpp b/src/mame/drivers/pp.cpp index 27b90deda5fe7..d3eb718a67b93 100644 --- a/src/mame/drivers/pp.cpp +++ b/src/mame/drivers/pp.cpp @@ -59,6 +59,7 @@ class pp_state : public driver_device template DECLARE_WRITE_LINE_MEMBER(int_w); TIMER_CALLBACK_MEMBER(int_update); + transient_timer_factory m_int_update; IRQ_CALLBACK_MEMBER(intak_cb); void kbd_scan_w(u8 data); @@ -110,6 +111,8 @@ void pp_state::machine_start() m_fdc->dden_w(0); + m_int_update.init(*this, FUNC(pp_state::int_update)); + // 64K of dynamic RAM (8x 4864) m_ram = make_unique_clear(0x10000); save_pointer(NAME(m_ram), 0x10000); @@ -143,7 +146,7 @@ WRITE_LINE_MEMBER(pp_state::int_w) else m_int_pending &= ~(1 << Line); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(pp_state::int_update), this)); + m_int_update.synchronize(); } TIMER_CALLBACK_MEMBER(pp_state::int_update) diff --git a/src/mame/drivers/prof80.cpp b/src/mame/drivers/prof80.cpp index cae32f503f5a8..8c720e593ff29 100644 --- a/src/mame/drivers/prof80.cpp +++ b/src/mame/drivers/prof80.cpp @@ -404,7 +404,7 @@ static void prof80_floppies(device_slot_interface &device) // device_timer - handler timer events //------------------------------------------------- -void prof80_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void prof80_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/ps2sony.cpp b/src/mame/drivers/ps2sony.cpp index 0d54917ae9eb3..5ab80a45b054b 100644 --- a/src/mame/drivers/ps2sony.cpp +++ b/src/mame/drivers/ps2sony.cpp @@ -537,7 +537,7 @@ void ps2sony_state::machine_start() save_item(NAME(m_ipu_out_fifo_index)); if (!m_vblank_timer) - m_vblank_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ps2sony_state::vblank), this)); + m_vblank_timer = timer_alloc(*this, FUNC(ps2sony_state::vblank)); } void ps2sony_state::machine_reset() diff --git a/src/mame/drivers/psion5.cpp b/src/mame/drivers/psion5.cpp index 60e4caab0634e..69a91686425e0 100644 --- a/src/mame/drivers/psion5.cpp +++ b/src/mame/drivers/psion5.cpp @@ -127,7 +127,7 @@ void psion5mx_state::check_interrupts() m_maincpu->set_input_line(ARM7_IRQ_LINE, m_pending_ints & m_int_mask & IRQ_IRQ_MASK ? ASSERT_LINE : CLEAR_LINE); } -void psion5mx_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void psion5mx_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/ptcsol.cpp b/src/mame/drivers/ptcsol.cpp index be55ca24bf951..5b1b5dfa0c422 100644 --- a/src/mame/drivers/ptcsol.cpp +++ b/src/mame/drivers/ptcsol.cpp @@ -195,7 +195,7 @@ class sol20_state : public driver_device void io_map(address_map &map); void mem_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_reset() override; virtual void machine_start() override; u8 m_sol20_fa; @@ -240,7 +240,7 @@ cassette_image_device *sol20_state::cassette_device_image() } -void sol20_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sol20_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/pv1000.cpp b/src/mame/drivers/pv1000.cpp index 63b19c1697560..2a5d3d2a29be3 100644 --- a/src/mame/drivers/pv1000.cpp +++ b/src/mame/drivers/pv1000.cpp @@ -386,8 +386,8 @@ void pv1000_state::pv1000_postload() void pv1000_state::machine_start() { - m_irq_on_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pv1000_state::d65010_irq_on_cb),this)); - m_irq_off_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pv1000_state::d65010_irq_off_cb),this)); + m_irq_on_timer = timer_alloc(*this, FUNC(pv1000_state::d65010_irq_on_cb)); + m_irq_off_timer = timer_alloc(*this, FUNC(pv1000_state::d65010_irq_off_cb)); m_gfxram = memregion("gfxram")->base(); save_pointer(NAME(m_gfxram), 0x400); diff --git a/src/mame/drivers/pwrview.cpp b/src/mame/drivers/pwrview.cpp index 951e20d11f9ac..8088b02c4e752 100644 --- a/src/mame/drivers/pwrview.cpp +++ b/src/mame/drivers/pwrview.cpp @@ -66,7 +66,7 @@ class pwrview_state : public driver_device virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; required_device m_maincpu; required_device m_pit; @@ -105,7 +105,7 @@ void pwrview_state::device_reset() m_biosbank->set_bank(0); } -void pwrview_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pwrview_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/drivers/qdrmfgp.cpp b/src/mame/drivers/qdrmfgp.cpp index 72c2b47804fb3..0f524ff11a3b2 100644 --- a/src/mame/drivers/qdrmfgp.cpp +++ b/src/mame/drivers/qdrmfgp.cpp @@ -504,7 +504,7 @@ MACHINE_START_MEMBER(qdrmfgp_state,qdrmfgp) MACHINE_START_MEMBER(qdrmfgp_state,qdrmfgp2) { /* sound irq (CCU? 240Hz) */ - m_gp2_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(qdrmfgp_state::gp2_timer_callback), this)); + m_gp2_timer = timer_alloc(*this, FUNC(qdrmfgp_state::gp2_timer_callback)); m_gp2_timer->adjust(attotime::from_hz(XTAL(18'432'000)/76800), 0, attotime::from_hz(XTAL(18'432'000)/76800)); MACHINE_START_CALL_MEMBER( qdrmfgp ); diff --git a/src/mame/drivers/rabbit.cpp b/src/mame/drivers/rabbit.cpp index 6a9f3c76298a9..92468b3377e7b 100644 --- a/src/mame/drivers/rabbit.cpp +++ b/src/mame/drivers/rabbit.cpp @@ -135,7 +135,7 @@ class rabbit_state : public driver_device void rabbit_map(address_map &map); virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; required_device m_maincpu; required_device m_eeprom; @@ -570,7 +570,7 @@ void rabbit_state::rombank_w(uint32_t data) #define BLITCMDLOG 0 #define BLITLOG 0 -void rabbit_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void rabbit_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/rainbow.cpp b/src/mame/drivers/rainbow.cpp index 42b240fd45aff..060e55f46aa42 100644 --- a/src/mame/drivers/rainbow.cpp +++ b/src/mame/drivers/rainbow.cpp @@ -508,7 +508,7 @@ class rainbow_base_state : public driver_device protected: virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void rainbow8088_base_map(address_map &map); void rainbow8088_base_io(address_map &map); @@ -1280,7 +1280,7 @@ void rainbow_modelb_state::machine_reset() } // Simulate AC_OK signal (power good) and RESET after ~ 108 ms. -void rainbow_base_state::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void rainbow_base_state::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { switch (tid) { diff --git a/src/mame/drivers/rastersp.cpp b/src/mame/drivers/rastersp.cpp index 80d47a9a0cb1e..a515c9a711fe1 100644 --- a/src/mame/drivers/rastersp.cpp +++ b/src/mame/drivers/rastersp.cpp @@ -179,10 +179,10 @@ void rastersp_state::machine_start() membank("bank3")->set_base(&m_dram[0x300000/4]); if (!m_tms_timer1) - m_tms_timer1 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(rastersp_state::tms_timer1), this)); + m_tms_timer1 = timer_alloc(*this, FUNC(rastersp_state::tms_timer1)); if (!m_tms_tx_timer) - m_tms_tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(rastersp_state::tms_tx_timer), this)); + m_tms_tx_timer = timer_alloc(*this, FUNC(rastersp_state::tms_tx_timer)); #if USE_SPEEDUP_HACK m_dsp->space(AS_PROGRAM).install_read_handler(0x809923, 0x809923, read32smo_delegate(*this, FUNC(rastersp_state::dsp_speedup_r))); diff --git a/src/mame/drivers/rltennis.cpp b/src/mame/drivers/rltennis.cpp index f082dc18b26bc..9845f0b2d6c5a 100644 --- a/src/mame/drivers/rltennis.cpp +++ b/src/mame/drivers/rltennis.cpp @@ -160,7 +160,7 @@ INTERRUPT_GEN_MEMBER(rltennis_state::interrupt) void rltennis_state::machine_start() { - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(rltennis_state::sample_player),this)); + m_timer = timer_alloc(*this, FUNC(rltennis_state::sample_player)); save_item(NAME(m_data760000)); save_item(NAME(m_data740000)); diff --git a/src/mame/drivers/rollerg.cpp b/src/mame/drivers/rollerg.cpp index fac7639efccae..26aa5cd46ecb8 100644 --- a/src/mame/drivers/rollerg.cpp +++ b/src/mame/drivers/rollerg.cpp @@ -54,7 +54,7 @@ void rollerg_state::soundirq_w(uint8_t data) m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); // Z80 } -void rollerg_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void rollerg_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/rtpc.cpp b/src/mame/drivers/rtpc.cpp index 62141eb4e289f..577e0c2f86014 100644 --- a/src/mame/drivers/rtpc.cpp +++ b/src/mame/drivers/rtpc.cpp @@ -161,7 +161,7 @@ class rtpc_state : public driver_device void crrb_w(u8 data); void dia_w(u8 data); - void mcu_timer(timer_device &timer, void *ptr, s32 param) + void mcu_timer(void *ptr, s32 param) { m_mcu_p3 ^= 0x10; m_mcu->set_input_line(MCS51_T0_LINE, BIT(m_mcu_p3, 4)); diff --git a/src/mame/drivers/runaway.cpp b/src/mame/drivers/runaway.cpp index 4dbedd6cfa608..d084505504d38 100644 --- a/src/mame/drivers/runaway.cpp +++ b/src/mame/drivers/runaway.cpp @@ -122,7 +122,7 @@ TIMER_CALLBACK_MEMBER(qwak_state::interrupt_callback) void qwak_state::machine_start() { - m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(runaway_state::interrupt_callback),this)); + m_interrupt_timer = timer_alloc(*this, FUNC(runaway_state::interrupt_callback)); m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(qwak_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 30); } diff --git a/src/mame/drivers/s11.cpp b/src/mame/drivers/s11.cpp index 14c61f5c2b803..5e424d364c032 100644 --- a/src/mame/drivers/s11.cpp +++ b/src/mame/drivers/s11.cpp @@ -155,7 +155,7 @@ static INPUT_PORTS_START( s11 ) PORT_CONFSETTING( 0x10, "English" ) INPUT_PORTS_END -void s11_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void s11_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/drivers/s6.cpp b/src/mame/drivers/s6.cpp index dfac8da01b3cc..f127604d8eb5c 100644 --- a/src/mame/drivers/s6.cpp +++ b/src/mame/drivers/s6.cpp @@ -112,7 +112,7 @@ class s6_state : public genpin_class uint8_t m_switch_col; bool m_data_ok; emu_timer* m_irq_timer; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; static const device_timer_id TIMER_IRQ = 0; virtual void machine_start() override { m_digits.resolve(); } required_device m_maincpu; @@ -381,7 +381,7 @@ WRITE_LINE_MEMBER( s6_state::pia_irq ) } } -void s6_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void s6_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/drivers/s6a.cpp b/src/mame/drivers/s6a.cpp index 74dc6c70d2982..b719720876c67 100644 --- a/src/mame/drivers/s6a.cpp +++ b/src/mame/drivers/s6a.cpp @@ -79,7 +79,7 @@ class s6a_state : public genpin_class protected: virtual void machine_start() override { m_digits.resolve(); } - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint8_t sound_r(); @@ -367,7 +367,7 @@ WRITE_LINE_MEMBER( s6a_state::pia_irq ) } } -void s6a_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void s6a_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/drivers/s7.cpp b/src/mame/drivers/s7.cpp index 2a3fc8fa340cb..10ec04313fb37 100644 --- a/src/mame/drivers/s7.cpp +++ b/src/mame/drivers/s7.cpp @@ -97,7 +97,7 @@ class s7_state : public genpin_class protected: virtual void machine_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint8_t sound_r(); @@ -401,7 +401,7 @@ WRITE_LINE_MEMBER( s7_state::pia_irq ) } } -void s7_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void s7_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/drivers/s8.cpp b/src/mame/drivers/s8.cpp index efbd1cd0fa2ac..ce9338536faa7 100644 --- a/src/mame/drivers/s8.cpp +++ b/src/mame/drivers/s8.cpp @@ -82,7 +82,7 @@ class s8_state : public genpin_class protected: virtual void machine_start() override { m_digits.resolve(); } - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint8_t sound_r(); @@ -293,7 +293,7 @@ WRITE_LINE_MEMBER( s8_state::pia_irq ) } } -void s8_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void s8_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/drivers/s8a.cpp b/src/mame/drivers/s8a.cpp index d34aa1e0f8fdc..bbad88008751f 100644 --- a/src/mame/drivers/s8a.cpp +++ b/src/mame/drivers/s8a.cpp @@ -58,7 +58,7 @@ class s8a_state : public genpin_class protected: virtual void machine_start() override { m_digits.resolve(); } - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint8_t sound_r(); @@ -265,7 +265,7 @@ WRITE_LINE_MEMBER( s8a_state::pia_irq ) } } -void s8a_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void s8a_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/drivers/s9.cpp b/src/mame/drivers/s9.cpp index 1b0d8644b8a63..17431955abd7a 100644 --- a/src/mame/drivers/s9.cpp +++ b/src/mame/drivers/s9.cpp @@ -69,7 +69,7 @@ class s9_state : public genpin_class protected: virtual void machine_start() override { m_digits.resolve(); } - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint8_t sound_r(); @@ -299,7 +299,7 @@ WRITE_LINE_MEMBER( s9_state::pia_irq ) } } -void s9_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void s9_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/drivers/saitek_mark5.cpp b/src/mame/drivers/saitek_mark5.cpp index 83a92784c4fb4..47d7725e916a5 100644 --- a/src/mame/drivers/saitek_mark5.cpp +++ b/src/mame/drivers/saitek_mark5.cpp @@ -134,7 +134,7 @@ class mark5_state : public driver_device void mark5_state::machine_start() { m_out_x.resolve(); - m_irqtimer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mark5_state::interrupt),this)); + m_irqtimer = timer_alloc(*this, FUNC(mark5_state::interrupt)); // register for savestates save_item(NAME(m_dac_data)); diff --git a/src/mame/drivers/samcoupe.cpp b/src/mame/drivers/samcoupe.cpp index d6d86d434b2ee..4732c46a07325 100644 --- a/src/mame/drivers/samcoupe.cpp +++ b/src/mame/drivers/samcoupe.cpp @@ -88,7 +88,7 @@ class samcoupe_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_maincpu; @@ -510,7 +510,7 @@ TIMER_CALLBACK_MEMBER(samcoupe_state::sam_video_update_callback) // MACHINE EMULATION //************************************************************************** -void samcoupe_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void samcoupe_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/sbrkout.cpp b/src/mame/drivers/sbrkout.cpp index 466b0cf2e17ef..7ffd022013f5a 100644 --- a/src/mame/drivers/sbrkout.cpp +++ b/src/mame/drivers/sbrkout.cpp @@ -134,8 +134,8 @@ static constexpr XTAL MAIN_CLOCK = 12.096_MHz_XTAL; void sbrkout_state::machine_start() { membank("bank1")->set_base(&m_videoram[0x380]); - m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sbrkout_state::scanline_callback),this)); - m_pot_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sbrkout_state::pot_trigger_callback),this)); + m_scanline_timer = timer_alloc(*this, FUNC(sbrkout_state::scanline_callback)); + m_pot_timer = timer_alloc(*this, FUNC(sbrkout_state::pot_trigger_callback)); save_item(NAME(m_sync2_value)); save_item(NAME(m_pot_mask)); diff --git a/src/mame/drivers/scv.cpp b/src/mame/drivers/scv.cpp index e9079dd40d706..7d039aa45418e 100644 --- a/src/mame/drivers/scv.cpp +++ b/src/mame/drivers/scv.cpp @@ -38,7 +38,7 @@ class scv_state : public driver_device protected: virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void porta_w(uint8_t data); @@ -265,7 +265,7 @@ void scv_state::scv_palette(palette_device &palette) const } -void scv_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void scv_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/sega_sawatte.cpp b/src/mame/drivers/sega_sawatte.cpp index 8e96f53a8117f..6887278365adf 100644 --- a/src/mame/drivers/sega_sawatte.cpp +++ b/src/mame/drivers/sega_sawatte.cpp @@ -85,8 +85,8 @@ class sawatte_state : public driver_device void sawatte_state::machine_start() { - m_irq3_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sawatte_state::irq3_timer), this)); - m_irq4_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sawatte_state::irq4_timer), this)); + m_irq3_timer = timer_alloc(*this, FUNC(sawatte_state::irq3_timer)); + m_irq4_timer = timer_alloc(*this, FUNC(sawatte_state::irq4_timer)); save_item(NAME(m_data_bank)); save_item(NAME(m_prog_bank)); diff --git a/src/mame/drivers/segahang.cpp b/src/mame/drivers/segahang.cpp index d3cbc2ea8c340..2a023e4c11e30 100644 --- a/src/mame/drivers/segahang.cpp +++ b/src/mame/drivers/segahang.cpp @@ -284,7 +284,7 @@ void segahang_state::machine_reset() // device_timer - handle device timers //------------------------------------------------- -void segahang_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void segahang_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/segaorun.cpp b/src/mame/drivers/segaorun.cpp index 44790c6739d4a..217c5eadc8c40 100644 --- a/src/mame/drivers/segaorun.cpp +++ b/src/mame/drivers/segaorun.cpp @@ -553,7 +553,7 @@ void segaorun_state::machine_reset() // device_timer - handle device timers //------------------------------------------------- -void segaorun_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void segaorun_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -609,7 +609,7 @@ void segaorun_state::device_timer(emu_timer &timer, device_timer_id id, int para update_main_irqs(); // come back at the next targeted scanline - timer.adjust(m_screen->time_until_pos(next_scanline), next_scanline); + m_scanline_timer->adjust(m_screen->time_until_pos(next_scanline), next_scanline); break; } diff --git a/src/mame/drivers/segas16a.cpp b/src/mame/drivers/segas16a.cpp index 7e09909d5498f..953d18044dbfa 100644 --- a/src/mame/drivers/segas16a.cpp +++ b/src/mame/drivers/segas16a.cpp @@ -626,7 +626,7 @@ void segas16a_state::machine_reset() // device_timer - handle device timers //------------------------------------------------- -void segas16a_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void segas16a_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/segas16b.cpp b/src/mame/drivers/segas16b.cpp index 283d20577a349..2937c54914805 100644 --- a/src/mame/drivers/segas16b.cpp +++ b/src/mame/drivers/segas16b.cpp @@ -1302,7 +1302,7 @@ void segas16b_state::machine_reset() // device_timer - handle device timers //------------------------------------------------- -void segas16b_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void segas16b_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/segas18.cpp b/src/mame/drivers/segas18.cpp index 3a39b5a3fc6c3..69015597741e5 100644 --- a/src/mame/drivers/segas18.cpp +++ b/src/mame/drivers/segas18.cpp @@ -153,7 +153,7 @@ void segas18_state::init_generic(segas18_rom_board rom_board) * *************************************/ -void segas18_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void segas18_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/segas24.cpp b/src/mame/drivers/segas24.cpp index 750e8074bacac..cb0675e18da5e 100644 --- a/src/mame/drivers/segas24.cpp +++ b/src/mame/drivers/segas24.cpp @@ -2532,7 +2532,7 @@ void segas24_state::init_gground() m_mlatch_table = nullptr; m_track_size = 0x2d00; - m_gground_hack_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(segas24_state::gground_hack_timer_callback), this)); + m_gground_hack_timer = timer_alloc(*this, FUNC(segas24_state::gground_hack_timer_callback)); } void segas24_state::init_crkdown() diff --git a/src/mame/drivers/segaxbd.cpp b/src/mame/drivers/segaxbd.cpp index eb0f2c48b9a15..2e29045a25314 100644 --- a/src/mame/drivers/segaxbd.cpp +++ b/src/mame/drivers/segaxbd.cpp @@ -597,7 +597,7 @@ void segaxbd_state::smgp_excs_w(offs_t offset, uint16_t data, uint16_t mem_mask) // device_timer - handle device timers //------------------------------------------------- -void segaxbd_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void segaxbd_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/segaybd.cpp b/src/mame/drivers/segaybd.cpp index 06d9a48e61b1a..1fbc0c806858f 100644 --- a/src/mame/drivers/segaybd.cpp +++ b/src/mame/drivers/segaybd.cpp @@ -171,7 +171,7 @@ void segaybd_state::machine_reset() // device_timer - handle device timers //------------------------------------------------- -void segaybd_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void segaybd_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/seta.cpp b/src/mame/drivers/seta.cpp index f7a8edc0857d1..d6d0b6ddf3c46 100644 --- a/src/mame/drivers/seta.cpp +++ b/src/mame/drivers/seta.cpp @@ -1490,7 +1490,7 @@ void seta_state::uPD71054_timer_init() uPD71054->max[no] = 0xffff; for (int no = 0; no < USED_TIMER_NUM; no++) - uPD71054->timer[no] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(seta_state::uPD71054_timer_callback),this)); + uPD71054->timer[no] = timer_alloc(*this, FUNC(seta_state::uPD71054_timer_callback)); } @@ -2257,7 +2257,7 @@ void seta_state::keroppi_map(address_map &map) MACHINE_START_MEMBER(seta_state,keroppi) { - m_keroppi_prize_hop_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(seta_state::keroppi_prize_hop_callback), this)); + m_keroppi_prize_hop_timer = timer_alloc(*this, FUNC(seta_state::keroppi_prize_hop_callback)); m_keroppi_prize_hop = 0; m_keroppi_protection_count = 0; diff --git a/src/mame/drivers/seta2.cpp b/src/mame/drivers/seta2.cpp index de470e9425ebb..1a5b2a3d822a9 100644 --- a/src/mame/drivers/seta2.cpp +++ b/src/mame/drivers/seta2.cpp @@ -690,7 +690,7 @@ class funcube_touchscreen_device : public device_t, protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void tra_complete() override; virtual void tra_callback() override; @@ -755,7 +755,7 @@ void funcube_touchscreen_device::device_reset() m_tx_cb(1); } -void funcube_touchscreen_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void funcube_touchscreen_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if(!id) { uint8_t button_state = m_btn->read(); diff --git a/src/mame/drivers/simpsons.cpp b/src/mame/drivers/simpsons.cpp index c0f7e7aadb30e..5cc97de60357c 100644 --- a/src/mame/drivers/simpsons.cpp +++ b/src/mame/drivers/simpsons.cpp @@ -149,7 +149,7 @@ void simpsons_state::z80_bankswitch_w(uint8_t data) } -void simpsons_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void simpsons_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/sitcom.cpp b/src/mame/drivers/sitcom.cpp index be152e874901c..e4ed2ae5a4a04 100644 --- a/src/mame/drivers/sitcom.cpp +++ b/src/mame/drivers/sitcom.cpp @@ -126,7 +126,7 @@ class sitcom_timer_state : public sitcom_state virtual void update_ppi_pa(uint8_t data) override; virtual void update_ppi_pb(uint8_t data) override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void machine_reset() override; @@ -302,7 +302,7 @@ INPUT_CHANGED_MEMBER( sitcom_timer_state::update_speed ) } } -void sitcom_timer_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sitcom_timer_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/skullxbo.cpp b/src/mame/drivers/skullxbo.cpp index c7334cff9c9a2..dc3a4a86dacf1 100644 --- a/src/mame/drivers/skullxbo.cpp +++ b/src/mame/drivers/skullxbo.cpp @@ -82,7 +82,7 @@ void skullxbo_state::machine_start() { atarigen_state::machine_start(); - m_scanline_int_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(skullxbo_state::scanline_interrupt), this)); + m_scanline_int_timer = timer_alloc(*this, FUNC(skullxbo_state::scanline_interrupt)); save_item(NAME(m_scanline_int_state)); } diff --git a/src/mame/drivers/slapshot.cpp b/src/mame/drivers/slapshot.cpp index 6bd98ed409aea..acbf286148c2b 100644 --- a/src/mame/drivers/slapshot.cpp +++ b/src/mame/drivers/slapshot.cpp @@ -147,7 +147,7 @@ Region byte at offset 0x031: INTERRUPTS ***********************************************************/ -void slapshot_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void slapshot_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/snk.cpp b/src/mame/drivers/snk.cpp index 8dbc37cf45e27..64a213e6e7786 100644 --- a/src/mame/drivers/snk.cpp +++ b/src/mame/drivers/snk.cpp @@ -585,6 +585,9 @@ Driver notes: void snk_state::machine_start() { m_countryc_trackball = 0; + + m_sgladiat_sndirq_update_callback.init(*this, FUNC(snk_state::sgladiat_sndirq_update_callback)); + m_sndirq_update_callback.init(*this, FUNC(snk_state::sndirq_update_callback)); } /*********************************************************************/ @@ -665,18 +668,18 @@ TIMER_CALLBACK_MEMBER(snk_state::sgladiat_sndirq_update_callback) void snk_state::sgladiat_soundlatch_w(uint8_t data) { m_soundlatch->write(data); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sgladiat_sndirq_update_callback),this), CMDIRQ_BUSY_ASSERT); + m_sgladiat_sndirq_update_callback.synchronize(CMDIRQ_BUSY_ASSERT); } uint8_t snk_state::sgladiat_soundlatch_r() { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sgladiat_sndirq_update_callback),this), BUSY_CLEAR); + m_sgladiat_sndirq_update_callback.synchronize(BUSY_CLEAR); return m_soundlatch->read(); } uint8_t snk_state::sgladiat_sound_nmi_ack_r() { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sgladiat_sndirq_update_callback),this), CMDIRQ_CLEAR); + m_sgladiat_sndirq_update_callback.synchronize(CMDIRQ_CLEAR); return 0xff; } @@ -750,20 +753,20 @@ TIMER_CALLBACK_MEMBER(snk_state::sndirq_update_callback) WRITE_LINE_MEMBER(snk_state::ymirq_callback_1 ) { if (state) - machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sndirq_update_callback),this), YM1IRQ_ASSERT); + m_sndirq_update_callback.synchronize(YM1IRQ_ASSERT); } WRITE_LINE_MEMBER(snk_state::ymirq_callback_2) { if (state) - machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sndirq_update_callback),this), YM2IRQ_ASSERT); + m_sndirq_update_callback.synchronize(YM2IRQ_ASSERT); } void snk_state::snk_soundlatch_w(uint8_t data) { m_soundlatch->write(data); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sndirq_update_callback),this), CMDIRQ_BUSY_ASSERT); + m_sndirq_update_callback.synchronize(CMDIRQ_BUSY_ASSERT); } READ_LINE_MEMBER(snk_state::sound_busy_r) @@ -780,28 +783,28 @@ uint8_t snk_state::snk_sound_status_r() void snk_state::snk_sound_status_w(uint8_t data) { if (~data & 0x10) // ack YM1 irq - machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sndirq_update_callback),this), YM1IRQ_CLEAR); + m_sndirq_update_callback.synchronize(YM1IRQ_CLEAR); if (~data & 0x20) // ack YM2 irq - machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sndirq_update_callback),this), YM2IRQ_CLEAR); + m_sndirq_update_callback.synchronize(YM2IRQ_CLEAR); if (~data & 0x40) // clear busy flag - machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sndirq_update_callback),this), BUSY_CLEAR); + m_sndirq_update_callback.synchronize(BUSY_CLEAR); if (~data & 0x80) // ack command from main cpu - machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sndirq_update_callback),this), CMDIRQ_CLEAR); + m_sndirq_update_callback.synchronize(CMDIRQ_CLEAR); } uint8_t snk_state::tnk3_cmdirq_ack_r() { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sndirq_update_callback),this), CMDIRQ_CLEAR); + m_sndirq_update_callback.synchronize(CMDIRQ_CLEAR); return 0xff; } uint8_t snk_state::tnk3_ymirq_ack_r() { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sndirq_update_callback),this), YM1IRQ_CLEAR); + m_sndirq_update_callback.synchronize(YM1IRQ_CLEAR); return 0xff; } @@ -809,7 +812,7 @@ uint8_t snk_state::tnk3_busy_clear_r() { // it's uncertain whether the latch should be cleared here or when it's read m_soundlatch->clear_w(); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(snk_state::sndirq_update_callback),this), BUSY_CLEAR); + m_sndirq_update_callback.synchronize(BUSY_CLEAR); return 0xff; } diff --git a/src/mame/drivers/socrates.cpp b/src/mame/drivers/socrates.cpp index 98af1ac96475f..d0f2ee8847748 100644 --- a/src/mame/drivers/socrates.cpp +++ b/src/mame/drivers/socrates.cpp @@ -214,7 +214,7 @@ class socrates_state : public driver_device void socrates_io(address_map &map); void socrates_mem(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; @@ -386,7 +386,7 @@ void socrates_state::machine_reset() m_speech_load_settings_count = 0; } -void socrates_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void socrates_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/spacefb.cpp b/src/mame/drivers/spacefb.cpp index 073a26ca9fa06..3835e0fefd99e 100644 --- a/src/mame/drivers/spacefb.cpp +++ b/src/mame/drivers/spacefb.cpp @@ -128,7 +128,7 @@ *************************************/ -void spacefb_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void spacefb_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/drivers/spc1000.cpp b/src/mame/drivers/spc1000.cpp index fb1df6a2d27f0..41408d01939e8 100644 --- a/src/mame/drivers/spc1000.cpp +++ b/src/mame/drivers/spc1000.cpp @@ -221,7 +221,7 @@ uint8_t spc1000_state::iplk_r() void spc1000_state::cass_w(uint8_t data) { - attotime time = machine().scheduler().time(); + attotime time = machine().time(); m_cass->output(BIT(data, 0) ? -1.0 : 1.0); if (BIT(data, 1) || (((time - m_time).as_attoseconds()/ATTOSECONDS_PER_MILLISECOND) < 1000)) { @@ -408,7 +408,7 @@ void spc1000_state::machine_start() membank("bank2")->set_base(ram); membank("bank4")->set_base(ram + 0x8000); - m_time = machine().scheduler().time(); + m_time = machine().time(); save_item(NAME(m_IPLK)); save_item(NAME(m_GMODE)); diff --git a/src/mame/drivers/spc1500.cpp b/src/mame/drivers/spc1500.cpp index 85b25f919939d..b491f809346c1 100644 --- a/src/mame/drivers/spc1500.cpp +++ b/src/mame/drivers/spc1500.cpp @@ -836,7 +836,7 @@ void spc1500_state::machine_start() void spc1500_state::machine_reset() { m_motor = false; - m_time = machine().scheduler().time(); + m_time = machine().time(); m_double_mode = false; memset(&m_paltbl[0], 1, 8); m_char_count = 0; diff --git a/src/mame/drivers/special_gambl.cpp b/src/mame/drivers/special_gambl.cpp index f81628ffdd15d..e3cafd13d3e46 100644 --- a/src/mame/drivers/special_gambl.cpp +++ b/src/mame/drivers/special_gambl.cpp @@ -66,7 +66,7 @@ class dinaris_state : public driver_device }; void machine_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void dice_palette(palette_device &palette) const; u32 screen_update_dice(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -122,7 +122,7 @@ static INPUT_PORTS_START(dice) PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_SERVICE3) PORT_NAME("RAM Test") PORT_CHANGED_MEMBER(DEVICE_SELF, dinaris_state, ram_test, 0) INPUT_PORTS_END -void dinaris_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void dinaris_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/spectrum.cpp b/src/mame/drivers/spectrum.cpp index abe3781f18254..53da43fbc15da 100644 --- a/src/mame/drivers/spectrum.cpp +++ b/src/mame/drivers/spectrum.cpp @@ -745,7 +745,7 @@ static GFXDECODE_START( gfx_spectrum ) GFXDECODE_ENTRY( "maincpu", 0x3d00, spectrum_charlayout, 0, 8 ) GFXDECODE_END -void spectrum_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void spectrum_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/spg2xx_vii.cpp b/src/mame/drivers/spg2xx_vii.cpp index ab86e434895d1..5b98c83140801 100644 --- a/src/mame/drivers/spg2xx_vii.cpp +++ b/src/mame/drivers/spg2xx_vii.cpp @@ -28,7 +28,7 @@ class vii_state : public spg2xx_game_state virtual void machine_reset() override; static const device_timer_id TIMER_CTRL_POLL = 0; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void vii_portb_w(uint16_t data); @@ -47,7 +47,7 @@ class vii_state : public spg2xx_game_state }; -void vii_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void vii_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/spg2xx_wiwi.cpp b/src/mame/drivers/spg2xx_wiwi.cpp index 0940fc0190c6d..6e3a4b8e55e9a 100644 --- a/src/mame/drivers/spg2xx_wiwi.cpp +++ b/src/mame/drivers/spg2xx_wiwi.cpp @@ -48,7 +48,7 @@ class spg2xx_game_marc101_state : public spg2xx_game_state void machine_start() override; void machine_reset() override; - virtual void device_timer(emu_timer& timer, device_timer_id id, int param, void* ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void* ptr) override; virtual uint16_t porta_r(); virtual void porta_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override; @@ -110,7 +110,7 @@ class spg2xx_game_marc250_state : public spg2xx_game_marc101_state void machine_start() override; void machine_reset() override; - virtual void device_timer(emu_timer& timer, device_timer_id id, int param, void* ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void* ptr) override; virtual uint16_t porta_r() override; virtual void porta_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override; @@ -121,7 +121,7 @@ class spg2xx_game_marc250_state : public spg2xx_game_marc101_state emu_timer *m_pulse_timer2; }; -void spg2xx_game_marc101_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void spg2xx_game_marc101_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -132,7 +132,7 @@ void spg2xx_game_marc101_state::device_timer(emu_timer &timer, device_timer_id i } } -void spg2xx_game_marc250_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void spg2xx_game_marc250_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/sprint4.cpp b/src/mame/drivers/sprint4.cpp index 2ac5045556305..5d295d159a929 100644 --- a/src/mame/drivers/sprint4.cpp +++ b/src/mame/drivers/sprint4.cpp @@ -43,7 +43,7 @@ READ_LINE_MEMBER(sprint4_state::collision_flipflop_r) } -void sprint4_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sprint4_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/ssfindo.cpp b/src/mame/drivers/ssfindo.cpp index 30c5583120255..6f9b0a0dc2a63 100644 --- a/src/mame/drivers/ssfindo.cpp +++ b/src/mame/drivers/ssfindo.cpp @@ -708,8 +708,8 @@ ROM_END void ssfindo_state::init_common() { m_speedup = nullptr; - //m_PS7500timer0 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ssfindo_state::PS7500_Timer0_callback),this)); - //m_PS7500timer1 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ssfindo_state::PS7500_Timer1_callback),this)); + //m_PS7500timer0 = timer_alloc(*this, FUNC(ssfindo_state::PS7500_Timer0_callback)); + //m_PS7500timer1 = timer_alloc(*this, FUNC(ssfindo_state::PS7500_Timer1_callback)); //save_item(NAME(m_PS7500_IO)); //save_item(NAME(m_PS7500_FIFO)); diff --git a/src/mame/drivers/sslam.cpp b/src/mame/drivers/sslam.cpp index e984cd3c3634d..13ddeb61638f1 100644 --- a/src/mame/drivers/sslam.cpp +++ b/src/mame/drivers/sslam.cpp @@ -704,7 +704,7 @@ void sslam_state::machine_start() save_item(NAME(m_snd_bank)); save_item(NAME(m_unk_458)); - m_music_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sslam_state::music_playback),this)); + m_music_timer = timer_alloc(*this, FUNC(sslam_state::music_playback)); } void powerbls_state::machine_start() diff --git a/src/mame/drivers/starfire.cpp b/src/mame/drivers/starfire.cpp index 7b03b2d79c6a0..95547653ba7da 100644 --- a/src/mame/drivers/starfire.cpp +++ b/src/mame/drivers/starfire.cpp @@ -111,7 +111,7 @@ void starfire_state::sound_w(offs_t offset, uint8_t data) m_sound_lock->write(BIT(data, 5)); m_sound_scanner->write(BIT(data, 6)); m_sound_overheat->write(BIT(data, 7)); - synchronize(); + scheduler().synchronize(); } void fireone_state::sound_w(offs_t offset, uint8_t data) diff --git a/src/mame/drivers/subhuntr.cpp b/src/mame/drivers/subhuntr.cpp index 991b07684c0d4..c239479e2306b 100644 --- a/src/mame/drivers/subhuntr.cpp +++ b/src/mame/drivers/subhuntr.cpp @@ -60,7 +60,7 @@ class subhuntr_state : public driver_device protected: enum { TIMER_VIDEO }; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void machine_reset() override; @@ -107,7 +107,7 @@ class subhuntr_state : public driver_device ***************************************************************************/ -void subhuntr_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void subhuntr_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/sun4.cpp b/src/mame/drivers/sun4.cpp index aac17879b6c3e..9ac17ab776118 100644 --- a/src/mame/drivers/sun4.cpp +++ b/src/mame/drivers/sun4.cpp @@ -545,7 +545,7 @@ class sun4_base_state : public driver_device protected: virtual void machine_reset() override; virtual void machine_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; static const device_timer_id TIMER_0 = 0; static const device_timer_id TIMER_1 = 1; @@ -1020,7 +1020,7 @@ WRITE_LINE_MEMBER( sun4_base_state::scc2_int ) m_maincpu->set_input_line(SPARC_IRQ12, ((m_scc1_int || m_scc2_int) && (m_irq_reg & 0x01)) ? ASSERT_LINE : CLEAR_LINE); } -void sun4_base_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sun4_base_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/superqix.cpp b/src/mame/drivers/superqix.cpp index ccf039b7010da..b46eaa4e175a2 100644 --- a/src/mame/drivers/superqix.cpp +++ b/src/mame/drivers/superqix.cpp @@ -301,7 +301,7 @@ TIMER_CALLBACK_MEMBER(superqix_state::z80_ay2_iob_w_cb) void superqix_state::z80_ay1_sync_address_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(superqix_state::z80_ay1_sync_address_w_cb), this), data); + m_z80_ay1_sync_address_w_cb.synchronize(data); } uint8_t superqix_state::z80_ay2_iob_r() @@ -314,19 +314,19 @@ uint8_t superqix_state::z80_semaphore_assert_r() { if(!machine().side_effects_disabled()) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(superqix_state::z80_semaphore_assert_cb), this)); + m_z80_semaphore_assert_cb.synchronize(); } return 0; } void superqix_state::z80_ay2_iob_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(superqix_state::z80_ay2_iob_w_cb), this), data); + m_z80_ay2_iob_w_cb.synchronize(data); } void superqix_state::mcu_port3_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(superqix_state::mcu_port3_w_cb), this), data); + m_mcu_port3_w_cb.synchronize(data); } TIMER_CALLBACK_MEMBER(superqix_state::bootleg_mcu_port1_w_cb) @@ -360,7 +360,7 @@ TIMER_CALLBACK_MEMBER(superqix_state::bootleg_mcu_port1_w_cb) void superqix_state::bootleg_mcu_port1_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(superqix_state::bootleg_mcu_port1_w_cb), this), data); + m_bootleg_mcu_port1_w_cb.synchronize(data); } uint8_t superqix_state::bootleg_mcu_port3_r() @@ -397,7 +397,7 @@ void superqix_state::bootleg_mcu_port3_w(uint8_t data) void superqix_state::mcu_port2_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(superqix_state::mcu_port2_w_cb), this), data); + m_mcu_port2_w_cb.synchronize(data); } uint8_t superqix_state::mcu_port3_r() @@ -929,6 +929,13 @@ void superqix_state::machine_init_common() { superqix_state_base::machine_init_common(); + m_z80_semaphore_assert_cb.init(*this, FUNC(superqix_state::z80_semaphore_assert_cb)); + m_mcu_port2_w_cb.init(*this, FUNC(superqix_state::mcu_port2_w_cb)); + m_mcu_port3_w_cb.init(*this, FUNC(superqix_state::mcu_port3_w_cb)); + m_z80_ay1_sync_address_w_cb.init(*this, FUNC(superqix_state::z80_ay1_sync_address_w_cb)); + m_z80_ay2_iob_w_cb.init(*this, FUNC(superqix_state::z80_ay2_iob_w_cb)); + m_bootleg_mcu_port1_w_cb.init(*this, FUNC(superqix_state::bootleg_mcu_port1_w_cb)); + // 8031 and/or 8751 MCU related save_item(NAME(m_bl_port1)); save_item(NAME(m_bl_fake_port2)); diff --git a/src/mame/drivers/supracan.cpp b/src/mame/drivers/supracan.cpp index 9090c1c59dea8..ebab27a67f5dc 100644 --- a/src/mame/drivers/supracan.cpp +++ b/src/mame/drivers/supracan.cpp @@ -1988,10 +1988,10 @@ void supracan_state::machine_start() save_item(NAME(m_video_regs)); - m_video_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(supracan_state::video_callback), this)); - m_hbl_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(supracan_state::hbl_callback), this)); - m_line_on_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(supracan_state::line_on_callback), this)); - m_line_off_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(supracan_state::line_off_callback), this)); + m_video_timer = timer_alloc(*this, FUNC(supracan_state::video_callback)); + m_hbl_timer = timer_alloc(*this, FUNC(supracan_state::hbl_callback)); + m_line_on_timer = timer_alloc(*this, FUNC(supracan_state::line_on_callback)); + m_line_off_timer = timer_alloc(*this, FUNC(supracan_state::line_off_callback)); if (m_cart->exists()) m_maincpu->space(AS_PROGRAM).install_read_handler(0x000000, 0x3fffff, read16s_delegate(*m_cart, FUNC(generic_slot_device::read16_rom))); diff --git a/src/mame/drivers/svision.cpp b/src/mame/drivers/svision.cpp index ce3e08c94b1d1..7bd5d3732e768 100644 --- a/src/mame/drivers/svision.cpp +++ b/src/mame/drivers/svision.cpp @@ -430,17 +430,17 @@ WRITE_LINE_MEMBER(svision_state::frame_int_w) void svision_state::init_svision() { - m_svision.timer1 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(svision_state::svision_timer),this)); + m_svision.timer1 = timer_alloc(*this, FUNC(svision_state::svision_timer)); m_dma_finished = false; m_pet.on = false; } void svision_state::init_svisions() { - m_svision.timer1 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(svision_state::svision_timer),this)); + m_svision.timer1 = timer_alloc(*this, FUNC(svision_state::svision_timer)); m_dma_finished = false; m_pet.on = true; - m_pet.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(svision_state::svision_pet_timer),this)); + m_pet.timer = timer_alloc(*this, FUNC(svision_state::svision_pet_timer)); } DEVICE_IMAGE_LOAD_MEMBER( svision_state::cart_load ) diff --git a/src/mame/drivers/swyft.cpp b/src/mame/drivers/swyft.cpp index 43d51e032ad24..dfe30ef87ba8a 100644 --- a/src/mame/drivers/swyft.cpp +++ b/src/mame/drivers/swyft.cpp @@ -378,7 +378,7 @@ class swyft_state : public driver_device void swyft_mem(address_map &map); - //virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + //virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr); }; diff --git a/src/mame/drivers/sym1.cpp b/src/mame/drivers/sym1.cpp index 40f4984d63d19..abb9b9c943c74 100644 --- a/src/mame/drivers/sym1.cpp +++ b/src/mame/drivers/sym1.cpp @@ -351,7 +351,7 @@ void sym1_state::init_sym1() bank->set_entry(1); // allocate a timer to refresh the led display - m_led_update = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sym1_state::led_refresh), this)); + m_led_update = timer_alloc(*this, FUNC(sym1_state::led_refresh)); } void sym1_state::machine_reset() diff --git a/src/mame/drivers/symbolics.cpp b/src/mame/drivers/symbolics.cpp index 42471abfb01b3..739c0d654ddac 100644 --- a/src/mame/drivers/symbolics.cpp +++ b/src/mame/drivers/symbolics.cpp @@ -111,7 +111,7 @@ class symbolics_state : public driver_device void m68k_mem(address_map &map); - // virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + // virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; uint16_t symbolics_state::buserror_r() @@ -281,7 +281,7 @@ INPUT_PORTS_END /****************************************************************************** Machine Drivers ******************************************************************************/ -/*void symbolics_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +/*void symbolics_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/taito_f2.cpp b/src/mame/drivers/taito_f2.cpp index f637c6b6fbd4a..6b9ef0b136a70 100644 --- a/src/mame/drivers/taito_f2.cpp +++ b/src/mame/drivers/taito_f2.cpp @@ -528,7 +528,7 @@ driftout 8000 0000/8 0000 0000 The first control changes from 8000 to 0000 ******************************************************************/ -void taitof2_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void taitof2_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/taito_f3.cpp b/src/mame/drivers/taito_f3.cpp index 3138dc16e9995..e54606a43b6de 100644 --- a/src/mame/drivers/taito_f3.cpp +++ b/src/mame/drivers/taito_f3.cpp @@ -424,7 +424,7 @@ GFXDECODE_END /******************************************************************************/ -void taito_f3_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void taito_f3_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/taito_z.cpp b/src/mame/drivers/taito_z.cpp index 601629847ad0d..ff835f150e5bf 100644 --- a/src/mame/drivers/taito_z.cpp +++ b/src/mame/drivers/taito_z.cpp @@ -1320,7 +1320,7 @@ void taitoz_state::dblaxle_cpua_ctrl_w(offs_t offset, u16 data, u16 mem_mask) INTERRUPTS ***********************************************************/ -void taitoz_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void taitoz_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/taitosj.cpp b/src/mame/drivers/taitosj.cpp index 590e7d2cb1b8c..ef43aac1b81a6 100644 --- a/src/mame/drivers/taitosj.cpp +++ b/src/mame/drivers/taitosj.cpp @@ -181,7 +181,7 @@ void taitosj_state::sndnmi_msk_w(uint8_t data) void taitosj_state::soundlatch_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(taitosj_state::soundlatch_w_cb), this), data); + m_soundlatch_w_cb.synchronize(data); } @@ -193,7 +193,7 @@ void taitosj_state::input_port_4_f0_w(uint8_t data) // EPORT2 void taitosj_state::sound_semaphore2_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(taitosj_state::sound_semaphore2_w_cb), this), data); + m_sound_semaphore2_w_cb.synchronize(data); } CUSTOM_INPUT_MEMBER(taitosj_state::input_port_4_f0_r) @@ -353,13 +353,13 @@ uint8_t taitosj_state::soundlatch_flags_r() // WR5000 void taitosj_state::soundlatch_clear7_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(taitosj_state::soundlatch_clear7_w_cb), this), data); + m_soundlatch_clear7_w_cb.synchronize(data); } // WR5001 void taitosj_state::sound_semaphore2_clear_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(taitosj_state::sound_semaphore2_clear_w_cb), this), data); + m_sound_semaphore2_clear_w_cb.synchronize(data); } @@ -2830,6 +2830,11 @@ void taitosj_state::init_common() save_item(NAME(m_input_port_4_f0)); save_item(NAME(m_kikstart_gears)); + m_soundlatch_w_cb.init(*this, FUNC(taitosj_state::soundlatch_w_cb)); + m_soundlatch_clear7_w_cb.init(*this, FUNC(taitosj_state::soundlatch_clear7_w_cb)); + m_sound_semaphore2_w_cb.init(*this, FUNC(taitosj_state::sound_semaphore2_w_cb)); + m_sound_semaphore2_clear_w_cb.init(*this, FUNC(taitosj_state::sound_semaphore2_clear_w_cb)); + machine().add_notifier(MACHINE_NOTIFY_RESET, machine_notify_delegate(&taitosj_state::reset_common, this)); } diff --git a/src/mame/drivers/tandy2k.cpp b/src/mame/drivers/tandy2k.cpp index 02ed64b3754d8..aff65816106b9 100644 --- a/src/mame/drivers/tandy2k.cpp +++ b/src/mame/drivers/tandy2k.cpp @@ -958,7 +958,7 @@ void tandy2k_state::device_reset_after_children() m_pc_keyboard->enable(0); } -void tandy2k_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tandy2k_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/tankbust.cpp b/src/mame/drivers/tankbust.cpp index 0e0a743b3dabb..819a3bbe09565 100644 --- a/src/mame/drivers/tankbust.cpp +++ b/src/mame/drivers/tankbust.cpp @@ -32,6 +32,9 @@ void tankbust_state::machine_start() membank("bank1")->configure_entries(0, 2, memregion("maincpu")->base() + 0x10000, 0x4000); membank("bank2")->configure_entries(0, 2, memregion("maincpu")->base() + 0x18000, 0x2000); + m_soundlatch_callback.init(*this, FUNC(tankbust_state::soundlatch_callback)); + m_soundirqline_callback.init(*this, FUNC(tankbust_state::soundirqline_callback)); + save_item(NAME(m_latch)); save_item(NAME(m_timer1)); save_item(NAME(m_e0xx_data)); @@ -48,7 +51,7 @@ TIMER_CALLBACK_MEMBER(tankbust_state::soundlatch_callback) void tankbust_state::soundlatch_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(tankbust_state::soundlatch_callback),this), data); + m_soundlatch_callback.synchronize(data); } uint8_t tankbust_state::soundlatch_r() @@ -95,7 +98,7 @@ void tankbust_state::e0xx_w(offs_t offset, uint8_t data) break; case 1: /* 0xe001 (value 0 then 1) written right after the soundlatch_byte_w */ - machine().scheduler().synchronize(timer_expired_delegate(FUNC(tankbust_state::soundirqline_callback),this), data); + m_soundirqline_callback.synchronize(data); break; case 2: /* 0xe002 coin counter */ diff --git a/src/mame/drivers/targeth.cpp b/src/mame/drivers/targeth.cpp index 072079fc2c149..33bf6115d096b 100644 --- a/src/mame/drivers/targeth.cpp +++ b/src/mame/drivers/targeth.cpp @@ -176,8 +176,8 @@ void targeth_state::machine_start() { m_okibank->configure_entries(0, 16, memregion("oki")->base(), 0x10000); - m_gun_irq_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(targeth_state::gun1_irq), this)); - m_gun_irq_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(targeth_state::gun2_irq), this)); + m_gun_irq_timer[0] = timer_alloc(*this, FUNC(targeth_state::gun1_irq)); + m_gun_irq_timer[1] = timer_alloc(*this, FUNC(targeth_state::gun2_irq)); m_gun_irq_timer[0]->adjust(m_screen->time_until_pos(128, 0)); m_gun_irq_timer[1]->adjust(m_screen->time_until_pos(160, 0)); diff --git a/src/mame/drivers/techno.cpp b/src/mame/drivers/techno.cpp index 252a30c25d68b..ebcd5ad116ee2 100644 --- a/src/mame/drivers/techno.cpp +++ b/src/mame/drivers/techno.cpp @@ -58,7 +58,7 @@ class techno_state : public driver_device void techno_sub_map(address_map &map); void cpu_space_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void machine_reset() override; @@ -259,7 +259,7 @@ void techno_state::cpu_space_map(address_map &map) map(0xfffff2, 0xfffff3).lr16(NAME([this] () -> u16 { return m_vector; })); } -void techno_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void techno_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == IRQ_ADVANCE_TIMER) { diff --git a/src/mame/drivers/tehkanwc.cpp b/src/mame/drivers/tehkanwc.cpp index ec2bfcd8f34a1..9bb7f1f8f234d 100644 --- a/src/mame/drivers/tehkanwc.cpp +++ b/src/mame/drivers/tehkanwc.cpp @@ -161,7 +161,7 @@ void tehkanwc_state::sound_command_w(uint8_t data) m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } -void tehkanwc_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tehkanwc_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/teleray10.cpp b/src/mame/drivers/teleray10.cpp index 2aa362e4dec85..bb3700ee2437d 100644 --- a/src/mame/drivers/teleray10.cpp +++ b/src/mame/drivers/teleray10.cpp @@ -88,7 +88,7 @@ class teleray10_state : public driver_device void teleray10_state::machine_start() { - m_bell_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(teleray10_state::bell_toggle), this)); + m_bell_timer = timer_alloc(*this, FUNC(teleray10_state::bell_toggle)); m_topr = 0; m_timer_expired = false; diff --git a/src/mame/drivers/thayers.cpp b/src/mame/drivers/thayers.cpp index 77ba8526a6d2c..9513450bb61fc 100644 --- a/src/mame/drivers/thayers.cpp +++ b/src/mame/drivers/thayers.cpp @@ -114,14 +114,14 @@ class thayers_state : public driver_device void thayers_io_map(address_map &map); void thayers_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; static const uint8_t led_map[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x00 }; /* Interrupts */ -void thayers_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void thayers_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/thunderx.cpp b/src/mame/drivers/thunderx.cpp index f2fa77c45e51c..707d2390829a2 100644 --- a/src/mame/drivers/thunderx.cpp +++ b/src/mame/drivers/thunderx.cpp @@ -1057,7 +1057,7 @@ ROM_END void thunderx_state::init_thunderx() { - m_thunderx_firq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(thunderx_state::thunderx_firq_cb), this)); + m_thunderx_firq_timer = timer_alloc(*this, FUNC(thunderx_state::thunderx_firq_cb)); } /***************************************************************************/ diff --git a/src/mame/drivers/ti990_10.cpp b/src/mame/drivers/ti990_10.cpp index 3faa96751b474..42861bc0966ae 100644 --- a/src/mame/drivers/ti990_10.cpp +++ b/src/mame/drivers/ti990_10.cpp @@ -93,6 +93,10 @@ class ti990_10_state : public driver_device void ti990_10(machine_config &config); protected: + virtual void machine_start() override + { + m_clear_load.init(*this, FUNC(ti990_10_state::clear_load)); + } virtual void machine_reset() override; private: @@ -105,6 +109,7 @@ class ti990_10_state : public driver_device void ti990_panel_write(uint8_t data); TIMER_CALLBACK_MEMBER(clear_load); + transient_timer_factory m_clear_load; void ti990_hold_load(); void ti990_set_int_line(int line, int state); @@ -160,7 +165,7 @@ TIMER_CALLBACK_MEMBER(ti990_10_state::clear_load) void ti990_10_state::ti990_hold_load() { m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); - machine().scheduler().timer_set(attotime::from_msec(100), timer_expired_delegate(FUNC(ti990_10_state::clear_load),this)); + m_clear_load.call_after(attotime::from_msec(100)); } /* diff --git a/src/mame/drivers/ti990_4.cpp b/src/mame/drivers/ti990_4.cpp index c5057109f781f..b4e1116fd75f0 100644 --- a/src/mame/drivers/ti990_4.cpp +++ b/src/mame/drivers/ti990_4.cpp @@ -78,7 +78,7 @@ class ti990_4_state : public driver_device void memmap(address_map &map); void hold_load(); - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; int m_intlines; int m_int_level; emu_timer* m_nmi_timer; @@ -107,7 +107,7 @@ void ti990_4_state::hold_load() /* LOAD interrupt trigger callback */ -void ti990_4_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ti990_4_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_maincpu->set_input_line(INT_9900_LOAD, CLEAR_LINE); logerror("ti990_4: Released LOAD interrupt\n"); diff --git a/src/mame/drivers/ti99_4x.cpp b/src/mame/drivers/ti99_4x.cpp index a6585142307f0..0eb82a6ce1b6c 100644 --- a/src/mame/drivers/ti99_4x.cpp +++ b/src/mame/drivers/ti99_4x.cpp @@ -163,7 +163,7 @@ class ti99_4x_state : public driver_device // Used by EVPC DECLARE_WRITE_LINE_MEMBER( video_interrupt_evpc_in ); - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void crumap(address_map &map); void memmap(address_map &map); @@ -723,7 +723,7 @@ WRITE_LINE_MEMBER( ti99_4x_state::gromclk_in ) /* Used by the EVPC */ -void ti99_4x_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ti99_4x_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // Pulse it if (m_datamux != nullptr) diff --git a/src/mame/drivers/tickee.cpp b/src/mame/drivers/tickee.cpp index a0ca3cf7f1efe..4c0fb03f0fe5c 100644 --- a/src/mame/drivers/tickee.cpp +++ b/src/mame/drivers/tickee.cpp @@ -102,7 +102,7 @@ class tickee_state : public driver_device void rapidfir_map(address_map &map); void tickee_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; @@ -133,7 +133,7 @@ inline void tickee_state::get_crosshair_xy(int player, int &x, int &y) * *************************************/ -void tickee_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tickee_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/tm990189.cpp b/src/mame/drivers/tm990189.cpp index 4319ab24557ad..7b41cd49715cb 100644 --- a/src/mame/drivers/tm990189.cpp +++ b/src/mame/drivers/tm990189.cpp @@ -101,6 +101,12 @@ class tm990189_state : public driver_device DECLARE_INPUT_CHANGED_MEMBER( load_interrupt ); +protected: + virtual void machine_start() override + { + m_clear_load.init(*this, FUNC(tm990189_state::clear_load)); + } + private: uint8_t video_vdp_r(offs_t offset); void video_vdp_w(offs_t offset, uint8_t data); @@ -154,6 +160,7 @@ class tm990189_state : public driver_device void digitsel(int offset, bool state); TIMER_DEVICE_CALLBACK_MEMBER(display_callback); + transient_timer_factory m_clear_load; TIMER_CALLBACK_MEMBER(clear_load); void hold_load(); @@ -199,7 +206,7 @@ MACHINE_START_MEMBER(tm990189_state,tm990_189) { m_digits.resolve(); m_leds.resolve(); - m_displayena_timer = machine().scheduler().timer_alloc(timer_expired_delegate()); + m_displayena_timer = timer_alloc(); m_digitsel = 0; m_LED_state = 0; @@ -209,12 +216,12 @@ MACHINE_START_MEMBER(tm990189_state,tm990_189_v) { m_digits.resolve(); m_leds.resolve(); - m_displayena_timer = machine().scheduler().timer_alloc(timer_expired_delegate()); + m_displayena_timer = timer_alloc(); - m_joy1x_timer = machine().scheduler().timer_alloc(timer_expired_delegate()); - m_joy1y_timer = machine().scheduler().timer_alloc(timer_expired_delegate()); - m_joy2x_timer = machine().scheduler().timer_alloc(timer_expired_delegate()); - m_joy2y_timer = machine().scheduler().timer_alloc(timer_expired_delegate()); + m_joy1x_timer = timer_alloc(); + m_joy1y_timer = timer_alloc(); + m_joy2x_timer = timer_alloc(); + m_joy2y_timer = timer_alloc(); m_digitsel = 0; m_LED_state = 0; @@ -241,7 +248,7 @@ void tm990189_state::hold_load() { m_load_state = true; m_tms9980a->set_input_line(INT_9980A_LOAD, ASSERT_LINE); - machine().scheduler().timer_set(attotime::from_msec(100), timer_expired_delegate(FUNC(tm990189_state::clear_load),this)); + m_clear_load.call_after(attotime::from_msec(100)); } /* @@ -496,7 +503,7 @@ class tm990_189_rs232_image_device : public device_t, public device_image_interf protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; required_device m_tms9902; }; @@ -514,7 +521,7 @@ void tm990_189_rs232_image_device::device_start() { } -void tm990_189_rs232_image_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tm990_189_rs232_image_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { uint8_t buf; if (/*m_rs232_rts &&*/ /*(mame_ftell(m_rs232_fp) < mame_fsize(m_rs232_fp))*/1) diff --git a/src/mame/drivers/tmc1800.cpp b/src/mame/drivers/tmc1800.cpp index d0ca713e0c2e8..a83a1926247c5 100644 --- a/src/mame/drivers/tmc1800.cpp +++ b/src/mame/drivers/tmc1800.cpp @@ -728,7 +728,7 @@ void tmc2000_state::machine_reset() // OSCOM Nano -void nano_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nano_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -927,7 +927,7 @@ ROM_END /* Driver Initialization */ -void tmc1800_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tmc1800_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/tmmjprd.cpp b/src/mame/drivers/tmmjprd.cpp index 2730a5c1babc2..4b372c8e3b437 100644 --- a/src/mame/drivers/tmmjprd.cpp +++ b/src/mame/drivers/tmmjprd.cpp @@ -506,7 +506,7 @@ void tmmjprd_state::blitter_w(offs_t offset, uint32_t data, uint32_t mem_mask) void tmmjprd_state::machine_start() { #if EMULATE_BLITTER - m_blit_done_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tmmjprd_state::blit_done), this)); + m_blit_done_timer = timer_alloc(*this, FUNC(tmmjprd_state::blit_done)); #endif save_item(NAME(m_mux_data)); diff --git a/src/mame/drivers/tmnt.cpp b/src/mame/drivers/tmnt.cpp index f84f09c515d3e..8ccc63821e188 100644 --- a/src/mame/drivers/tmnt.cpp +++ b/src/mame/drivers/tmnt.cpp @@ -250,7 +250,7 @@ void tmnt_state::sound_nmi_callback( int param ) } #endif -void tmnt_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tmnt_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/toobin.cpp b/src/mame/drivers/toobin.cpp index 811b038cc114d..2e9958bef6d2a 100644 --- a/src/mame/drivers/toobin.cpp +++ b/src/mame/drivers/toobin.cpp @@ -48,7 +48,7 @@ TIMER_CALLBACK_MEMBER(toobin_state::scanline_interrupt) void toobin_state::machine_start() { - m_scanline_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(toobin_state::scanline_interrupt), this)); + m_scanline_interrupt_timer = timer_alloc(*this, FUNC(toobin_state::scanline_interrupt)); } diff --git a/src/mame/drivers/trucocl.cpp b/src/mame/drivers/trucocl.cpp index d49474ec61534..feb1ec326d8da 100644 --- a/src/mame/drivers/trucocl.cpp +++ b/src/mame/drivers/trucocl.cpp @@ -50,7 +50,7 @@ void trucocl_state::irq_enable_w(uint8_t data) } -void trucocl_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void trucocl_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/tubep.cpp b/src/mame/drivers/tubep.cpp index ff76fc10eb51a..bc345626db213 100644 --- a/src/mame/drivers/tubep.cpp +++ b/src/mame/drivers/tubep.cpp @@ -237,7 +237,7 @@ void tubep_state::tubep_sound_portmap(address_map &map) } -void tubep_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tubep_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/tugboat.cpp b/src/mame/drivers/tugboat.cpp index da6d7b381cbf1..9979ee977a3ae 100644 --- a/src/mame/drivers/tugboat.cpp +++ b/src/mame/drivers/tugboat.cpp @@ -57,7 +57,7 @@ class tugboat_state : public driver_device virtual void video_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_maincpu; @@ -212,7 +212,7 @@ void tugboat_state::ctrl_w(uint8_t data) m_ctrl = data; } -void tugboat_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tugboat_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/turbo.cpp b/src/mame/drivers/turbo.cpp index b30ae77ac22ed..59ce6f5b58751 100644 --- a/src/mame/drivers/turbo.cpp +++ b/src/mame/drivers/turbo.cpp @@ -196,6 +196,8 @@ void buckrog_state::machine_start() { turbo_base_state::machine_start(); + m_delayed_i8255_w.init(*this, FUNC(buckrog_state::delayed_i8255_w)); + save_item(NAME(m_fchg)); save_item(NAME(m_mov)); save_item(NAME(m_obch)); @@ -528,7 +530,7 @@ TIMER_CALLBACK_MEMBER(buckrog_state::delayed_i8255_w) void buckrog_state::i8255_0_w(offs_t offset, uint8_t data) { // the port C handshaking signals control the sub CPU IRQ, so we have to sync whenever we access this PPI - machine().scheduler().synchronize(timer_expired_delegate(FUNC(buckrog_state::delayed_i8255_w),this), ((offset & 3) << 8) | (data & 0xff)); + m_delayed_i8255_w.synchronize(((offset & 3) << 8) | (data & 0xff)); } uint8_t turbo_state::spriteram_r(offs_t offset) diff --git a/src/mame/drivers/turrett.cpp b/src/mame/drivers/turrett.cpp index 865da9b99f25f..f3a65cb75aa22 100644 --- a/src/mame/drivers/turrett.cpp +++ b/src/mame/drivers/turrett.cpp @@ -61,7 +61,7 @@ void turrett_state::machine_start() save_item(NAME(m_frame)); save_item(NAME(m_adc)); - m_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(turrett_state::dma_complete), this)); + m_dma_timer = timer_alloc(*this, FUNC(turrett_state::dma_complete)); } diff --git a/src/mame/drivers/tutor.cpp b/src/mame/drivers/tutor.cpp index 8b2799d670062..1fceecbdc65d8 100644 --- a/src/mame/drivers/tutor.cpp +++ b/src/mame/drivers/tutor.cpp @@ -249,7 +249,7 @@ void tutor_state::machine_start() std::string region_tag; m_cart_rom = memregion(region_tag.assign(m_cart->tag()).append(GENERIC_ROM_REGION_TAG)); - m_tape_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tutor_state::tape_interrupt_handler),this)); + m_tape_interrupt_timer = timer_alloc(*this, FUNC(tutor_state::tape_interrupt_handler)); m_bank1->configure_entry(0, memregion("maincpu")->base() + 0x4000); m_bank1->set_entry(0); diff --git a/src/mame/drivers/tv912.cpp b/src/mame/drivers/tv912.cpp index ee6de0a9b73bc..54d805b0571b1 100644 --- a/src/mame/drivers/tv912.cpp +++ b/src/mame/drivers/tv912.cpp @@ -123,7 +123,7 @@ class tv912_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; required_device m_maincpu; required_device m_crtc; @@ -249,7 +249,7 @@ void tv912_state::output_40c(u8 data) m_dispram_bank->set_entry(BIT(data, 0)); } -void tv912_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tv912_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/tv990.cpp b/src/mame/drivers/tv990.cpp index 86c8d1195028a..624b825b1c585 100644 --- a/src/mame/drivers/tv990.cpp +++ b/src/mame/drivers/tv990.cpp @@ -78,7 +78,7 @@ class tv990_state : public driver_device virtual void machine_reset() override; virtual void machine_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_post_load() override; uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); @@ -120,7 +120,7 @@ void tv990_state::machine_start() save_item(NAME(m_height)); } -void tv990_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tv990_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_rowtimer->adjust(m_screen->time_until_pos(m_screen->vpos() + m_rowh)); m_maincpu->set_input_line(M68K_IRQ_6, ASSERT_LINE); diff --git a/src/mame/drivers/tx0.cpp b/src/mame/drivers/tx0.cpp index bb9af652fd474..541cd0e66f085 100644 --- a/src/mame/drivers/tx0.cpp +++ b/src/mame/drivers/tx0.cpp @@ -345,10 +345,10 @@ void tx0_state::tx0_machine_stop() void tx0_state::machine_start() { - m_tape_reader.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tx0_state::reader_callback),this)); - m_tape_puncher.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tx0_state::puncher_callback),this)); - m_typewriter.prt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tx0_state::prt_callback),this)); - m_dis_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tx0_state::dis_callback),this)); + m_tape_reader.timer = timer_alloc(*this, FUNC(tx0_state::reader_callback)); + m_tape_puncher.timer = timer_alloc(*this, FUNC(tx0_state::puncher_callback)); + m_typewriter.prt_timer = timer_alloc(*this, FUNC(tx0_state::prt_callback)); + m_dis_timer = timer_alloc(*this, FUNC(tx0_state::dis_callback)); machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(&tx0_state::tx0_machine_stop,this)); } diff --git a/src/mame/drivers/uchroma68.cpp b/src/mame/drivers/uchroma68.cpp index ca7eef4524e87..0e96310c7e860 100644 --- a/src/mame/drivers/uchroma68.cpp +++ b/src/mame/drivers/uchroma68.cpp @@ -174,7 +174,7 @@ class uchroma68_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; uint8_t mc6847_videoram_r(offs_t offset); uint8_t pia_pa_r(); @@ -249,7 +249,7 @@ INPUT_PORTS_END ************************************************************/ -void uchroma68_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void uchroma68_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/ultratnk.cpp b/src/mame/drivers/ultratnk.cpp index 86e7adb4e29ea..b84625611f7c0 100644 --- a/src/mame/drivers/ultratnk.cpp +++ b/src/mame/drivers/ultratnk.cpp @@ -48,7 +48,7 @@ READ_LINE_MEMBER(ultratnk_state::joystick_r) } -void ultratnk_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ultratnk_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/unichamp.cpp b/src/mame/drivers/unichamp.cpp index 590d09ffcda99..00ad64a47d62b 100644 --- a/src/mame/drivers/unichamp.cpp +++ b/src/mame/drivers/unichamp.cpp @@ -68,7 +68,7 @@ class unichamp_state : public driver_device protected: virtual void machine_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_maincpu; @@ -138,7 +138,7 @@ static INPUT_PORTS_START( unichamp ) INPUT_PORTS_END -void unichamp_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void unichamp_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { //TODO should we add an explicit Reset button in there just like the controller? } diff --git a/src/mame/drivers/vendetta.cpp b/src/mame/drivers/vendetta.cpp index 67276bd5e45eb..5a2e82bc658b4 100644 --- a/src/mame/drivers/vendetta.cpp +++ b/src/mame/drivers/vendetta.cpp @@ -165,7 +165,7 @@ void vendetta_state::_5fe0_w(uint8_t data) m_k053246->k053246_set_objcha_line((data & 0x20) ? ASSERT_LINE : CLEAR_LINE); } -void vendetta_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void vendetta_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/vg5k.cpp b/src/mame/drivers/vg5k.cpp index 34383bda6f711..f7c38567efd06 100644 --- a/src/mame/drivers/vg5k.cpp +++ b/src/mame/drivers/vg5k.cpp @@ -108,6 +108,7 @@ class vg5k_state : public driver_device uint8_t cassette_r(); void cassette_w(uint8_t data); TIMER_CALLBACK_MEMBER(z80_irq_clear); + transient_timer_factory m_z80_irq_clear; TIMER_DEVICE_CALLBACK_MEMBER(z80_irq); TIMER_DEVICE_CALLBACK_MEMBER(vg5k_scanline); void vg5k_io(address_map &map); @@ -334,7 +335,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(vg5k_state::z80_irq) { m_maincpu->set_input_line(0, ASSERT_LINE); - machine().scheduler().timer_set(attotime::from_usec(100), timer_expired_delegate(FUNC(vg5k_state::z80_irq_clear),this)); + m_z80_irq_clear.call_after(attotime::from_usec(100)); } TIMER_DEVICE_CALLBACK_MEMBER(vg5k_state::vg5k_scanline) @@ -353,6 +354,8 @@ INPUT_CHANGED_MEMBER(vg5k_state::delta_button) void vg5k_state::machine_start() { + m_z80_irq_clear.init(*this, FUNC(vg5k_state::z80_irq_clear)); + save_item(NAME(m_ef9345_offset)); save_item(NAME(m_printer_latch)); save_item(NAME(m_printer_signal)); diff --git a/src/mame/drivers/vgmplay.cpp b/src/mame/drivers/vgmplay.cpp index 32130823ff563..7fce42d08aefb 100644 --- a/src/mame/drivers/vgmplay.cpp +++ b/src/mame/drivers/vgmplay.cpp @@ -557,10 +557,10 @@ void vgmplay_device::device_start() for (vgm_chip led = vgm_chip(0); led != CT_COUNT; led = vgm_chip(led + 1)) m_act_led_index[led] = m_act_led_expiries.emplace(m_act_led_expiries.end(), led, attotime::never); m_act_led_off = m_act_led_expiries.begin(); - m_act_led_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vgmplay_device::act_led_expired), this)); + m_act_led_timer = timer_alloc(*this, FUNC(vgmplay_device::act_led_expired)); for (int i = 0; i < 0xff; i++) - m_streams[i].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vgmplay_device::stream_timer_expired), this)); + m_streams[i].timer = timer_alloc(*this, FUNC(vgmplay_device::stream_timer_expired)); save_item(NAME(m_pc)); //save_item(NAME(m_streams)); diff --git a/src/mame/drivers/vidbrain.cpp b/src/mame/drivers/vidbrain.cpp index fb2f08f564a07..f38dfb2ad829c 100644 --- a/src/mame/drivers/vidbrain.cpp +++ b/src/mame/drivers/vidbrain.cpp @@ -373,7 +373,7 @@ uint8_t vidbrain_state::memory_read_byte(offs_t offset) // device_timer - handler timer events //------------------------------------------------- -void vidbrain_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void vidbrain_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_uv->ext_int_w(0); m_smi->ext_int_w(0); diff --git a/src/mame/drivers/video21.cpp b/src/mame/drivers/video21.cpp index 6af36ce065267..73e5be74a23db 100644 --- a/src/mame/drivers/video21.cpp +++ b/src/mame/drivers/video21.cpp @@ -244,7 +244,7 @@ GFXDECODE_END void video21_state::machine_start() { - m_hopper_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(video21_state::hopper_coinout),this)); + m_hopper_timer = timer_alloc(*this, FUNC(video21_state::hopper_coinout)); m_lamps.resolve(); diff --git a/src/mame/drivers/videopin.cpp b/src/mame/drivers/videopin.cpp index 5815f98bca349..de492fc79a4de 100644 --- a/src/mame/drivers/videopin.cpp +++ b/src/mame/drivers/videopin.cpp @@ -49,7 +49,7 @@ void videopin_state::update_plunger() } -void videopin_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void videopin_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/viper.cpp b/src/mame/drivers/viper.cpp index fc743fcf43843..942f59fd8caec 100644 --- a/src/mame/drivers/viper.cpp +++ b/src/mame/drivers/viper.cpp @@ -1332,10 +1332,10 @@ void viper_state::mpc8240_interrupt(int irq) void viper_state::mpc8240_epic_init() { memset(&m_epic, 0, sizeof(m_epic)); - m_epic.global_timer[0].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(viper_state::epic_global_timer_callback),this)); - m_epic.global_timer[1].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(viper_state::epic_global_timer_callback),this)); - m_epic.global_timer[2].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(viper_state::epic_global_timer_callback),this)); - m_epic.global_timer[3].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(viper_state::epic_global_timer_callback),this)); + m_epic.global_timer[0].timer = timer_alloc(*this, FUNC(viper_state::epic_global_timer_callback)); + m_epic.global_timer[1].timer = timer_alloc(*this, FUNC(viper_state::epic_global_timer_callback)); + m_epic.global_timer[2].timer = timer_alloc(*this, FUNC(viper_state::epic_global_timer_callback)); + m_epic.global_timer[3].timer = timer_alloc(*this, FUNC(viper_state::epic_global_timer_callback)); } void viper_state::mpc8240_epic_reset(void) @@ -2329,7 +2329,7 @@ WRITE_LINE_MEMBER(viper_state::voodoo_pciint) void viper_state::machine_start() { - m_ds2430_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(viper_state::ds2430_timer_callback),this)); + m_ds2430_timer = timer_alloc(*this, FUNC(viper_state::ds2430_timer_callback)); mpc8240_epic_init(); /* set conservative DRC options */ diff --git a/src/mame/drivers/vis.cpp b/src/mame/drivers/vis.cpp index db4c5952050e1..db39bc8b36282 100644 --- a/src/mame/drivers/vis.cpp +++ b/src/mame/drivers/vis.cpp @@ -24,7 +24,7 @@ class vis_audio_device : public device_t, protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void dack16_w(int line, uint16_t data) override; virtual void device_add_mconfig(machine_config &config) override; private: @@ -80,7 +80,7 @@ void vis_audio_device::dack16_w(int line, uint16_t data) m_isa->drq7_w(CLEAR_LINE); } -void vis_audio_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void vis_audio_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if(((m_samples < 2) && (m_mode & 8)) || !m_samples) return; diff --git a/src/mame/drivers/vk100.cpp b/src/mame/drivers/vk100.cpp index 7dff5700c6c3e..e92defff669bf 100644 --- a/src/mame/drivers/vk100.cpp +++ b/src/mame/drivers/vk100.cpp @@ -277,7 +277,7 @@ class vk100_state : public driver_device void vk100_io(address_map &map); void vk100_mem(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; // vram access functions: @@ -349,7 +349,7 @@ void vk100_state::vram_write(uint8_t data) m_vram[(EA<<1)] = (block&0xFF00)>>8; // '' } -void vk100_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void vk100_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -1011,7 +1011,7 @@ void vk100_state::init_vk100() //m_i8251_rx_timer = timer_alloc(TID_I8251_RX); //m_i8251_tx_timer = timer_alloc(TID_I8251_TX); //m_i8251_sync_timer = timer_alloc(TID_SYNC); - //machine().scheduler().timer_set(attotime::from_hz(10000), FUNC(i8251_rx_clk)); + //m_i8251_rx_clk.call_after(attotime::from_hz(10000), FUNC(i8251_rx_clk)); } void vk100_state::video_start() diff --git a/src/mame/drivers/votrhv.cpp b/src/mame/drivers/votrhv.cpp index 7b55a278f6bac..21580bf990eb4 100644 --- a/src/mame/drivers/votrhv.cpp +++ b/src/mame/drivers/votrhv.cpp @@ -109,7 +109,7 @@ class votrhv_state : public driver_device static const device_timer_id TIMER_SCAN = 1; private: // overrides - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void mem_map(address_map &map); @@ -391,7 +391,7 @@ INPUT_PORTS_END Timer and machine/start/reset handlers ******************************************************************************/ -void votrhv_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void votrhv_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/drivers/vp415.cpp b/src/mame/drivers/vp415.cpp index eec82774aa7dd..4d004fed8318a 100644 --- a/src/mame/drivers/vp415.cpp +++ b/src/mame/drivers/vp415.cpp @@ -105,7 +105,7 @@ void vp415_state::machine_start() m_drive_2ppr_timer = timer_alloc(DRIVE_2PPR_ID); } -void vp415_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void vp415_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -122,7 +122,7 @@ WRITE_LINE_MEMBER(vp415_state::refv_w) { m_refv = state; m_drivecpu->set_input_line(MCS51_INT0_LINE, m_refv ? CLEAR_LINE : ASSERT_LINE); - //printf("Current time in ms: %f\n", machine().scheduler().time().as_double() * 1000.0D); + //printf("Current time in ms: %f\n", machine().time().as_double() * 1000.0D); } // CPU Datagrabber Module (W) diff --git a/src/mame/drivers/wgp.cpp b/src/mame/drivers/wgp.cpp index 9e55d552a45de..54c454b304b21 100644 --- a/src/mame/drivers/wgp.cpp +++ b/src/mame/drivers/wgp.cpp @@ -435,7 +435,7 @@ void wgp_state::cpua_ctrl_w(u16 data)/* assumes Z80 sandwiched between 68Ks */ INTERRUPTS ***********************************************************/ -void wgp_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void wgp_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/wicat.cpp b/src/mame/drivers/wicat.cpp index 4f47bfddda989..aa7e657517f0c 100644 --- a/src/mame/drivers/wicat.cpp +++ b/src/mame/drivers/wicat.cpp @@ -109,7 +109,7 @@ class wicat_state : public driver_device required_device m_fdc; uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { return 0; } - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void main_mem(address_map &map); void video_io(address_map &map); @@ -304,7 +304,7 @@ void wicat_state::machine_reset() elem = 0; } -void wicat_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void wicat_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/wolfpack.cpp b/src/mame/drivers/wolfpack.cpp index 8f91c08a83959..eb9f71edcd75a 100644 --- a/src/mame/drivers/wolfpack.cpp +++ b/src/mame/drivers/wolfpack.cpp @@ -14,7 +14,7 @@ #include "speaker.h" -void wolfpack_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void wolfpack_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/wpc_an.cpp b/src/mame/drivers/wpc_an.cpp index 103d24a48d008..bfef9ce143f82 100644 --- a/src/mame/drivers/wpc_an.cpp +++ b/src/mame/drivers/wpc_an.cpp @@ -114,7 +114,7 @@ class wpc_an_state : public driver_device // driver_device overrides virtual void machine_reset() override; virtual void machine_start() override { m_digits.resolve(); } - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; static const device_timer_id TIMER_VBLANK = 0; static const device_timer_id TIMER_IRQ = 1; @@ -276,7 +276,7 @@ static INPUT_PORTS_START( wpc_an ) INPUT_PORTS_END -void wpc_an_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void wpc_an_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { int x; switch(id) diff --git a/src/mame/drivers/wpc_dot.cpp b/src/mame/drivers/wpc_dot.cpp index 1477b0a7a176d..e4ea0c3b2a73d 100644 --- a/src/mame/drivers/wpc_dot.cpp +++ b/src/mame/drivers/wpc_dot.cpp @@ -137,7 +137,7 @@ static INPUT_PORTS_START( wpc_dot ) PORT_DIPSETTING(0xf0,"USA 2") INPUT_PORTS_END -void wpc_dot_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void wpc_dot_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/drivers/wyvernf0.cpp b/src/mame/drivers/wyvernf0.cpp index baab9d8071b8b..34fbe253aa2a2 100644 --- a/src/mame/drivers/wyvernf0.cpp +++ b/src/mame/drivers/wyvernf0.cpp @@ -100,6 +100,7 @@ class wyvernf0_state : public driver_device void nmi_disable_w(uint8_t data); void nmi_enable_w(uint8_t data); TIMER_CALLBACK_MEMBER(nmi_callback); + transient_timer_factory m_nmi_callback; uint8_t mcu_status_r(); @@ -357,7 +358,7 @@ TIMER_CALLBACK_MEMBER(wyvernf0_state::nmi_callback) void wyvernf0_state::sound_command_w(uint8_t data) { m_soundlatch->write(data); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(wyvernf0_state::nmi_callback),this), data); + m_nmi_callback.synchronize(data); } void wyvernf0_state::nmi_disable_w(uint8_t data) @@ -613,6 +614,8 @@ void wyvernf0_state::machine_start() save_pointer(NAME(m_objram), 0x1000 * 2); membank("rambank")->configure_entries(0, 2, m_objram.get(), 0x1000); + m_nmi_callback.init(*this, FUNC(wyvernf0_state::nmi_callback)); + save_item(NAME(m_sound_nmi_enable)); save_item(NAME(m_pending_nmi)); save_item(NAME(m_rombank)); diff --git a/src/mame/drivers/x07.cpp b/src/mame/drivers/x07.cpp index f103a68e766a6..b8d72513cdd58 100644 --- a/src/mame/drivers/x07.cpp +++ b/src/mame/drivers/x07.cpp @@ -1378,11 +1378,11 @@ GFXDECODE_END void x07_state::machine_start() { uint32_t ram_size = m_ram->size(); - m_rsta_clear = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(x07_state::rsta_clear),this)); - m_rstb_clear = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(x07_state::rstb_clear),this)); - m_beep_stop = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(x07_state::beep_stop),this)); - m_cass_poll = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(x07_state::cassette_poll),this)); - m_cass_tick = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(x07_state::cassette_tick),this)); + m_rsta_clear = timer_alloc(*this, FUNC(x07_state::rsta_clear)); + m_rstb_clear = timer_alloc(*this, FUNC(x07_state::rstb_clear)); + m_beep_stop = timer_alloc(*this, FUNC(x07_state::beep_stop)); + m_cass_poll = timer_alloc(*this, FUNC(x07_state::cassette_poll)); + m_cass_tick = timer_alloc(*this, FUNC(x07_state::cassette_tick)); m_nvram1->set_base(&m_t6834_ram, 0x800); m_nvram2->set_base(m_ram->pointer(), ram_size); diff --git a/src/mame/drivers/x1.cpp b/src/mame/drivers/x1.cpp index fba91bf66b017..c379dd49cb3a3 100644 --- a/src/mame/drivers/x1.cpp +++ b/src/mame/drivers/x1.cpp @@ -2133,7 +2133,7 @@ void x1_state::machine_start() m_rtc.min = ((systime.local_time.minute / 10)<<4) | ((systime.local_time.minute % 10) & 0xf); m_rtc.sec = ((systime.local_time.second / 10)<<4) | ((systime.local_time.second % 10) & 0xf); - m_rtc_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(x1_state::x1_rtc_increment),this)); + m_rtc_timer = timer_alloc(*this, FUNC(x1_state::x1_rtc_increment)); } m_work_ram = make_unique_clear(0x10000*0x10); diff --git a/src/mame/drivers/x68k.cpp b/src/mame/drivers/x68k.cpp index c2cb97c606fb1..ff9e2d74324ca 100644 --- a/src/mame/drivers/x68k.cpp +++ b/src/mame/drivers/x68k.cpp @@ -147,7 +147,7 @@ static constexpr uint32_t adpcm_clock[2] = { 8000000, 4000000 }; static constexpr uint32_t adpcm_div[4] = { 1024, 768, 512, /* Reserved */512 }; -void x68k_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void x68k_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/drivers/xavix2.cpp b/src/mame/drivers/xavix2.cpp index bb0f3d638dfa6..3b38ffcdaf037 100644 --- a/src/mame/drivers/xavix2.cpp +++ b/src/mame/drivers/xavix2.cpp @@ -610,7 +610,7 @@ uint32_t xavix2_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap void xavix2_state::machine_start() { - m_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(xavix2_state::dma_end), this)); + m_dma_timer = timer_alloc(*this, FUNC(xavix2_state::dma_end)); } void xavix2_state::machine_reset() diff --git a/src/mame/drivers/xexex.cpp b/src/mame/drivers/xexex.cpp index 271e28599dc30..4d453b916a108 100644 --- a/src/mame/drivers/xexex.cpp +++ b/src/mame/drivers/xexex.cpp @@ -450,7 +450,7 @@ void xexex_state::machine_start() save_item(NAME(m_cur_control2)); machine().save().register_postload(save_prepost_delegate(FUNC(xexex_state::xexex_postload), this)); - m_dmadelay_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(xexex_state::dmaend_callback),this)); + m_dmadelay_timer = timer_alloc(*this, FUNC(xexex_state::dmaend_callback)); } void xexex_state::machine_reset() diff --git a/src/mame/drivers/ympsr60.cpp b/src/mame/drivers/ympsr60.cpp index a5c1d010f3841..4c2a60c92eecd 100644 --- a/src/mame/drivers/ympsr60.cpp +++ b/src/mame/drivers/ympsr60.cpp @@ -234,7 +234,7 @@ attoseconds_t psr60_state::cv_handler(attotime const &cvtime) if (BIT(m_bbd_config, 1) && !BIT(m_bbd_config, 2)) { // Stereo symphonic off: min freq 35 kHz, max freq 107 kHz, varies at 0,3 Hz - curtime.m_seconds %= 3; + curtime.set_seconds(curtime.seconds() % 3); double pos = curtime.as_double() / 3; pos = (pos < 0.5) ? (2 * pos) : 2 * (1.0 - pos); bbd_freq = 35000 + (107000 - 35000) * pos; @@ -242,7 +242,7 @@ attoseconds_t psr60_state::cv_handler(attotime const &cvtime) else { // Stereo symphonic on: min freq 48 kHz, max freq 61 kHz, varies at 6 Hz - curtime.m_seconds = 0; + curtime.set_seconds(0); double pos = curtime.as_double() * 6; pos -= floor(pos); pos = (pos < 0.5) ? (2 * pos) : 2 * (1.0 - pos); diff --git a/src/mame/etc/opwolf_cchip.txt b/src/mame/etc/opwolf_cchip.txt index f56ac5242d705..855fada259b79 100644 --- a/src/mame/etc/opwolf_cchip.txt +++ b/src/mame/etc/opwolf_cchip.txt @@ -485,7 +485,7 @@ static const uint16_t *const level_data_lookup[] = level_data_09 }; -void opwolf_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void opwolf_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -1190,7 +1190,7 @@ DECLARE_WRITE16_MEMBER(opwolf_cchip_data_w); DECLARE_READ16_MEMBER(opwolf_cchip_status_r); DECLARE_READ16_MEMBER(opwolf_cchip_data_r); -virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; +virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; TIMER_CALLBACK_MEMBER(opwolf_timer_callback); TIMER_CALLBACK_MEMBER(cchip_timer); diff --git a/src/mame/includes/abc80.h b/src/mame/includes/abc80.h index 6ec3a5cd7e25d..8a83cd862279a 100644 --- a/src/mame/includes/abc80.h +++ b/src/mame/includes/abc80.h @@ -128,7 +128,7 @@ class abc80_state : public driver_device HEAD = 0xfe20 }; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; diff --git a/src/mame/includes/advision.h b/src/mame/includes/advision.h index 98ff4ee0fca73..d8516c80a6e1f 100644 --- a/src/mame/includes/advision.h +++ b/src/mame/includes/advision.h @@ -58,6 +58,7 @@ class advision_state : public driver_device DECLARE_READ_LINE_MEMBER( vsync_r ); TIMER_CALLBACK_MEMBER( sound_cmd_sync ); + transient_timer_factory m_sound_cmd_sync; uint8_t sound_cmd_r(); void sound_g_w(uint8_t data); void sound_d_w(uint8_t data); diff --git a/src/mame/includes/alesis.h b/src/mame/includes/alesis.h index 9efc395235e42..12844eb6210ca 100644 --- a/src/mame/includes/alesis.h +++ b/src/mame/includes/alesis.h @@ -34,7 +34,7 @@ class alesis_dm3ag_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; private: diff --git a/src/mame/includes/amiga.h b/src/mame/includes/amiga.h index 1b5f389d04a05..db1d284899b46 100644 --- a/src/mame/includes/amiga.h +++ b/src/mame/includes/amiga.h @@ -545,7 +545,7 @@ class amiga_state : public driver_device virtual void machine_reset() override; // device_t overrides - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void custom_chip_reset(); diff --git a/src/mame/includes/amstrad.h b/src/mame/includes/amstrad.h index 8e01700a18595..e64b3f66cad70 100644 --- a/src/mame/includes/amstrad.h +++ b/src/mame/includes/amstrad.h @@ -104,7 +104,7 @@ class amstrad_state : public driver_device }; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_maincpu; diff --git a/src/mame/includes/apexc.h b/src/mame/includes/apexc.h index b94c56afbaa67..e44cc828f8610 100644 --- a/src/mame/includes/apexc.h +++ b/src/mame/includes/apexc.h @@ -36,7 +36,7 @@ class apexc_state : public driver_device protected: virtual void machine_start() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void check_inputs(); diff --git a/src/mame/includes/apollo.h b/src/mame/includes/apollo.h index 47f9548b31f06..673303e84be4d 100644 --- a/src/mame/includes/apollo.h +++ b/src/mame/includes/apollo.h @@ -693,7 +693,7 @@ class apollo_stdio_device: public device_t, public device_serial_interface // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // serial overrides virtual void rcv_complete() override; // Rx completed receiving byte diff --git a/src/mame/includes/artmagic.h b/src/mame/includes/artmagic.h index cda9dc3195a58..116b938d45152 100644 --- a/src/mame/includes/artmagic.h +++ b/src/mame/includes/artmagic.h @@ -94,5 +94,5 @@ class artmagic_state : public driver_device void stonebal_tms_map(address_map &map); void tms_map(address_map &map); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; diff --git a/src/mame/includes/asterix.h b/src/mame/includes/asterix.h index fd9dcd4345918..00448d734a3d3 100644 --- a/src/mame/includes/asterix.h +++ b/src/mame/includes/asterix.h @@ -68,7 +68,7 @@ class asterix_state : public driver_device void main_map(address_map &map); void sound_map(address_map &map); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; #endif // MAME_INCLUDES_ASTERIX_H diff --git a/src/mame/includes/astrocde.h b/src/mame/includes/astrocde.h index fe42331227b75..c0de9196e6305 100644 --- a/src/mame/includes/astrocde.h +++ b/src/mame/includes/astrocde.h @@ -184,7 +184,7 @@ class astrocde_state : public driver_device protected: virtual void machine_start() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; class seawolf2_state : public astrocde_state diff --git a/src/mame/includes/asuka.h b/src/mame/includes/asuka.h index 0369ebb122c91..39ec01abf0861 100644 --- a/src/mame/includes/asuka.h +++ b/src/mame/includes/asuka.h @@ -58,7 +58,7 @@ class asuka_state : public driver_device void bonzeadv(machine_config &config); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void machine_reset() override; diff --git a/src/mame/includes/atarist.h b/src/mame/includes/atarist.h index 74edcfe33c803..87a6e879e0fd3 100644 --- a/src/mame/includes/atarist.h +++ b/src/mame/includes/atarist.h @@ -339,7 +339,7 @@ class st_state : public driver_device void st_map(address_map &map); void keyboard(machine_config &config); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void video_start() override; @@ -438,7 +438,7 @@ class ste_state : public st_state void ste(machine_config &config); void ste_map(address_map &map); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void video_start() override; }; diff --git a/src/mame/includes/atarisy2.h b/src/mame/includes/atarisy2.h index 62cf43eb09a8a..85f4e6f7e56fe 100644 --- a/src/mame/includes/atarisy2.h +++ b/src/mame/includes/atarisy2.h @@ -149,6 +149,7 @@ class atarisy2_state : public driver_device uint32_t screen_update_atarisy2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(vblank_int); TIMER_CALLBACK_MEMBER(delayed_int_enable_w); + transient_timer_factory m_delayed_int_enable_w; TIMER_CALLBACK_MEMBER(reset_yscroll_callback); void yscroll_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); void xscroll_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); diff --git a/src/mame/includes/balsente.h b/src/mame/includes/balsente.h index 3f7fbd35f4800..1dcd390b7b83f 100644 --- a/src/mame/includes/balsente.h +++ b/src/mame/includes/balsente.h @@ -134,7 +134,9 @@ class balsente_state : public driver_device uint32_t screen_update_balsente(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(update_analog_inputs); TIMER_CALLBACK_MEMBER(irq_off); + transient_timer_factory m_irq_off; TIMER_CALLBACK_MEMBER(adc_finished); + transient_timer_factory m_adc_finished; TIMER_DEVICE_CALLBACK_MEMBER(interrupt_timer); void draw_one_sprite(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t *sprite); void poly17_init(); diff --git a/src/mame/includes/bebox.h b/src/mame/includes/bebox.h index 8d5c6aa8100d9..c3d54e24556c5 100644 --- a/src/mame/includes/bebox.h +++ b/src/mame/includes/bebox.h @@ -64,7 +64,7 @@ class bebox_state : public driver_device TIMER_GET_DEVICES }; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device_array m_ppc; diff --git a/src/mame/includes/bigevglf.h b/src/mame/includes/bigevglf.h index 727d2a51e1ad8..c9314ecb1742e 100644 --- a/src/mame/includes/bigevglf.h +++ b/src/mame/includes/bigevglf.h @@ -68,6 +68,7 @@ class bigevglf_state : public driver_device virtual void video_start() override; uint32_t screen_update_bigevglf(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(deferred_ls74_w); + transient_timer_factory m_deferred_ls74_w; void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); required_device m_maincpu; required_device m_msm; diff --git a/src/mame/includes/blstroid.h b/src/mame/includes/blstroid.h index ed2f18b20371f..72cf3a4a91b1f 100644 --- a/src/mame/includes/blstroid.h +++ b/src/mame/includes/blstroid.h @@ -40,7 +40,7 @@ class blstroid_state : public atarigen_state virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: TIMER_DEVICE_CALLBACK_MEMBER(scanline_update); diff --git a/src/mame/includes/btoads.h b/src/mame/includes/btoads.h index 11f842bc16d1f..8e89828d2b77c 100644 --- a/src/mame/includes/btoads.h +++ b/src/mame/includes/btoads.h @@ -41,7 +41,7 @@ class btoads_state : public driver_device protected: // device overrides - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // driver_device overrides virtual void machine_start() override; diff --git a/src/mame/includes/bublbobl.h b/src/mame/includes/bublbobl.h index dbaf665dcb25d..3076858c907b9 100644 --- a/src/mame/includes/bublbobl.h +++ b/src/mame/includes/bublbobl.h @@ -134,7 +134,7 @@ class bublbobl_state : public driver_device void tokio_sound_map(address_map &map); void tokio_subcpu_map(address_map &map); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; diff --git a/src/mame/includes/capbowl.h b/src/mame/includes/capbowl.h index 74b2f787de0c3..8e24e571b09a9 100644 --- a/src/mame/includes/capbowl.h +++ b/src/mame/includes/capbowl.h @@ -85,7 +85,7 @@ class capbowl_state : public driver_device void capbowl_map(address_map &map); void sound_map(address_map &map); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; #endif // MAME_INCLUDES_CAPBOWL_H diff --git a/src/mame/includes/cchasm.h b/src/mame/includes/cchasm.h index b4f20542a0e92..63082aa7b6124 100644 --- a/src/mame/includes/cchasm.h +++ b/src/mame/includes/cchasm.h @@ -81,5 +81,5 @@ class cchasm_state : public driver_device void sound_memmap(address_map &map); void sound_portmap(address_map &map); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; diff --git a/src/mame/includes/cidelsa.h b/src/mame/includes/cidelsa.h index a75e93eb2981a..a01c5e2c31499 100644 --- a/src/mame/includes/cidelsa.h +++ b/src/mame/includes/cidelsa.h @@ -79,7 +79,7 @@ class cidelsa_state : public driver_device void destryera_map(address_map &map); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void machine_reset() override; diff --git a/src/mame/includes/cinemat.h b/src/mame/includes/cinemat.h index f09279fa8c126..d19e5d5e2f8c9 100644 --- a/src/mame/includes/cinemat.h +++ b/src/mame/includes/cinemat.h @@ -181,6 +181,7 @@ class demon_state : public cinemat_state protected: TIMER_CALLBACK_MEMBER(synced_sound_w); + transient_timer_factory m_synced_sound_w; DECLARE_WRITE_LINE_MEMBER(demon_sound4_w); u8 sound_porta_r(); u8 sound_portb_r(); diff --git a/src/mame/includes/coco.h b/src/mame/includes/coco.h index 63b04da84cc40..53c0ca0f01d8e 100644 --- a/src/mame/includes/coco.h +++ b/src/mame/includes/coco.h @@ -132,7 +132,7 @@ class coco_state : public driver_device, public device_cococart_host_interface // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // changed handlers virtual void pia1_pa_changed(uint8_t data); diff --git a/src/mame/includes/comx35.h b/src/mame/includes/comx35.h index 1cff50e38bb44..13177e29b43cf 100644 --- a/src/mame/includes/comx35.h +++ b/src/mame/includes/comx35.h @@ -54,7 +54,7 @@ class comx35_state : public driver_device required_ioport m_d6; required_ioport m_modifiers; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void machine_reset() override; diff --git a/src/mame/includes/dc.h b/src/mame/includes/dc.h index 4a6e82086015c..ec1313253ec5c 100644 --- a/src/mame/includes/dc.h +++ b/src/mame/includes/dc.h @@ -58,7 +58,9 @@ class dc_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; TIMER_CALLBACK_MEMBER(g2_dma_irq); + transient_timer_factory m_g2_dma_irq; TIMER_CALLBACK_MEMBER(ch2_dma_irq); + transient_timer_factory m_ch2_dma_irq; uint32_t dc_aica_reg_r(offs_t offset, uint32_t mem_mask = ~0); void dc_aica_reg_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); uint32_t dc_arm_aica_r(offs_t offset); diff --git a/src/mame/includes/dcheese.h b/src/mame/includes/dcheese.h index fc9e190e7af9d..42d81d67295b7 100644 --- a/src/mame/includes/dcheese.h +++ b/src/mame/includes/dcheese.h @@ -46,7 +46,7 @@ class dcheese_state : public driver_device virtual void machine_start() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_region_ptr m_palrom; diff --git a/src/mame/includes/dec8.h b/src/mame/includes/dec8.h index 9a6a34a918585..8365e18dabebc 100644 --- a/src/mame/includes/dec8.h +++ b/src/mame/includes/dec8.h @@ -58,7 +58,7 @@ class dec8_state : public driver_device void gondo(machine_config &config); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void machine_reset() override; diff --git a/src/mame/includes/electron.h b/src/mame/includes/electron.h index 77752b9a38ea4..00b7705a11207 100644 --- a/src/mame/includes/electron.h +++ b/src/mame/includes/electron.h @@ -106,7 +106,7 @@ class electron_state : public driver_device virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; required_device m_maincpu; required_device m_irqs; diff --git a/src/mame/includes/esripsys.h b/src/mame/includes/esripsys.h index 37667360e2794..eee05b45e68e6 100644 --- a/src/mame/includes/esripsys.h +++ b/src/mame/includes/esripsys.h @@ -130,6 +130,7 @@ class esripsys_state : public driver_device uint32_t screen_update_esripsys(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(esripsys_vblank_irq); TIMER_CALLBACK_MEMBER(delayed_bank_swap); + transient_timer_factory m_delayed_bank_swap; TIMER_CALLBACK_MEMBER(hblank_start_callback); TIMER_CALLBACK_MEMBER(hblank_end_callback); required_device m_dac; diff --git a/src/mame/includes/exidy.h b/src/mame/includes/exidy.h index 227d51a635a9b..855ba2a4bf18d 100644 --- a/src/mame/includes/exidy.h +++ b/src/mame/includes/exidy.h @@ -152,5 +152,5 @@ class exidy_state : public driver_device void venture_map(address_map &map); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; diff --git a/src/mame/includes/exidy440.h b/src/mame/includes/exidy440.h index 7272d977d1fcb..6ca5080f5cd8c 100644 --- a/src/mame/includes/exidy440.h +++ b/src/mame/includes/exidy440.h @@ -64,6 +64,7 @@ class exidy440_state : public driver_device uint32_t screen_update_exidy440(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(vblank_interrupt_w); TIMER_CALLBACK_MEMBER(delayed_sound_command_w); + transient_timer_factory m_delayed_sound_command_w; TIMER_CALLBACK_MEMBER(beam_firq_callback); TIMER_CALLBACK_MEMBER(collide_firq_callback); void exidy440_update_firq(); diff --git a/src/mame/includes/fgoal.h b/src/mame/includes/fgoal.h index f78fe6818305d..5e4fb3ff7c831 100644 --- a/src/mame/includes/fgoal.h +++ b/src/mame/includes/fgoal.h @@ -87,7 +87,7 @@ class fgoal_state : public driver_device void cpu_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; #endif // MAME_INCLUDES_FGOAL_H diff --git a/src/mame/includes/fmtowns.h b/src/mame/includes/fmtowns.h index d4956a80617b9..506ba50723a41 100644 --- a/src/mame/includes/fmtowns.h +++ b/src/mame/includes/fmtowns.h @@ -280,7 +280,7 @@ class towns_state : public driver_device optional_shared_ptr m_nvram16; uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; uint8_t towns_system_r(offs_t offset); void towns_system_w(offs_t offset, uint8_t data); @@ -414,6 +414,7 @@ class towns_state : public driver_device TIMER_CALLBACK_MEMBER(towns_cdrom_read_byte); TIMER_CALLBACK_MEMBER(towns_vblank_end); + transient_timer_factory m_towns_vblank_end; void draw_sprites(); DECLARE_WRITE_LINE_MEMBER(towns_pit_out0_changed); DECLARE_WRITE_LINE_MEMBER(towns_pit_out1_changed); diff --git a/src/mame/includes/fuukifg2.h b/src/mame/includes/fuukifg2.h index 402a6e01641eb..e87b2fe3129f5 100644 --- a/src/mame/includes/fuukifg2.h +++ b/src/mame/includes/fuukifg2.h @@ -91,7 +91,7 @@ class fuuki16_state : public driver_device void fuuki16_sound_io_map(address_map &map); void fuuki16_sound_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; #endif // MAME_INCLUDES_FUUKIFG2_H diff --git a/src/mame/includes/fuukifg3.h b/src/mame/includes/fuukifg3.h index 190013533a268..60264596b5e2a 100644 --- a/src/mame/includes/fuukifg3.h +++ b/src/mame/includes/fuukifg3.h @@ -107,7 +107,7 @@ class fuuki32_state : public driver_device void fuuki32_sound_io_map(address_map &map); void fuuki32_sound_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; #endif // MAME_INCLUDES_FUUKIFG3_H diff --git a/src/mame/includes/galaxold.h b/src/mame/includes/galaxold.h index cf2f7b61b6424..eecd6e594de1e 100644 --- a/src/mame/includes/galaxold.h +++ b/src/mame/includes/galaxold.h @@ -41,6 +41,7 @@ class galaxold_state : public driver_device , m_gfxdecode(*this, "gfxdecode") , m_screen(*this, "screen") , m_palette(*this, "palette") + , m_int_timer(*this, "int_timer") , m_videoram(*this,"videoram") , m_spriteram(*this,"spriteram") , m_spriteram2(*this,"spriteram2") @@ -59,6 +60,7 @@ class galaxold_state : public driver_device required_device m_gfxdecode; required_device m_screen; required_device m_palette; + required_device m_int_timer; /* memory pointers */ required_shared_ptr m_videoram; diff --git a/src/mame/includes/gameplan.h b/src/mame/includes/gameplan.h index e20565a61c4e9..e1fade665051a 100644 --- a/src/mame/includes/gameplan.h +++ b/src/mame/includes/gameplan.h @@ -56,7 +56,7 @@ class gameplan_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; required_device m_maincpu; required_device m_via_0; diff --git a/src/mame/includes/gaplus.h b/src/mame/includes/gaplus.h index fe3bd36a7233f..a1fc0b3434d21 100644 --- a/src/mame/includes/gaplus.h +++ b/src/mame/includes/gaplus.h @@ -81,7 +81,7 @@ class gaplus_base_state : public driver_device virtual void driver_init() override; protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; diff --git a/src/mame/includes/gottlieb.h b/src/mame/includes/gottlieb.h index 5e2af43461847..510853e832403 100644 --- a/src/mame/includes/gottlieb.h +++ b/src/mame/includes/gottlieb.h @@ -78,7 +78,7 @@ class gottlieb_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum diff --git a/src/mame/includes/grchamp.h b/src/mame/includes/grchamp.h index 6f799c7f93375..3321786e60044 100644 --- a/src/mame/includes/grchamp.h +++ b/src/mame/includes/grchamp.h @@ -63,7 +63,9 @@ class grchamp_state : public driver_device void center_w(offs_t offset, uint8_t data); void right_w(offs_t offset, uint8_t data); TIMER_CALLBACK_MEMBER(soundlatch_w_cb); + transient_timer_factory m_soundlatch_w_cb; TIMER_CALLBACK_MEMBER(soundlatch_clear7_w_cb); + transient_timer_factory m_soundlatch_clear7_w_cb; uint8_t soundlatch_r(); void soundlatch_clear7_w(uint8_t data); uint8_t soundlatch_flags_r(); @@ -82,6 +84,7 @@ class grchamp_state : public driver_device INTERRUPT_GEN_MEMBER(cpu0_interrupt); INTERRUPT_GEN_MEMBER(cpu1_interrupt); TIMER_CALLBACK_MEMBER(main_to_sub_comm_sync_w); + transient_timer_factory m_main_to_sub_comm_sync_w; uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); void draw_objects(int y, uint8_t *objdata); diff --git a/src/mame/includes/gunbustr.h b/src/mame/includes/gunbustr.h index d5f7f92314f96..34d7fac125ef9 100644 --- a/src/mame/includes/gunbustr.h +++ b/src/mame/includes/gunbustr.h @@ -77,7 +77,7 @@ class gunbustr_state : public driver_device void gunbustr_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; #endif // MAME_INCLUDES_GUNBUSTR_H diff --git a/src/mame/includes/harddriv.h b/src/mame/includes/harddriv.h index 1582020992b2a..95d60d38a8702 100644 --- a/src/mame/includes/harddriv.h +++ b/src/mame/includes/harddriv.h @@ -102,7 +102,9 @@ class harddriv_state : public device_t void init_video(); INTERRUPT_GEN_MEMBER(hd68k_irq_gen); TIMER_CALLBACK_MEMBER(deferred_adsp_bank_switch); + transient_timer_factory m_deferred_adsp_bank_switch; TIMER_CALLBACK_MEMBER(rddsp32_sync_cb); + transient_timer_factory m_rddsp32_sync_cb; /*----------- defined in machine/harddriv.cpp -----------*/ @@ -191,6 +193,7 @@ class harddriv_state : public device_t void hdds3_xdsp_control_w(offs_t offset, uint16_t data); TIMER_CALLBACK_MEMBER( xsdp_sport1_irq_off_callback ); + transient_timer_factory m_xsdp_sport1_irq_off_callback; uint16_t hdgsp_control_lo_r(offs_t offset); void hdgsp_control_lo_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); @@ -570,6 +573,7 @@ class harddriv_sound_board_device : public device_t void update_68k_interrupts(); TIMER_CALLBACK_MEMBER( delayed_68k_w ); + transient_timer_factory m_delayed_68k_w; DECLARE_READ_LINE_MEMBER(hdsnddsp_get_bio); }; diff --git a/src/mame/includes/hp48.h b/src/mame/includes/hp48.h index cf9eae5045802..c0ad3d1c1b23a 100644 --- a/src/mame/includes/hp48.h +++ b/src/mame/includes/hp48.h @@ -105,7 +105,9 @@ class hp48_state : public driver_device uint8_t bank_r(offs_t offset); void hp49_bank_w(offs_t offset, uint8_t data); TIMER_CALLBACK_MEMBER(rs232_byte_recv_cb); + transient_timer_factory m_rs232_byte_recv_cb; TIMER_CALLBACK_MEMBER(rs232_byte_sent_cb); + transient_timer_factory m_rs232_byte_sent_cb; TIMER_CALLBACK_MEMBER(kbd_cb); TIMER_CALLBACK_MEMBER(timer1_cb); TIMER_CALLBACK_MEMBER(timer2_cb); diff --git a/src/mame/includes/hyhoo.h b/src/mame/includes/hyhoo.h index bd4ff85c18f70..6d4ad5987bd9d 100644 --- a/src/mame/includes/hyhoo.h +++ b/src/mame/includes/hyhoo.h @@ -52,5 +52,5 @@ class hyhoo_state : public driver_device void hyhoo_io_map(address_map &map); void hyhoo_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; diff --git a/src/mame/includes/intv.h b/src/mame/includes/intv.h index abe0eb8138633..02fde3e7fb01f 100644 --- a/src/mame/includes/intv.h +++ b/src/mame/includes/intv.h @@ -149,7 +149,7 @@ class intv_state : public driver_device ioport_port *m_intv_keyboard[10]; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; #endif // MAME_INCLUDES_INTV_H diff --git a/src/mame/includes/itech8.h b/src/mame/includes/itech8.h index f156cd05e03a8..dbdcf85dabeb8 100644 --- a/src/mame/includes/itech8.h +++ b/src/mame/includes/itech8.h @@ -222,7 +222,7 @@ class itech8_state : public driver_device void sound3812_map(address_map &map); void sstrike_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; class grmatch_state : public itech8_state @@ -247,7 +247,7 @@ class grmatch_state : public itech8_state TIMER_PALETTE = TIMER_BASE_LAST+1, }; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void palette_w(uint8_t data); void xscroll_w(uint8_t data); diff --git a/src/mame/includes/jaguar.h b/src/mame/includes/jaguar.h index 99a3807d6260a..e9522ea158624 100644 --- a/src/mame/includes/jaguar.h +++ b/src/mame/includes/jaguar.h @@ -111,7 +111,7 @@ class jaguar_state : public driver_device virtual void sound_start() override; virtual void video_start() override; virtual void device_postload(); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void video_config(machine_config &config, const XTAL clock); diff --git a/src/mame/includes/ladyfrog.h b/src/mame/includes/ladyfrog.h index b9dd982fc2e05..b72b1c5e065e1 100644 --- a/src/mame/includes/ladyfrog.h +++ b/src/mame/includes/ladyfrog.h @@ -89,6 +89,7 @@ class ladyfrog_state : public driver_device DECLARE_VIDEO_START(ladyfrog_common); uint32_t screen_update_ladyfrog(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(nmi_callback); + transient_timer_factory m_nmi_callback; void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); void ladyfrog_map(address_map &map); void ladyfrog_sound_map(address_map &map); diff --git a/src/mame/includes/laserbat.h b/src/mame/includes/laserbat.h index 66aa0a955c99f..72eb19d266a92 100644 --- a/src/mame/includes/laserbat.h +++ b/src/mame/includes/laserbat.h @@ -76,7 +76,7 @@ class laserbat_state_base : public driver_device virtual void machine_start() override; uint32_t screen_update_laserbat(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // video functions TIMER_CALLBACK_MEMBER(video_line); diff --git a/src/mame/includes/leland.h b/src/mame/includes/leland.h index 713a708235b4e..81ae96b46b03e 100644 --- a/src/mame/includes/leland.h +++ b/src/mame/includes/leland.h @@ -141,6 +141,7 @@ class leland_state : public driver_device void asylum_slave_map_program(address_map &map); TIMER_CALLBACK_MEMBER(leland_delayed_mvram_w); + transient_timer_factory m_leland_delayed_mvram_w; private: optional_device_array m_dac; diff --git a/src/mame/includes/lethalj.h b/src/mame/includes/lethalj.h index f0c6b267fb755..2267cae7804b6 100644 --- a/src/mame/includes/lethalj.h +++ b/src/mame/includes/lethalj.h @@ -59,7 +59,7 @@ class lethalj_state : public driver_device void lethalj_map(address_map &map); virtual void machine_start() override { m_lamps.resolve(); } - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void video_start() override; required_device m_maincpu; diff --git a/src/mame/includes/lisa.h b/src/mame/includes/lisa.h index 225f3b1d22cdd..54f45d284315e 100644 --- a/src/mame/includes/lisa.h +++ b/src/mame/includes/lisa.h @@ -227,6 +227,7 @@ class lisa_state : public driver_device INTERRUPT_GEN_MEMBER(lisa_interrupt); TIMER_CALLBACK_MEMBER(handle_mouse); TIMER_CALLBACK_MEMBER(read_COPS_command); + transient_timer_factory m_read_COPS_command; TIMER_CALLBACK_MEMBER(set_COPS_ready); void COPS_via_out_a(uint8_t data); DECLARE_WRITE_LINE_MEMBER(COPS_via_out_ca2); diff --git a/src/mame/includes/lynx.h b/src/mame/includes/lynx.h index 8d14e0d9dfa3a..25dca6b946d95 100644 --- a/src/mame/includes/lynx.h +++ b/src/mame/includes/lynx.h @@ -134,7 +134,7 @@ class lynx_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; required_shared_ptr m_mem_0000; required_shared_ptr m_mem_fc00; diff --git a/src/mame/includes/m72.h b/src/mame/includes/m72.h index 01d5e7ce9273b..7644bfab3eeea 100644 --- a/src/mame/includes/m72.h +++ b/src/mame/includes/m72.h @@ -213,10 +213,13 @@ class m72_state : public driver_device INTERRUPT_GEN_MEMBER(fake_nmi); TIMER_CALLBACK_MEMBER(synch_callback); + transient_timer_factory m_synch_callback; TIMER_CALLBACK_MEMBER(scanline_interrupt); TIMER_CALLBACK_MEMBER(kengo_scanline_interrupt); TIMER_CALLBACK_MEMBER(delayed_ram16_w); + transient_timer_factory m_delayed_ram16_w; TIMER_CALLBACK_MEMBER(delayed_ram8_w); + transient_timer_factory m_delayed_ram8_w; u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); u32 screen_update_m81(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); diff --git a/src/mame/includes/m92.h b/src/mame/includes/m92.h index 8967f58df2a20..1a43df38f538e 100644 --- a/src/mame/includes/m92.h +++ b/src/mame/includes/m92.h @@ -130,7 +130,7 @@ class m92_state : public driver_device void ppan_portmap(address_map &map); void sound_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; #endif // MAME_INCLUDES_M92_H diff --git a/src/mame/includes/mcr68.h b/src/mame/includes/mcr68.h index ce2006f1f0f9c..6620bd2d9a7f4 100644 --- a/src/mame/includes/mcr68.h +++ b/src/mame/includes/mcr68.h @@ -54,7 +54,7 @@ class mcr68_state : public driver_device void init_archrivlb(); protected: - virtual void machine_reset() override; + virtual void machine_start() override; virtual void video_start() override; private: @@ -74,7 +74,8 @@ class mcr68_state : public driver_device attotime m_timing_factor; uint8_t m_sprite_clip; int8_t m_sprite_xoffset; - timer_expired_delegate m_v493_callback; + transient_timer_factory m_493_callback; + transient_timer_factory m_493_off_callback; tilemap_t *m_bg_tilemap; tilemap_t *m_fg_tilemap; void xenophobe_control_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); diff --git a/src/mame/includes/megadriv.h b/src/mame/includes/megadriv.h index 35217cf5bc77b..45d9da2dc014a 100644 --- a/src/mame/includes/megadriv.h +++ b/src/mame/includes/megadriv.h @@ -99,6 +99,7 @@ struct genesis_z80_vars uint8_t megadriv_z80_vdp_read(offs_t offset); uint8_t megadriv_z80_unmapped_read(); TIMER_CALLBACK_MEMBER(megadriv_z80_run_state); + transient_timer_factory m_megadriv_z80_run_state; /* Megadrive / Genesis has 3 I/O ports */ emu_timer *m_io_timeout[3]; diff --git a/src/mame/includes/metro.h b/src/mame/includes/metro.h index 9bce32eda64ac..47160b37e1e24 100644 --- a/src/mame/includes/metro.h +++ b/src/mame/includes/metro.h @@ -105,6 +105,7 @@ class metro_state : public driver_device void mouja_irq_timer_ctrl_w(uint16_t data); void sound_data_w(u8 data); TIMER_CALLBACK_MEMBER(sound_data_sync); + transient_timer_factory m_sound_data_sync; u8 soundstatus_r(); void soundstatus_w(u8 data); template void upd7810_rombank_w(u8 data); @@ -180,7 +181,7 @@ class metro_state : public driver_device void ymf278_map(address_map &map); virtual void machine_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; /* devices */ required_device m_maincpu; diff --git a/src/mame/includes/mhavoc.h b/src/mame/includes/mhavoc.h index b266763d94744..501048cfb64e7 100644 --- a/src/mame/includes/mhavoc.h +++ b/src/mame/includes/mhavoc.h @@ -70,6 +70,7 @@ class mhavoc_state : public driver_device void quad_pokeyn_w(offs_t offset, uint8_t data); TIMER_CALLBACK_MEMBER(delayed_gamma_w); + transient_timer_factory m_delayed_gamma_w; TIMER_DEVICE_CALLBACK_MEMBER(mhavoc_cpu_irq_clock); void alpha_map(address_map &map); void alphaone_map(address_map &map); diff --git a/src/mame/includes/micro3d.h b/src/mame/includes/micro3d.h index a76a2d0dc6003..6614732b6dc5d 100644 --- a/src/mame/includes/micro3d.h +++ b/src/mame/includes/micro3d.h @@ -70,7 +70,7 @@ class micro3d_state : public driver_device virtual void video_start() override; virtual void video_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum planes diff --git a/src/mame/includes/midvunit.h b/src/mame/includes/midvunit.h index b5e3f95cad2f4..22fe6cb204597 100644 --- a/src/mame/includes/midvunit.h +++ b/src/mame/includes/midvunit.h @@ -198,5 +198,5 @@ class midvunit_state : public driver_device void midvplus_map(address_map &map); void midvunit_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; diff --git a/src/mame/includes/midyunit.h b/src/mame/includes/midyunit.h index ae474389950e7..07d4c87b03534 100644 --- a/src/mame/includes/midyunit.h +++ b/src/mame/includes/midyunit.h @@ -175,7 +175,7 @@ class midyunit_state : public driver_device void main_map(address_map &map); void yawdim_sound_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void dma_draw(uint16_t command); void init_generic(int bpp, int sound, int prot_start, int prot_end); void term2_init_common(write16s_delegate hack_w); diff --git a/src/mame/includes/mpu4.h b/src/mame/includes/mpu4.h index 687721721f6a2..badbd823aca81 100644 --- a/src/mame/includes/mpu4.h +++ b/src/mame/includes/mpu4.h @@ -235,7 +235,7 @@ class mpu4_state : public driver_device void mpu4base(machine_config &config); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void mpu4_memmap(address_map &map); void lamp_extend_small(int data); diff --git a/src/mame/includes/msisaac.h b/src/mame/includes/msisaac.h index e95ec128ceb22..09303577c02c7 100644 --- a/src/mame/includes/msisaac.h +++ b/src/mame/includes/msisaac.h @@ -105,6 +105,7 @@ class msisaac_state : public driver_device TILE_GET_INFO_MEMBER(get_bg2_tile_info); uint32_t screen_update_msisaac(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(nmi_callback); + transient_timer_factory m_nmi_callback; void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); void msisaac_map(address_map &map); void msisaac_sound_map(address_map &map); diff --git a/src/mame/includes/n8080.h b/src/mame/includes/n8080.h index 0a944bdfa3811..50b200147327b 100644 --- a/src/mame/includes/n8080.h +++ b/src/mame/includes/n8080.h @@ -30,6 +30,7 @@ class n8080_state : public driver_device protected: virtual void machine_start() override; virtual void machine_reset() override; + virtual void sound_start() override; virtual void sound_pins_changed(); virtual void update_SN76477_status(); @@ -83,7 +84,9 @@ class n8080_state : public driver_device void stop_mono_flop( int n ); TIMER_CALLBACK_MEMBER( stop_mono_flop_callback ); TIMER_CALLBACK_MEMBER( delayed_sound_1_callback ); + transient_timer_factory m_delayed_sound_1_callback; TIMER_CALLBACK_MEMBER( delayed_sound_2_callback ); + transient_timer_factory m_delayed_sound_2_callback; void main_cpu_map(address_map &map); void main_io_map(address_map &map); diff --git a/src/mame/includes/namcona1.h b/src/mame/includes/namcona1.h index 3e3907e62cdbf..a51eeb6526b1c 100644 --- a/src/mame/includes/namcona1.h +++ b/src/mame/includes/namcona1.h @@ -85,7 +85,7 @@ class namcona1_state : public driver_device u16 gfxram_r(offs_t offset); void gfxram_w(offs_t offset, u16 data, u16 mem_mask = ~0); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_post_load() override; u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); diff --git a/src/mame/includes/nbmj8688.h b/src/mame/includes/nbmj8688.h index 0cccef036be04..c28333b33f524 100644 --- a/src/mame/includes/nbmj8688.h +++ b/src/mame/includes/nbmj8688.h @@ -158,7 +158,7 @@ class nbmj8688_state : public driver_device void secolove_map(address_map &map); void seiha_io_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; #endif // MAME_INCLUDES_NBMJ8688_H diff --git a/src/mame/includes/nbmj8891.h b/src/mame/includes/nbmj8891.h index b89fb7891ced4..0ea120193b317 100644 --- a/src/mame/includes/nbmj8891.h +++ b/src/mame/includes/nbmj8891.h @@ -155,5 +155,5 @@ class nbmj8891_state : public driver_device void taiwanmb_io_map(address_map &map); void taiwanmb_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; diff --git a/src/mame/includes/nbmj8900.h b/src/mame/includes/nbmj8900.h index 17807ea7377d3..e860582b27456 100644 --- a/src/mame/includes/nbmj8900.h +++ b/src/mame/includes/nbmj8900.h @@ -82,5 +82,5 @@ class nbmj8900_state : public driver_device void ohpaipee_map(address_map &map); void togenkyo_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; diff --git a/src/mame/includes/nbmj8991.h b/src/mame/includes/nbmj8991.h index e9989a7590c53..f58e9923da8ac 100644 --- a/src/mame/includes/nbmj8991.h +++ b/src/mame/includes/nbmj8991.h @@ -116,5 +116,5 @@ class nbmj8991_state : public driver_device void triplew1_map(address_map &map); void triplew2_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; diff --git a/src/mame/includes/nbmj9195.h b/src/mame/includes/nbmj9195.h index 6e52c5a5fb5ca..f6efcc58b1e38 100644 --- a/src/mame/includes/nbmj9195.h +++ b/src/mame/includes/nbmj9195.h @@ -79,7 +79,7 @@ class nbmj9195_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_maincpu; diff --git a/src/mame/includes/newbrain.h b/src/mame/includes/newbrain.h index 381b8e53682cc..14c10a46e9570 100644 --- a/src/mame/includes/newbrain.h +++ b/src/mame/includes/newbrain.h @@ -79,7 +79,7 @@ class newbrain_state : public driver_device void newbrain_iorq(address_map &map); void newbrain_mreq(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void machine_reset() override; diff --git a/src/mame/includes/next.h b/src/mame/includes/next.h index e179365a785ca..42c0d1d8b8e65 100644 --- a/src/mame/includes/next.h +++ b/src/mame/includes/next.h @@ -193,7 +193,7 @@ class next_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void timer_start(); void timer_update(); diff --git a/src/mame/includes/niyanpai.h b/src/mame/includes/niyanpai.h index f001d067763e9..4caff54bcb4b1 100644 --- a/src/mame/includes/niyanpai.h +++ b/src/mame/includes/niyanpai.h @@ -109,5 +109,5 @@ class niyanpai_state : public driver_device void niyanpai_map(address_map &map); void zokumahj_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; diff --git a/src/mame/includes/norautp.h b/src/mame/includes/norautp.h index 05759f970b87c..7be78e67ee647 100644 --- a/src/mame/includes/norautp.h +++ b/src/mame/includes/norautp.h @@ -52,12 +52,13 @@ class norautp_state : public driver_device void init_deb(); protected: - virtual void machine_start() override { m_lamps.resolve(); } + virtual void machine_start() override; virtual void video_start() override; private: DECLARE_WRITE_LINE_MEMBER(ppi2_obf_w); TIMER_CALLBACK_MEMBER(ppi2_ack); + transient_timer_factory m_ppi2_ack; uint8_t test2_r(); void mainlamps_w(uint8_t data); void soundlamps_w(uint8_t data); diff --git a/src/mame/includes/parodius.h b/src/mame/includes/parodius.h index 81769d7073147..692d484eca32d 100644 --- a/src/mame/includes/parodius.h +++ b/src/mame/includes/parodius.h @@ -69,7 +69,7 @@ class parodius_state : public driver_device void parodius_map(address_map &map); void parodius_sound_map(address_map &map); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; #endif // MAME_INCLUDES_PARODIUS_H diff --git a/src/mame/includes/pc4.h b/src/mame/includes/pc4.h index bb5008a700308..a528550ef5f7d 100644 --- a/src/mame/includes/pc4.h +++ b/src/mame/includes/pc4.h @@ -33,7 +33,7 @@ class pc4_state : public driver_device virtual void machine_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); diff --git a/src/mame/includes/pc8801.h b/src/mame/includes/pc8801.h index 58a42e8128c38..321c76f067163 100644 --- a/src/mame/includes/pc8801.h +++ b/src/mame/includes/pc8801.h @@ -246,6 +246,7 @@ class pc8801_state : public driver_device DECLARE_MACHINE_RESET(pc8801_cdrom); INTERRUPT_GEN_MEMBER(pc8801_vrtc_irq); TIMER_CALLBACK_MEMBER(pc8801fd_upd765_tc_to_zero); + transient_timer_factory m_pc8801fd_upd765_tc_to_zero; TIMER_DEVICE_CALLBACK_MEMBER(pc8801_rtc_irq); uint8_t cpu_8255_c_r(); void cpu_8255_c_w(uint8_t data); diff --git a/src/mame/includes/pc88va.h b/src/mame/includes/pc88va.h index 94ffc3696aba6..57c9d48557bdd 100644 --- a/src/mame/includes/pc88va.h +++ b/src/mame/includes/pc88va.h @@ -87,7 +87,7 @@ class pc88va_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_maincpu; diff --git a/src/mame/includes/pitnrun.h b/src/mame/includes/pitnrun.h index 0e8569a548656..2b7fdf6a1b894 100644 --- a/src/mame/includes/pitnrun.h +++ b/src/mame/includes/pitnrun.h @@ -85,9 +85,13 @@ class pitnrun_state : public driver_device INTERRUPT_GEN_MEMBER(nmi_source); TIMER_CALLBACK_MEMBER(mcu_real_data_r); + transient_timer_factory m_mcu_real_data_r; TIMER_CALLBACK_MEMBER(mcu_real_data_w); + transient_timer_factory m_mcu_real_data_w; TIMER_CALLBACK_MEMBER(mcu_data_real_r); + transient_timer_factory m_mcu_data_real_r; TIMER_CALLBACK_MEMBER(mcu_status_real_w); + transient_timer_factory m_mcu_status_real_w; void pitnrun_palette(palette_device &palette) const; diff --git a/src/mame/includes/pmd85.h b/src/mame/includes/pmd85.h index 2ee987945c629..c33f18452d9e1 100644 --- a/src/mame/includes/pmd85.h +++ b/src/mame/includes/pmd85.h @@ -131,7 +131,7 @@ class pmd85_state : public driver_device void mato_update_memory(); void c2717_update_memory(); void common_driver_init(); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; required_device m_maincpu; required_region_ptr m_rom; diff --git a/src/mame/includes/pocketc.h b/src/mame/includes/pocketc.h index 23bb199dae369..d8770d9b898f7 100644 --- a/src/mame/includes/pocketc.h +++ b/src/mame/includes/pocketc.h @@ -38,7 +38,7 @@ class pocketc_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void pocketc_palette(palette_device &palette) const; diff --git a/src/mame/includes/poly.h b/src/mame/includes/poly.h index 06edfe470cb50..6244dff0995f2 100644 --- a/src/mame/includes/poly.h +++ b/src/mame/includes/poly.h @@ -143,6 +143,8 @@ class poly_state : public driver_device uint8_t m_video_pa, m_video_pb; uint8_t m_term_data; + transient_timer_factory m_set_protect; + inline offs_t physical(offs_t offset); int m_dat_bank; diff --git a/src/mame/includes/prof80.h b/src/mame/includes/prof80.h index 08d89ec8f301e..c604596bfffae 100644 --- a/src/mame/includes/prof80.h +++ b/src/mame/includes/prof80.h @@ -68,7 +68,7 @@ class prof80_state : public driver_device required_ioport m_j4; required_ioport m_j5; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; enum diff --git a/src/mame/includes/psion5.h b/src/mame/includes/psion5.h index 0427b7c31d55a..15d30c933887f 100644 --- a/src/mame/includes/psion5.h +++ b/src/mame/includes/psion5.h @@ -48,7 +48,7 @@ class psion5mx_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void palette_init(palette_device &palette); diff --git a/src/mame/includes/qix.h b/src/mame/includes/qix.h index f100c93f14bb1..05334e6ad5ef9 100644 --- a/src/mame/includes/qix.h +++ b/src/mame/includes/qix.h @@ -71,6 +71,8 @@ class qix_state : public driver_device void init_kram3(); protected: + virtual void machine_start() override; + virtual void sound_start() override; virtual void video_start() override; /* devices */ @@ -123,7 +125,9 @@ class qix_state : public driver_device void qix_palettebank_w(uint8_t data); TIMER_CALLBACK_MEMBER(pia_w_callback); + transient_timer_factory m_pia_w_callback; TIMER_CALLBACK_MEMBER(deferred_sndpia1_porta_w); + transient_timer_factory m_deferred_sndpia1_porta_w; DECLARE_WRITE_LINE_MEMBER(qix_vsync_changed); void qix_pia_w(offs_t offset, uint8_t data); void qix_coinctl_w(uint8_t data); diff --git a/src/mame/includes/rmnimbus.h b/src/mame/includes/rmnimbus.h index 66cd1cd3f51a6..7e3e6bed2b254 100644 --- a/src/mame/includes/rmnimbus.h +++ b/src/mame/includes/rmnimbus.h @@ -197,7 +197,7 @@ class rmnimbus_state : public driver_device int m_scsi_cd; int m_scsi_req; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; enum { diff --git a/src/mame/includes/rollerg.h b/src/mame/includes/rollerg.h index a26c07dd43aa0..d46b2782c651b 100644 --- a/src/mame/includes/rollerg.h +++ b/src/mame/includes/rollerg.h @@ -62,7 +62,7 @@ class rollerg_state : public driver_device void rollerg_map(address_map &map); void rollerg_sound_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; #endif // MAME_INCLUDES_ROLLERG_H diff --git a/src/mame/includes/s11.h b/src/mame/includes/s11.h index ce622dd697d2e..6e3a7d07d1d43 100644 --- a/src/mame/includes/s11.h +++ b/src/mame/includes/s11.h @@ -111,7 +111,7 @@ class s11_state : public genpin_class protected: virtual void machine_start() override { m_digits.resolve(); } - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_reset() override; // devices diff --git a/src/mame/includes/saturn.h b/src/mame/includes/saturn.h index b1a441875cf38..2cff990444924 100644 --- a/src/mame/includes/saturn.h +++ b/src/mame/includes/saturn.h @@ -139,6 +139,7 @@ class saturn_state : public driver_device TIMER_CALLBACK_MEMBER(vdp1_draw_end); + transient_timer_factory m_vdp1_draw_end; void saturn_soundram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); uint16_t saturn_soundram_r(offs_t offset); void minit_w(uint32_t data); diff --git a/src/mame/includes/segag80r.h b/src/mame/includes/segag80r.h index fe04be66d4d42..055fc066fc190 100644 --- a/src/mame/includes/segag80r.h +++ b/src/mame/includes/segag80r.h @@ -189,7 +189,7 @@ class segag80r_state : public driver_device void sindbadm_portmap(address_map &map); void sindbadm_sound_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; emu_timer *m_vblank_latch_clear_timer; }; diff --git a/src/mame/includes/segahang.h b/src/mame/includes/segahang.h index 88841e5eea626..c7184dcc3fc88 100644 --- a/src/mame/includes/segahang.h +++ b/src/mame/includes/segahang.h @@ -122,7 +122,7 @@ class segahang_state : public sega_16bit_common_base virtual void video_start() override; virtual void machine_start() override { m_lamps.resolve(); } virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // I8751 simulations void sharrier_i8751_sim(); diff --git a/src/mame/includes/segaorun.h b/src/mame/includes/segaorun.h index 316569dfe7a5f..c6c4d785a5f00 100644 --- a/src/mame/includes/segaorun.h +++ b/src/mame/includes/segaorun.h @@ -119,7 +119,7 @@ class segaorun_state : public sega_16bit_common_base // device overrides virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // internal helpers void update_main_irqs(); diff --git a/src/mame/includes/segas16a.h b/src/mame/includes/segas16a.h index 8138704c46a60..4e7bb4f4f7124 100644 --- a/src/mame/includes/segas16a.h +++ b/src/mame/includes/segas16a.h @@ -138,7 +138,7 @@ class segas16a_state : public sega_16bit_common_base virtual void video_start() override; virtual void machine_start() override { m_lamps.resolve(); } virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // I8751 simulations void dumpmtmt_i8751_sim(); diff --git a/src/mame/includes/segas16b.h b/src/mame/includes/segas16b.h index 76f8278b4215b..a637ccb14fdb9 100644 --- a/src/mame/includes/segas16b.h +++ b/src/mame/includes/segas16b.h @@ -212,7 +212,7 @@ class segas16b_state : public sega_16bit_common_base virtual void video_start() override; virtual void machine_start() override { m_lamps.resolve(); } virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // internal helpers void init_generic(segas16b_rom_board rom_board); diff --git a/src/mame/includes/segas18.h b/src/mame/includes/segas18.h index 2474fa28b5824..cb44a0a200ef2 100644 --- a/src/mame/includes/segas18.h +++ b/src/mame/includes/segas18.h @@ -140,7 +140,7 @@ class segas18_state : public sega_16bit_common_base virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // internal helpers void init_generic(segas18_rom_board rom_board); diff --git a/src/mame/includes/segaxbd.h b/src/mame/includes/segaxbd.h index 23fe42c982f38..5857d4489c319 100644 --- a/src/mame/includes/segaxbd.h +++ b/src/mame/includes/segaxbd.h @@ -93,7 +93,7 @@ class segaxbd_state : public device_t // device overrides // virtual void machine_reset(); virtual void video_start(); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // internal helpers void update_main_irqs(); diff --git a/src/mame/includes/segaybd.h b/src/mame/includes/segaybd.h index 8e37ee9fa8d86..91a62a3c68f57 100644 --- a/src/mame/includes/segaybd.h +++ b/src/mame/includes/segaybd.h @@ -110,7 +110,7 @@ class segaybd_state : public sega_16bit_common_base // device overrides virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // internal helpers void update_irqs(); diff --git a/src/mame/includes/simpsons.h b/src/mame/includes/simpsons.h index aa5fc8b0e6d28..237e4adb792c0 100644 --- a/src/mame/includes/simpsons.h +++ b/src/mame/includes/simpsons.h @@ -81,7 +81,7 @@ class simpsons_state : public driver_device void main_map(address_map &map); void z80_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; #endif // MAME_INCLUDES_SIMPSONS_H diff --git a/src/mame/includes/slapshot.h b/src/mame/includes/slapshot.h index e08769ba5e7c2..d38f94b0b1410 100644 --- a/src/mame/includes/slapshot.h +++ b/src/mame/includes/slapshot.h @@ -48,7 +48,7 @@ class slapshot_state : public driver_device virtual void machine_start() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: struct slapshot_tempsprite diff --git a/src/mame/includes/snes.h b/src/mame/includes/snes.h index 13f73509bd7cf..cb8d4add11e0f 100644 --- a/src/mame/includes/snes.h +++ b/src/mame/includes/snes.h @@ -320,7 +320,7 @@ class snes_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; enum { diff --git a/src/mame/includes/snk.h b/src/mame/includes/snk.h index 6f12cd7958ec3..cd47f4c829707 100644 --- a/src/mame/includes/snk.h +++ b/src/mame/includes/snk.h @@ -235,7 +235,9 @@ class snk_state : public driver_device uint32_t screen_update_tdfever(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_fitegolf2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(sgladiat_sndirq_update_callback); + transient_timer_factory m_sgladiat_sndirq_update_callback; TIMER_CALLBACK_MEMBER(sndirq_update_callback); + transient_timer_factory m_sndirq_update_callback; DECLARE_WRITE_LINE_MEMBER(ymirq_callback_2); void marvins_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, const int scrollx, const int scrolly, const int from, const int to); void tnk3_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, const int xscroll, const int yscroll); diff --git a/src/mame/includes/sorcerer.h b/src/mame/includes/sorcerer.h index 75dc96390f25e..a8a8ba8abd457 100644 --- a/src/mame/includes/sorcerer.h +++ b/src/mame/includes/sorcerer.h @@ -113,7 +113,7 @@ class sorcerer_state : public driver_device emu_timer *m_serial_timer; emu_timer *m_cassette_timer; cass_data_t m_cass_data; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; required_device m_maincpu; required_region_ptr m_rom; required_shared_ptr m_pcg; diff --git a/src/mame/includes/spacefb.h b/src/mame/includes/spacefb.h index 9c21e114baf9c..32fdffa34cffe 100644 --- a/src/mame/includes/spacefb.h +++ b/src/mame/includes/spacefb.h @@ -97,7 +97,7 @@ class spacefb_state : public driver_device void spacefb_main_io_map(address_map &map); void spacefb_main_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; #endif // MAME_INCLUDES_SPACEFB diff --git a/src/mame/includes/spectrum.h b/src/mame/includes/spectrum.h index c9a9d153c298b..d44fc39b9a120 100644 --- a/src/mame/includes/spectrum.h +++ b/src/mame/includes/spectrum.h @@ -102,7 +102,7 @@ class spectrum_state : public driver_device protected: virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // until machine/spec_snqk.cpp gets somehow disentangled virtual void plus3_update_memory() { } diff --git a/src/mame/includes/sprint4.h b/src/mame/includes/sprint4.h index 6e79cc9b1492e..8282489dd1049 100644 --- a/src/mame/includes/sprint4.h +++ b/src/mame/includes/sprint4.h @@ -52,7 +52,7 @@ class sprint4_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void sprint4_palette(palette_device &palette) const; TILE_GET_INFO_MEMBER(tile_info); diff --git a/src/mame/includes/starfire.h b/src/mame/includes/starfire.h index c2651b9c162fe..044840c092810 100644 --- a/src/mame/includes/starfire.h +++ b/src/mame/includes/starfire.h @@ -78,7 +78,6 @@ class starfire_base_state : public driver_device uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(scanline_callback); void get_pens(pen_t *pens); - void scanline_callback(uint32_t data); }; class starfire_state : public starfire_base_state diff --git a/src/mame/includes/stfight.h b/src/mame/includes/stfight.h index 9bd052528d733..67f26e05cc542 100644 --- a/src/mame/includes/stfight.h +++ b/src/mame/includes/stfight.h @@ -52,7 +52,7 @@ class stfight_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: DECLARE_WRITE_LINE_MEMBER(stfight_adpcm_int); diff --git a/src/mame/includes/superqix.h b/src/mame/includes/superqix.h index 5f1fd0cfc792d..9886dd08e3c26 100644 --- a/src/mame/includes/superqix.h +++ b/src/mame/includes/superqix.h @@ -130,11 +130,17 @@ class superqix_state : public superqix_state_base virtual void machine_init_common() override; TIMER_CALLBACK_MEMBER(z80_semaphore_assert_cb); + transient_timer_factory m_z80_semaphore_assert_cb; TIMER_CALLBACK_MEMBER(mcu_port2_w_cb); + transient_timer_factory m_mcu_port2_w_cb; TIMER_CALLBACK_MEMBER(mcu_port3_w_cb); + transient_timer_factory m_mcu_port3_w_cb; TIMER_CALLBACK_MEMBER(z80_ay1_sync_address_w_cb); + transient_timer_factory m_z80_ay1_sync_address_w_cb; TIMER_CALLBACK_MEMBER(z80_ay2_iob_w_cb); + transient_timer_factory m_z80_ay2_iob_w_cb; TIMER_CALLBACK_MEMBER(bootleg_mcu_port1_w_cb); + transient_timer_factory m_bootleg_mcu_port1_w_cb; }; diff --git a/src/mame/includes/taito_f2.h b/src/mame/includes/taito_f2.h index 819c63ac7fdf4..437365ac51cda 100644 --- a/src/mame/includes/taito_f2.h +++ b/src/mame/includes/taito_f2.h @@ -289,7 +289,7 @@ class taitof2_state : public driver_device void yesnoj_map(address_map &map); void yuyugogo_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; #endif // MAME_INCLUDES_TAITO_F2_H diff --git a/src/mame/includes/taito_f3.h b/src/mame/includes/taito_f3.h index b7abf603d00dc..96c07ba493fca 100644 --- a/src/mame/includes/taito_f3.h +++ b/src/mame/includes/taito_f3.h @@ -139,7 +139,7 @@ class taito_f3_state : public driver_device TIMER_F3_INTERRUPT3 }; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_post_load(void) override; virtual void machine_start() override; diff --git a/src/mame/includes/taito_z.h b/src/mame/includes/taito_z.h index 6e8dc99f42059..e9e1bfdc8eef2 100644 --- a/src/mame/includes/taito_z.h +++ b/src/mame/includes/taito_z.h @@ -74,7 +74,7 @@ class taitoz_state : public driver_device void init_bshark(); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_post_load() override; virtual void machine_start() override; virtual void machine_reset() override; diff --git a/src/mame/includes/taitosj.h b/src/mame/includes/taitosj.h index 2264e5afd8f78..0244b604d2c47 100644 --- a/src/mame/includes/taitosj.h +++ b/src/mame/includes/taitosj.h @@ -114,9 +114,13 @@ class taitosj_state : public driver_device void soundlatch_w(uint8_t data); void sound_semaphore2_w(uint8_t data); TIMER_CALLBACK_MEMBER(soundlatch_w_cb); + transient_timer_factory m_soundlatch_w_cb; TIMER_CALLBACK_MEMBER(soundlatch_clear7_w_cb); + transient_timer_factory m_soundlatch_clear7_w_cb; TIMER_CALLBACK_MEMBER(sound_semaphore2_w_cb); + transient_timer_factory m_sound_semaphore2_w_cb; TIMER_CALLBACK_MEMBER(sound_semaphore2_clear_w_cb); + transient_timer_factory m_sound_semaphore2_clear_w_cb; uint8_t soundlatch_r(); void soundlatch_clear7_w(uint8_t data); uint8_t soundlatch_flags_r(); diff --git a/src/mame/includes/tandy2k.h b/src/mame/includes/tandy2k.h index eb3c829b7b0c3..7967ec932a0d3 100644 --- a/src/mame/includes/tandy2k.h +++ b/src/mame/includes/tandy2k.h @@ -144,7 +144,7 @@ class tandy2k_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; virtual void device_reset_after_children() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); diff --git a/src/mame/includes/tank8.h b/src/mame/includes/tank8.h index 4ea239b148f06..a265b1599f942 100644 --- a/src/mame/includes/tank8.h +++ b/src/mame/includes/tank8.h @@ -85,7 +85,7 @@ class tank8_state : public driver_device void draw_bullets(bitmap_ind16 &bitmap, const rectangle &cliprect); void set_collision(int index); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void tank8_cpu_map(address_map &map); required_device m_maincpu; diff --git a/src/mame/includes/tankbust.h b/src/mame/includes/tankbust.h index ea13697dc325f..13fc74e6fed02 100644 --- a/src/mame/includes/tankbust.h +++ b/src/mame/includes/tankbust.h @@ -73,7 +73,9 @@ class tankbust_state : public driver_device INTERRUPT_GEN_MEMBER(vblank_irq); TIMER_CALLBACK_MEMBER(soundlatch_callback); + transient_timer_factory m_soundlatch_callback; TIMER_CALLBACK_MEMBER(soundirqline_callback); + transient_timer_factory m_soundirqline_callback; void main_map(address_map &map); void map_cpu2(address_map &map); diff --git a/src/mame/includes/tehkanwc.h b/src/mame/includes/tehkanwc.h index b26872005399c..a150f0ff81dd6 100644 --- a/src/mame/includes/tehkanwc.h +++ b/src/mame/includes/tehkanwc.h @@ -44,7 +44,7 @@ class tehkanwc_state : public driver_device virtual void machine_start() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_maincpu; diff --git a/src/mame/includes/thomson.h b/src/mame/includes/thomson.h index a36a95f6da5a1..082d5b5f5b3ab 100644 --- a/src/mame/includes/thomson.h +++ b/src/mame/includes/thomson.h @@ -236,8 +236,11 @@ class thomson_state : public driver_device uint8_t to7_5p14sd_r(offs_t offset); void to7_5p14sd_w(offs_t offset, uint8_t data); TIMER_CALLBACK_MEMBER( ans4 ); + transient_timer_factory m_ans4; TIMER_CALLBACK_MEMBER( ans3 ); + transient_timer_factory m_ans3; TIMER_CALLBACK_MEMBER( ans2 ); + transient_timer_factory m_ans2; TIMER_CALLBACK_MEMBER( ans ); void thom_palette(palette_device &palette); diff --git a/src/mame/includes/ti85.h b/src/mame/includes/ti85.h index 7c5016dce0383..f24f899f056e5 100644 --- a/src/mame/includes/ti85.h +++ b/src/mame/includes/ti85.h @@ -196,7 +196,7 @@ class ti85_state : public driver_device TIMER_CALLBACK_MEMBER(ti83_timer2_callback); //crystal timers - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void ti83pse_count(uint8_t timer, uint8_t data); emu_timer *m_crystal_timer1; diff --git a/src/mame/includes/tmc1800.h b/src/mame/includes/tmc1800.h index ce026df557e9d..4a4611b115b1b 100644 --- a/src/mame/includes/tmc1800.h +++ b/src/mame/includes/tmc1800.h @@ -77,7 +77,7 @@ class tmc1800_state : public tmc1800_base_state protected: virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; required_device m_vdc; /* keyboard state */ @@ -195,7 +195,7 @@ class nano_state : public tmc1800_base_state void nano_map(address_map &map); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void machine_reset() override; diff --git a/src/mame/includes/tmnt.h b/src/mame/includes/tmnt.h index 6eb7a278d7fd4..5e80331cc3559 100644 --- a/src/mame/includes/tmnt.h +++ b/src/mame/includes/tmnt.h @@ -201,7 +201,7 @@ class tmnt_state : public driver_device void tmnt_audio_map(address_map &map); void tmnt_main_map(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; class glfgreat_state : public tmnt_state diff --git a/src/mame/includes/triplhnt.h b/src/mame/includes/triplhnt.h index c182ebbbd556f..4497e194b64f9 100644 --- a/src/mame/includes/triplhnt.h +++ b/src/mame/includes/triplhnt.h @@ -53,7 +53,7 @@ class triplhnt_state : public driver_device void init_triplhnt(); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void video_start() override; diff --git a/src/mame/includes/trucocl.h b/src/mame/includes/trucocl.h index 879984fd705ea..086be13f4156d 100644 --- a/src/mame/includes/trucocl.h +++ b/src/mame/includes/trucocl.h @@ -33,7 +33,7 @@ class trucocl_state : public driver_device virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: int m_cur_dac_address; diff --git a/src/mame/includes/tubep.h b/src/mame/includes/tubep.h index 8f8a929113817..63913f90a8f9f 100644 --- a/src/mame/includes/tubep.h +++ b/src/mame/includes/tubep.h @@ -120,7 +120,7 @@ class tubep_state : public driver_device void tubep_sound_map(address_map &map); void tubep_sound_portmap(address_map &map); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; }; class rjammer_state : public tubep_state diff --git a/src/mame/includes/turbo.h b/src/mame/includes/turbo.h index a14929b7e5ef2..62c97e74e8eb6 100644 --- a/src/mame/includes/turbo.h +++ b/src/mame/includes/turbo.h @@ -151,6 +151,8 @@ class buckrog_state : public turbo_base_state void main_prg_map(address_map &map); void sub_prg_map(address_map &map); void sub_portmap(address_map &map); + + transient_timer_factory m_delayed_i8255_w; }; class subroc3d_state : public turbo_base_state diff --git a/src/mame/includes/ultratnk.h b/src/mame/includes/ultratnk.h index 1ed8cc35ac554..9efeff276fe89 100644 --- a/src/mame/includes/ultratnk.h +++ b/src/mame/includes/ultratnk.h @@ -39,7 +39,7 @@ class ultratnk_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum diff --git a/src/mame/includes/vectrex.h b/src/mame/includes/vectrex.h index 93e7a4fd98e84..aa0fc2a31f0fc 100644 --- a/src/mame/includes/vectrex.h +++ b/src/mame/includes/vectrex.h @@ -33,7 +33,10 @@ class vectrex_base_state : public driver_device TIMER_LIGHTPEN_TRIGGER, TIMER_VECTREX_REFRESH, TIMER_VECTREX_ZERO_INTEGRATORS, - TIMER_UPDATE_SIGNAL + TIMER_UPDATE_SIGNAL, + TIMER_UPDATE_RAMP, + TIMER_UPDATE_ANALOG, + TIMER_UPDATE_BLANK }; void vectrex_cart(device_slot_interface &device); @@ -64,7 +67,6 @@ class vectrex_base_state : public driver_device virtual void video_start() override; uint32_t screen_update_vectrex(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(vectrex_imager_change_color); - TIMER_CALLBACK_MEMBER(update_level); TIMER_CALLBACK_MEMBER(vectrex_imager_eye); TIMER_CALLBACK_MEMBER(lightpen_trigger); TIMER_CALLBACK_MEMBER(vectrex_refresh); @@ -81,7 +83,7 @@ class vectrex_base_state : public driver_device void vectrex_base(machine_config &config); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void configure_imager(bool reset_refresh, const double *imager_angles); void vectrex_configuration(); diff --git a/src/mame/includes/vendetta.h b/src/mame/includes/vendetta.h index 78e8d11bccd42..8d05c9a56ab32 100644 --- a/src/mame/includes/vendetta.h +++ b/src/mame/includes/vendetta.h @@ -42,7 +42,7 @@ class vendetta_state : public driver_device protected: virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum diff --git a/src/mame/includes/vertigo.h b/src/mame/includes/vertigo.h index 01e50a8b90579..06f2e3740cd03 100644 --- a/src/mame/includes/vertigo.h +++ b/src/mame/includes/vertigo.h @@ -49,6 +49,7 @@ class vertigo_state : public driver_device void vertigo_motor_w(uint16_t data); INTERRUPT_GEN_MEMBER(vertigo_interrupt); TIMER_CALLBACK_MEMBER(sound_command_w); + transient_timer_factory m_sound_command_w; DECLARE_WRITE_LINE_MEMBER(v_irq4_w); DECLARE_WRITE_LINE_MEMBER(v_irq3_w); void update_irq(uint8_t data); diff --git a/src/mame/includes/vidbrain.h b/src/mame/includes/vidbrain.h index 520fc1dee6643..c909974c9f338 100644 --- a/src/mame/includes/vidbrain.h +++ b/src/mame/includes/vidbrain.h @@ -64,7 +64,7 @@ class vidbrain_state : public driver_device required_ioport m_joy4_x; required_ioport m_joy4_y; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void machine_reset() override; diff --git a/src/mame/includes/videopin.h b/src/mame/includes/videopin.h index 73ddc3131afff..4919fcd654649 100644 --- a/src/mame/includes/videopin.h +++ b/src/mame/includes/videopin.h @@ -44,7 +44,7 @@ class videopin_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum diff --git a/src/mame/includes/vp415.h b/src/mame/includes/vp415.h index 86f3a88687b73..f51d2b0bdcfa1 100644 --- a/src/mame/includes/vp415.h +++ b/src/mame/includes/vp415.h @@ -79,7 +79,7 @@ class vp415_state : public driver_device private: void machine_reset() override; void machine_start() override; - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); diff --git a/src/mame/includes/wgp.h b/src/mame/includes/wgp.h index 7b6f64f5e1e72..f436f342bee9c 100644 --- a/src/mame/includes/wgp.h +++ b/src/mame/includes/wgp.h @@ -56,7 +56,7 @@ class wgp_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_post_load() override; private: diff --git a/src/mame/includes/williams.h b/src/mame/includes/williams.h index b86591f54f212..e912c6a0c3414 100644 --- a/src/mame/includes/williams.h +++ b/src/mame/includes/williams.h @@ -96,6 +96,7 @@ class williams_state : public driver_device void blitter_w(address_space &space, offs_t offset, u8 data); TIMER_CALLBACK_MEMBER(deferred_snd_cmd_w); + transient_timer_factory m_deferred_snd_cmd_w; void snd_cmd_w(u8 data); diff --git a/src/mame/includes/wolfpack.h b/src/mame/includes/wolfpack.h index f616e7cb7d330..e4af1de9c96b2 100644 --- a/src/mame/includes/wolfpack.h +++ b/src/mame/includes/wolfpack.h @@ -70,7 +70,7 @@ class wolfpack_state : public driver_device virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void wolfpack_palette(palette_device &palette) const; uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); diff --git a/src/mame/includes/wpc_dot.h b/src/mame/includes/wpc_dot.h index 910fbe82ad614..84c7100200deb 100644 --- a/src/mame/includes/wpc_dot.h +++ b/src/mame/includes/wpc_dot.h @@ -46,7 +46,7 @@ class wpc_dot_state : public driver_device // driver_device overrides virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; static const device_timer_id TIMER_VBLANK = 0; static const device_timer_id TIMER_IRQ = 1; diff --git a/src/mame/includes/x68k.h b/src/mame/includes/x68k.h index 45a68de430501..352de9e90e24d 100644 --- a/src/mame/includes/x68k.h +++ b/src/mame/includes/x68k.h @@ -340,7 +340,7 @@ class x68k_state : public driver_device static rgb_t GGGGGRRRRRBBBBBI(uint32_t raw); protected: - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void machine_start() override; virtual void machine_reset() override; void set_bus_error(uint32_t address, bool write, uint16_t mem_mask); diff --git a/src/mame/includes/xbox_pci.h b/src/mame/includes/xbox_pci.h index b0fc2aae61354..0f186f8f37b2b 100644 --- a/src/mame/includes/xbox_pci.h +++ b/src/mame/includes/xbox_pci.h @@ -228,7 +228,7 @@ class mcpx_ohci_device : public pci_device { virtual void device_start() override; virtual void device_reset() override; virtual void device_config_complete() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void config_map(address_map &map) override; @@ -296,7 +296,7 @@ class mcpx_apu_device : public pci_device { protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void config_map(address_map &map) override; diff --git a/src/mame/includes/xbox_usb.h b/src/mame/includes/xbox_usb.h index 414d34c1d957d..fc3f1b31a5244 100644 --- a/src/mame/includes/xbox_usb.h +++ b/src/mame/includes/xbox_usb.h @@ -362,7 +362,7 @@ class ohci_usb_controller void start(); void reset(); - void timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + void timer(device_timer_id id, int param, void *ptr); uint32_t read(offs_t offset); void write(offs_t offset, uint32_t data); diff --git a/src/mame/includes/z80ne.h b/src/mame/includes/z80ne.h index aace88013c965..b2f709c83838b 100644 --- a/src/mame/includes/z80ne.h +++ b/src/mame/includes/z80ne.h @@ -118,7 +118,7 @@ class z80ne_state : public driver_device TIMER_CALLBACK_MEMBER(z80ne_cassette_tc); TIMER_CALLBACK_MEMBER(z80ne_kbd_scan); - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; memory_passthrough_handler *m_rom_shadow_tap; required_device m_uart; diff --git a/src/mame/includes/zx.h b/src/mame/includes/zx.h index 408b2744bf947..3c66a43559890 100644 --- a/src/mame/includes/zx.h +++ b/src/mame/includes/zx.h @@ -125,7 +125,7 @@ class zx_state : public driver_device uint16_t m_ula_char_buffer; double m_cassette_cur_level; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void drop_sync(); void recalc_hsync(); diff --git a/src/mame/machine/315_5195.cpp b/src/mame/machine/315_5195.cpp index 21778a618efa8..0c37908640a75 100644 --- a/src/mame/machine/315_5195.cpp +++ b/src/mame/machine/315_5195.cpp @@ -118,7 +118,7 @@ void sega_315_5195_mapper_device::write(offs_t offset, u8 data) case 0x03: // write through to the sound chip - machine().scheduler().synchronize(timer_expired_delegate(FUNC(sega_315_5195_mapper_device::write_to_sound), this), data); + m_write_to_sound.synchronize(data); break; case 0x04: @@ -403,7 +403,7 @@ u8 sega_315_5195_mapper_device::pread() void sega_315_5195_mapper_device::pwrite(u8 data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(sega_315_5195_mapper_device::write_from_sound), this), data); + m_write_from_sound.synchronize(data); } @@ -418,6 +418,9 @@ void sega_315_5195_mapper_device::device_start() m_pbf_callback.resolve(); m_mcu_int_callback.resolve(); + m_write_to_sound.init(*this, FUNC(sega_315_5195_mapper_device::write_to_sound)); + m_write_from_sound.init(*this, FUNC(sega_315_5195_mapper_device::write_from_sound)); + // if we are mapping an FD1089, tell all the banks fd1089_base_device *fd1089 = dynamic_cast(m_cpu.target()); if (fd1089 != nullptr) diff --git a/src/mame/machine/315_5195.h b/src/mame/machine/315_5195.h index 3934d426d5ad3..f879cbf041753 100644 --- a/src/mame/machine/315_5195.h +++ b/src/mame/machine/315_5195.h @@ -73,7 +73,9 @@ class sega_315_5195_mapper_device : public device_t private: TIMER_CALLBACK_MEMBER(write_to_sound); + transient_timer_factory m_write_to_sound; TIMER_CALLBACK_MEMBER(write_from_sound); + transient_timer_factory m_write_from_sound; // internal region struct struct region_info diff --git a/src/mame/machine/3dom2.cpp b/src/mame/machine/3dom2.cpp index 4e3927f72f532..bdbacf5d08ebb 100644 --- a/src/mame/machine/3dom2.cpp +++ b/src/mame/machine/3dom2.cpp @@ -314,7 +314,7 @@ void m2_bda_device::device_add_mconfig(machine_config &config) // device_timer - device-specific timers //------------------------------------------------- -void m2_bda_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void m2_bda_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -864,7 +864,7 @@ void m2_vdu_device::device_reset() // device_timer - device-specific timers //------------------------------------------------- -void m2_vdu_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void m2_vdu_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -1571,7 +1571,7 @@ void m2_cde_device::device_post_load() // device_timer - a timer //------------------------------------------------- -void m2_cde_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void m2_cde_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/3dom2.h b/src/mame/machine/3dom2.h index 3326afe4c74be..79dd054be1d54 100644 --- a/src/mame/machine/3dom2.h +++ b/src/mame/machine/3dom2.h @@ -164,7 +164,7 @@ class m2_bda_device : public device_t virtual void device_reset() override; virtual void device_post_load() override; virtual void device_add_mconfig(machine_config &config) override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum base_addr @@ -400,7 +400,7 @@ class m2_vdu_device : public device_t protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum timer_id @@ -525,7 +525,7 @@ class m2_cde_device : public device_t virtual void device_start() override; virtual void device_reset() override; virtual void device_post_load() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: diff --git a/src/mame/machine/advision.cpp b/src/mame/machine/advision.cpp index 0a74cef6ccf7c..43305703872fb 100644 --- a/src/mame/machine/advision.cpp +++ b/src/mame/machine/advision.cpp @@ -29,6 +29,8 @@ void advision_state::machine_start() std::string region_tag; m_cart_rom = memregion(region_tag.assign(m_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str()); + m_sound_cmd_sync.init(*this, FUNC(advision_state::sound_cmd_sync)); + /* configure EA banking */ m_bank1->configure_entry(0, memregion(I8048_TAG)->base()); if (m_cart_rom) @@ -142,7 +144,7 @@ void advision_state::sound_d_w(uint8_t data) void advision_state::av_control_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(advision_state::sound_cmd_sync), this), data >> 4); + m_sound_cmd_sync.synchronize(data >> 4); if ((m_video_enable == 0x00) && (data & 0x10)) { diff --git a/src/mame/machine/aim65.cpp b/src/mame/machine/aim65.cpp index cf7b14ba9e125..452c40260dcd0 100644 --- a/src/mame/machine/aim65.cpp +++ b/src/mame/machine/aim65.cpp @@ -142,7 +142,7 @@ void aim65_state::machine_start() save_item(NAME(m_printer_y)); save_item(NAME(m_printer_flag)); save_item(NAME(m_printer_level)); - m_print_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(aim65_state::printer_timer),this)); + m_print_timer = timer_alloc(*this, FUNC(aim65_state::printer_timer)); m_printerRAM = make_unique_clear(64*100); save_pointer(NAME(m_printerRAM), 64*100); } diff --git a/src/mame/machine/amiga.cpp b/src/mame/machine/amiga.cpp index 95842dc8c9427..0a21194917354 100644 --- a/src/mame/machine/amiga.cpp +++ b/src/mame/machine/amiga.cpp @@ -227,7 +227,7 @@ uint32_t amiga_state::rom_mirror32_r(offs_t offset, uint32_t mem_mask) return m_maincpu->space(AS_PROGRAM).read_dword(offset + 0xf80000, mem_mask); } -void amiga_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void amiga_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/amstrad.cpp b/src/mame/machine/amstrad.cpp index 4062bf5d7dde6..85004b719c2d1 100644 --- a/src/mame/machine/amstrad.cpp +++ b/src/mame/machine/amstrad.cpp @@ -221,7 +221,7 @@ TIMER_CALLBACK_MEMBER(amstrad_state::amstrad_pc2_low) } -void amstrad_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void amstrad_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/apollo.cpp b/src/mame/machine/apollo.cpp index 03ee565f5e4bb..f54e8662401ae 100644 --- a/src/mame/machine/apollo.cpp +++ b/src/mame/machine/apollo.cpp @@ -1276,8 +1276,7 @@ void apollo_stdio_device::device_start() m_tx_w.resolve_safe(); - m_poll_timer = machine().scheduler().timer_alloc(timer_expired_delegate( - FUNC(apollo_stdio_device::poll_timer), this)); + m_poll_timer = timer_alloc(*this, FUNC(apollo_stdio_device::poll_timer)); } //------------------------------------------------- @@ -1306,7 +1305,7 @@ void apollo_stdio_device::device_reset() m_poll_timer->adjust(attotime::zero, 0, attotime::from_msec(1)); // every 1ms } -void apollo_stdio_device::device_timer(emu_timer &timer, device_timer_id id, +void apollo_stdio_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // FIXME? diff --git a/src/mame/machine/apollo_kbd.cpp b/src/mame/machine/apollo_kbd.cpp index 54302827fea9a..f8209daa187f0 100644 --- a/src/mame/machine/apollo_kbd.cpp +++ b/src/mame/machine/apollo_kbd.cpp @@ -240,7 +240,7 @@ void apollo_kbd_device::device_start() m_beeper.start(this); m_mouse.start(this); - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(apollo_kbd_device::kbd_scan_timer), this)); + m_timer.init(*this, FUNC(apollo_kbd_device::kbd_scan_timer)); } //------------------------------------------------- @@ -265,7 +265,7 @@ void apollo_kbd_device::device_reset() memset(m_keyon, 0, sizeof(m_keyon)); // start timer - m_timer->adjust( attotime::zero, 0, attotime::from_msec(5)); // every 5ms + m_timer.adjust( attotime::zero, 0, attotime::from_msec(5)); // every 5ms // keyboard comms is at 8E1, 1200 baud set_data_frame(1, 8, PARITY_EVEN, STOP_BITS_1); @@ -305,8 +305,7 @@ void apollo_kbd_device::logerror(Format &&fmt, Params &&... args) const apollo_kbd_device::beeper::beeper() : m_device(nullptr), - m_beeper(nullptr), - m_timer(nullptr) + m_beeper(nullptr) { } @@ -315,7 +314,7 @@ void apollo_kbd_device::beeper::start(apollo_kbd_device *device) m_device = device; LOG2(("start apollo_kbd::beeper")); m_beeper = m_device->m_beep.target(); - m_timer = m_device->machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(apollo_kbd_device::beeper::beeper_callback), this)); + m_timer.init(m_device->scheduler(), *this, FUNC(apollo_kbd_device::beeper::beeper_callback)); } void apollo_kbd_device::beeper::reset() @@ -334,7 +333,7 @@ void apollo_kbd_device::beeper::on() if (keyboard_has_beeper()) { m_beeper->set_state(1); - m_timer->adjust( attotime::from_msec(10), 0, attotime::zero); + m_timer.adjust( attotime::from_msec(10), 0); } } diff --git a/src/mame/machine/apollo_kbd.h b/src/mame/machine/apollo_kbd.h index 35a2720215b24..ed1e6893a9a21 100644 --- a/src/mame/machine/apollo_kbd.h +++ b/src/mame/machine/apollo_kbd.h @@ -89,7 +89,7 @@ class apollo_kbd_device : public device_t, public device_serial_interface apollo_kbd_device *m_device; // pointer back to our device beep_device *m_beeper; // the keyboard beeper device - emu_timer * m_timer; // timer to clock data in + persistent_timer m_timer; // timer to clock data in }; // the keyboard mouse @@ -133,7 +133,7 @@ class apollo_kbd_device : public device_t, public device_serial_interface uint32_t m_rx_message; uint16_t m_loopback_mode; - emu_timer* m_timer; + persistent_timer m_timer; uint16_t m_mode; uint16_t m_delay; // key press delay after initial press uint16_t m_repeat; // key press repeat rate diff --git a/src/mame/machine/apple3.cpp b/src/mame/machine/apple3.cpp index 447ab6290c418..70da2d3f84da1 100644 --- a/src/mame/machine/apple3.cpp +++ b/src/mame/machine/apple3.cpp @@ -729,8 +729,8 @@ void apple3_state::init_apple3() m_via[1]->write_pb6(1); m_via[1]->write_pb7(1); - m_scanstart = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(apple3_state::scanstart_cb),this)); - m_scanend = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(apple3_state::scanend_cb),this)); + m_scanstart = timer_alloc(*this, FUNC(apple3_state::scanstart_cb)); + m_scanend = timer_alloc(*this, FUNC(apple3_state::scanend_cb)); apple3_update_memory(); diff --git a/src/mame/machine/archimedes_keyb.cpp b/src/mame/machine/archimedes_keyb.cpp index a50b7cea07a55..a489b78fb61e7 100644 --- a/src/mame/machine/archimedes_keyb.cpp +++ b/src/mame/machine/archimedes_keyb.cpp @@ -319,7 +319,7 @@ void archimedes_keyboard_device::tra_callback() m_kout(transmit_register_get_data_bit()); } -void archimedes_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void archimedes_keyboard_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // Mouse quadrature signals // Increase Decrease diff --git a/src/mame/machine/archimedes_keyb.h b/src/mame/machine/archimedes_keyb.h index 08207f0f6b843..afd1b3514cdb2 100644 --- a/src/mame/machine/archimedes_keyb.h +++ b/src/mame/machine/archimedes_keyb.h @@ -37,7 +37,7 @@ class archimedes_keyboard_device : public device_t, public device_serial_interfa virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/mame/machine/asic65.cpp b/src/mame/machine/asic65.cpp index 6f9a021edd687..cbad976d3a565 100644 --- a/src/mame/machine/asic65.cpp +++ b/src/mame/machine/asic65.cpp @@ -169,7 +169,7 @@ void asic65_device::reset_line(int state) * *************************************/ -void asic65_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void asic65_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/asic65.h b/src/mame/machine/asic65.h index 61fdac9d26fc1..0cac912ca96a8 100644 --- a/src/mame/machine/asic65.h +++ b/src/mame/machine/asic65.h @@ -55,7 +55,7 @@ class asic65_device : public device_t virtual void device_start() override; virtual void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: u8 m_asic65_type; diff --git a/src/mame/machine/atarigen.cpp b/src/mame/machine/atarigen.cpp index 057af93511c87..d649493f46b8e 100644 --- a/src/mame/machine/atarigen.cpp +++ b/src/mame/machine/atarigen.cpp @@ -35,13 +35,13 @@ void atarigen_state::machine_reset() } -void atarigen_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void atarigen_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { // unhalt the CPU that was passed as a pointer case TID_UNHALT_CPU: - reinterpret_cast(ptr)->execute().set_input_line(INPUT_LINE_HALT, CLEAR_LINE); + m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); break; } } @@ -59,6 +59,8 @@ void atarigen_state::device_timer(emu_timer &timer, device_timer_id id, int para void atarigen_state::halt_until_hblank_0(device_t &device, screen_device &screen) { + assert(&device == m_maincpu); + // halt the CPU until the next HBLANK int hpos = screen.hpos(); int width = screen.width(); @@ -70,7 +72,7 @@ void atarigen_state::halt_until_hblank_0(device_t &device, screen_device &screen // halt and set a timer to wake up device.execute().set_input_line(INPUT_LINE_HALT, ASSERT_LINE); - timer_set(screen.scan_period() * (hblank - hpos) / width, TID_UNHALT_CPU, 0, (void *)&device); + timer_set(screen.scan_period() * (hblank - hpos) / width, TID_UNHALT_CPU); } diff --git a/src/mame/machine/atarigen.h b/src/mame/machine/atarigen.h index 2110928411f50..366e48067dd8c 100644 --- a/src/mame/machine/atarigen.h +++ b/src/mame/machine/atarigen.h @@ -28,7 +28,7 @@ class atarigen_state : public driver_device // users must call through to these virtual void machine_start() override; virtual void machine_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // video helpers void halt_until_hblank_0(device_t &device, screen_device &screen); diff --git a/src/mame/machine/atariscom.cpp b/src/mame/machine/atariscom.cpp index 7165482d2f645..462e16456be27 100644 --- a/src/mame/machine/atariscom.cpp +++ b/src/mame/machine/atariscom.cpp @@ -81,7 +81,7 @@ void atari_sound_comm_device::device_reset() // calbacks //------------------------------------------------- -void atari_sound_comm_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void atari_sound_comm_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/atariscom.h b/src/mame/machine/atariscom.h index 6b1d96917d54f..4908e36bf3d66 100644 --- a/src/mame/machine/atariscom.h +++ b/src/mame/machine/atariscom.h @@ -69,7 +69,7 @@ class atari_sound_comm_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // timer IDs diff --git a/src/mame/machine/balsente.cpp b/src/mame/machine/balsente.cpp index 4724cbec2fa35..b71d8a7254fd4 100644 --- a/src/mame/machine/balsente.cpp +++ b/src/mame/machine/balsente.cpp @@ -37,7 +37,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(balsente_state::interrupt_timer) m_maincpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); /* it will turn off on the next HBLANK */ - machine().scheduler().timer_set(m_screen->time_until_pos(param, BALSENTE_HBSTART), timer_expired_delegate(FUNC(balsente_state::irq_off),this)); + m_irq_off.call_after(m_screen->time_until_pos(param, BALSENTE_HBSTART)); /* if this is Grudge Match, update the steering */ if (m_grudge_steering_result & 0x80) @@ -72,6 +72,9 @@ void balsente_state::machine_start() m_acia->write_dcd(0); } + m_irq_off.init(*this, FUNC(balsente_state::irq_off)); + m_adc_finished.init(*this, FUNC(balsente_state::adc_finished)); + save_item(NAME(m_nstocker_bits)); save_item(NAME(m_spiker_expand_color)); save_item(NAME(m_spiker_expand_bgcolor)); @@ -318,7 +321,7 @@ void balsente_state::adc_select_w(offs_t offset, uint8_t data) /* set a timer to go off and read the value after 50us */ /* it's important that we do this for Mini Golf */ logerror("adc_select %d\n", offset & 7); - machine().scheduler().timer_set(attotime::from_usec(50), timer_expired_delegate(FUNC(balsente_state::adc_finished),this), offset & 7); + m_adc_finished.call_after(attotime::from_usec(50), offset & 7); } uint8_t balsente_state::teamht_extra_r() diff --git a/src/mame/machine/bbc.cpp b/src/mame/machine/bbc.cpp index 4281e2b0f1c74..313f690c0dc5f 100644 --- a/src/mame/machine/bbc.cpp +++ b/src/mame/machine/bbc.cpp @@ -1378,8 +1378,8 @@ void bbc_state::init_bbc() m_nr_high_tones = 0; m_serproc_data = 0; m_cass_out_enabled = 0; - m_tape_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bbc_state::tape_timer_cb), this)); - m_reset_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bbc_state::reset_timer_cb), this)); + m_tape_timer = timer_alloc(*this, FUNC(bbc_state::tape_timer_cb)); + m_reset_timer = timer_alloc(*this, FUNC(bbc_state::reset_timer_cb)); /* vertical sync pulse from video circuit */ m_via6522_0->write_ca1(1); diff --git a/src/mame/machine/bebox.cpp b/src/mame/machine/bebox.cpp index dbc7f198063e5..1bc54875944c8 100644 --- a/src/mame/machine/bebox.cpp +++ b/src/mame/machine/bebox.cpp @@ -726,7 +726,7 @@ void bebox_state::scsi53c810_pci_write(int function, int offset, uint32_t data, } -void bebox_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void bebox_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/bk.cpp b/src/mame/machine/bk.cpp index d9c5a7c6907cd..def436905c43b 100644 --- a/src/mame/machine/bk.cpp +++ b/src/mame/machine/bk.cpp @@ -63,7 +63,7 @@ void bk_state::machine_start() m_maincpu->set_input_line(t11_device::VEC_LINE, ASSERT_LINE); - m_kbd_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bk_state::keyboard_callback), this)); + m_kbd_timer = timer_alloc(*this, FUNC(bk_state::keyboard_callback)); m_kbd_timer->adjust(attotime::from_hz(2400), 0, attotime::from_hz(2400)); } diff --git a/src/mame/machine/bublbobl.cpp b/src/mame/machine/bublbobl.cpp index 4cab1e64a4731..d7ab8fde203f8 100644 --- a/src/mame/machine/bublbobl.cpp +++ b/src/mame/machine/bublbobl.cpp @@ -127,7 +127,7 @@ uint8_t bublbobl_state::tokiob_mcu_r() } -void bublbobl_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void bublbobl_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/cdicdic.cpp b/src/mame/machine/cdicdic.cpp index 4eb6cd44dac65..43575734aee5e 100644 --- a/src/mame/machine/cdicdic.cpp +++ b/src/mame/machine/cdicdic.cpp @@ -1286,18 +1286,18 @@ void cdicdic_device::device_start() save_item(NAME(m_audio_sample_freq)); save_item(NAME(m_audio_sample_size)); - m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cdicdic_device::trigger_readback_int), this)); + m_interrupt_timer = timer_alloc(*this, FUNC(cdicdic_device::trigger_readback_int)); m_interrupt_timer->adjust(attotime::never); - m_audio_sample_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cdicdic_device::audio_sample_trigger), this)); + m_audio_sample_timer = timer_alloc(*this, FUNC(cdicdic_device::audio_sample_trigger)); m_audio_sample_timer->adjust(attotime::never); - m_audio_playback_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cdicdic_device::initial_sample_trigger), this)); + m_audio_playback_timer = timer_alloc(*this, FUNC(cdicdic_device::initial_sample_trigger)); m_audio_playback_timer->adjust(attotime::never); - m_periodic_sample_timer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cdicdic_device::periodic_sample_trigger), this)); + m_periodic_sample_timer[0] = timer_alloc(*this, FUNC(cdicdic_device::periodic_sample_trigger)); m_periodic_sample_timer[0]->adjust(attotime::never); - m_periodic_sample_timer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cdicdic_device::periodic_sample_trigger), this)); + m_periodic_sample_timer[1] = timer_alloc(*this, FUNC(cdicdic_device::periodic_sample_trigger)); m_periodic_sample_timer[1]->adjust(attotime::never); m_ram = std::make_unique(0x3c00/2); diff --git a/src/mame/machine/cdislavehle.cpp b/src/mame/machine/cdislavehle.cpp index c8e01d67a1046..d1ae57a7ea1db 100644 --- a/src/mame/machine/cdislavehle.cpp +++ b/src/mame/machine/cdislavehle.cpp @@ -482,7 +482,7 @@ void cdislave_hle_device::device_start() save_item(NAME(m_fake_mouse_x)); save_item(NAME(m_fake_mouse_y)); - m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cdislave_hle_device::trigger_readback_int), this)); + m_interrupt_timer = timer_alloc(*this, FUNC(cdislave_hle_device::trigger_readback_int)); m_interrupt_timer->adjust(attotime::never); } diff --git a/src/mame/machine/cedar_magnet_board.cpp b/src/mame/machine/cedar_magnet_board.cpp index 2cffb11abb346..82715f269eb42 100644 --- a/src/mame/machine/cedar_magnet_board.cpp +++ b/src/mame/machine/cedar_magnet_board.cpp @@ -57,22 +57,22 @@ void cedar_magnet_board_interface::irq_hold() void cedar_magnet_board_interface::halt_assert() { - m_halt_assert_timer->adjust(attotime::from_usec(2)); + m_halt_assert_timer.adjust(attotime::from_usec(2)); } void cedar_magnet_board_interface::halt_clear() { - m_halt_clear_timer->adjust(attotime::from_usec(2)); + m_halt_clear_timer.adjust(attotime::from_usec(2)); } void cedar_magnet_board_interface::reset_assert() { - m_reset_assert_timer->adjust(attotime::from_usec(1)); + m_reset_assert_timer.adjust(attotime::from_usec(1)); } void cedar_magnet_board_interface::reset_clear() { - m_reset_clear_timer->adjust(attotime::from_usec(1)); + m_reset_clear_timer.adjust(attotime::from_usec(1)); } void cedar_magnet_board_interface::interface_pre_reset() @@ -82,8 +82,8 @@ void cedar_magnet_board_interface::interface_pre_reset() void cedar_magnet_board_interface::interface_pre_start() { - m_halt_assert_timer = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cedar_magnet_board_interface::halt_assert_callback), this)); - m_halt_clear_timer = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cedar_magnet_board_interface::halt_clear_callback), this)); - m_reset_assert_timer = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cedar_magnet_board_interface::reset_assert_callback), this)); - m_reset_clear_timer = device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cedar_magnet_board_interface::reset_clear_callback), this)); + m_halt_assert_timer.init(device().scheduler(), *this, FUNC(cedar_magnet_board_interface::halt_assert_callback)); + m_halt_clear_timer.init(device().scheduler(), *this, FUNC(cedar_magnet_board_interface::halt_clear_callback)); + m_reset_assert_timer.init(device().scheduler(), *this, FUNC(cedar_magnet_board_interface::reset_assert_callback)); + m_reset_clear_timer.init(device().scheduler(), *this, FUNC(cedar_magnet_board_interface::reset_clear_callback)); } diff --git a/src/mame/machine/cedar_magnet_board.h b/src/mame/machine/cedar_magnet_board.h index 6ec9630968721..bcf446cf638a9 100644 --- a/src/mame/machine/cedar_magnet_board.h +++ b/src/mame/machine/cedar_magnet_board.h @@ -45,10 +45,10 @@ class cedar_magnet_board_interface : public device_interface TIMER_CALLBACK_MEMBER(reset_clear_callback); bool m_is_running; - emu_timer *m_halt_assert_timer; - emu_timer *m_halt_clear_timer; - emu_timer *m_reset_assert_timer; - emu_timer *m_reset_clear_timer; + persistent_timer m_halt_assert_timer; + persistent_timer m_halt_clear_timer; + persistent_timer m_reset_assert_timer; + persistent_timer m_reset_clear_timer; }; #endif // MAME_MACHINE_CEDAR_MAGNET_BOARD_H diff --git a/src/mame/machine/cmi_mkbd.cpp b/src/mame/machine/cmi_mkbd.cpp index 2128f88c5b185..f99eaaadb6dd5 100644 --- a/src/mame/machine/cmi_mkbd.cpp +++ b/src/mame/machine/cmi_mkbd.cpp @@ -79,7 +79,7 @@ void cmi_music_keyboard_device::device_start() m_scnd = 0; } -void cmi_music_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cmi_music_keyboard_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/cmi_mkbd.h b/src/mame/machine/cmi_mkbd.h index 653083ce93949..97d96574ad163 100644 --- a/src/mame/machine/cmi_mkbd.h +++ b/src/mame/machine/cmi_mkbd.h @@ -38,7 +38,7 @@ class cmi_music_keyboard_device : public device_t virtual ioport_constructor device_input_ports() const override; virtual void device_resolve_objects() override; virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void cmi10_u20_a_w(u8 data); diff --git a/src/mame/machine/coco.cpp b/src/mame/machine/coco.cpp index 8e08656f447a0..cdd5a1f7ff26a 100644 --- a/src/mame/machine/coco.cpp +++ b/src/mame/machine/coco.cpp @@ -189,7 +189,7 @@ void coco_state::device_reset() // device_timer //------------------------------------------------- -void coco_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void coco_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/machine/cuda.cpp b/src/mame/machine/cuda.cpp index 52194dbee5566..cbfc05e6c5af3 100644 --- a/src/mame/machine/cuda.cpp +++ b/src/mame/machine/cuda.cpp @@ -457,7 +457,7 @@ void cuda_device::device_reset() last_adb = 0; } -void cuda_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cuda_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == 0) { diff --git a/src/mame/machine/cuda.h b/src/mame/machine/cuda.h index 37c5a164729fc..c1282fdee0768 100644 --- a/src/mame/machine/cuda.h +++ b/src/mame/machine/cuda.h @@ -87,7 +87,7 @@ class cuda_device : public device_t, public device_nvram_interface required_device m_maincpu; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint8_t ddrs[3]; diff --git a/src/mame/machine/dc.cpp b/src/mame/machine/dc.cpp index c681fe19bc26a..26e60c220cf00 100644 --- a/src/mame/machine/dc.cpp +++ b/src/mame/machine/dc.cpp @@ -231,7 +231,7 @@ void dc_state::g2_dma_execute(address_space &space, int channel) m_g2_dma[channel].flag = (m_g2_dma[channel].indirect & 1) ? 1 : 0; /* Note: if you trigger an instant DMA IRQ trigger, sfz3upper doesn't play any bgm. */ /* TODO: timing of this */ - machine().scheduler().timer_set(m_maincpu->cycles_to_attotime(m_g2_dma[channel].size / 4), timer_expired_delegate(FUNC(dc_state::g2_dma_irq), this), channel); + m_g2_dma_irq.call_after(m_maincpu->cycles_to_attotime(m_g2_dma[channel].size / 4), channel); } // register decode helpers @@ -441,7 +441,7 @@ void dc_state::dc_sysctrl_w(offs_t offset, uint64_t data, uint64_t mem_mask) dc_sysctrl_regs[SB_C2DSTAT]=address+ddtdata.length; /* TODO: timing is a guess */ - machine().scheduler().timer_set(m_maincpu->cycles_to_attotime(ddtdata.length/4), timer_expired_delegate(FUNC(dc_state::ch2_dma_irq),this)); + m_ch2_dma_irq.call_after(m_maincpu->cycles_to_attotime(ddtdata.length/4)); } break; @@ -657,6 +657,9 @@ void dc_state::machine_start() m_maincpu->sh2drc_set_options(SH2DRC_STRICT_VERIFY | SH2DRC_STRICT_PCREL); m_maincpu->sh2drc_add_fastram(0x0c000000, 0x0cffffff, false, dc_ram); + m_g2_dma_irq.init(*this, FUNC(dc_state::g2_dma_irq)); + m_ch2_dma_irq.init(*this, FUNC(dc_state::ch2_dma_irq)); + // save states save_pointer(NAME(dc_sysctrl_regs), 0x200/4); save_pointer(NAME(g2bus_regs), 0x100/4); diff --git a/src/mame/machine/dccons.cpp b/src/mame/machine/dccons.cpp index 08634ce1bd2cd..1acc356713837 100644 --- a/src/mame/machine/dccons.cpp +++ b/src/mame/machine/dccons.cpp @@ -88,7 +88,7 @@ TIMER_CALLBACK_MEMBER(dc_cons_state::atapi_xfer_end ) void dc_cons_state::dreamcast_atapi_init() { - atapi_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(dc_cons_state::atapi_xfer_end),this)); + atapi_timer = timer_alloc(*this, FUNC(dc_cons_state::atapi_xfer_end)); atapi_timer->adjust(attotime::never); save_item(NAME(atapi_xferlen)); save_item(NAME(atapi_xferbase)); diff --git a/src/mame/machine/dec_lk201.cpp b/src/mame/machine/dec_lk201.cpp index 3230a3b1dda54..0a29289cfa68a 100644 --- a/src/mame/machine/dec_lk201.cpp +++ b/src/mame/machine/dec_lk201.cpp @@ -572,7 +572,7 @@ void lk201_device::device_reset() m_led_hold = 0; // led11 } -void lk201_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void lk201_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/dec_lk201.h b/src/mame/machine/dec_lk201.h index 87a7e45a65d98..f207683931ede 100644 --- a/src/mame/machine/dec_lk201.h +++ b/src/mame/machine/dec_lk201.h @@ -67,7 +67,7 @@ class lk201_device : public device_t, public device_serial_interface virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_serial overrides virtual void rcv_complete() override; // Rx completed receiving byte diff --git a/src/mame/machine/deco146.cpp b/src/mame/machine/deco146.cpp index 6d4368171be30..c0d7c14ec2f1a 100644 --- a/src/mame/machine/deco146.cpp +++ b/src/mame/machine/deco146.cpp @@ -1244,7 +1244,7 @@ void deco_146_base_device::write_protport(u16 address, u16 data, u16 mem_mask) else if ((address & 0xff) == m_soundlatch_port) { logerror("LOAD SOUND LATCH: %04x\n", data); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(deco_146_base_device::write_soundlatch), this), data & 0xff); + m_write_soundlatch.synchronize(data & 0xff); } // always store @@ -1340,6 +1340,8 @@ void deco_146_base_device::device_start() m_port_c_r.resolve_safe(0xffff); m_soundlatch_irq_cb.resolve_safe(); + m_write_soundlatch.init(*this, FUNC(deco_146_base_device::write_soundlatch)); + save_item(NAME(m_xor)); save_item(NAME(m_nand)); diff --git a/src/mame/machine/deco146.h b/src/mame/machine/deco146.h index 31a4b5a4af5c5..76ab9238d6cdb 100644 --- a/src/mame/machine/deco146.h +++ b/src/mame/machine/deco146.h @@ -118,6 +118,7 @@ class deco_146_base_device : public device_t private: TIMER_CALLBACK_MEMBER(write_soundlatch); + transient_timer_factory m_write_soundlatch; u8 region_selects[6]; diff --git a/src/mame/machine/deco_irq.cpp b/src/mame/machine/deco_irq.cpp index ce4bac5c0a214..6eef062d17f83 100644 --- a/src/mame/machine/deco_irq.cpp +++ b/src/mame/machine/deco_irq.cpp @@ -74,7 +74,7 @@ void deco_irq_device::device_start() m_vblank_irq_cb.resolve_safe(); // allocate scanline timer and start it - m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(deco_irq_device::scanline_callback), this)); + m_scanline_timer = timer_alloc(*this, FUNC(deco_irq_device::scanline_callback)); m_scanline_timer->adjust(m_screen->time_until_pos(0)); // register for save states diff --git a/src/mame/machine/decocass_tape.cpp b/src/mame/machine/decocass_tape.cpp index 199a11c1e47c2..fc821eb0f0ed9 100644 --- a/src/mame/machine/decocass_tape.cpp +++ b/src/mame/machine/decocass_tape.cpp @@ -82,7 +82,7 @@ void decocass_tape_device::device_start() int curblock, offs, numblocks; /* fetch the data pointer */ - m_tape_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(decocass_tape_device::tape_clock_callback), this)); + m_tape_timer = timer_alloc(*this, FUNC(decocass_tape_device::tape_clock_callback)); if (!m_tape_data.found()) return; diff --git a/src/mame/machine/decopincpu.cpp b/src/mame/machine/decopincpu.cpp index 38e9d5c2d062d..ee03641e780d2 100644 --- a/src/mame/machine/decopincpu.cpp +++ b/src/mame/machine/decopincpu.cpp @@ -58,7 +58,7 @@ static INPUT_PORTS_START( decocpu1 ) PORT_CONFSETTING( 0x10, "English" ) INPUT_PORTS_END -void decocpu_type1_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void decocpu_type1_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/machine/decopincpu.h b/src/mame/machine/decopincpu.h index ba3ae40cc0627..468b161039d6f 100644 --- a/src/mame/machine/decopincpu.h +++ b/src/mame/machine/decopincpu.h @@ -62,7 +62,7 @@ class decocpu_type1_device : public device_t virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual ioport_constructor device_input_ports() const override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void decocpu1_map(address_map &map); diff --git a/src/mame/machine/dmac_0266.cpp b/src/mame/machine/dmac_0266.cpp index e3343baa8e003..b861d2ff250a5 100644 --- a/src/mame/machine/dmac_0266.cpp +++ b/src/mame/machine/dmac_0266.cpp @@ -58,7 +58,7 @@ void dmac_0266_device::device_start() save_item(NAME(m_req_state)); - m_dma_check = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(dmac_0266_device::dma_check), this)); + m_dma_check = timer_alloc(*this, FUNC(dmac_0266_device::dma_check)); m_req_state = false; } diff --git a/src/mame/machine/dmac_0448.cpp b/src/mame/machine/dmac_0448.cpp index 578c09fafd8b7..93e0e13a907e1 100644 --- a/src/mame/machine/dmac_0448.cpp +++ b/src/mame/machine/dmac_0448.cpp @@ -54,8 +54,8 @@ void dmac_0448_device::device_start() m_dma_r.resolve_all_safe(0); m_dma_w.resolve_all_safe(); - m_irq_check = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(dmac_0448_device::irq_check), this)); - m_dma_check = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(dmac_0448_device::dma_check), this)); + m_irq_check = timer_alloc(*this, FUNC(dmac_0448_device::irq_check)); + m_dma_check = timer_alloc(*this, FUNC(dmac_0448_device::dma_check)); m_out_int_state = false; m_gsel = 0; diff --git a/src/mame/machine/egret.cpp b/src/mame/machine/egret.cpp index e9276c0535204..26c9610bf7952 100644 --- a/src/mame/machine/egret.cpp +++ b/src/mame/machine/egret.cpp @@ -468,7 +468,7 @@ void egret_device::device_reset() last_adb = 0; } -void egret_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void egret_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { onesec |= 0x40; diff --git a/src/mame/machine/egret.h b/src/mame/machine/egret.h index b4ea5882b0d5a..a4a39579d86a6 100644 --- a/src/mame/machine/egret.h +++ b/src/mame/machine/egret.h @@ -98,7 +98,7 @@ class egret_device : public device_t, public device_nvram_interface required_device m_maincpu; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint8_t ddrs[3]; diff --git a/src/mame/machine/elan_eu3a05commonsys.cpp b/src/mame/machine/elan_eu3a05commonsys.cpp index 38713b8789c19..a62aa04700091 100644 --- a/src/mame/machine/elan_eu3a05commonsys.cpp +++ b/src/mame/machine/elan_eu3a05commonsys.cpp @@ -228,7 +228,7 @@ void elan_eu3a05commonsys_device::map(address_map &map) } -void elan_eu3a05commonsys_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void elan_eu3a05commonsys_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/elan_eu3a05commonsys.h b/src/mame/machine/elan_eu3a05commonsys.h index 07016ad1207f1..ea32e7c6c9c51 100644 --- a/src/mame/machine/elan_eu3a05commonsys.h +++ b/src/mame/machine/elan_eu3a05commonsys.h @@ -31,7 +31,7 @@ class elan_eu3a05commonsys_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; required_device m_cpu; required_device m_bank; diff --git a/src/mame/machine/electron.cpp b/src/mame/machine/electron.cpp index ac6b9df4dc4a6..4ae40a6aa89d5 100644 --- a/src/mame/machine/electron.cpp +++ b/src/mame/machine/electron.cpp @@ -28,7 +28,7 @@ void electron_state::waitforramsync() } -void electron_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void electron_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/esqpanel.cpp b/src/mame/machine/esqpanel.cpp index c860d4a4d0de8..5ac25991f6396 100644 --- a/src/mame/machine/esqpanel.cpp +++ b/src/mame/machine/esqpanel.cpp @@ -483,7 +483,7 @@ void esqpanel_device::device_stop() m_external_panel_server = nullptr; } -void esqpanel_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void esqpanel_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (ESQPANEL_EXTERNAL_TIMER_ID == id) { diff --git a/src/mame/machine/esqpanel.h b/src/mame/machine/esqpanel.h index 77ffc6f9dafbe..1d0fff73b4a7b 100644 --- a/src/mame/machine/esqpanel.h +++ b/src/mame/machine/esqpanel.h @@ -40,7 +40,7 @@ class esqpanel_device : public device_t, public device_serial_interface virtual void device_start() override; virtual void device_reset() override; virtual void device_stop() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // serial overrides virtual void rcv_complete() override; // Rx completed receiving byte diff --git a/src/mame/machine/esqvfd.cpp b/src/mame/machine/esqvfd.cpp index b8c2ad44f318d..81143a272bd74 100644 --- a/src/mame/machine/esqvfd.cpp +++ b/src/mame/machine/esqvfd.cpp @@ -140,7 +140,7 @@ void esqvfd_device::device_reset() memset(m_dirty, 1, sizeof(m_attrs)); } -void esqvfd_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void esqvfd_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { } diff --git a/src/mame/machine/esqvfd.h b/src/mame/machine/esqvfd.h index 3b0e008ed5e4b..87edf8811c6f1 100644 --- a/src/mame/machine/esqvfd.h +++ b/src/mame/machine/esqvfd.h @@ -48,7 +48,7 @@ class esqvfd_device : public device_t { virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; output_helper::ptr m_vfds; int m_cursx, m_cursy; diff --git a/src/mame/machine/fidel_clockdiv.cpp b/src/mame/machine/fidel_clockdiv.cpp index 13ec96c2ee113..26a86a43917ac 100644 --- a/src/mame/machine/fidel_clockdiv.cpp +++ b/src/mame/machine/fidel_clockdiv.cpp @@ -23,7 +23,7 @@ Used to compensate slow memory chips in chess computer models: SC12, AS12, PC, E void fidel_clockdiv_state::machine_start() { // dummy timer for cpu divider - m_div_timer = machine().scheduler().timer_alloc(timer_expired_delegate(), this); + m_div_timer = timer_alloc(); } diff --git a/src/mame/machine/fm_scsi.cpp b/src/mame/machine/fm_scsi.cpp index f84738e3ec098..b20481f320c25 100644 --- a/src/mame/machine/fm_scsi.cpp +++ b/src/mame/machine/fm_scsi.cpp @@ -117,7 +117,7 @@ int fmscsi_device::get_scsi_cmd_len(uint8_t cbyte) //return 6; } -void fmscsi_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void fmscsi_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/machine/fm_scsi.h b/src/mame/machine/fm_scsi.h index c9b9e55d83130..6cd4b22d9eb3e 100644 --- a/src/mame/machine/fm_scsi.h +++ b/src/mame/machine/fm_scsi.h @@ -42,7 +42,7 @@ class fmscsi_device : public legacy_scsi_host_adapter // device-level overrides (none are required, but these are common) virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // internal device state goes here diff --git a/src/mame/machine/gaelco3d.cpp b/src/mame/machine/gaelco3d.cpp index 9e3c106fca4cc..72d2dab216752 100644 --- a/src/mame/machine/gaelco3d.cpp +++ b/src/mame/machine/gaelco3d.cpp @@ -206,7 +206,7 @@ void gaelco_serial_device::device_start() assert(strlen(tag()) < 20); m_irq_handler.resolve_safe(); - m_sync_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gaelco_serial_device::link_cb), this)); + m_sync_timer = timer_alloc(*this, FUNC(gaelco_serial_device::link_cb)); /* register for save states */ //save_item(NAME(earom->offset)); @@ -216,6 +216,8 @@ void gaelco_serial_device::device_start() m_sync_timer->adjust(attotime::zero,0,attotime::from_hz(SYNC_FREQ)); #endif + m_set_status_cb.init(*this, FUNC(gaelco_serial_device::set_status_cb)); + m_os_shmem = osd_sharedmem_alloc(PATH_NAME, 0, sizeof(shmem_t)); if (m_os_shmem == nullptr) { @@ -274,7 +276,7 @@ TIMER_CALLBACK_MEMBER( gaelco_serial_device::set_status_cb ) void gaelco_serial_device::set_status(uint8_t mask, uint8_t set, int wait) { - machine().scheduler().timer_set(attotime::from_hz(wait), timer_expired_delegate(FUNC(gaelco_serial_device::set_status_cb), this), (mask << 8)|set); + m_set_status_cb.call_after(attotime::from_hz(wait), (mask << 8) | set); } void gaelco_serial_device::process_in() diff --git a/src/mame/machine/gaelco3d.h b/src/mame/machine/gaelco3d.h index e4b1432b27c32..1731751c298af 100644 --- a/src/mame/machine/gaelco3d.h +++ b/src/mame/machine/gaelco3d.h @@ -95,6 +95,7 @@ class gaelco_serial_device : public device_t std::mutex m_mutex; TIMER_CALLBACK_MEMBER( set_status_cb ); + transient_timer_factory m_set_status_cb; TIMER_CALLBACK_MEMBER( link_cb ); void set_status(uint8_t mask, uint8_t set, int wait); void process_in(); diff --git a/src/mame/machine/galaxold.cpp b/src/mame/machine/galaxold.cpp index c7a57bd1754a8..3a4ad578aa058 100644 --- a/src/mame/machine/galaxold.cpp +++ b/src/mame/machine/galaxold.cpp @@ -49,7 +49,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(galaxold_state::galaxold_interrupt_timer) param = (param + 0x10) & 0xff; - timer.adjust(m_screen->time_until_pos(param), param); + m_int_timer->adjust(m_screen->time_until_pos(param), param); } @@ -66,7 +66,7 @@ void galaxold_state::machine_reset_common(int line) m_7474_9m_1->preset_w(0); /* start a timer to generate interrupts */ - subdevice("int_timer")->adjust(m_screen->time_until_pos(0)); + m_int_timer->adjust(m_screen->time_until_pos(0)); } MACHINE_RESET_MEMBER(galaxold_state,galaxold) diff --git a/src/mame/machine/gamecom.cpp b/src/mame/machine/gamecom.cpp index 94ce240f44371..8fe3fa6c953e1 100644 --- a/src/mame/machine/gamecom.cpp +++ b/src/mame/machine/gamecom.cpp @@ -611,9 +611,9 @@ void gamecom_state::gamecom_update_timers(uint8_t data) void gamecom_state::init_gamecom() { - m_clock_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gamecom_state::gamecom_clock_timer_callback),this)); - m_sound0_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gamecom_state::gamecom_sound0_timer_callback),this)); - m_sound1_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gamecom_state::gamecom_sound1_timer_callback),this)); + m_clock_timer = timer_alloc(*this, FUNC(gamecom_state::gamecom_clock_timer_callback)); + m_sound0_timer = timer_alloc(*this, FUNC(gamecom_state::gamecom_sound0_timer_callback)); + m_sound1_timer = timer_alloc(*this, FUNC(gamecom_state::gamecom_sound1_timer_callback)); m_sound0_timer->adjust(attotime::from_seconds(1), 0, attotime::from_seconds(1)); m_sound1_timer->adjust(attotime::from_seconds(1), 0, attotime::from_seconds(1)); m_p_ram = m_share_maincpu; // required here because pio_w gets called before machine_reset diff --git a/src/mame/machine/harddriv.cpp b/src/mame/machine/harddriv.cpp index acd7ab1050534..26b2d672c4088 100644 --- a/src/mame/machine/harddriv.cpp +++ b/src/mame/machine/harddriv.cpp @@ -38,6 +38,10 @@ void harddriv_state::device_start() { m_lamps.resolve(); + m_xsdp_sport1_irq_off_callback.init(*this, FUNC(harddriv_state::xsdp_sport1_irq_off_callback)); + m_deferred_adsp_bank_switch.init(*this, FUNC(harddriv_state::deferred_adsp_bank_switch)); + m_rddsp32_sync_cb.init(*this, FUNC(harddriv_state::rddsp32_sync_cb)); + /* predetermine memory regions */ m_adsp_pgm_memory_word = (uint16_t *)(reinterpret_cast(m_adsp_pgm_memory.target()) + 1); @@ -46,7 +50,7 @@ void harddriv_state::device_start() } -void harddriv_state::device_reset() +void harddriv_state::device_reset() { /* halt several of the DSPs to start */ m_adsp->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); @@ -697,7 +701,7 @@ void harddriv_state::hd68k_adsp_control_w(offs_t offset, uint16_t data) case 3: logerror("ADSP bank = %d (deferred)\n", val); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(harddriv_state::deferred_adsp_bank_switch),this), val); + m_deferred_adsp_bank_switch.synchronize(val); break; case 5: @@ -1334,7 +1338,7 @@ void harddriv_state::hdds3sdsp_serial_tx_callback(uint32_t data) m_ds3sdsp_sdata = data; m_ds3xdsp->set_input_line(ADSP2105_SPORT1_RX, ASSERT_LINE); - machine().scheduler().timer_set(attotime::from_nsec(200), timer_expired_delegate(FUNC(harddriv_state::xsdp_sport1_irq_off_callback), this)); + m_xsdp_sport1_irq_off_callback.call_after(attotime::from_nsec(200)); } @@ -1634,7 +1638,7 @@ void harddriv_state::rddsp32_sync0_w(offs_t offset, uint32_t data, uint32_t mem_ COMBINE_DATA(&newdata); m_dataptr[m_next_msp_sync % MAX_MSP_SYNC] = dptr; m_dataval[m_next_msp_sync % MAX_MSP_SYNC] = newdata; - machine().scheduler().synchronize(timer_expired_delegate(FUNC(harddriv_state::rddsp32_sync_cb),this), m_next_msp_sync++ % MAX_MSP_SYNC); + m_rddsp32_sync_cb.synchronize(m_next_msp_sync++ % MAX_MSP_SYNC); } else COMBINE_DATA(&m_rddsp32_sync[0][offset]); @@ -1650,7 +1654,7 @@ void harddriv_state::rddsp32_sync1_w(offs_t offset, uint32_t data, uint32_t mem_ COMBINE_DATA(&newdata); m_dataptr[m_next_msp_sync % MAX_MSP_SYNC] = dptr; m_dataval[m_next_msp_sync % MAX_MSP_SYNC] = newdata; - machine().scheduler().synchronize(timer_expired_delegate(FUNC(harddriv_state::rddsp32_sync_cb),this), m_next_msp_sync++ % MAX_MSP_SYNC); + m_rddsp32_sync_cb.synchronize(m_next_msp_sync++ % MAX_MSP_SYNC); } else COMBINE_DATA(&m_rddsp32_sync[1][offset]); diff --git a/src/mame/machine/hec2hrp.cpp b/src/mame/machine/hec2hrp.cpp index 3cfd5d26ed37d..3ca50e23f17dd 100644 --- a/src/mame/machine/hec2hrp.cpp +++ b/src/mame/machine/hec2hrp.cpp @@ -813,7 +813,7 @@ void hec2hrp_state::hector_init() m_pot0 = m_pot1 = 0x40; /* for cassette sync */ - m_cassette_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hec2hrp_state::cassette_clock),this)); + m_cassette_timer = timer_alloc(*this, FUNC(hec2hrp_state::cassette_clock)); m_cassette_timer->adjust(attotime::from_msec(100), 0, attotime::from_usec(64));/* => real sync scan speed for 15,624Khz*/ init_sn76477(); /* init R/C values */ diff --git a/src/mame/machine/hp2640_tape.cpp b/src/mame/machine/hp2640_tape.cpp index ad22cc1c8847e..27614a89b423d 100644 --- a/src/mame/machine/hp2640_tape.cpp +++ b/src/mame/machine/hp2640_tape.cpp @@ -311,7 +311,7 @@ void hp2640_tape_device::device_reset() m_cell_timer->reset(); } -void hp2640_tape_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hp2640_tape_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { LOG("TMR %d @%s\n" , id , machine().time().to_string()); diff --git a/src/mame/machine/hp2640_tape.h b/src/mame/machine/hp2640_tape.h index 38733094dd5f5..5ca510ef06a8b 100644 --- a/src/mame/machine/hp2640_tape.h +++ b/src/mame/machine/hp2640_tape.h @@ -38,7 +38,7 @@ class hp2640_tape_device : public device_t virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: devcb_write_line m_irq_handler; diff --git a/src/mame/machine/hp48.cpp b/src/mame/machine/hp48.cpp index 41b44ba57271f..571dd885efb4e 100644 --- a/src/mame/machine/hp48.cpp +++ b/src/mame/machine/hp48.cpp @@ -108,7 +108,7 @@ void hp48_state::rs232_start_recv_byte(uint8_t data) } /* schedule end of reception */ - machine().scheduler().timer_set(RS232_DELAY, timer_expired_delegate(FUNC(hp48_state::rs232_byte_recv_cb),this), data); + m_rs232_byte_recv_cb.call_after(RS232_DELAY, data); } @@ -137,7 +137,7 @@ void hp48_state::rs232_send_byte() m_io[0x12] |= 3; /* schedule transmission */ - machine().scheduler().timer_set(RS232_DELAY, timer_expired_delegate(FUNC(hp48_state::rs232_byte_sent_cb),this), data); + m_rs232_byte_sent_cb.call_after(RS232_DELAY, data); } @@ -976,16 +976,19 @@ void hp48_state::base_machine_start(hp48_models model) } /* timers */ - m_1st_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hp48_state::timer1_cb), this)); + m_1st_timer = timer_alloc(*this, FUNC(hp48_state::timer1_cb)); m_1st_timer->adjust(attotime::from_hz(16), 0, attotime::from_hz(16)); - m_2nd_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hp48_state::timer2_cb), this)); + m_2nd_timer = timer_alloc(*this, FUNC(hp48_state::timer2_cb)); m_2nd_timer->adjust(attotime::from_hz(8192), 0, attotime::from_hz(8192)); /* 1ms keyboard polling */ - m_kbd_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hp48_state::kbd_cb), this)); + m_kbd_timer = timer_alloc(*this, FUNC(hp48_state::kbd_cb)); m_kbd_timer->adjust(attotime::from_msec(1), 0, attotime::from_msec(1)); + m_rs232_byte_recv_cb.init(*this, FUNC(hp48_state::rs232_byte_recv_cb)); + m_rs232_byte_sent_cb.init(*this, FUNC(hp48_state::rs232_byte_sent_cb)); + m_lshift0.resolve(); m_rshift0.resolve(); m_alpha0.resolve(); diff --git a/src/mame/machine/hp9845_printer.cpp b/src/mame/machine/hp9845_printer.cpp index accbc049141ec..11258fd3c438c 100644 --- a/src/mame/machine/hp9845_printer.cpp +++ b/src/mame/machine/hp9845_printer.cpp @@ -186,7 +186,7 @@ void hp9845_printer_device::device_reset() m_sts_handler(true); } -void hp9845_printer_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hp9845_printer_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_busy = false; update_fsm(); diff --git a/src/mame/machine/hp9845_printer.h b/src/mame/machine/hp9845_printer.h index d42c00c01cb7a..acdaeacd43aa9 100644 --- a/src/mame/machine/hp9845_printer.h +++ b/src/mame/machine/hp9845_printer.h @@ -31,7 +31,7 @@ class hp9845_printer_device : public device_t virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // PPU access uint16_t printer_r(offs_t offset); diff --git a/src/mame/machine/hpc3.cpp b/src/mame/machine/hpc3.cpp index 68f8e4d7a8c11..03b0c4452e030 100644 --- a/src/mame/machine/hpc3.cpp +++ b/src/mame/machine/hpc3.cpp @@ -166,7 +166,7 @@ void hpc3_device::device_start() save_pointer(NAME(m_enet_fifo[ENET_RECV]), 32); save_pointer(NAME(m_enet_fifo[ENET_XMIT]), 40); - m_enet_tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hpc3_device::enet_transmit), this)); + m_enet_tx_timer = timer_alloc(*this, FUNC(hpc3_device::enet_transmit)); } void hpc3_device::device_reset() @@ -218,7 +218,7 @@ void hpc3_device::map(address_map &map) map(0x00060000, 0x0007ffff).rw(FUNC(hpc3_device::bbram_r), FUNC(hpc3_device::bbram_w)); } -void hpc3_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hpc3_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/hpc3.h b/src/mame/machine/hpc3.h index b9599e043f6ec..2ebba2511386c 100644 --- a/src/mame/machine/hpc3.h +++ b/src/mame/machine/hpc3.h @@ -71,7 +71,7 @@ class hpc3_device : public device_t, public device_memory_interface virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual space_config_vector memory_space_config() const override; diff --git a/src/mame/machine/ibm6580_fdc.cpp b/src/mame/machine/ibm6580_fdc.cpp index 9feceae1a1f00..1ad629576c17b 100644 --- a/src/mame/machine/ibm6580_fdc.cpp +++ b/src/mame/machine/ibm6580_fdc.cpp @@ -69,7 +69,7 @@ void dw_fdc_device::device_reset() m_p1 = m_p2 = m_t0 = m_t1 = 0; } -void dw_fdc_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void dw_fdc_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_mcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); } diff --git a/src/mame/machine/ibm6580_fdc.h b/src/mame/machine/ibm6580_fdc.h index 33b860e146ab5..73d659a41f3e6 100644 --- a/src/mame/machine/ibm6580_fdc.h +++ b/src/mame/machine/ibm6580_fdc.h @@ -28,7 +28,7 @@ class dw_fdc_device : public device_t void device_start() override; void device_reset() override; - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint8_t m_bus, m_t0, m_t1, m_p1, m_p2; diff --git a/src/mame/machine/ibm6580_kbd.cpp b/src/mame/machine/ibm6580_kbd.cpp index 1413747b5af5e..000489f1dbd3a 100644 --- a/src/mame/machine/ibm6580_kbd.cpp +++ b/src/mame/machine/ibm6580_kbd.cpp @@ -201,7 +201,7 @@ void dw_keyboard_device::device_reset() { } -void dw_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void dw_keyboard_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_mcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); } diff --git a/src/mame/machine/ibm6580_kbd.h b/src/mame/machine/ibm6580_kbd.h index a6c08c28ad601..c083be67a4af2 100644 --- a/src/mame/machine/ibm6580_kbd.h +++ b/src/mame/machine/ibm6580_kbd.h @@ -26,7 +26,7 @@ class dw_keyboard_device : public device_t void device_start() override; void device_reset() override; - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint8_t m_dip, m_bus, m_p2; diff --git a/src/mame/machine/imm6_76.cpp b/src/mame/machine/imm6_76.cpp index db4cdcbd236e9..1e907c7549073 100644 --- a/src/mame/machine/imm6_76.cpp +++ b/src/mame/machine/imm6_76.cpp @@ -29,9 +29,9 @@ intel_imm6_76_device::intel_imm6_76_device( void intel_imm6_76_device::device_start() { - m_cycle_tmr = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(intel_imm6_76_device::cycle_expired), this)); - m_cycle_a_tmr = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(intel_imm6_76_device::cycle_a_expired), this)); - m_prg_tmr = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(intel_imm6_76_device::prg_expired), this)); + m_cycle_tmr = timer_alloc(*this, FUNC(intel_imm6_76_device::cycle_expired)); + m_cycle_a_tmr = timer_alloc(*this, FUNC(intel_imm6_76_device::cycle_a_expired)); + m_prg_tmr = timer_alloc(*this, FUNC(intel_imm6_76_device::prg_expired)); save_item(NAME(m_data)); save_item(NAME(m_di)); diff --git a/src/mame/machine/interpro_ioga.cpp b/src/mame/machine/interpro_ioga.cpp index 0ab14ca699738..c6854b8b18d9d 100644 --- a/src/mame/machine/interpro_ioga.cpp +++ b/src/mame/machine/interpro_ioga.cpp @@ -179,6 +179,8 @@ void interpro_ioga_device::device_start() m_fdc_tc_func.resolve(); m_eth_ca_func.resolve(); + m_set_irq_vector.init(*this, FUNC(interpro_ioga_device::set_irq_vector)); + m_hwicr = std::make_unique(get_int_count()); for (dma_channel_t &dma_channel : m_dma_channel) @@ -194,24 +196,24 @@ void interpro_ioga_device::device_start() } // allocate timers - m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(interpro_ioga_device::interrupt_check), this)); - m_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(interpro_ioga_device::dma), this)); - m_serial_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(interpro_ioga_device::serial_dma), this)); + m_interrupt_timer = timer_alloc(*this, FUNC(interpro_ioga_device::interrupt_check)); + m_dma_timer = timer_alloc(*this, FUNC(interpro_ioga_device::dma)); + m_serial_dma_timer = timer_alloc(*this, FUNC(interpro_ioga_device::serial_dma)); - m_timer0 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(interpro_ioga_device::timer0), this)); - m_timer1 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(interpro_ioga_device::timer1), this)); + m_timer0 = timer_alloc(*this, FUNC(interpro_ioga_device::timer0)); + m_timer1 = timer_alloc(*this, FUNC(interpro_ioga_device::timer1)); - m_timer_60hz = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(interpro_ioga_device::timer_60hz), this)); + m_timer_60hz = timer_alloc(*this, FUNC(interpro_ioga_device::timer_60hz)); - m_eth_reset_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(interpro_ioga_device::eth_reset), this)); + m_eth_reset_timer = timer_alloc(*this, FUNC(interpro_ioga_device::eth_reset)); } void sapphire_ioga_device::device_start() { interpro_ioga_device::device_start(); - m_timer2 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sapphire_ioga_device::timer2), this)); - m_timer3 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sapphire_ioga_device::timer3), this)); + m_timer2 = timer_alloc(*this, FUNC(sapphire_ioga_device::timer2)); + m_timer3 = timer_alloc(*this, FUNC(sapphire_ioga_device::timer3)); } void interpro_ioga_device::device_reset() @@ -460,7 +462,7 @@ void interpro_ioga_device::irq(int state, u8 irq_vector) LOGIRQ(m_active_interrupt_number, "irq: setting irq vector 0x%02x\n", irq_vector); m_irq_vector = irq_vector; - machine().scheduler().synchronize(timer_expired_delegate(FUNC(interpro_ioga_device::set_irq_vector), this)); + m_set_irq_vector.synchronize(); } if (m_irq_state != state) diff --git a/src/mame/machine/interpro_ioga.h b/src/mame/machine/interpro_ioga.h index 56dc6995cc615..28ec162788f8f 100644 --- a/src/mame/machine/interpro_ioga.h +++ b/src/mame/machine/interpro_ioga.h @@ -284,6 +284,7 @@ class interpro_ioga_device : public device_t private: TIMER_CALLBACK_MEMBER(set_irq_vector) { m_out_irq_vector_func(m_irq_vector); } + transient_timer_factory m_set_irq_vector; void drq(int state, int channel); void serial_drq(int state, int channel); diff --git a/src/mame/machine/irobot.cpp b/src/mame/machine/irobot.cpp index 0f041f37e5a5b..7d9e050738926 100644 --- a/src/mame/machine/irobot.cpp +++ b/src/mame/machine/irobot.cpp @@ -170,7 +170,7 @@ void irobot_state::machine_start() m_statwr = 0; /* set an initial timer to go off on scanline 0 */ - m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(irobot_state::scanline_callback), this)); + m_scanline_timer = timer_alloc(*this, FUNC(irobot_state::scanline_callback)); m_scanline_timer->adjust(m_screen->time_until_pos(0)); } diff --git a/src/mame/machine/iteagle_fpga.cpp b/src/mame/machine/iteagle_fpga.cpp index 52278b7bf9073..b84b58defc5fb 100644 --- a/src/mame/machine/iteagle_fpga.cpp +++ b/src/mame/machine/iteagle_fpga.cpp @@ -207,7 +207,7 @@ void iteagle_fpga_device::update_sequence_eg1(uint32_t data) //------------------------------------------------- // device_timer - called when our device timer expires //------------------------------------------------- -void iteagle_fpga_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void iteagle_fpga_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { //int beamy = m_screen->vpos(); //const rectangle &visarea = m_screen->visible_area(); diff --git a/src/mame/machine/iteagle_fpga.h b/src/mame/machine/iteagle_fpga.h index 9cfacc634843c..4e218544e2834 100644 --- a/src/mame/machine/iteagle_fpga.h +++ b/src/mame/machine/iteagle_fpga.h @@ -64,7 +64,7 @@ class iteagle_fpga_device : public pci_device protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; private: diff --git a/src/mame/machine/jaleco_ms32_sysctrl.cpp b/src/mame/machine/jaleco_ms32_sysctrl.cpp index c9007080a663a..10163cf150566 100644 --- a/src/mame/machine/jaleco_ms32_sysctrl.cpp +++ b/src/mame/machine/jaleco_ms32_sysctrl.cpp @@ -197,7 +197,7 @@ void jaleco_ms32_sysctrl_device::flush_scanline_timer(int current_scanline) m_timer_scanline->adjust(m_screen->time_until_pos(next_scanline), next_scanline); } -void jaleco_ms32_sysctrl_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void jaleco_ms32_sysctrl_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/jaleco_ms32_sysctrl.h b/src/mame/machine/jaleco_ms32_sysctrl.h index d765965d6334b..19b9e147e2dbf 100644 --- a/src/mame/machine/jaleco_ms32_sysctrl.h +++ b/src/mame/machine/jaleco_ms32_sysctrl.h @@ -51,7 +51,7 @@ class jaleco_ms32_sysctrl_device : public device_t virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_screen; diff --git a/src/mame/machine/k573dio.cpp b/src/mame/machine/k573dio.cpp index 7e3c0ece28adb..3906e1b593c92 100644 --- a/src/mame/machine/k573dio.cpp +++ b/src/mame/machine/k573dio.cpp @@ -172,7 +172,7 @@ void k573dio_device::device_add_mconfig(machine_config &config) DS2401(config, digital_id); } -void k573dio_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void k573dio_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { } diff --git a/src/mame/machine/k573dio.h b/src/mame/machine/k573dio.h index 2c22c82e453a4..e095089b746c3 100644 --- a/src/mame/machine/k573dio.h +++ b/src/mame/machine/k573dio.h @@ -67,7 +67,7 @@ class k573dio_device : public device_t virtual void device_reset() override; virtual const tiny_rom_entry *device_rom_region() const override; virtual void device_add_mconfig(machine_config &config) override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: memory_share_creator ram; diff --git a/src/mame/machine/k573kara.cpp b/src/mame/machine/k573kara.cpp index b2663f196f34e..7b6f31c2807a6 100644 --- a/src/mame/machine/k573kara.cpp +++ b/src/mame/machine/k573kara.cpp @@ -112,7 +112,7 @@ void k573kara_device::device_add_mconfig(machine_config &config) duart_chan0.out_rts_callback().set("rs232_chan0", FUNC(rs232_port_device::write_rts)); } -void k573kara_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void k573kara_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { } diff --git a/src/mame/machine/k573kara.h b/src/mame/machine/k573kara.h index 57e53e162233e..af77f93edb557 100644 --- a/src/mame/machine/k573kara.h +++ b/src/mame/machine/k573kara.h @@ -20,7 +20,7 @@ class k573kara_device : public device_t virtual void device_reset() override; virtual const tiny_rom_entry *device_rom_region() const override; virtual void device_add_mconfig(machine_config &config) override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint16_t uart_r(offs_t offset); diff --git a/src/mame/machine/k7659kb.cpp b/src/mame/machine/k7659kb.cpp index c8ce5f6725e4a..8f11b808ed2da 100644 --- a/src/mame/machine/k7659kb.cpp +++ b/src/mame/machine/k7659kb.cpp @@ -224,7 +224,7 @@ void k7659_keyboard_device::device_reset() m_timer->adjust(attotime::from_hz(200), 0, attotime::from_hz(200)); } -void k7659_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void k7659_keyboard_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { uint8_t retVal = 0;//m_lookup; uint8_t a1 = ioport("A1")->read(); diff --git a/src/mame/machine/k7659kb.h b/src/mame/machine/k7659kb.h index 14b9794dd80a8..dd27ba5eeaee2 100644 --- a/src/mame/machine/k7659kb.h +++ b/src/mame/machine/k7659kb.h @@ -39,7 +39,7 @@ class k7659_keyboard_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/mame/machine/kaneko_calc3.cpp b/src/mame/machine/kaneko_calc3.cpp index c3f79df2d112d..7cdbb5d5719ca 100644 --- a/src/mame/machine/kaneko_calc3.cpp +++ b/src/mame/machine/kaneko_calc3.cpp @@ -95,7 +95,7 @@ void kaneko_calc3_device::reset_run_timer() m_runtimer->adjust(attotime::from_hz(59.1854)); } -void kaneko_calc3_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void kaneko_calc3_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/machine/kaneko_calc3.h b/src/mame/machine/kaneko_calc3.h index 3ae8b0b78a70a..1ba1595a68e22 100644 --- a/src/mame/machine/kaneko_calc3.h +++ b/src/mame/machine/kaneko_calc3.h @@ -33,7 +33,7 @@ class kaneko_calc3_device : public device_t protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: required_device m_maincpu; diff --git a/src/mame/machine/kc.cpp b/src/mame/machine/kc.cpp index 4d1ebef7004f1..e0a15547ea8a6 100644 --- a/src/mame/machine/kc.cpp +++ b/src/mame/machine/kc.cpp @@ -732,8 +732,8 @@ WRITE_LINE_MEMBER( kc_state::keyboard_cb ) void kc_state::machine_start() { - m_cassette_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(kc_state::kc_cassette_timer_callback),this)); - m_cassette_oneshot_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(kc_state::kc_cassette_oneshot_timer),this)); + m_cassette_timer = timer_alloc(*this, FUNC(kc_state::kc_cassette_timer_callback)); + m_cassette_oneshot_timer = timer_alloc(*this, FUNC(kc_state::kc_cassette_oneshot_timer)); m_ram_base = m_ram->pointer(); } diff --git a/src/mame/machine/kc_keyb.cpp b/src/mame/machine/kc_keyb.cpp index 5fceb7fc8f904..71e1c41258edf 100644 --- a/src/mame/machine/kc_keyb.cpp +++ b/src/mame/machine/kc_keyb.cpp @@ -491,7 +491,7 @@ ioport_constructor kc_keyboard_device::device_input_ports() const // device_timer - handler timer events //------------------------------------------------- -void kc_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void kc_keyboard_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/machine/kc_keyb.h b/src/mame/machine/kc_keyb.h index 3e4e53f1856cd..e09e5bb06f40b 100644 --- a/src/mame/machine/kc_keyb.h +++ b/src/mame/machine/kc_keyb.h @@ -37,7 +37,7 @@ class kc_keyboard_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void add_pulse_to_transmit_buffer(int pulse_state, int pulse_number = 1); void add_bit(int bit); diff --git a/src/mame/machine/leland.cpp b/src/mame/machine/leland.cpp index 894e97712525c..3963c361632ea 100644 --- a/src/mame/machine/leland.cpp +++ b/src/mame/machine/leland.cpp @@ -306,7 +306,7 @@ void ataxx_state::indyheat_analog_w(offs_t offset, u8 data) void leland_state::machine_start() { /* start scanline interrupts going */ - m_master_int_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(leland_state::leland_interrupt_callback),this)); + m_master_int_timer = timer_alloc(*this, FUNC(leland_state::leland_interrupt_callback)); save_item(NAME(m_dac_control)); save_item(NAME(m_wcol_enable)); @@ -365,7 +365,7 @@ void ataxx_state::machine_start() m_extra_tram = std::make_unique(ATAXX_EXTRA_TRAM_SIZE); /* start scanline interrupts going */ - m_master_int_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(leland_state::ataxx_interrupt_callback),this)); + m_master_int_timer = timer_alloc(*this, FUNC(leland_state::ataxx_interrupt_callback)); save_item(NAME(m_wcol_enable)); save_item(NAME(m_dial_last_input)); diff --git a/src/mame/machine/lisa.cpp b/src/mame/machine/lisa.cpp index 86f472ee854b1..bb98579bc49b3 100644 --- a/src/mame/machine/lisa.cpp +++ b/src/mame/machine/lisa.cpp @@ -558,7 +558,7 @@ TIMER_CALLBACK_MEMBER(lisa_state::set_COPS_ready) m_via0->write_pb6(m_COPS_Ready); /* impulsion width : +/- 20us */ - machine().scheduler().timer_set(attotime::from_usec(20), timer_expired_delegate(FUNC(lisa_state::read_COPS_command),this)); + m_read_COPS_command.call_after(attotime::from_usec(20)); } void lisa_state::reset_COPS() @@ -934,12 +934,14 @@ void lisa_state::init_mac_xl() void lisa_state::machine_start() { - m_mouse_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(lisa_state::handle_mouse),this)); + m_mouse_timer = timer_alloc(*this, FUNC(lisa_state::handle_mouse)); /* read command every ms (don't know the real value) */ - m_cops_ready_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(lisa_state::set_COPS_ready), this)); + m_cops_ready_timer = timer_alloc(*this, FUNC(lisa_state::set_COPS_ready)); m_cops_ready_timer->adjust(attotime::from_msec(1), 0, attotime::from_msec(1)); + m_read_COPS_command.init(*this, FUNC(lisa_state::read_COPS_command)); + m_nvram->set_base(m_fdc_ram, 1024); m_fifo_tail = 0; diff --git a/src/mame/machine/lynx.cpp b/src/mame/machine/lynx.cpp index 161359d5d11c2..1ba86361841c8 100644 --- a/src/mame/machine/lynx.cpp +++ b/src/mame/machine/lynx.cpp @@ -583,7 +583,7 @@ void lynx_state::lynx_blit_lines() } } -void lynx_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void lynx_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/m24_kbd.cpp b/src/mame/machine/m24_kbd.cpp index 13eb7cfc1033e..5110ca1a59ecb 100644 --- a/src/mame/machine/m24_kbd.cpp +++ b/src/mame/machine/m24_kbd.cpp @@ -225,7 +225,7 @@ void m24_keyboard_device::device_reset() m_kbcdata = true; } -void m24_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void m24_keyboard_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_mcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); m_out_data(1); diff --git a/src/mame/machine/m24_kbd.h b/src/mame/machine/m24_kbd.h index 5f882503cbb57..0ce046df6365f 100644 --- a/src/mame/machine/m24_kbd.h +++ b/src/mame/machine/m24_kbd.h @@ -21,7 +21,7 @@ class m24_keyboard_device : public device_t protected: void device_start() override; void device_reset() override; - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual const tiny_rom_entry *device_rom_region() const override; virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; diff --git a/src/mame/machine/m3comm.cpp b/src/mame/machine/m3comm.cpp index e1d74fc0ae3c1..91ef0979c48df 100644 --- a/src/mame/machine/m3comm.cpp +++ b/src/mame/machine/m3comm.cpp @@ -194,13 +194,13 @@ uint16_t swapb16(uint16_t data) } -void m3comm_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void m3comm_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if(id != TIMER_IRQ5) return; m_commcpu->set_input_line(M68K_IRQ_5, ASSERT_LINE); - timer.adjust(attotime::from_usec(10000)); // there is it from actually ?????? + this->timer->adjust(attotime::from_usec(10000)); // there is it from actually ?????? } ///////////// Internal MMIO diff --git a/src/mame/machine/m3comm.h b/src/mame/machine/m3comm.h index f4fd23c15780a..9954a0f86eb59 100644 --- a/src/mame/machine/m3comm.h +++ b/src/mame/machine/m3comm.h @@ -45,7 +45,7 @@ class m3comm_device : public device_t virtual void device_start() override; virtual void device_reset() override; virtual void device_reset_after_children() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; private: diff --git a/src/mame/machine/mac.cpp b/src/mame/machine/mac.cpp index 6e0421e293fe3..e0ccba7fedb77 100644 --- a/src/mame/machine/mac.cpp +++ b/src/mame/machine/mac.cpp @@ -1020,19 +1020,19 @@ void mac_state::machine_start() { if (m_screen) { - this->m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mac_state::mac_scanline_tick),this)); + this->m_scanline_timer = timer_alloc(*this, FUNC(mac_state::mac_scanline_tick)); this->m_scanline_timer->adjust(m_screen->time_until_pos(0, 0)); } else { - m_adbupdate_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mac_state::mac_adbrefresh_tick),this)); + m_adbupdate_timer = timer_alloc(*this, FUNC(mac_state::mac_adbrefresh_tick)); m_adbupdate_timer->adjust(attotime::from_hz(70)); } if (m_model != MODEL_MAC_IIFX) - m_6015_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mac_state::mac_6015_tick),this)); + m_6015_timer = timer_alloc(*this, FUNC(mac_state::mac_6015_tick)); else - m_6015_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mac_state::oss_6015_tick),this)); + m_6015_timer = timer_alloc(*this, FUNC(mac_state::oss_6015_tick)); m_6015_timer->adjust(attotime::never); } @@ -1207,7 +1207,7 @@ void mac_state::mac_driver_init(model_t model) if ((model == MODEL_MAC_CLASSIC_II) || (model == MODEL_MAC_LC) || (model == MODEL_MAC_COLOR_CLASSIC) || (model >= MODEL_MAC_LC_475 && model <= MODEL_MAC_LC_580) || (model == MODEL_MAC_LC_II) || (model == MODEL_MAC_LC_III) || (model == MODEL_MAC_LC_III_PLUS) || ((m_model >= MODEL_MAC_II) && (m_model <= MODEL_MAC_SE30))) { - m_overlay_timeout = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mac_state::overlay_timeout_func),this)); + m_overlay_timeout = timer_alloc(*this, FUNC(mac_state::overlay_timeout_func)); } else { diff --git a/src/mame/machine/macadb.cpp b/src/mame/machine/macadb.cpp index 17620477bfd60..7866be7dfc434 100644 --- a/src/mame/machine/macadb.cpp +++ b/src/mame/machine/macadb.cpp @@ -222,7 +222,7 @@ void macadb_device::device_start() write_adb_data.resolve_safe(); write_adb_irq.resolve_safe(); - this->m_adb_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(macadb_device::mac_adb_tick),this)); + this->m_adb_timer = timer_alloc(*this, FUNC(macadb_device::mac_adb_tick)); this->m_adb_timer->adjust(attotime::never); std::fill(std::begin(m_adb_buffer), std::end(m_adb_buffer), 0); diff --git a/src/mame/machine/mace.cpp b/src/mame/machine/mace.cpp index 75f7fdef79990..a0cca0421f8f1 100644 --- a/src/mame/machine/mace.cpp +++ b/src/mame/machine/mace.cpp @@ -440,7 +440,7 @@ void mace_device::rtc_w(offs_t offset, uint64_t data, uint64_t mem_mask) // TIMERS //************************************************************************** -void mace_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mace_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_UST) { diff --git a/src/mame/machine/mace.h b/src/mame/machine/mace.h index bac2e2cb8ca08..8f121f3dc4748 100644 --- a/src/mame/machine/mace.h +++ b/src/mame/machine/mace.h @@ -35,7 +35,7 @@ class mace_device : public device_t virtual void device_start() override; virtual void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; static const device_timer_id TIMER_MSC = 0; static const device_timer_id TIMER_UST = 1; diff --git a/src/mame/machine/macpci.cpp b/src/mame/machine/macpci.cpp index 570ca95803911..d4db4dee7b46f 100644 --- a/src/mame/machine/macpci.cpp +++ b/src/mame/machine/macpci.cpp @@ -107,7 +107,7 @@ WRITE_LINE_MEMBER(macpci_state::mac_adb_via_out_cb2) void macpci_state::machine_start() { - m_6015_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(macpci_state::mac_6015_tick),this)); + m_6015_timer = timer_alloc(*this, FUNC(macpci_state::mac_6015_tick)); m_6015_timer->adjust(attotime::never); } diff --git a/src/mame/machine/macrtc.cpp b/src/mame/machine/macrtc.cpp index b375098daf104..d187b55f477c6 100644 --- a/src/mame/machine/macrtc.cpp +++ b/src/mame/machine/macrtc.cpp @@ -79,7 +79,7 @@ void rtc3430042_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void rtc3430042_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void rtc3430042_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { advance_seconds(); } diff --git a/src/mame/machine/macrtc.h b/src/mame/machine/macrtc.h index df8dfce0ff1e3..2198c7d664f13 100644 --- a/src/mame/machine/macrtc.h +++ b/src/mame/machine/macrtc.h @@ -38,7 +38,7 @@ class rtc3430042_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_rtc_interface overrides virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second) override; diff --git a/src/mame/machine/maple-dc.cpp b/src/mame/machine/maple-dc.cpp index f2db34fd867a4..b046272300fb1 100644 --- a/src/mame/machine/maple-dc.cpp +++ b/src/mame/machine/maple-dc.cpp @@ -68,9 +68,9 @@ void maple_dc_device::device_reset() dma_endflag = false; } -void maple_dc_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void maple_dc_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { - timer.adjust(attotime::never); + this->timer->adjust(attotime::never); switch(dma_state) { case DMA_WAIT_REPLY: diff --git a/src/mame/machine/maple-dc.h b/src/mame/machine/maple-dc.h index 19d0a3c771838..d2a7d912505e0 100644 --- a/src/mame/machine/maple-dc.h +++ b/src/mame/machine/maple-dc.h @@ -49,7 +49,7 @@ class maple_dc_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum { diff --git a/src/mame/machine/mapledev.cpp b/src/mame/machine/mapledev.cpp index 4279f21eb717f..0d8e58dcd9c6d 100644 --- a/src/mame/machine/mapledev.cpp +++ b/src/mame/machine/mapledev.cpp @@ -26,12 +26,12 @@ void maple_device::maple_reset() device_reset(); } -void maple_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void maple_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if(id != TIMER_ID) return; - timer.adjust(attotime::never); + this->timer->adjust(attotime::never); reply_ready(); } diff --git a/src/mame/machine/mapledev.h b/src/mame/machine/mapledev.h index cbf020a84707f..e225540fcd110 100644 --- a/src/mame/machine/mapledev.h +++ b/src/mame/machine/mapledev.h @@ -26,7 +26,7 @@ class maple_device : public device_t // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void reply_ready(); void reply_ready_with_delay(); diff --git a/src/mame/machine/mcr.cpp b/src/mame/machine/mcr.cpp index 3b4323d94fe37..42cb7022ebbe5 100644 --- a/src/mame/machine/mcr.cpp +++ b/src/mame/machine/mcr.cpp @@ -86,7 +86,7 @@ void mcr_state::machine_start() void mcr_nflfoot_state::machine_start() { /* allocate a timer for the IPU watchdog */ - m_ipu_watchdog_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mcr_nflfoot_state::ipu_watchdog_reset), this)); + m_ipu_watchdog_timer = timer_alloc(*this, FUNC(mcr_nflfoot_state::ipu_watchdog_reset)); } diff --git a/src/mame/machine/mcr68.cpp b/src/mame/machine/mcr68.cpp index 9523ebe169f30..34d62af258875 100644 --- a/src/mame/machine/mcr68.cpp +++ b/src/mame/machine/mcr68.cpp @@ -20,9 +20,10 @@ * *************************************/ -void mcr68_state::machine_reset() +void mcr68_state::machine_start() { /* for the most part all MCR/68k games are the same */ - m_v493_callback = timer_expired_delegate(FUNC(mcr68_state::mcr68_493_callback),this); + m_493_callback.init(*this, FUNC(mcr68_state::mcr68_493_callback)); + m_493_off_callback.init(*this, FUNC(mcr68_state::mcr68_493_off_callback)); } @@ -47,7 +48,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( mcr68_state::scanline_cb ) /* also set a timer to generate the 493 signal at a specific time before the next VBLANK */ /* the timing of this is crucial for Blasted and Tri-Sports, which check the timing of */ /* VBLANK and 493 using counter 2 */ - machine().scheduler().timer_set(attotime::from_hz(30) - m_timing_factor, m_v493_callback); + m_493_callback.call_after(attotime::from_hz(30) - m_timing_factor); } // HSYNC @@ -72,7 +73,7 @@ TIMER_CALLBACK_MEMBER(mcr68_state::mcr68_493_off_callback) TIMER_CALLBACK_MEMBER(mcr68_state::mcr68_493_callback) { m_maincpu->set_input_line(1, ASSERT_LINE); - machine().scheduler().timer_set(m_screen->scan_period(), timer_expired_delegate(FUNC(mcr68_state::mcr68_493_off_callback),this)); + m_493_off_callback.call_after(m_screen->scan_period()); if (VERBOSE) logerror("--- (INT1) ---\n"); diff --git a/src/mame/machine/mct_adr.cpp b/src/mame/machine/mct_adr.cpp index 9de43725ea98f..f669d8a825a8c 100644 --- a/src/mame/machine/mct_adr.cpp +++ b/src/mame/machine/mct_adr.cpp @@ -152,9 +152,9 @@ void mct_adr_device::device_start() m_ioc_physical_tag = 0; m_ioc_logical_tag = 0; - m_irq_check = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mct_adr_device::irq_check), this)); - m_dma_check = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mct_adr_device::dma_check), this)); - m_interval_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mct_adr_device::interval_timer), this)); + m_irq_check = timer_alloc(*this, FUNC(mct_adr_device::irq_check)); + m_dma_check = timer_alloc(*this, FUNC(mct_adr_device::dma_check)); + m_interval_timer = timer_alloc(*this, FUNC(mct_adr_device::interval_timer)); m_out_int_timer_asserted = false; m_out_int_device_asserted = false; diff --git a/src/mame/machine/mega32x.cpp b/src/mame/machine/mega32x.cpp index 75cd4728eb58f..19b4789df3f50 100644 --- a/src/mame/machine/mega32x.cpp +++ b/src/mame/machine/mega32x.cpp @@ -1734,7 +1734,7 @@ void sega_32x_device::device_start() } m_stream = stream_alloc(2, 2, 48000 * 4); - m_32x_pwm_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sega_32x_device::handle_pwm_callback), this)); + m_32x_pwm_timer = timer_alloc(*this, FUNC(sega_32x_device::handle_pwm_callback)); m_32x_dram0 = std::make_unique(0x40000/2); m_32x_dram1 = std::make_unique(0x40000/2); diff --git a/src/mame/machine/megadriv.cpp b/src/mame/machine/megadriv.cpp index b1f609a2d6fba..c1f1a32d8a8c1 100644 --- a/src/mame/machine/megadriv.cpp +++ b/src/mame/machine/megadriv.cpp @@ -626,7 +626,7 @@ void md_base_state::megadriv_68k_req_z80_bus(offs_t offset, uint16_t data, uint1 /* If the z80 is running, sync the z80 execution state */ if (!m_genz80.z80_is_reset) - machine().scheduler().timer_set(attotime::zero, timer_expired_delegate(FUNC(md_base_state::megadriv_z80_run_state),this)); + m_megadriv_z80_run_state.synchronize(); } void md_base_state::megadriv_68k_req_z80_reset(offs_t offset, uint16_t data, uint16_t mem_mask) @@ -670,7 +670,7 @@ void md_base_state::megadriv_68k_req_z80_reset(offs_t offset, uint16_t data, uin m_genz80.z80_is_reset = 1; } } - machine().scheduler().timer_set(attotime::zero, timer_expired_delegate(FUNC(md_base_state::megadriv_z80_run_state),this)); + m_megadriv_z80_run_state.synchronize(); } @@ -797,6 +797,8 @@ void md_base_state::machine_start() m_io_pad_3b[2] = ioport("IN0"); m_io_pad_3b[3] = ioport("UNK"); + m_megadriv_z80_run_state.init(*this, FUNC(md_base_state::megadriv_z80_run_state)); + save_item(NAME(m_io_stage)); save_item(NAME(m_megadrive_io_data_regs)); save_item(NAME(m_megadrive_io_ctrl_regs)); @@ -814,7 +816,7 @@ void md_base_state::machine_reset() m_genz80.z80_has_bus = 1; m_genz80.z80_bank_addr = 0; m_vdp->set_scanline_counter(-1); - machine().scheduler().timer_set(attotime::zero, timer_expired_delegate(FUNC(md_base_state::megadriv_z80_run_state),this)); + m_megadriv_z80_run_state.synchronize(); } megadrive_reset_io(); diff --git a/src/mame/machine/mhavoc.cpp b/src/mame/machine/mhavoc.cpp index 60bdc9336835f..2bade3a4f7a65 100644 --- a/src/mame/machine/mhavoc.cpp +++ b/src/mame/machine/mhavoc.cpp @@ -67,6 +67,8 @@ void mhavoc_state::machine_start() { m_lamps.resolve(); + m_delayed_gamma_w.init(*this, FUNC(mhavoc_state::delayed_gamma_w)); + save_item(NAME(m_alpha_data)); save_item(NAME(m_alpha_rcvd)); save_item(NAME(m_alpha_xmtd)); @@ -132,14 +134,14 @@ TIMER_CALLBACK_MEMBER(mhavoc_state::delayed_gamma_w) m_gamma->pulse_input_line(INPUT_LINE_NMI, attotime::zero); /* the sound CPU needs to reply in 250microseconds (according to Neil Bradley) */ - machine().scheduler().timer_set(attotime::from_usec(250), timer_expired_delegate()); + machine().scheduler().boost_interleave(attotime::from_usec(1), attotime::from_usec(250)); } void mhavoc_state::mhavoc_gamma_w(uint8_t data) { //logerror(" writing to gamma processor: %02x (%d %d)\n", data, m_gamma_rcvd, m_alpha_xmtd); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(mhavoc_state::delayed_gamma_w),this), data); + m_delayed_gamma_w.synchronize(data); } diff --git a/src/mame/machine/micro3d.cpp b/src/mame/machine/micro3d.cpp index 8d8b60f165960..3d8b522989431 100644 --- a/src/mame/machine/micro3d.cpp +++ b/src/mame/machine/micro3d.cpp @@ -125,7 +125,7 @@ static inline int64_t normalised_multiply(int32_t a, int32_t b) return result >> 14; } -void micro3d_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void micro3d_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/microtan.cpp b/src/mame/machine/microtan.cpp index b71982061f5d6..a93a5bf6314b8 100644 --- a/src/mame/machine/microtan.cpp +++ b/src/mame/machine/microtan.cpp @@ -365,7 +365,7 @@ void microtan_state::init_microtan() { init_gfx2(); - m_pulse_nmi_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(microtan_state::pulse_nmi), this)); + m_pulse_nmi_timer = timer_alloc(*this, FUNC(microtan_state::pulse_nmi)); } void microtan_state::machine_start() diff --git a/src/mame/machine/midikbd.cpp b/src/mame/machine/midikbd.cpp index b1611d7703ac3..9484f1e441a8d 100644 --- a/src/mame/machine/midikbd.cpp +++ b/src/mame/machine/midikbd.cpp @@ -13,7 +13,7 @@ midi_keyboard_device::midi_keyboard_device(const machine_config &mconfig, const { } -void midi_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void midi_keyboard_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if(!id) { diff --git a/src/mame/machine/midikbd.h b/src/mame/machine/midikbd.h index 494612bbe65aa..86dd0e8ee58c2 100644 --- a/src/mame/machine/midikbd.h +++ b/src/mame/machine/midikbd.h @@ -20,7 +20,7 @@ class midi_keyboard_device : public device_t, public device_serial_interface void device_start() override; void tra_callback() override; void tra_complete() override; - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void push_tx(uint8_t data) { ++m_head %= 16; m_buffer[m_head] = data; } diff --git a/src/mame/machine/midwayic.cpp b/src/mame/machine/midwayic.cpp index 9db6471d4d325..ce59ddd9a25d0 100644 --- a/src/mame/machine/midwayic.cpp +++ b/src/mame/machine/midwayic.cpp @@ -364,7 +364,7 @@ void midway_serial_pic2_device::device_start() //m_yearoffs = yearoffs; m_time_just_written = 0; - m_time_write_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(midway_serial_pic2_device::reset_timer),this)); + m_time_write_timer = timer_alloc(*this, FUNC(midway_serial_pic2_device::reset_timer)); memset(m_default_nvram, 0xff, sizeof(m_default_nvram)); } diff --git a/src/mame/machine/mie.cpp b/src/mame/machine/mie.cpp index 1d39098ef3697..24bffe0461ba8 100644 --- a/src/mame/machine/mie.cpp +++ b/src/mame/machine/mie.cpp @@ -143,7 +143,7 @@ void mie_device::control_w(offs_t offset, uint8_t data) } } -void mie_device::device_timer(emu_timer &_timer, device_timer_id id, int param, void *ptr) +void mie_device::device_timer(timer_instance const &_timer, device_timer_id id, int param, void *ptr) { timer->adjust(attotime::never); if(control & CTRL_RXB) { diff --git a/src/mame/machine/mie.h b/src/mame/machine/mie.h index fbcd1e6583641..3e24b6287fbee 100644 --- a/src/mame/machine/mie.h +++ b/src/mame/machine/mie.h @@ -83,7 +83,7 @@ class mie_device : public maple_device // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/mame/machine/mips_rambo.cpp b/src/mame/machine/mips_rambo.cpp index 017d24fef77dc..db1eea5a324b8 100644 --- a/src/mame/machine/mips_rambo.cpp +++ b/src/mame/machine/mips_rambo.cpp @@ -73,9 +73,9 @@ void mips_rambo_device::device_start() ch.write_cb.resolve_safe(); } - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mips_rambo_device::timer), this)); - m_dma = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mips_rambo_device::dma), this)); - m_buzzer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mips_rambo_device::buzzer), this)); + m_timer = timer_alloc(*this, FUNC(mips_rambo_device::timer)); + m_dma = timer_alloc(*this, FUNC(mips_rambo_device::dma)); + m_buzzer = timer_alloc(*this, FUNC(mips_rambo_device::buzzer)); } void mips_rambo_device::device_reset() diff --git a/src/mame/machine/mm1kb.cpp b/src/mame/machine/mm1kb.cpp index c411afc615ba9..09de31da6b86b 100644 --- a/src/mame/machine/mm1kb.cpp +++ b/src/mame/machine/mm1kb.cpp @@ -247,7 +247,7 @@ void mm1_keyboard_device::shut_down_mm1() // device_timer - handler timer events //------------------------------------------------- -void mm1_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mm1_keyboard_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { // handle scan timer uint8_t data = 0xff; diff --git a/src/mame/machine/mm1kb.h b/src/mame/machine/mm1kb.h index 0924ac4836b5a..8400edabe3e86 100644 --- a/src/mame/machine/mm1kb.h +++ b/src/mame/machine/mm1kb.h @@ -48,7 +48,7 @@ class mm1_keyboard_device : public device_t protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/mame/machine/mpu4.cpp b/src/mame/machine/mpu4.cpp index 8a7c57aecf90a..c00ca1bb824c0 100644 --- a/src/mame/machine/mpu4.cpp +++ b/src/mame/machine/mpu4.cpp @@ -693,7 +693,7 @@ void mpu4_state::ic24_setup() } -void mpu4_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mpu4_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/machine/mw8080bw.cpp b/src/mame/machine/mw8080bw.cpp index 9942209eebdc5..c84289998bf74 100644 --- a/src/mame/machine/mw8080bw.cpp +++ b/src/mame/machine/mw8080bw.cpp @@ -89,7 +89,7 @@ IRQ_CALLBACK_MEMBER(mw8080bw_state::interrupt_vector) void mw8080bw_state::mw8080bw_create_interrupt_timer( ) { - m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mw8080bw_state::interrupt_trigger),this)); + m_interrupt_timer = timer_alloc(*this, FUNC(mw8080bw_state::interrupt_trigger)); } diff --git a/src/mame/machine/n64.cpp b/src/mame/machine/n64.cpp index 376a3b6162f20..8870040b6deb1 100644 --- a/src/mame/machine/n64.cpp +++ b/src/mame/machine/n64.cpp @@ -116,12 +116,12 @@ void n64_periphs::poll_reset_button(bool button) void n64_periphs::device_start() { - ai_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(n64_periphs::ai_timer_callback),this)); - pi_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(n64_periphs::pi_dma_callback),this)); - si_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(n64_periphs::si_dma_callback),this)); - vi_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(n64_periphs::vi_scanline_callback),this)); - dp_delay_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(n64_periphs::dp_delay_callback),this)); - reset_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(n64_periphs::reset_timer_callback),this)); + ai_timer = timer_alloc(*this, FUNC(n64_periphs::ai_timer_callback)); + pi_dma_timer = timer_alloc(*this, FUNC(n64_periphs::pi_dma_callback)); + si_dma_timer = timer_alloc(*this, FUNC(n64_periphs::si_dma_callback)); + vi_scanline_timer = timer_alloc(*this, FUNC(n64_periphs::vi_scanline_callback)); + dp_delay_timer = timer_alloc(*this, FUNC(n64_periphs::dp_delay_callback)); + reset_timer = timer_alloc(*this, FUNC(n64_periphs::reset_timer_callback)); m_n64 = machine().driver_data(); } diff --git a/src/mame/machine/namco06.cpp b/src/mame/machine/namco06.cpp index 37ec96883270f..631c18d78c0d9 100644 --- a/src/mame/machine/namco06.cpp +++ b/src/mame/machine/namco06.cpp @@ -251,7 +251,7 @@ void namco_06xx_device::device_start() m_write.resolve_all_safe(); /* allocate a timer */ - m_nmi_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(namco_06xx_device::nmi_generate),this)); + m_nmi_timer = timer_alloc(*this, FUNC(namco_06xx_device::nmi_generate)); save_item(NAME(m_control)); save_item(NAME(m_next_timer_state)); diff --git a/src/mame/machine/namco50.cpp b/src/mame/machine/namco50.cpp index d9dad75941edf..3f250219ed3cf 100644 --- a/src/mame/machine/namco50.cpp +++ b/src/mame/machine/namco50.cpp @@ -168,7 +168,7 @@ void namco_50xx_device::O_w(uint8_t data) WRITE_LINE_MEMBER( namco_50xx_device::rw ) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(namco_50xx_device::rw_sync),this), state); + m_rw_sync.synchronize(state); } TIMER_CALLBACK_MEMBER( namco_50xx_device::rw_sync ) @@ -183,7 +183,7 @@ WRITE_LINE_MEMBER( namco_50xx_device::chip_select ) void namco_50xx_device::write(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(namco_50xx_device::write_sync),this), data); + m_write_sync.synchronize(data); } TIMER_CALLBACK_MEMBER( namco_50xx_device::write_sync ) @@ -225,6 +225,9 @@ namco_50xx_device::namco_50xx_device(const machine_config &mconfig, const char * void namco_50xx_device::device_start() { + m_rw_sync.init(*this, FUNC(namco_50xx_device::rw_sync)); + m_write_sync.init(*this, FUNC(namco_50xx_device::write_sync)); + save_item(NAME(m_rw)); save_item(NAME(m_cmd)); save_item(NAME(m_portO)); diff --git a/src/mame/machine/namco50.h b/src/mame/machine/namco50.h index 28d8b4eed04d7..019512b1b89a8 100644 --- a/src/mame/machine/namco50.h +++ b/src/mame/machine/namco50.h @@ -33,7 +33,9 @@ class namco_50xx_device : public device_t uint8_t m_portO; TIMER_CALLBACK_MEMBER( rw_sync ); + transient_timer_factory m_rw_sync; TIMER_CALLBACK_MEMBER( write_sync ); + transient_timer_factory m_write_sync; uint8_t K_r(); uint8_t R0_r(); diff --git a/src/mame/machine/namco51.cpp b/src/mame/machine/namco51.cpp index fb4965cfd5fbd..bf166ae7c1854 100644 --- a/src/mame/machine/namco51.cpp +++ b/src/mame/machine/namco51.cpp @@ -75,7 +75,7 @@ WRITE_LINE_MEMBER( namco_51xx_device::vblank ) WRITE_LINE_MEMBER(namco_51xx_device::rw) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(namco_51xx_device::rw_sync),this), state); + m_rw_sync.synchronize(state); } TIMER_CALLBACK_MEMBER( namco_51xx_device::rw_sync ) @@ -95,7 +95,7 @@ uint8_t namco_51xx_device::read() void namco_51xx_device::write(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(namco_51xx_device::write_sync),this), data); + m_write_sync.synchronize(data); } TIMER_CALLBACK_MEMBER( namco_51xx_device::write_sync ) @@ -177,6 +177,9 @@ void namco_51xx_device::device_start() m_out.resolve_safe(); m_lockout.resolve_safe(); + m_rw_sync.init(*this, FUNC(namco_51xx_device::rw_sync)); + m_write_sync.init(*this, FUNC(namco_51xx_device::write_sync)); + save_item(NAME(m_portO)); save_item(NAME(m_rw)); } diff --git a/src/mame/machine/namco51.h b/src/mame/machine/namco51.h index 392e94c735f04..69e3e6d208237 100644 --- a/src/mame/machine/namco51.h +++ b/src/mame/machine/namco51.h @@ -48,7 +48,9 @@ class namco_51xx_device : public device_t void P_w(uint8_t data); TIMER_CALLBACK_MEMBER( rw_sync ); + transient_timer_factory m_rw_sync; TIMER_CALLBACK_MEMBER( write_sync ); + transient_timer_factory m_write_sync; }; DECLARE_DEVICE_TYPE(NAMCO_51XX, namco_51xx_device) diff --git a/src/mame/machine/namcos21_dsp.cpp b/src/mame/machine/namcos21_dsp.cpp index 14810b43f076d..ba1c23d4a2e3d 100644 --- a/src/mame/machine/namcos21_dsp.cpp +++ b/src/mame/machine/namcos21_dsp.cpp @@ -29,7 +29,7 @@ namcos21_dsp_device::namcos21_dsp_device(const machine_config &mconfig, const ch void namcos21_dsp_device::device_start() { m_winrun_dspcomram = std::make_unique(0x1000*2); - m_suspend_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(namcos21_dsp_device::suspend_callback),this)); + m_suspend_timer = timer_alloc(*this, FUNC(namcos21_dsp_device::suspend_callback)); m_pointram = std::make_unique(PTRAM_SIZE); m_pointram_idx = 0; diff --git a/src/mame/machine/naomig1.cpp b/src/mame/machine/naomig1.cpp index f40958fa50bde..eaa26398022f0 100644 --- a/src/mame/machine/naomig1.cpp +++ b/src/mame/machine/naomig1.cpp @@ -58,9 +58,9 @@ void naomi_g1_device::device_reset() set_ext_irq(CLEAR_LINE); } -void naomi_g1_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void naomi_g1_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { - timer.adjust(attotime::never); + this->timer->adjust(attotime::never); if(!gdst) return; gdst = 0; diff --git a/src/mame/machine/naomig1.h b/src/mame/machine/naomig1.h index 3c2e2dcfd9125..53f9cdbb2a2d7 100644 --- a/src/mame/machine/naomig1.h +++ b/src/mame/machine/naomig1.h @@ -57,7 +57,7 @@ class naomi_g1_device : public device_t virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void dma_get_position(uint8_t *&base, uint32_t &limit, bool to_maincpu) = 0; virtual void dma_advance(uint32_t size) = 0; diff --git a/src/mame/machine/nb1412m2.cpp b/src/mame/machine/nb1412m2.cpp index 75d396e2c16d4..9d3b6099074ec 100644 --- a/src/mame/machine/nb1412m2.cpp +++ b/src/mame/machine/nb1412m2.cpp @@ -184,7 +184,7 @@ void nb1412m2_device::device_reset() m_dac_timer->adjust(attotime::never); } -void nb1412m2_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nb1412m2_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/nb1412m2.h b/src/mame/machine/nb1412m2.h index afdbc30a8f451..657182585403e 100644 --- a/src/mame/machine/nb1412m2.h +++ b/src/mame/machine/nb1412m2.h @@ -39,7 +39,7 @@ class nb1412m2_device : public device_t, public device_memory_interface // virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual space_config_vector memory_space_config() const override; private: diff --git a/src/mame/machine/nb1413m3.cpp b/src/mame/machine/nb1413m3.cpp index c67a13f6ce20c..373bce7e215bf 100644 --- a/src/mame/machine/nb1413m3.cpp +++ b/src/mame/machine/nb1413m3.cpp @@ -103,7 +103,7 @@ void nb1413m3_device::device_reset() DEVICE HANDLERS *****************************************************************************/ -void nb1413m3_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nb1413m3_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/nb1413m3.h b/src/mame/machine/nb1413m3.h index b2b53160d5e63..fdfe3c0d4450b 100644 --- a/src/mame/machine/nb1413m3.h +++ b/src/mame/machine/nb1413m3.h @@ -180,7 +180,7 @@ class nb1413m3_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: diff --git a/src/mame/machine/nextkbd.cpp b/src/mame/machine/nextkbd.cpp index f19aee60ce57a..b9b4f0468d455 100644 --- a/src/mame/machine/nextkbd.cpp +++ b/src/mame/machine/nextkbd.cpp @@ -124,7 +124,7 @@ void nextkbd_device::update_mouse(bool force_update) send(); } -void nextkbd_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nextkbd_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if(!fifo_empty()) send(); diff --git a/src/mame/machine/nextkbd.h b/src/mame/machine/nextkbd.h index b5578f71e0977..89d8b35a33036 100644 --- a/src/mame/machine/nextkbd.h +++ b/src/mame/machine/nextkbd.h @@ -35,7 +35,7 @@ class nextkbd_device : public device_t { protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual ioport_constructor device_input_ports() const override; private: diff --git a/src/mame/machine/osborne1.cpp b/src/mame/machine/osborne1.cpp index 0b18cfe119304..340c951cc3eb3 100644 --- a/src/mame/machine/osborne1.cpp +++ b/src/mame/machine/osborne1.cpp @@ -279,13 +279,13 @@ void osborne1_state::machine_start() m_bank_fxxx->configure_entries(0, 1, m_ram->pointer() + 0xF000, 0); m_bank_fxxx->configure_entries(1, 1, m_ram->pointer() + 0x10000, 0); - m_video_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(osborne1_state::video_callback), this)); + m_video_timer = timer_alloc(*this, FUNC(osborne1_state::video_callback)); m_tilemap = &machine().tilemap().create( *m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(osborne1_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8, 10, 128, 32); - m_acia_rxc_txc_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(osborne1_state::acia_rxc_txc_callback), this)); + m_acia_rxc_txc_timer = timer_alloc(*this, FUNC(osborne1_state::acia_rxc_txc_callback)); m_maincpu->space(AS_PROGRAM).cache(m_mem_cache); diff --git a/src/mame/machine/p2000t_mdcr.cpp b/src/mame/machine/p2000t_mdcr.cpp index 568364de3cf54..962bcd9956736 100644 --- a/src/mame/machine/p2000t_mdcr.cpp +++ b/src/mame/machine/p2000t_mdcr.cpp @@ -132,7 +132,7 @@ void mdcr_device::device_post_load() m_cassette->seek(m_save_tape_time, SEEK_SET); } -void mdcr_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mdcr_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (!m_recording && m_cassette->motor_on()) { diff --git a/src/mame/machine/p2000t_mdcr.h b/src/mame/machine/p2000t_mdcr.h index 9b312ed42d765..71f6b1cd736a8 100644 --- a/src/mame/machine/p2000t_mdcr.h +++ b/src/mame/machine/p2000t_mdcr.h @@ -75,7 +75,7 @@ class mdcr_device : public device_t virtual void device_start() override; virtual void device_pre_save() override; virtual void device_post_load() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/mame/machine/pc1512kb.cpp b/src/mame/machine/pc1512kb.cpp index f026f37cfd171..61657e7261f77 100644 --- a/src/mame/machine/pc1512kb.cpp +++ b/src/mame/machine/pc1512kb.cpp @@ -256,7 +256,7 @@ void pc1512_keyboard_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void pc1512_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pc1512_keyboard_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (!m_clock_in) { diff --git a/src/mame/machine/pc1512kb.h b/src/mame/machine/pc1512kb.h index bbd6fb441f9c3..9b10d5fad2b7f 100644 --- a/src/mame/machine/pc1512kb.h +++ b/src/mame/machine/pc1512kb.h @@ -48,7 +48,7 @@ class pc1512_keyboard_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/mame/machine/pc9801_kbd.cpp b/src/mame/machine/pc9801_kbd.cpp index a5e715cc5c2e4..1f40db02ce015 100644 --- a/src/mame/machine/pc9801_kbd.cpp +++ b/src/mame/machine/pc9801_kbd.cpp @@ -265,7 +265,7 @@ void pc9801_kbd_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void pc9801_kbd_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pc9801_kbd_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if(id == RX_TIMER) { diff --git a/src/mame/machine/pc9801_kbd.h b/src/mame/machine/pc9801_kbd.h index 3c5c811c9d12f..67e8229525a18 100644 --- a/src/mame/machine/pc9801_kbd.h +++ b/src/mame/machine/pc9801_kbd.h @@ -37,7 +37,7 @@ class pc9801_kbd_device : public device_t virtual void device_validity_check(validity_checker &valid) const override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; devcb_write_line m_write_irq; diff --git a/src/mame/machine/pce220_ser.cpp b/src/mame/machine/pce220_ser.cpp index a6459ebac6c7b..bb761437c2028 100644 --- a/src/mame/machine/pce220_ser.cpp +++ b/src/mame/machine/pce220_ser.cpp @@ -88,7 +88,7 @@ void pce220_serial_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void pce220_serial_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pce220_serial_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_SEND && m_enabled) { diff --git a/src/mame/machine/pce220_ser.h b/src/mame/machine/pce220_ser.h index c9249bf585313..163ce547d4456 100644 --- a/src/mame/machine/pce220_ser.h +++ b/src/mame/machine/pce220_ser.h @@ -59,7 +59,7 @@ class pce220_serial_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // internal device state diff --git a/src/mame/machine/pce_cd.cpp b/src/mame/machine/pce_cd.cpp index 30027256512ba..0fbc43de97f5c 100644 --- a/src/mame/machine/pce_cd.cpp +++ b/src/mame/machine/pce_cd.cpp @@ -145,21 +145,23 @@ void pce_cd_device::device_start() m_subcode_buffer = std::make_unique(96); - m_data_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pce_cd_device::data_timer_callback),this)); + m_data_timer = timer_alloc(*this, FUNC(pce_cd_device::data_timer_callback)); m_data_timer->adjust(attotime::never); - m_adpcm_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pce_cd_device::adpcm_dma_timer_callback),this)); + m_adpcm_dma_timer = timer_alloc(*this, FUNC(pce_cd_device::adpcm_dma_timer_callback)); m_adpcm_dma_timer->adjust(attotime::never); - m_cdda_fadeout_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pce_cd_device::cdda_fadeout_callback),this)); + m_cdda_fadeout_timer = timer_alloc(*this, FUNC(pce_cd_device::cdda_fadeout_callback)); m_cdda_fadeout_timer->adjust(attotime::never); - m_cdda_fadein_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pce_cd_device::cdda_fadein_callback),this)); + m_cdda_fadein_timer = timer_alloc(*this, FUNC(pce_cd_device::cdda_fadein_callback)); m_cdda_fadein_timer->adjust(attotime::never); - m_adpcm_fadeout_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pce_cd_device::adpcm_fadeout_callback),this)); + m_adpcm_fadeout_timer = timer_alloc(*this, FUNC(pce_cd_device::adpcm_fadeout_callback)); m_adpcm_fadeout_timer->adjust(attotime::never); - m_adpcm_fadein_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pce_cd_device::adpcm_fadein_callback),this)); + m_adpcm_fadein_timer = timer_alloc(*this, FUNC(pce_cd_device::adpcm_fadein_callback)); m_adpcm_fadein_timer->adjust(attotime::never); + m_clear_ack.init(*this, FUNC(pce_cd_device::clear_ack)); + // m_cd_file pointer is setup at a later stage because it is still empty when this function is called // TODO: add proper restore for the cd data... @@ -1447,7 +1449,7 @@ uint8_t pce_cd_device::get_cd_data_byte() if (m_scsi_IO) { m_scsi_ACK = 1; - machine().scheduler().timer_set(m_maincpu->cycles_to_attotime(15), timer_expired_delegate(FUNC(pce_cd_device::clear_ack),this)); + m_clear_ack.call_after(m_maincpu->cycles_to_attotime(15)); } } return data; diff --git a/src/mame/machine/pce_cd.h b/src/mame/machine/pce_cd.h index b9147eced8673..ed375cf601e4e 100644 --- a/src/mame/machine/pce_cd.h +++ b/src/mame/machine/pce_cd.h @@ -134,6 +134,8 @@ class pce_cd_device : public device_t, TIMER_CALLBACK_MEMBER(clear_ack); TIMER_CALLBACK_MEMBER(adpcm_dma_timer_callback); + transient_timer_factory m_clear_ack; + required_device m_maincpu; std::unique_ptr m_bram; diff --git a/src/mame/machine/pitnrun.cpp b/src/mame/machine/pitnrun.cpp index b2dff09721851..e46b65c802ff7 100644 --- a/src/mame/machine/pitnrun.cpp +++ b/src/mame/machine/pitnrun.cpp @@ -24,6 +24,11 @@ void pitnrun_state::machine_start() save_item(NAME(m_porta_in)); save_item(NAME(m_porta_out)); save_item(NAME(m_address)); + + m_mcu_real_data_r.init(*this, FUNC(pitnrun_state::mcu_real_data_r)); + m_mcu_real_data_w.init(*this, FUNC(pitnrun_state::mcu_real_data_w)); + m_mcu_data_real_r.init(*this, FUNC(pitnrun_state::mcu_data_real_r)); + m_mcu_status_real_w.init(*this, FUNC(pitnrun_state::mcu_status_real_w)); } void pitnrun_state::machine_reset() @@ -40,7 +45,7 @@ TIMER_CALLBACK_MEMBER(pitnrun_state::mcu_real_data_r) uint8_t pitnrun_state::mcu_data_r() { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(pitnrun_state::mcu_real_data_r),this)); + m_mcu_real_data_r.synchronize(); return m_toz80; } @@ -53,7 +58,7 @@ TIMER_CALLBACK_MEMBER(pitnrun_state::mcu_real_data_w) void pitnrun_state::mcu_data_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(pitnrun_state::mcu_real_data_w),this), data); + m_mcu_real_data_w.synchronize(data); machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5)); } @@ -119,14 +124,14 @@ void pitnrun_state::m68705_portb_w(uint8_t data) if (~data & 0x02) { /* 68705 is going to read data from the Z80 */ - machine().scheduler().synchronize(timer_expired_delegate(FUNC(pitnrun_state::mcu_data_real_r),this)); + m_mcu_data_real_r.synchronize(); m_mcu->set_input_line(0,CLEAR_LINE); m_porta_in = m_fromz80; } if (~data & 0x04) { /* 68705 is writing data for the Z80 */ - machine().scheduler().synchronize(timer_expired_delegate(FUNC(pitnrun_state::mcu_status_real_w),this), m_porta_out); + m_mcu_status_real_w.synchronize(m_porta_out); } if (~data & 0x10) { diff --git a/src/mame/machine/pmd85.cpp b/src/mame/machine/pmd85.cpp index 93a9edacc8b3c..e92148b6ddb54 100644 --- a/src/mame/machine/pmd85.cpp +++ b/src/mame/machine/pmd85.cpp @@ -620,7 +620,7 @@ void pmd85_state::mato_io_w(offs_t offset, uint8_t data) } } -void pmd85_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pmd85_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/pocketc.cpp b/src/mame/machine/pocketc.cpp index 48ac3aa3d08ab..4aae3a16da4aa 100644 --- a/src/mame/machine/pocketc.cpp +++ b/src/mame/machine/pocketc.cpp @@ -14,7 +14,7 @@ READ_LINE_MEMBER(pocketc_state::brk_r) return BIT(m_extra->read(), 0); } -void pocketc_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pocketc_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/poly.cpp b/src/mame/machine/poly.cpp index cb1bbc5379c77..f1e8fd6ddce22 100644 --- a/src/mame/machine/poly.cpp +++ b/src/mame/machine/poly.cpp @@ -44,7 +44,7 @@ TIMER_CALLBACK_MEMBER(poly_state::set_protect) void poly_state::set_protect_w(uint8_t data) { /* set protect after 1 E cycle */ - machine().scheduler().timer_set(m_maincpu->cycles_to_attotime(2), timer_expired_delegate(FUNC(poly_state::set_protect), this)); + m_set_protect.call_after(m_maincpu->cycles_to_attotime(2)); } diff --git a/src/mame/machine/psxcd.cpp b/src/mame/machine/psxcd.cpp index 6c9580c3bd01a..464e5cbaa99be 100644 --- a/src/mame/machine/psxcd.cpp +++ b/src/mame/machine/psxcd.cpp @@ -1182,7 +1182,7 @@ void psxcd_device::stop_read() m_spu->flush_cdda(sector); } -void psxcd_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void psxcd_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { if (!m_timerinuse[tid]) { diff --git a/src/mame/machine/psxcd.h b/src/mame/machine/psxcd.h index b8146a3bc42b0..4015f4084ceca 100644 --- a/src/mame/machine/psxcd.h +++ b/src/mame/machine/psxcd.h @@ -35,7 +35,7 @@ class psxcd_device : public cdrom_image_device virtual void device_start() override; virtual void device_stop() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual const tiny_rom_entry *device_rom_region() const override; private: diff --git a/src/mame/machine/qix.cpp b/src/mame/machine/qix.cpp index 8479daabc6d64..37275d69cc014 100644 --- a/src/mame/machine/qix.cpp +++ b/src/mame/machine/qix.cpp @@ -19,6 +19,11 @@ * *************************************/ +void qix_state::machine_start() +{ + m_pia_w_callback.init(*this, FUNC(qix_state::pia_w_callback)); +} + void qixmcu_state::machine_start() { qix_state::machine_start(); @@ -242,7 +247,7 @@ void qix_state::qix_pia_w(offs_t offset, uint8_t data) { /* make all the CPUs synchronize, and only AFTER that write the command to the PIA */ /* otherwise the 68705 will miss commands */ - machine().scheduler().synchronize(timer_expired_delegate(FUNC(qix_state::pia_w_callback), this), data | (offset << 8)); + m_pia_w_callback.synchronize(data | (offset << 8)); } diff --git a/src/mame/machine/qx10kbd.cpp b/src/mame/machine/qx10kbd.cpp index 9692f9b13a5cc..062a3bc54747d 100644 --- a/src/mame/machine/qx10kbd.cpp +++ b/src/mame/machine/qx10kbd.cpp @@ -37,7 +37,7 @@ WRITE_LINE_MEMBER(qx10_keyboard_device::input_txd) m_rxd = state; } -void qx10_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void qx10_keyboard_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { m_clk_state = !m_clk_state; } diff --git a/src/mame/machine/qx10kbd.h b/src/mame/machine/qx10kbd.h index 84961e060d75a..df26659c4b5a5 100644 --- a/src/mame/machine/qx10kbd.h +++ b/src/mame/machine/qx10kbd.h @@ -22,7 +22,7 @@ class qx10_keyboard_device protected: virtual const tiny_rom_entry *device_rom_region() const override; virtual void device_add_mconfig(machine_config &config) override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_start() override; private: diff --git a/src/mame/machine/rm380z.cpp b/src/mame/machine/rm380z.cpp index 4d8d57a140562..eae9b86cb0f09 100644 --- a/src/mame/machine/rm380z.cpp +++ b/src/mame/machine/rm380z.cpp @@ -226,7 +226,7 @@ void rm380z_state::disk_0_control(uint8_t data) void rm380z_state::machine_start() { - m_static_vblank_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(rm380z_state::static_vblank_timer), this)); + m_static_vblank_timer = timer_alloc(*this, FUNC(rm380z_state::static_vblank_timer)); m_static_vblank_timer->adjust(attotime::from_hz(TIMER_SPEED), 0, attotime::from_hz(TIMER_SPEED)); } diff --git a/src/mame/machine/rmnimbus.cpp b/src/mame/machine/rmnimbus.cpp index 660ab45e42c46..97b688f169a0e 100644 --- a/src/mame/machine/rmnimbus.cpp +++ b/src/mame/machine/rmnimbus.cpp @@ -1522,7 +1522,7 @@ void rmnimbus_state::mouse_js_reset() m_nimbus_mouse.m_mouse_timer->adjust(attotime::zero, 0, attotime::from_hz(1000)); } -void rmnimbus_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void rmnimbus_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { uint8_t x = 0; uint8_t y = 0; diff --git a/src/mame/machine/rx01.cpp b/src/mame/machine/rx01.cpp index 4849799580492..951af3ea16212 100644 --- a/src/mame/machine/rx01.cpp +++ b/src/mame/machine/rx01.cpp @@ -81,6 +81,7 @@ void rx01_device::device_add_mconfig(machine_config &config) void rx01_device::device_start() { + m_service_command.init(*this, FUNC(rx01_device::service_command)); } @@ -173,7 +174,7 @@ void rx01_device::command_write(uint16_t data) break; } } - machine().scheduler().timer_set(attotime::from_msec(100), timer_expired_delegate(FUNC(rx01_device::service_command),this)); + m_service_command.call_after(attotime::from_msec(100)); } uint16_t rx01_device::status_read() @@ -187,7 +188,7 @@ void rx01_device::data_write(uint16_t data) // printf("data_write %04x\n",data); // data can be written only if TR is set if (BIT(m_rxcs,7)) m_rxdb = data; - machine().scheduler().timer_set(attotime::from_msec(100), timer_expired_delegate(FUNC(rx01_device::service_command),this)); + m_service_command.call_after(attotime::from_msec(100)); } uint16_t rx01_device::data_read() diff --git a/src/mame/machine/rx01.h b/src/mame/machine/rx01.h index eed7ce235290e..1490d1ab20907 100644 --- a/src/mame/machine/rx01.h +++ b/src/mame/machine/rx01.h @@ -75,6 +75,7 @@ class rx01_device : public device_t int m_unit; int m_interrupt; rx01_state m_state; + transient_timer_factory m_service_command; }; // device type definition diff --git a/src/mame/machine/saa7191.cpp b/src/mame/machine/saa7191.cpp index 7298cc8b1d11b..fecc2f5b69e7c 100644 --- a/src/mame/machine/saa7191.cpp +++ b/src/mame/machine/saa7191.cpp @@ -71,7 +71,7 @@ void saa7191_device::device_reset() m_input_clock->adjust(attotime::never); } -void saa7191_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void saa7191_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { } diff --git a/src/mame/machine/saa7191.h b/src/mame/machine/saa7191.h index 34e9bec42fba5..ac1a7dd074263 100644 --- a/src/mame/machine/saa7191.h +++ b/src/mame/machine/saa7191.h @@ -39,7 +39,7 @@ class saa7191_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void reg_w(uint8_t data); diff --git a/src/mame/machine/segaic16.cpp b/src/mame/machine/segaic16.cpp index 11f47ce911e71..54226c811a707 100644 --- a/src/mame/machine/segaic16.cpp +++ b/src/mame/machine/segaic16.cpp @@ -347,7 +347,7 @@ void sega_315_5250_compare_timer_device::write(offs_t offset, u16 data, u16 mem_ case 0xe: COMBINE_DATA(&m_regs[10]); break; case 0xb: case 0xf: - machine().scheduler().synchronize(timer_expired_delegate(FUNC(sega_315_5250_compare_timer_device::write_to_sound), this), data & 0xff); + m_write_to_sound.synchronize(data & 0xff); break; } } @@ -363,6 +363,8 @@ void sega_315_5250_compare_timer_device::device_start() m_68kint_callback.resolve(); m_zint_callback.resolve(); + m_write_to_sound.init(*this, FUNC(sega_315_5250_compare_timer_device::write_to_sound)); + // save states save_item(NAME(m_regs)); save_item(NAME(m_counter)); diff --git a/src/mame/machine/segaic16.h b/src/mame/machine/segaic16.h index 06483b4e7274a..198f5a208919d 100644 --- a/src/mame/machine/segaic16.h +++ b/src/mame/machine/segaic16.h @@ -94,6 +94,7 @@ class sega_315_5250_compare_timer_device : public device_t void execute(bool update_history = false); void interrupt_ack(); TIMER_CALLBACK_MEMBER(write_to_sound); + transient_timer_factory m_write_to_sound; // configuration devcb_write_line m_68kint_callback; diff --git a/src/mame/machine/sgi.cpp b/src/mame/machine/sgi.cpp index 2abbec6849d52..c05aeb8604957 100644 --- a/src/mame/machine/sgi.cpp +++ b/src/mame/machine/sgi.cpp @@ -721,7 +721,7 @@ void sgi_mc_device::write(offs_t offset, uint32_t data, uint32_t mem_mask) } } -void sgi_mc_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sgi_mc_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_RPSS) { diff --git a/src/mame/machine/sgi.h b/src/mame/machine/sgi.h index 3e4ae444707bf..f6d7e6550fc1c 100644 --- a/src/mame/machine/sgi.h +++ b/src/mame/machine/sgi.h @@ -41,7 +41,7 @@ class sgi_mc_device : public device_t virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; static const device_timer_id TIMER_RPSS = 0; static const device_timer_id TIMER_DMA = 1; diff --git a/src/mame/machine/sms.cpp b/src/mame/machine/sms.cpp index 1a2a2a3a94b74..24a9adbc1ab38 100644 --- a/src/mame/machine/sms.cpp +++ b/src/mame/machine/sms.cpp @@ -1041,7 +1041,7 @@ void sms_state::machine_start() } } - m_lphaser_th_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sms_state::lphaser_th_generate),this)); + m_lphaser_th_timer = timer_alloc(*this, FUNC(sms_state::lphaser_th_generate)); save_item(NAME(m_mapper)); save_item(NAME(m_port_dc_reg)); diff --git a/src/mame/machine/snes.cpp b/src/mame/machine/snes.cpp index 5afd20193885d..a2d5b56475f25 100644 --- a/src/mame/machine/snes.cpp +++ b/src/mame/machine/snes.cpp @@ -43,7 +43,7 @@ uint32_t snes_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, Timers *************************************/ -void snes_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void snes_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/sorcerer.cpp b/src/mame/machine/sorcerer.cpp index 6e3f547784f39..a9ed418888023 100644 --- a/src/mame/machine/sorcerer.cpp +++ b/src/mame/machine/sorcerer.cpp @@ -28,7 +28,7 @@ TIMER_CALLBACK_MEMBER(sorcerer_state::serial_tc) } -void sorcerer_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void sorcerer_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/starwars.cpp b/src/mame/machine/starwars.cpp index dcaf2205f3aa4..b9a919fcd3228 100644 --- a/src/mame/machine/starwars.cpp +++ b/src/mame/machine/starwars.cpp @@ -115,7 +115,7 @@ void starwars_state::starwars_mproc_init() m_PROM_AM[cnt] = (val >> 7) & 0x0001; } - m_math_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(starwars_state::math_run_clear),this)); + m_math_timer = timer_alloc(*this, FUNC(starwars_state::math_run_clear)); } diff --git a/src/mame/machine/stfight.cpp b/src/mame/machine/stfight.cpp index e3f3d01a1936f..d82da146a850d 100644 --- a/src/mame/machine/stfight.cpp +++ b/src/mame/machine/stfight.cpp @@ -109,7 +109,7 @@ void stfight_state::stfight_bank_w(uint8_t data) * CPU 1 timed interrupt - 60Hz??? */ -void stfight_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void stfight_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/swtpc09.cpp b/src/mame/machine/swtpc09.cpp index c8fba859dc7dc..d7a2981d2103b 100644 --- a/src/mame/machine/swtpc09.cpp +++ b/src/mame/machine/swtpc09.cpp @@ -1015,7 +1015,7 @@ void swtpc09_state::machine_start() m_dmaf_high_address[2] = 0; m_dmaf_high_address[3] = 0; - m_floppy_motor_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(swtpc09_state::floppy_motor_callback),this)); + m_floppy_motor_timer = timer_alloc(*this, FUNC(swtpc09_state::floppy_motor_callback)); m_floppy_motor_on = 0; // reset the 6844 diff --git a/src/mame/machine/tait8741.cpp b/src/mame/machine/tait8741.cpp index ae9c570b689fe..4f0a679d295bd 100644 --- a/src/mame/machine/tait8741.cpp +++ b/src/mame/machine/tait8741.cpp @@ -198,7 +198,7 @@ void taito8741_4pack_device::update(int num) st->txd[0] = port_read(st->number,0); if( sst ) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(taito8741_4pack_device::serial_tx),this), num); + m_serial_tx.synchronize(num); st->serial_out = 0; st->status |= 0x04; st->phase = CMD_08; @@ -253,6 +253,8 @@ void taito8741_4pack_device::device_start() m_port_handler_2_r.resolve_safe(0); m_port_handler_3_r.resolve_safe(0); + m_serial_tx.init(*this, FUNC(taito8741_4pack_device::serial_tx)); + for (int i = 0; i < 4; i++) { save_item(NAME(m_taito8741[i].toData), i); diff --git a/src/mame/machine/tait8741.h b/src/mame/machine/tait8741.h index e98bf5a78e82c..45a6ef14a3872 100644 --- a/src/mame/machine/tait8741.h +++ b/src/mame/machine/tait8741.h @@ -37,6 +37,7 @@ class taito8741_4pack_device : public device_t void write_3(offs_t offset, uint8_t data) { if(offset&1) command_w(3,data); else data_w(3,data); } TIMER_CALLBACK_MEMBER( serial_tx ); + transient_timer_factory m_serial_tx; void update(int num); int status_r(int num); int data_r(int num); diff --git a/src/mame/machine/taitosjsec.cpp b/src/mame/machine/taitosjsec.cpp index 6616a218ac6ba..bc9d048dba944 100644 --- a/src/mame/machine/taitosjsec.cpp +++ b/src/mame/machine/taitosjsec.cpp @@ -65,7 +65,7 @@ void taito_sj_security_mcu_device::data_w(offs_t offset, u8 data) { // ZLWRITE device_scheduler &sched(machine().scheduler()); - sched.synchronize(timer_expired_delegate(FUNC(taito_sj_security_mcu_device::do_host_write), this), data); + m_do_host_write.synchronize(data); sched.boost_interleave(attotime::zero, attotime::from_usec(10)); } } @@ -95,6 +95,10 @@ void taito_sj_security_mcu_device::device_start() m_68intrq_cb.resolve_safe(); m_busrq_cb.resolve_safe(); + m_do_mcu_read.init(*this, FUNC(taito_sj_security_mcu_device::do_mcu_read)); + m_do_mcu_write.init(*this, FUNC(taito_sj_security_mcu_device::do_mcu_write)); + m_do_host_write.init(*this, FUNC(taito_sj_security_mcu_device::do_host_write)); + save_item(NAME(m_addr)); save_item(NAME(m_mcu_data)); save_item(NAME(m_host_data)); @@ -166,14 +170,14 @@ void taito_sj_security_mcu_device::mcu_pb_w(u8 data) u8 const bus_val(get_bus_val()); if (BIT(diff & data, 1)) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(taito_sj_security_mcu_device::do_mcu_read), this)); + m_do_mcu_read.synchronize(); if (int_mode::LATCH == m_int_mode) m_mcu->set_input_line(M68705_IRQ_LINE, CLEAR_LINE); } // 68LWR if (BIT(diff & data, 2)) - machine().scheduler().synchronize(timer_expired_delegate(FUNC(taito_sj_security_mcu_device::do_mcu_write), this), bus_val); + m_do_mcu_write.synchronize(bus_val); // BUSRQ if (BIT(diff, 3)) diff --git a/src/mame/machine/taitosjsec.h b/src/mame/machine/taitosjsec.h index 265305af26a75..94f0e689ca420 100644 --- a/src/mame/machine/taitosjsec.h +++ b/src/mame/machine/taitosjsec.h @@ -55,8 +55,11 @@ class taito_sj_security_mcu_device : public device_t { return (BIT(~m_pb_val, 1) ? m_host_data : 0xffU) & m_pa_val & ((m_busak && BIT(~m_pb_val, 5)) ? m_read_data : 0xffU); } TIMER_CALLBACK_MEMBER(do_mcu_read); + transient_timer_factory m_do_mcu_read; TIMER_CALLBACK_MEMBER(do_mcu_write); + transient_timer_factory m_do_mcu_write; TIMER_CALLBACK_MEMBER(do_host_write); + transient_timer_factory m_do_host_write; required_device m_mcu; diff --git a/src/mame/machine/thomson.cpp b/src/mame/machine/thomson.cpp index 16afac21ceb2d..c043e2dba950c 100644 --- a/src/mame/machine/thomson.cpp +++ b/src/mame/machine/thomson.cpp @@ -867,7 +867,7 @@ TIMER_CALLBACK_MEMBER(thomson_state::to7_game_update_cb) void thomson_state::to7_game_init() { LOG (( "to7_game_init called\n" )); - m_to7_game_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(thomson_state::to7_game_update_cb),this)); + m_to7_game_timer = timer_alloc(*this, FUNC(thomson_state::to7_game_update_cb)); m_to7_game_timer->adjust(TO7_GAME_POLL_PERIOD, 0, TO7_GAME_POLL_PERIOD); save_item(NAME(m_to7_game_sound)); save_item(NAME(m_to7_game_mute)); @@ -1597,7 +1597,7 @@ MACHINE_START_MEMBER( mo5_state, mo5 ) to7_game_init(); to7_modem_init(); to7_midi_init(); - m_mo5_periodic_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mo5_state::mo5_periodic_cb),this)); + m_mo5_periodic_timer = timer_alloc(*this, FUNC(mo5_state::mo5_periodic_cb)); m_extension->rom_map(m_maincpu->space(AS_PROGRAM), 0xa000, 0xa7bf); m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xa7d0, 0xa7df); @@ -2423,7 +2423,7 @@ void to9_state::to9_kbd_reset() void to9_state::to9_kbd_init() { LOG(( "to9_kbd_init called\n" )); - m_to9_kbd_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(to9_state::to9_kbd_timer_cb),this)); + m_to9_kbd_timer = timer_alloc(*this, FUNC(to9_state::to9_kbd_timer_cb)); save_item(NAME(m_to9_kbd_parity)); save_item(NAME(m_to9_kbd_intr)); save_item(NAME(m_to9_kbd_in)); @@ -2877,8 +2877,8 @@ void to9_state::to8_kbd_reset() void to9_state::to8_kbd_init() { - m_to8_kbd_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(to9_state::to8_kbd_timer_cb),this)); - m_to8_kbd_signal = machine().scheduler().timer_alloc(timer_expired_delegate()); + m_to8_kbd_timer = timer_alloc(*this, FUNC(to9_state::to8_kbd_timer_cb)); + m_to8_kbd_signal = timer_alloc(); save_item(NAME(m_to8_kbd_ack)); save_item(NAME(m_to8_kbd_data)); save_item(NAME(m_to8_kbd_step)); @@ -4001,7 +4001,7 @@ TIMER_CALLBACK_MEMBER(mo6_state::mo6_game_update_cb) void mo6_state::mo6_game_init() { LOG (( "mo6_game_init called\n" )); - m_to7_game_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mo6_state::mo6_game_update_cb),this)); + m_to7_game_timer = timer_alloc(*this, FUNC(mo6_state::mo6_game_update_cb)); m_to7_game_timer->adjust(TO7_GAME_POLL_PERIOD, 0, TO7_GAME_POLL_PERIOD); save_item(NAME(m_to7_game_sound)); save_item(NAME(m_to7_game_mute)); @@ -4303,10 +4303,7 @@ MACHINE_START_MEMBER( mo6_state, mo6 ) to9_palette_init(); to7_modem_init(); to7_midi_init(); - m_mo5_periodic_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mo6_state::mo5_periodic_cb),this)); - - m_extension->rom_map(m_maincpu->space(AS_PROGRAM), 0xa000, 0xa7bf); - m_extension->io_map (m_maincpu->space(AS_PROGRAM), 0xa7d0, 0xa7df); + m_mo5_periodic_timer = timer_alloc(*this, FUNC(mo6_state::mo5_periodic_cb)); /* memory */ m_thom_cart_bank = 0; @@ -4423,7 +4420,7 @@ void mo5nr_state::mo5nr_sys_porta_out(uint8_t data) void mo5nr_state::mo5nr_game_init() { LOG (( "mo5nr_game_init called\n" )); - m_to7_game_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mo5nr_state::mo6_game_update_cb),this)); + m_to7_game_timer = timer_alloc(*this, FUNC(mo5nr_state::mo6_game_update_cb)); m_to7_game_timer->adjust( TO7_GAME_POLL_PERIOD, 0, TO7_GAME_POLL_PERIOD ); save_item(NAME(m_to7_game_sound)); save_item(NAME(m_to7_game_mute)); @@ -4505,7 +4502,7 @@ MACHINE_START_MEMBER( mo5nr_state, mo5nr ) to9_palette_init(); to7_modem_init(); to7_midi_init(); - m_mo5_periodic_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mo5nr_state::mo5_periodic_cb),this)); + m_mo5_periodic_timer = timer_alloc(*this, FUNC(mo5nr_state::mo5_periodic_cb)); m_extension->rom_map(m_extension_view[0], 0xa000, 0xa7bf); m_extension->io_map (m_extension_view[0], 0xa7d0, 0xa7df); diff --git a/src/mame/machine/ti85.cpp b/src/mame/machine/ti85.cpp index d3c3bb936363b..e0aaa6de889dd 100644 --- a/src/mame/machine/ti85.cpp +++ b/src/mame/machine/ti85.cpp @@ -71,7 +71,7 @@ TIMER_CALLBACK_MEMBER(ti85_state::ti83_timer2_callback) } } -void ti85_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ti85_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -255,7 +255,7 @@ void ti85_state::machine_start() m_port4_bit0 = 0; m_ti81_port_7_data = 0; - m_ti85_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ti85_state::ti85_timer_callback), this)); + m_ti85_timer = timer_alloc(*this, FUNC(ti85_state::ti85_timer_callback)); m_ti85_timer->adjust(attotime::from_hz(256), 0, attotime::from_hz(256)); space.unmap_write(0x0000, 0x3fff); @@ -360,9 +360,9 @@ MACHINE_START_MEMBER(ti85_state,ti83p) ti85_state::update_ti83p_memory(); - m_ti83_1st_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ti85_state::ti83_timer1_callback), this)); + m_ti83_1st_timer = timer_alloc(*this, FUNC(ti85_state::ti83_timer1_callback)); m_ti83_1st_timer->adjust(attotime::from_hz(256), 0, attotime::from_hz(256)); - m_ti83_2nd_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ti85_state::ti83_timer2_callback), this)); + m_ti83_2nd_timer = timer_alloc(*this, FUNC(ti85_state::ti83_timer2_callback)); m_ti83_2nd_timer->adjust(attotime::from_hz(512), 0, attotime::from_hz(512)); /* save states and debugging */ @@ -400,9 +400,9 @@ void ti85_state::ti8xpse_init_common() ti85_state::update_ti83pse_memory(); - m_ti83_1st_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ti85_state::ti83_timer1_callback), this)); + m_ti83_1st_timer = timer_alloc(*this, FUNC(ti85_state::ti83_timer1_callback)); m_ti83_1st_timer->adjust(attotime::from_hz(256), 0, attotime::from_hz(256)); - m_ti83_2nd_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ti85_state::ti83_timer2_callback), this)); + m_ti83_2nd_timer = timer_alloc(*this, FUNC(ti85_state::ti83_timer2_callback)); m_ti83_2nd_timer->adjust(attotime::from_hz(512), 0, attotime::from_hz(512)); m_crystal_timer1 = timer_alloc(CRYSTAL_TIMER1); @@ -472,7 +472,7 @@ MACHINE_START_MEMBER(ti85_state,ti86) membank("bank4")->set_base(m_ti8x_ram.get()); subdevice("nvram")->set_base(m_ti8x_ram.get(), sizeof(uint8_t)*128*1024); - m_ti85_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ti85_state::ti85_timer_callback), this)); + m_ti85_timer = timer_alloc(*this, FUNC(ti85_state::ti85_timer_callback)); m_ti85_timer->adjust(attotime::from_hz(256), 0, attotime::from_hz(256)); } diff --git a/src/mame/machine/tnzs.cpp b/src/mame/machine/tnzs.cpp index e1246b052df1d..9fd2435a7e32f 100644 --- a/src/mame/machine/tnzs.cpp +++ b/src/mame/machine/tnzs.cpp @@ -206,7 +206,7 @@ TIMER_CALLBACK_MEMBER(tnzs_base_state::kludge_callback) void tnzs_base_state::tnzs_sync_kludge_w(uint8_t data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(tnzs_base_state::kludge_callback),this), data); + m_kludge_callback.synchronize(data); } */ diff --git a/src/mame/machine/trs80.cpp b/src/mame/machine/trs80.cpp index 1f6e17979f48c..4b51b486f88f9 100644 --- a/src/mame/machine/trs80.cpp +++ b/src/mame/machine/trs80.cpp @@ -332,7 +332,7 @@ void trs80_state::machine_start() m_tape_unit = 1; m_reg_load = 1; - m_cassette_data_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(trs80_state::cassette_data_callback),this)); + m_cassette_data_timer = timer_alloc(*this, FUNC(trs80_state::cassette_data_callback)); m_cassette_data_timer->adjust( attotime::zero, 0, attotime::from_hz(11025) ); } diff --git a/src/mame/machine/trs80m3.cpp b/src/mame/machine/trs80m3.cpp index 842f210bb17cb..c31903ecaeda7 100644 --- a/src/mame/machine/trs80m3.cpp +++ b/src/mame/machine/trs80m3.cpp @@ -578,7 +578,7 @@ void trs80m3_state::machine_start() if (!BIT(m_model4, 2)) // Model 4P has no cassette hardware { - m_cassette_data_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(trs80m3_state::cassette_data_callback),this)); + m_cassette_data_timer = timer_alloc(*this, FUNC(trs80m3_state::cassette_data_callback)); m_cassette_data_timer->adjust( attotime::zero, 0, attotime::from_hz(11025) ); } diff --git a/src/mame/machine/tv955kb.cpp b/src/mame/machine/tv955kb.cpp index 4ad8e08431ecb..3d5f715e09db7 100644 --- a/src/mame/machine/tv955kb.cpp +++ b/src/mame/machine/tv955kb.cpp @@ -40,7 +40,7 @@ void tv955kb_device::device_resolve_objects() void tv955kb_device::device_start() { - m_bell_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tv955kb_device::bell_q8), this)); + m_bell_timer = timer_alloc(*this, FUNC(tv955kb_device::bell_q8)); save_item(NAME(m_bell_on)); diff --git a/src/mame/machine/upd65031.cpp b/src/mame/machine/upd65031.cpp index e9dffbfb35945..a6778254a59d0 100644 --- a/src/mame/machine/upd65031.cpp +++ b/src/mame/machine/upd65031.cpp @@ -283,7 +283,7 @@ void upd65031_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void upd65031_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void upd65031_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/upd65031.h b/src/mame/machine/upd65031.h index 153f6a1faf8e9..a0475d26e87ae 100644 --- a/src/mame/machine/upd65031.h +++ b/src/mame/machine/upd65031.h @@ -49,7 +49,7 @@ class upd65031_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: inline void interrupt_refresh(); diff --git a/src/mame/machine/vectrex.cpp b/src/mame/machine/vectrex.cpp index e314e488ed84b..5af623e507929 100644 --- a/src/mame/machine/vectrex.cpp +++ b/src/mame/machine/vectrex.cpp @@ -48,7 +48,7 @@ static const double unknown_game_angles[3] = {0,0.16666666, 0.33333333}; -void vectrex_base_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void vectrex_base_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -56,7 +56,7 @@ void vectrex_base_state::device_timer(emu_timer &timer, device_timer_id id, int vectrex_imager_change_color(ptr, param); break; case TIMER_UPDATE_LEVEL: - update_level(ptr, param); + m_imager_pinlevel = param; break; case TIMER_VECTREX_IMAGER_EYE: vectrex_imager_eye(ptr, param); @@ -71,7 +71,16 @@ void vectrex_base_state::device_timer(emu_timer &timer, device_timer_id id, int vectrex_zero_integrators(ptr, param); break; case TIMER_UPDATE_SIGNAL: - update_signal(ptr, param); + update_signal(nullptr, param); + break; + case TIMER_UPDATE_RAMP: + update_signal(&m_ramp, param); + break; + case TIMER_UPDATE_BLANK: + update_signal(&m_blank, param); + break; + case TIMER_UPDATE_ANALOG: + update_signal(&m_analog[param >> 8], param & 0xff); break; default: fatalerror("Unknown id in vectrex_base_state::device_timer"); @@ -230,13 +239,6 @@ TIMER_CALLBACK_MEMBER(vectrex_base_state::vectrex_imager_change_color) } -TIMER_CALLBACK_MEMBER(vectrex_base_state::update_level) -{ - if (ptr) - * (uint8_t *) ptr = param; -} - - TIMER_CALLBACK_MEMBER(vectrex_base_state::vectrex_imager_eye) { int coffset; @@ -258,7 +260,7 @@ TIMER_CALLBACK_MEMBER(vectrex_base_state::vectrex_imager_eye) m_via6522_0->write_ca1(1); m_via6522_0->write_ca1(0); m_imager_pinlevel |= 0x80; - timer_set(attotime::from_double(rtime / 360.0), TIMER_UPDATE_LEVEL, 0, &m_imager_pinlevel); + timer_set(attotime::from_double(rtime / 360.0), TIMER_UPDATE_LEVEL); } } } diff --git a/src/mame/machine/vertigo.cpp b/src/mame/machine/vertigo.cpp index 3b6fa3a0b8a38..c4dcde9e68a07 100644 --- a/src/mame/machine/vertigo.cpp +++ b/src/mame/machine/vertigo.cpp @@ -121,7 +121,7 @@ TIMER_CALLBACK_MEMBER(vertigo_state::sound_command_w) void vertigo_state::vertigo_audio_w(offs_t offset, uint16_t data, uint16_t mem_mask) { if (ACCESSING_BITS_0_7) - machine().scheduler().synchronize(timer_expired_delegate(FUNC(vertigo_state::sound_command_w),this), data & 0xff); + m_sound_command_w.synchronize(data & 0xff); } @@ -143,6 +143,8 @@ void vertigo_state::machine_start() save_item(NAME(m_irq_state)); save_item(NAME(m_irq4_time)); + m_sound_command_w.init(*this, FUNC(vertigo_state::sound_command_w)); + vertigo_vproc_init(); } diff --git a/src/mame/machine/victor9k_fdc.cpp b/src/mame/machine/victor9k_fdc.cpp index c4b7adc66bb51..70c8e470fddfd 100644 --- a/src/mame/machine/victor9k_fdc.cpp +++ b/src/mame/machine/victor9k_fdc.cpp @@ -341,7 +341,7 @@ void victor_9000_fdc_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void victor_9000_fdc_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void victor_9000_fdc_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/victor9k_fdc.h b/src/mame/machine/victor9k_fdc.h index 1307742797980..5ca53f843d65e 100644 --- a/src/mame/machine/victor9k_fdc.h +++ b/src/mame/machine/victor9k_fdc.h @@ -46,7 +46,7 @@ class victor_9000_fdc_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/mame/machine/vino.cpp b/src/mame/machine/vino.cpp index 4d4085ebd8ec1..98aa0dbec7bbc 100644 --- a/src/mame/machine/vino.cpp +++ b/src/mame/machine/vino.cpp @@ -146,7 +146,7 @@ void vino_device::device_add_mconfig(machine_config &config) IMAGE_AVIVIDEO(config, m_avivideo); } -void vino_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void vino_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == TIMER_FETCH_CHA || id == TIMER_FETCH_CHB) fetch_pixel((int)id); diff --git a/src/mame/machine/vino.h b/src/mame/machine/vino.h index b1f0d2e0cd760..b06b68db5156e 100644 --- a/src/mame/machine/vino.h +++ b/src/mame/machine/vino.h @@ -37,7 +37,7 @@ class vino_device : public device_t virtual void device_start() override; virtual void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: static constexpr device_timer_id TIMER_FETCH_CHA = 0; diff --git a/src/mame/machine/williams.cpp b/src/mame/machine/williams.cpp index de7b50cbdac54..a4cd506ca3ef2 100644 --- a/src/mame/machine/williams.cpp +++ b/src/mame/machine/williams.cpp @@ -49,6 +49,8 @@ void williams_state::machine_start() /* configure the memory bank */ m_mainbank->configure_entry(1, memregion("maincpu")->base() + 0x10000); m_mainbank->configure_entry(0, m_videoram); + + m_deferred_snd_cmd_w.init(*this, FUNC(williams_state::deferred_snd_cmd_w)); } @@ -162,12 +164,12 @@ TIMER_CALLBACK_MEMBER(williams_state::deferred_snd_cmd_w) void williams_state::snd_cmd_w(u8 data) { /* the high two bits are set externally, and should be 1 */ - machine().scheduler().synchronize(timer_expired_delegate(FUNC(williams_state::deferred_snd_cmd_w),this), data | 0xc0); + m_deferred_snd_cmd_w.synchronize(data | 0xc0); } void playball_state::snd_cmd_w(u8 data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(playball_state::deferred_snd_cmd_w),this), data); + m_deferred_snd_cmd_w.synchronize(data); } TIMER_CALLBACK_MEMBER(williams2_state::deferred_snd_cmd_w) @@ -177,7 +179,7 @@ TIMER_CALLBACK_MEMBER(williams2_state::deferred_snd_cmd_w) void williams2_state::snd_cmd_w(u8 data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(williams2_state::deferred_snd_cmd_w),this), data); + m_deferred_snd_cmd_w.synchronize(data); } @@ -424,7 +426,7 @@ TIMER_CALLBACK_MEMBER(blaster_state::deferred_snd_cmd_w) void blaster_state::snd_cmd_w(u8 data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(blaster_state::deferred_snd_cmd_w),this), data); + m_deferred_snd_cmd_w.synchronize(data); } @@ -522,5 +524,5 @@ void joust2_state::snd_cmd_w(u8 data) { m_current_sound_data = (m_current_sound_data & ~0xff) | (data & 0xff); m_bg->data_w(data); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(joust2_state::deferred_snd_cmd_w),this), m_current_sound_data); + m_deferred_snd_cmd_w.synchronize(m_current_sound_data); } diff --git a/src/mame/machine/wpc.cpp b/src/mame/machine/wpc.cpp index ce4a29d981df0..4e1efd85a017c 100644 --- a/src/mame/machine/wpc.cpp +++ b/src/mame/machine/wpc.cpp @@ -54,7 +54,7 @@ void wpc_device::device_reset() m_alpha_pos = 0; } -void wpc_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void wpc_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/machine/wpc.h b/src/mame/machine/wpc.h index 6bdb718aea768..e0feea61b4eff 100644 --- a/src/mame/machine/wpc.h +++ b/src/mame/machine/wpc.h @@ -111,7 +111,7 @@ class wpc_device : public device_t virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: uint8_t m_shift_addr_high; diff --git a/src/mame/machine/wpc_lamp.cpp b/src/mame/machine/wpc_lamp.cpp index feee50cc926e8..afdd120c2c12f 100644 --- a/src/mame/machine/wpc_lamp.cpp +++ b/src/mame/machine/wpc_lamp.cpp @@ -57,7 +57,7 @@ void wpc_lamp_device::device_reset() timer->adjust(attotime::from_hz(60), 0, attotime::from_hz(60)); } -void wpc_lamp_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void wpc_lamp_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { for(int i=0; i<64; i++) { uint8_t s = state[i]; diff --git a/src/mame/machine/wpc_lamp.h b/src/mame/machine/wpc_lamp.h index e41ff339b0a43..362fa8aa4dd25 100644 --- a/src/mame/machine/wpc_lamp.h +++ b/src/mame/machine/wpc_lamp.h @@ -27,7 +27,7 @@ class wpc_lamp_device : public device_t virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void update(); }; diff --git a/src/mame/machine/wpc_out.cpp b/src/mame/machine/wpc_out.cpp index d23bbb83269b6..31b2b54718d91 100644 --- a/src/mame/machine/wpc_out.cpp +++ b/src/mame/machine/wpc_out.cpp @@ -132,7 +132,7 @@ void wpc_out_device::device_reset() timer->adjust(attotime::from_hz(10), 0, attotime::from_hz(10)); } -void wpc_out_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void wpc_out_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { gi_update(); for(int i=0; itimer(timer, id, param, ptr); + ohci_usb->timer(id, param, ptr); } uint32_t mcpx_ohci_device::ohci_r(offs_t offset) @@ -883,7 +883,7 @@ void mcpx_apu_device::device_reset() pci_device::device_reset(); } -void mcpx_apu_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void mcpx_apu_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { int cmd; int bb, b, v; diff --git a/src/mame/machine/xbox_usb.cpp b/src/mame/machine/xbox_usb.cpp index 59883d2ca0b01..36648b05e11c5 100644 --- a/src/mame/machine/xbox_usb.cpp +++ b/src/mame/machine/xbox_usb.cpp @@ -220,7 +220,7 @@ void ohci_usb_controller::write(offs_t offset, uint32_t data) ohcist.hc_regs[offset] = data; } -void ohci_usb_controller::timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ohci_usb_controller::timer(device_timer_id id, int param, void *ptr) { uint32_t hcca; uint32_t plh; diff --git a/src/mame/machine/z80ne.cpp b/src/mame/machine/z80ne.cpp index af61fde4a044e..a9edad1b53ac5 100644 --- a/src/mame/machine/z80ne.cpp +++ b/src/mame/machine/z80ne.cpp @@ -144,7 +144,7 @@ TIMER_CALLBACK_MEMBER(z80ne_state::z80ne_kbd_scan) } } -void z80ne_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void z80ne_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -343,8 +343,8 @@ void z80ne_state::machine_start() m_lx383_digits.resolve(); m_lx385_ctrl = 0x1f; - m_cassette_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(z80ne_state::z80ne_cassette_tc), this)); - m_kbd_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(z80ne_state::z80ne_kbd_scan), this)); + m_cassette_timer = timer_alloc(*this, FUNC(z80ne_state::z80ne_cassette_tc)); + m_kbd_timer = timer_alloc(*this, FUNC(z80ne_state::z80ne_kbd_scan)); m_kbd_timer->adjust(attotime::from_hz(1000), 0, attotime::from_hz(1000)); } diff --git a/src/mame/machine/znmcu.cpp b/src/mame/machine/znmcu.cpp index 1b21d956e1bb2..d280f3203c7ae 100644 --- a/src/mame/machine/znmcu.cpp +++ b/src/mame/machine/znmcu.cpp @@ -96,7 +96,7 @@ WRITE_LINE_MEMBER(znmcu_device::write_clock) } } -void znmcu_device::device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) +void znmcu_device::device_timer(timer_instance const &timer, device_timer_id tid, int param, void *ptr) { m_dsr_handler(param); diff --git a/src/mame/machine/znmcu.h b/src/mame/machine/znmcu.h index 4207cae2038ae..3be128b057604 100644 --- a/src/mame/machine/znmcu.h +++ b/src/mame/machine/znmcu.h @@ -26,7 +26,7 @@ class znmcu_device : public device_t protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: devcb_read8 m_dsw_handler; diff --git a/src/mame/machine/zx8302.cpp b/src/mame/machine/zx8302.cpp index 4ecab2f89a710..d8e8a8b0f7f79 100644 --- a/src/mame/machine/zx8302.cpp +++ b/src/mame/machine/zx8302.cpp @@ -220,7 +220,7 @@ void zx8302_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void zx8302_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void zx8302_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/machine/zx8302.h b/src/mame/machine/zx8302.h index 22ce85ba4b12c..a8339ee8aa274 100644 --- a/src/mame/machine/zx8302.h +++ b/src/mame/machine/zx8302.h @@ -89,7 +89,7 @@ class zx8302_device : public device_t, protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_serial_interface overrides virtual void tra_callback() override; diff --git a/src/mame/video/3dom2_te.cpp b/src/mame/video/3dom2_te.cpp index 7aa79a6792474..29844ed87224f 100644 --- a/src/mame/video/3dom2_te.cpp +++ b/src/mame/video/3dom2_te.cpp @@ -3911,7 +3911,7 @@ void m2_te_device::load_texture() TIMERS ***************************************************************************/ -void m2_te_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void m2_te_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/3dom2_te.h b/src/mame/video/3dom2_te.h index cf8d84cbf8b7f..07416399f2022 100644 --- a/src/mame/video/3dom2_te.h +++ b/src/mame/video/3dom2_te.h @@ -48,7 +48,7 @@ class m2_te_device : public device_t protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: diff --git a/src/mame/video/733_asr.cpp b/src/mame/video/733_asr.cpp index c19d45b60c5bb..f77990d561272 100644 --- a/src/mame/video/733_asr.cpp +++ b/src/mame/video/733_asr.cpp @@ -407,7 +407,7 @@ void asr733_device::refresh(bitmap_ind16 &bitmap, int x, int y) /* Time callbacks */ -void asr733_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void asr733_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { check_keyboard(); m_lineint_line(ASSERT_LINE); diff --git a/src/mame/video/733_asr.h b/src/mame/video/733_asr.h index 540e6cb58d0b8..e1c479f40dbc7 100644 --- a/src/mame/video/733_asr.h +++ b/src/mame/video/733_asr.h @@ -32,7 +32,7 @@ class asr733_device : public device_t, public device_gfx_interface void device_start() override; void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; ioport_constructor device_input_ports() const override; private: diff --git a/src/mame/video/911_vdt.cpp b/src/mame/video/911_vdt.cpp index 46d2383b644f3..896dca78888db 100644 --- a/src/mame/video/911_vdt.cpp +++ b/src/mame/video/911_vdt.cpp @@ -255,7 +255,7 @@ void vdt911_device::device_reset() /* Timer callbacks */ -void vdt911_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void vdt911_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/911_vdt.h b/src/mame/video/911_vdt.h index cb5e2372ff83c..427045de27ce0 100644 --- a/src/mame/video/911_vdt.h +++ b/src/mame/video/911_vdt.h @@ -60,7 +60,7 @@ class vdt911_device : public device_t, public device_gfx_interface virtual void device_add_mconfig(machine_config &config) override; ioport_constructor device_input_ports() const override; - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: void refresh(bitmap_ind16 &bitmap, const rectangle &cliprect, int x, int y); diff --git a/src/mame/video/antic.cpp b/src/mame/video/antic.cpp index ab7e9ae3c659f..379904b1e351a 100644 --- a/src/mame/video/antic.cpp +++ b/src/mame/video/antic.cpp @@ -1936,7 +1936,7 @@ void antic_device::linerefresh() #define ANTIC_TIME_FROM_CYCLES(cycles) \ (attotime)(screen().scan_period() * (cycles) / CYCLES_PER_LINE) -void antic_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void antic_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/antic.h b/src/mame/video/antic.h index f1371c9527e33..69545da3f53df 100644 --- a/src/mame/video/antic.h +++ b/src/mame/video/antic.h @@ -48,7 +48,7 @@ class antic_device : public device_t, public device_video_interface // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; template void set_gtia_tag(T &&tag) { m_gtia.set_tag(std::forward(tag)); } diff --git a/src/mame/video/astrocde.cpp b/src/mame/video/astrocde.cpp index 98cff92b8dc69..36618bcf7da10 100644 --- a/src/mame/video/astrocde.cpp +++ b/src/mame/video/astrocde.cpp @@ -379,7 +379,7 @@ uint32_t astrocde_state::screen_update_profpac(screen_device &screen, bitmap_ind * *************************************/ -void astrocde_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void astrocde_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/atarimo.cpp b/src/mame/video/atarimo.cpp index 8611de1bbb423..2c8cc6a204212 100644 --- a/src/mame/video/atarimo.cpp +++ b/src/mame/video/atarimo.cpp @@ -356,7 +356,7 @@ void atari_motion_objects_device::device_reset() // calbacks //------------------------------------------------- -void atari_motion_objects_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void atari_motion_objects_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -366,7 +366,7 @@ void atari_motion_objects_device::device_timer(emu_timer &timer, device_timer_id param += 64; if (param >= screen().visible_area().bottom()) param = 0; - timer.adjust(screen().time_until_pos(param), param); + m_force_update_timer->adjust(screen().time_until_pos(param), param); break; } } diff --git a/src/mame/video/atarimo.h b/src/mame/video/atarimo.h index 3f5c72a5f4885..271a4d3226bc2 100644 --- a/src/mame/video/atarimo.h +++ b/src/mame/video/atarimo.h @@ -116,7 +116,7 @@ class atari_motion_objects_device : public sprite16_device_ind16, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // timer IDs diff --git a/src/mame/video/atarisy2.cpp b/src/mame/video/atarisy2.cpp index 05770e32924c7..d2445f088cdcf 100644 --- a/src/mame/video/atarisy2.cpp +++ b/src/mame/video/atarisy2.cpp @@ -78,7 +78,7 @@ const atari_motion_objects_config atarisy2_state::s_mob_config = void atarisy2_state::video_start() { // reset the statics - m_yscroll_reset_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(atarisy2_state::reset_yscroll_callback),this)); + m_yscroll_reset_timer = timer_alloc(*this, FUNC(atarisy2_state::reset_yscroll_callback)); // save states save_item(NAME(m_playfield_tile_bank)); diff --git a/src/mame/video/atarivad.cpp b/src/mame/video/atarivad.cpp index 40c418945e7fe..f10c8ff9fdf61 100644 --- a/src/mame/video/atarivad.cpp +++ b/src/mame/video/atarivad.cpp @@ -212,7 +212,7 @@ void atari_vad_device::device_reset() // calbacks //------------------------------------------------- -void atari_vad_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void atari_vad_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { @@ -221,11 +221,11 @@ void atari_vad_device::device_timer(emu_timer &timer, device_timer_id id, int pa break; case TID_TILEROW_UPDATE: - update_tilerow(timer, param); + update_tilerow(param); break; case TID_EOF: - eof_update(timer); + eof_update(); break; } } @@ -421,7 +421,7 @@ void atari_vad_device::update_parameter(uint16_t newword) // rowscrolling. //------------------------------------------------- -void atari_vad_device::update_tilerow(emu_timer &timer, int scanline) +void atari_vad_device::update_tilerow(int scanline) { // skip if out of bounds, or not enabled if (scanline <= screen().visible_area().bottom() && (m_control[0x0a] & 0x2000) != 0 && m_alpha_tilemap != nullptr) @@ -446,7 +446,7 @@ void atari_vad_device::update_tilerow(emu_timer &timer, int scanline) scanline += ((m_control[0x0a] & 0x2000) != 0) ? 1 : 8; if (scanline >= screen().height()) scanline = 0; - timer.adjust(screen().time_until_pos(scanline), scanline); + m_tilerow_update_timer->adjust(screen().time_until_pos(scanline), scanline); } @@ -456,7 +456,7 @@ void atari_vad_device::update_tilerow(emu_timer &timer, int scanline) // every refresh. //------------------------------------------------- -void atari_vad_device::eof_update(emu_timer &timer) +void atari_vad_device::eof_update() { // echo all the commands to the video controller for (int i = 0; i < 0x1c; i++) @@ -472,7 +472,7 @@ void atari_vad_device::eof_update(emu_timer &timer) m_playfield_tilemap->set_scrolly(0, m_pf0_yscroll); if (m_playfield2_tilemap != nullptr) m_playfield2_tilemap->set_scrolly(0, m_pf1_yscroll);*/ - timer.adjust(screen().time_until_pos(0)); + m_eof_timer->adjust(screen().time_until_pos(0)); // use this for debugging the video controller values #if 0 diff --git a/src/mame/video/atarivad.h b/src/mame/video/atarivad.h index b0ea3dcac7056..d5cf9cc3bdff1 100644 --- a/src/mame/video/atarivad.h +++ b/src/mame/video/atarivad.h @@ -61,7 +61,7 @@ class atari_vad_device : public device_t, public device_video_interface // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: // timer IDs @@ -76,8 +76,8 @@ class atari_vad_device : public device_t, public device_video_interface void internal_control_write(offs_t offset, uint16_t newword); void update_pf_xscrolls(); void update_parameter(uint16_t newword); - void update_tilerow(emu_timer &timer, int scanline); - void eof_update(emu_timer &timer); + void update_tilerow(int scanline); + void eof_update(); // configuration state devcb_write_line m_scanline_int_cb; diff --git a/src/mame/video/avgdvg.cpp b/src/mame/video/avgdvg.cpp index 5b13113d39b62..29bf376cc78e1 100644 --- a/src/mame/video/avgdvg.cpp +++ b/src/mame/video/avgdvg.cpp @@ -1288,8 +1288,8 @@ void avgdvg_device_base::device_start() if (!m_vector->started()) throw device_missing_dependencies(); - m_vg_halt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(avgdvg_device_base::vg_set_halt_callback), this)); - m_vg_run_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(avgdvg_device_base::run_state_machine), this)); + m_vg_halt_timer = timer_alloc(*this, FUNC(avgdvg_device_base::vg_set_halt_callback)); + m_vg_run_timer = timer_alloc(*this, FUNC(avgdvg_device_base::run_state_machine)); m_flip_x = m_flip_y = false; diff --git a/src/mame/video/blstroid.cpp b/src/mame/video/blstroid.cpp index 76fab2db46b18..b9b7065cd17c0 100644 --- a/src/mame/video/blstroid.cpp +++ b/src/mame/video/blstroid.cpp @@ -86,7 +86,7 @@ void blstroid_state::video_start() * *************************************/ -void blstroid_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void blstroid_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/cchasm.cpp b/src/mame/video/cchasm.cpp index 8f91bee8cc0c9..893454f3d029a 100644 --- a/src/mame/video/cchasm.cpp +++ b/src/mame/video/cchasm.cpp @@ -19,7 +19,7 @@ #define LENGTH 7 -void cchasm_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void cchasm_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/changela.cpp b/src/mame/video/changela.cpp index 5c2f57e3f1f97..0d978361f7a40 100644 --- a/src/mame/video/changela.cpp +++ b/src/mame/video/changela.cpp @@ -29,7 +29,7 @@ void changela_state::video_start() m_screen->register_screen_bitmap(m_tree0_bitmap); m_screen->register_screen_bitmap(m_tree1_bitmap); - m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(changela_state::changela_scanline_callback),this)); + m_scanline_timer = timer_alloc(*this, FUNC(changela_state::changela_scanline_callback)); m_scanline_timer->adjust(m_screen->time_until_pos(30), 30); save_pointer(NAME(m_memory_devices), 4 * 0x800); diff --git a/src/mame/video/dcheese.cpp b/src/mame/video/dcheese.cpp index f851be6c49d15..bf9fb22a05d7b 100644 --- a/src/mame/video/dcheese.cpp +++ b/src/mame/video/dcheese.cpp @@ -64,7 +64,7 @@ void dcheese_state::update_scanline_irq() } -void dcheese_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void dcheese_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/dday.cpp b/src/mame/video/dday.cpp index 3643fb5e79360..642bb4a4d7ef0 100644 --- a/src/mame/video/dday.cpp +++ b/src/mame/video/dday.cpp @@ -214,7 +214,7 @@ void dday_state::video_start() m_fg_tilemap->set_transparent_pen(0); m_text_tilemap->set_transparent_pen(0); - m_countdown_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(dday_state::countdown_timer_callback), this)); + m_countdown_timer = timer_alloc(*this, FUNC(dday_state::countdown_timer_callback)); start_countdown_timer(); } diff --git a/src/mame/video/dkong.cpp b/src/mame/video/dkong.cpp index 4022a9d1a98ae..a70ec443e7ae4 100644 --- a/src/mame/video/dkong.cpp +++ b/src/mame/video/dkong.cpp @@ -937,7 +937,7 @@ VIDEO_START_MEMBER(dkong_state,dkong) { VIDEO_START_CALL_MEMBER(dkong_base); - m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(dkong_state::scanline_callback),this)); + m_scanline_timer = timer_alloc(*this, FUNC(dkong_state::scanline_callback)); m_scanline_timer->adjust(m_screen->time_until_pos(0)); switch (m_hardware_type) diff --git a/src/mame/video/dpb_combiner.cpp b/src/mame/video/dpb_combiner.cpp index 48440eeec02a6..b6ef2deec6f29 100644 --- a/src/mame/video/dpb_combiner.cpp +++ b/src/mame/video/dpb_combiner.cpp @@ -141,7 +141,7 @@ void dpb7000_combiner_card_device::device_add_mconfig(machine_config &config) //m_screen->set_screen_update(FUNC(dpb7000_combiner_card_device::screen_update)); } -void dpb7000_combiner_card_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void dpb7000_combiner_card_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { if (id == FSCK_TIMER) { diff --git a/src/mame/video/esripsys.cpp b/src/mame/video/esripsys.cpp index fa83a01c997b0..b350a41d8d434 100644 --- a/src/mame/video/esripsys.cpp +++ b/src/mame/video/esripsys.cpp @@ -71,8 +71,8 @@ void esripsys_state::video_start() line_buffer[1].priority_buf = std::make_unique(512); /* Create and initialise the HBLANK timers */ - m_hblank_start_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(esripsys_state::hblank_start_callback),this)); - m_hblank_end_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(esripsys_state::hblank_end_callback),this)); + m_hblank_start_timer = timer_alloc(*this, FUNC(esripsys_state::hblank_start_callback)); + m_hblank_end_timer = timer_alloc(*this, FUNC(esripsys_state::hblank_end_callback)); m_hblank_start_timer->adjust(m_screen->time_until_pos(0, ESRIPSYS_HBLANK_START)); /* Create the sprite scaling table */ diff --git a/src/mame/video/exidy.cpp b/src/mame/video/exidy.cpp index e5cc24134e764..571c35ede3ea2 100644 --- a/src/mame/video/exidy.cpp +++ b/src/mame/video/exidy.cpp @@ -255,7 +255,7 @@ void exidy_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) ***************************************************************************/ -void exidy_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void exidy_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/exidy440.cpp b/src/mame/video/exidy440.cpp index 2106e4ac16e4d..c799daf7f464d 100644 --- a/src/mame/video/exidy440.cpp +++ b/src/mame/video/exidy440.cpp @@ -52,8 +52,8 @@ void exidy440_state::video_start() m_local_paletteram = std::make_unique(512 * 2); memset(m_local_paletteram.get(), 0, 512 * 2); - m_beam_firq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(exidy440_state::beam_firq_callback), this)); - m_collide_firq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(exidy440_state::collide_firq_callback), this)); + m_beam_firq_timer = timer_alloc(*this, FUNC(exidy440_state::beam_firq_callback)); + m_collide_firq_timer = timer_alloc(*this, FUNC(exidy440_state::collide_firq_callback)); } diff --git a/src/mame/video/fmtowns.cpp b/src/mame/video/fmtowns.cpp index 34b912b54f9ad..01a3d68a1b14d 100644 --- a/src/mame/video/fmtowns.cpp +++ b/src/mame/video/fmtowns.cpp @@ -1481,7 +1481,7 @@ INTERRUPT_GEN_MEMBER(towns_state::towns_vsync_irq) m_pic_slave->ir3_w(1); // IRQ11 = VSync if(IRQ_LOG) logerror("PIC: IRQ11 (VSync) set high\n"); m_video.towns_vblank_flag = 1; - machine().scheduler().timer_set(m_screen->time_until_vblank_end(), timer_expired_delegate(FUNC(towns_state::towns_vblank_end),this), 0, (void*)m_pic_slave); + m_towns_vblank_end.call_after(m_screen->time_until_vblank_end()); if(m_video.towns_tvram_enable) draw_text_layer(); if((m_video.towns_sprite_reg[1] & 0x80) && !m_video.towns_sprite_flag) diff --git a/src/mame/video/fromance.cpp b/src/mame/video/fromance.cpp index 902f2c4cf1a7d..abfbfd106f8f1 100644 --- a/src/mame/video/fromance.cpp +++ b/src/mame/video/fromance.cpp @@ -68,7 +68,7 @@ void fromance_state::init_common( ) m_fg_tilemap->set_transparent_pen(15); /* reset the timer */ - m_crtc_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(fromance_state::crtc_interrupt_gen),this)); + m_crtc_timer = timer_alloc(*this, FUNC(fromance_state::crtc_interrupt_gen)); /* state save */ save_item(NAME(m_selected_videoram)); diff --git a/src/mame/video/galaxold.cpp b/src/mame/video/galaxold.cpp index 2f198f8319e69..0e3f755734768 100644 --- a/src/mame/video/galaxold.cpp +++ b/src/mame/video/galaxold.cpp @@ -1231,8 +1231,8 @@ void galaxold_state::galaxold_init_stars(int colors_offset) m_stars_on = 0; m_stars_blink_state = 0; - m_stars_blink_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(galaxold_state::stars_blink_callback),this)); - m_stars_scroll_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(galaxold_state::stars_scroll_callback),this)); + m_stars_blink_timer = timer_alloc(*this, FUNC(galaxold_state::stars_blink_callback)); + m_stars_scroll_timer = timer_alloc(*this, FUNC(galaxold_state::stars_scroll_callback)); m_timer_adjusted = 0; m_stars_colors_start = colors_offset; diff --git a/src/mame/video/galaxy.cpp b/src/mame/video/galaxy.cpp index ab6428a993bfe..d72c474887bd6 100644 --- a/src/mame/video/galaxy.cpp +++ b/src/mame/video/galaxy.cpp @@ -106,7 +106,7 @@ void galaxy_state::machine_start() { m_gal_cnt = 0; - m_gal_video_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(galaxy_state::gal_video),this)); + m_gal_video_timer = timer_alloc(*this, FUNC(galaxy_state::gal_video)); m_gal_video_timer->adjust(attotime::zero, 0, attotime::never); m_screen->register_screen_bitmap(m_bitmap); diff --git a/src/mame/video/gamecom.cpp b/src/mame/video/gamecom.cpp index 0b1984e019fbf..9fd86384a4746 100644 --- a/src/mame/video/gamecom.cpp +++ b/src/mame/video/gamecom.cpp @@ -68,7 +68,7 @@ TIMER_CALLBACK_MEMBER(gamecom_state::gamecom_scanline) void gamecom_state::video_start() { - m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gamecom_state::gamecom_scanline),this)); + m_scanline_timer = timer_alloc(*this, FUNC(gamecom_state::gamecom_scanline)); m_scanline_timer->adjust(m_screen->time_until_pos(0), 0, m_screen->scan_period()); m_screen->register_screen_bitmap(m_bitmap); diff --git a/src/mame/video/gameplan.cpp b/src/mame/video/gameplan.cpp index 197ab20b8eda6..38fb520bc3bb6 100644 --- a/src/mame/video/gameplan.cpp +++ b/src/mame/video/gameplan.cpp @@ -37,7 +37,7 @@ driver by Chris Moore * *************************************/ -void gameplan_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void gameplan_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/gic.cpp b/src/mame/video/gic.cpp index 65deaf5b7f759..32b805be97608 100644 --- a/src/mame/video/gic.cpp +++ b/src/mame/video/gic.cpp @@ -239,7 +239,7 @@ uint32_t gic_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, /* AUDIO SECTION */ -void gic_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void gic_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch ( id ) { diff --git a/src/mame/video/gic.h b/src/mame/video/gic.h index 579ddec7b1262..7f3e1e0dfb673 100644 --- a/src/mame/video/gic.h +++ b/src/mame/video/gic.h @@ -68,7 +68,7 @@ class gic_device : public device_t // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // optional information overrides virtual const tiny_rom_entry *device_rom_region() const override; diff --git a/src/mame/video/gime.cpp b/src/mame/video/gime.cpp index 47745cd433d36..93d9ec14cc110 100644 --- a/src/mame/video/gime.cpp +++ b/src/mame/video/gime.cpp @@ -330,7 +330,7 @@ void gime_device::device_reset(void) // device_timer - handle timer callbacks //------------------------------------------------- -void gime_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void gime_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/video/gime.h b/src/mame/video/gime.h index 15e697213d287..2de903a211cc2 100644 --- a/src/mame/video/gime.h +++ b/src/mame/video/gime.h @@ -66,7 +66,7 @@ class gime_device : public mc6847_friend_device, public sam6883_friend_device_in // device-level overrides virtual void device_start(void) override; virtual void device_reset(void) override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_pre_save(void) override; virtual void device_post_load(void) override; virtual ioport_constructor device_input_ports() const override; diff --git a/src/mame/video/gp9001.cpp b/src/mame/video/gp9001.cpp index 04e9cac909a56..0c36e831b2017 100644 --- a/src/mame/video/gp9001.cpp +++ b/src/mame/video/gp9001.cpp @@ -884,7 +884,7 @@ void gp9001vdp_device::screen_eof(void) } -void gp9001vdp_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void gp9001vdp_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/gp9001.h b/src/mame/video/gp9001.h index 2b737aba8f200..c775765e5ddcc 100644 --- a/src/mame/video/gp9001.h +++ b/src/mame/video/gp9001.h @@ -66,7 +66,7 @@ class gp9001vdp_device : public device_t, virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual space_config_vector memory_space_config() const override; diff --git a/src/mame/video/hyhoo.cpp b/src/mame/video/hyhoo.cpp index 6ddae07c1e0b5..0f4ed14113957 100644 --- a/src/mame/video/hyhoo.cpp +++ b/src/mame/video/hyhoo.cpp @@ -53,7 +53,7 @@ void hyhoo_state::hyhoo_romsel_w(uint8_t data) } } -void hyhoo_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void hyhoo_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/itech32.cpp b/src/mame/video/itech32.cpp index f6554ee483a24..b98a59a4c89a9 100644 --- a/src/mame/video/itech32.cpp +++ b/src/mame/video/itech32.cpp @@ -194,7 +194,7 @@ void itech32_state::video_start() /* reset statics */ std::fill_n(&m_video[0], m_video.bytes() >> 1, 0); - m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(itech32_state::scanline_interrupt),this)); + m_scanline_timer = timer_alloc(*this, FUNC(itech32_state::scanline_interrupt)); m_enable_latch[0] = 1; m_enable_latch[1] = (m_planes > 1) ? 1 : 0; @@ -211,7 +211,7 @@ void itech32_state::video_start() void shoottv_state::video_start() { itech32_state::video_start(); - m_gun_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(shoottv_state::gun_interrupt),this)); + m_gun_timer = timer_alloc(*this, FUNC(shoottv_state::gun_interrupt)); m_gun_timer->adjust(m_screen->time_until_pos(0)); } diff --git a/src/mame/video/itech8.cpp b/src/mame/video/itech8.cpp index 13493d10a244f..1cfc59795d695 100644 --- a/src/mame/video/itech8.cpp +++ b/src/mame/video/itech8.cpp @@ -541,7 +541,7 @@ void grmatch_state::xscroll_w(uint8_t data) } -void grmatch_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void grmatch_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/jag_blitter.cpp b/src/mame/video/jag_blitter.cpp index f318808ad4514..55b0fbbcb3de4 100644 --- a/src/mame/video/jag_blitter.cpp +++ b/src/mame/video/jag_blitter.cpp @@ -153,7 +153,7 @@ inline void jag_blitter_device::command_done() // ... } -void jag_blitter_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void jag_blitter_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { command_run(); } diff --git a/src/mame/video/jag_blitter.h b/src/mame/video/jag_blitter.h index c16daf226eba7..27a7d1e368a69 100644 --- a/src/mame/video/jag_blitter.h +++ b/src/mame/video/jag_blitter.h @@ -41,7 +41,7 @@ class jag_blitter_device : public device_t, //virtual void device_validity_check(validity_checker &valid) const override; virtual void device_start() override; virtual void device_reset() override; - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual space_config_vector memory_space_config() const override; const address_space_config m_space_config; diff --git a/src/mame/video/jaguar.cpp b/src/mame/video/jaguar.cpp index b9a9b89cffb5b..d3e0f8639b2a1 100644 --- a/src/mame/video/jaguar.cpp +++ b/src/mame/video/jaguar.cpp @@ -732,7 +732,7 @@ uint32_t jaguar_state::cojag_gun_input_r(offs_t offset) * *************************************/ -void jaguar_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void jaguar_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/k051960.cpp b/src/mame/video/k051960.cpp index 42fa9627bd558..b2bdc898ef91d 100644 --- a/src/mame/video/k051960.cpp +++ b/src/mame/video/k051960.cpp @@ -188,7 +188,7 @@ void k051960_device::device_start() m_k051960_cb.resolve(); // allocate scanline timer and start at first scanline - m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(k051960_device::scanline_callback), this)); + m_scanline_timer = timer_alloc(*this, FUNC(k051960_device::scanline_callback)); m_scanline_timer->adjust(screen().time_until_pos(0)); decode_gfx(); diff --git a/src/mame/video/k053250_ps.cpp b/src/mame/video/k053250_ps.cpp index dfb35d4531a60..8ef984d96d296 100644 --- a/src/mame/video/k053250_ps.cpp +++ b/src/mame/video/k053250_ps.cpp @@ -498,7 +498,7 @@ uint16_t k053250ps_device::reg_r(offs_t offset) } -void k053250ps_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void k053250ps_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(m_timer_lvcdma_state) { diff --git a/src/mame/video/k053250_ps.h b/src/mame/video/k053250_ps.h index 1e3451970a3e0..a421fdbc656a0 100644 --- a/src/mame/video/k053250_ps.h +++ b/src/mame/video/k053250_ps.h @@ -45,7 +45,7 @@ class k053250ps_device : public device_t, protected: // device-level overrides - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; virtual void device_start() override; virtual void device_reset() override; diff --git a/src/mame/video/k1ge.cpp b/src/mame/video/k1ge.cpp index 0dec7b55d8af3..8bf53c13721aa 100644 --- a/src/mame/video/k1ge.cpp +++ b/src/mame/video/k1ge.cpp @@ -795,8 +795,8 @@ void k1ge_device::device_start() m_vblank_pin_w.resolve(); m_hblank_pin_w.resolve(); - m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(k1ge_device::timer_callback), this)); - m_hblank_on_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(k1ge_device::hblank_on_timer_callback), this)); + m_timer = timer_alloc(*this, FUNC(k1ge_device::timer_callback)); + m_hblank_on_timer = timer_alloc(*this, FUNC(k1ge_device::hblank_on_timer_callback)); m_vram = make_unique_clear(0x4000); m_bitmap = std::make_unique(screen().width(), screen().height() ); diff --git a/src/mame/video/leland.cpp b/src/mame/video/leland.cpp index 6a8b3d065c0ad..85b0277bfe346 100644 --- a/src/mame/video/leland.cpp +++ b/src/mame/video/leland.cpp @@ -95,6 +95,8 @@ TILE_GET_INFO_MEMBER(ataxx_state::ataxx_get_tile_info) void leland_state::video_start() { + m_leland_delayed_mvram_w.init(*this, FUNC(leland_state::leland_delayed_mvram_w)); + /* tilemap */ m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(leland_state::leland_get_tile_info)), tilemap_mapper_delegate(*this, FUNC(leland_state::leland_scan)), 8, 8, 256, 256); @@ -102,7 +104,7 @@ void leland_state::video_start() m_video_ram = make_unique_clear(VRAM_SIZE); /* scanline timer */ - m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(leland_state::scanline_callback),this)); + m_scanline_timer = timer_alloc(*this, FUNC(leland_state::scanline_callback)); m_scanline_timer->adjust(m_screen->time_until_pos(0)); save_item(NAME(m_gfx_control)); @@ -120,6 +122,8 @@ void leland_state::video_start() void ataxx_state::video_start() { + m_leland_delayed_mvram_w.init(*this, FUNC(ataxx_state::leland_delayed_mvram_w)); + // TODO: further untangle driver so the base class doesn't have stuff that isn't common and this can call the base implementation /* tilemap */ m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ataxx_state::ataxx_get_tile_info)), tilemap_mapper_delegate(*this, FUNC(ataxx_state::ataxx_scan)), 8, 8, 256, 128); @@ -361,7 +365,7 @@ TIMER_CALLBACK_MEMBER(leland_state::leland_delayed_mvram_w) void leland_state::leland_mvram_port_w(offs_t offset, u8 data) { - machine().scheduler().synchronize(timer_expired_delegate(FUNC(leland_state::leland_delayed_mvram_w),this), 0x00000 | (offset << 8) | data); + m_leland_delayed_mvram_w.synchronize(0x00000 | (offset << 8) | data); } @@ -404,7 +408,7 @@ u8 leland_state::leland_svram_port_r(offs_t offset) void ataxx_state::ataxx_mvram_port_w(offs_t offset, u8 data) { offset = ((offset >> 1) & 0x07) | ((offset << 3) & 0x08) | (offset & 0x10); - machine().scheduler().synchronize(timer_expired_delegate(FUNC(ataxx_state::leland_delayed_mvram_w),this), 0x00000 | (offset << 8) | data); + m_leland_delayed_mvram_w.synchronize(0x00000 | (offset << 8) | data); } diff --git a/src/mame/video/lethalj.cpp b/src/mame/video/lethalj.cpp index 0a2f83e7d3073..cff6a3bb2737d 100644 --- a/src/mame/video/lethalj.cpp +++ b/src/mame/video/lethalj.cpp @@ -104,7 +104,7 @@ void lethalj_state::video_start() * *************************************/ -void lethalj_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void lethalj_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/lockon.cpp b/src/mame/video/lockon.cpp index f351369380024..c063688bf2e29 100644 --- a/src/mame/video/lockon.cpp +++ b/src/mame/video/lockon.cpp @@ -873,10 +873,10 @@ void lockon_state::video_start() m_obj_pal_ram = std::make_unique(2048); /* Timer for ground display list callback */ - m_bufend_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(lockon_state::bufend_callback),this)); + m_bufend_timer = timer_alloc(*this, FUNC(lockon_state::bufend_callback)); /* Timer for the CRTC cursor pulse */ - m_cursor_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(lockon_state::cursor_callback),this)); + m_cursor_timer = timer_alloc(*this, FUNC(lockon_state::cursor_callback)); m_cursor_timer->adjust(m_screen->time_until_pos(CURSOR_YPOS, CURSOR_XPOS)); save_item(NAME(*m_back_buffer)); diff --git a/src/mame/video/m92.cpp b/src/mame/video/m92.cpp index d04543a410353..a53ada992a71e 100644 --- a/src/mame/video/m92.cpp +++ b/src/mame/video/m92.cpp @@ -46,7 +46,7 @@ /*****************************************************************************/ -void m92_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void m92_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/mcd212.cpp b/src/mame/video/mcd212.cpp index c6e3275910127..8952f457029d3 100644 --- a/src/mame/video/mcd212.cpp +++ b/src/mame/video/mcd212.cpp @@ -1444,7 +1444,7 @@ void mcd212_device::device_start() screen().register_screen_bitmap(m_bitmap); - m_scan_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mcd212_device::perform_scan), this)); + m_scan_timer = timer_alloc(*this, FUNC(mcd212_device::perform_scan)); m_scan_timer->adjust(screen().time_until_pos(0, 0)); save_item(NAME(m_region_flag_0)); diff --git a/src/mame/video/midtunit.cpp b/src/mame/video/midtunit.cpp index 4a74af2b1885b..7ce94d0a3f875 100644 --- a/src/mame/video/midtunit.cpp +++ b/src/mame/video/midtunit.cpp @@ -616,7 +616,7 @@ DEFINE_TEMPLATED_DMA_DRAW_GROUP(false, false); * *************************************/ -void midtunit_video_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void midtunit_video_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/midtunit.h b/src/mame/video/midtunit.h index 0072e580f3f6b..5e1467cf3daa0 100644 --- a/src/mame/video/midtunit.h +++ b/src/mame/video/midtunit.h @@ -64,7 +64,7 @@ class midtunit_video_device : public device_t midtunit_video_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock = 0); virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; static const device_timer_id TIMER_DMA = 0; diff --git a/src/mame/video/midvunit.cpp b/src/mame/video/midvunit.cpp index 389b5385d9c99..0f9b9c9dd4d30 100644 --- a/src/mame/video/midvunit.cpp +++ b/src/mame/video/midvunit.cpp @@ -36,7 +36,7 @@ midvunit_renderer::midvunit_renderer(midvunit_state &state) * *************************************/ -void midvunit_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void midvunit_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/midyunit.cpp b/src/mame/video/midyunit.cpp index fe790af872d75..cddd1e47e821e 100644 --- a/src/mame/video/midyunit.cpp +++ b/src/mame/video/midyunit.cpp @@ -381,7 +381,7 @@ void midyunit_state::dma_draw(uint16_t command) * *************************************/ -void midyunit_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void midyunit_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/mystston.cpp b/src/mame/video/mystston.cpp index fd2de4361d269..c9ac48dd9a0a7 100644 --- a/src/mame/video/mystston.cpp +++ b/src/mame/video/mystston.cpp @@ -221,7 +221,7 @@ void mystston_state::video_start() m_fg_tilemap->set_transparent_pen(0); /* create the interrupt timer */ - m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mystston_state::interrupt_callback),this)); + m_interrupt_timer = timer_alloc(*this, FUNC(mystston_state::interrupt_callback)); } diff --git a/src/mame/video/n8080.cpp b/src/mame/video/n8080.cpp index 7d7a7147d02cc..c84feb75c92dc 100644 --- a/src/mame/video/n8080.cpp +++ b/src/mame/video/n8080.cpp @@ -81,7 +81,7 @@ void helifire_state::next_line() void spacefev_state::video_start() { - m_cannon_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(spacefev_state::stop_red_cannon),this)); + m_cannon_timer = timer_alloc(*this, FUNC(spacefev_state::stop_red_cannon)); flip_screen_set(0); diff --git a/src/mame/video/namcos22.cpp b/src/mame/video/namcos22.cpp index c8354a737471c..754bbe4c6465e 100644 --- a/src/mame/video/namcos22.cpp +++ b/src/mame/video/namcos22.cpp @@ -2572,7 +2572,7 @@ void namcos22_state::video_start() m_is_ss22 = (m_iomcu == nullptr); init_tables(); - m_posirq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(namcos22_state::posirq_callback),this)); + m_posirq_timer = timer_alloc(*this, FUNC(namcos22_state::posirq_callback)); m_mix_bitmap = std::make_unique(640, 480); m_bgtilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(namcos22_state::get_text_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); diff --git a/src/mame/video/nbmj8688.cpp b/src/mame/video/nbmj8688.cpp index 1cc86dab5d005..4395db782708a 100644 --- a/src/mame/video/nbmj8688.cpp +++ b/src/mame/video/nbmj8688.cpp @@ -261,7 +261,7 @@ void nbmj8688_state::writeram_high(int x, int y, int color) update_pixel(x, y); } -void nbmj8688_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nbmj8688_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/nbmj8891.cpp b/src/mame/video/nbmj8891.cpp index 012a7f3c4207f..feb00098a2a8d 100644 --- a/src/mame/video/nbmj8891.cpp +++ b/src/mame/video/nbmj8891.cpp @@ -305,7 +305,7 @@ void nbmj8891_state::update_pixel1(int x, int y) m_tmpbitmap1.pix(y, x) = (color == 0x7f) ? 0xff : color; } -void nbmj8891_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nbmj8891_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/nbmj8900.cpp b/src/mame/video/nbmj8900.cpp index 0cd4fe37c92c1..90ada9e8bdf2d 100644 --- a/src/mame/video/nbmj8900.cpp +++ b/src/mame/video/nbmj8900.cpp @@ -196,7 +196,7 @@ void nbmj8900_state::update_pixel1(int x, int y) m_tmpbitmap1.pix(y, x) = m_palette->pen(color); } -void nbmj8900_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nbmj8900_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/nbmj8991.cpp b/src/mame/video/nbmj8991.cpp index 5f6862b5a373f..a58bf3d24cfb5 100644 --- a/src/mame/video/nbmj8991.cpp +++ b/src/mame/video/nbmj8991.cpp @@ -163,7 +163,7 @@ void nbmj8991_state::update_pixel(int x, int y) m_tmpbitmap.pix(y, x) = color; } -void nbmj8991_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nbmj8991_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/nbmj9195.cpp b/src/mame/video/nbmj9195.cpp index e56a15146dbb8..7305d1c1a1d86 100644 --- a/src/mame/video/nbmj9195.cpp +++ b/src/mame/video/nbmj9195.cpp @@ -178,7 +178,7 @@ void nbmj9195_state::update_pixel(int vram, int x, int y) m_tmpbitmap[vram].pix(y, x) = color; } -void nbmj9195_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nbmj9195_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/neogeo_spr.cpp b/src/mame/video/neogeo_spr.cpp index f65609a1c939f..386497a9058d5 100644 --- a/src/mame/video/neogeo_spr.cpp +++ b/src/mame/video/neogeo_spr.cpp @@ -151,7 +151,7 @@ TIMER_CALLBACK_MEMBER(neosprite_base_device::auto_animation_timer_callback) void neosprite_base_device::create_auto_animation_timer() { - m_auto_animation_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(neosprite_base_device::auto_animation_timer_callback),this)); + m_auto_animation_timer = timer_alloc(*this, FUNC(neosprite_base_device::auto_animation_timer_callback)); } @@ -536,7 +536,7 @@ TIMER_CALLBACK_MEMBER(neosprite_base_device::sprite_line_timer_callback) void neosprite_base_device::create_sprite_line_timer() { - m_sprite_line_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(neosprite_base_device::sprite_line_timer_callback),this)); + m_sprite_line_timer = timer_alloc(*this, FUNC(neosprite_base_device::sprite_line_timer_callback)); } diff --git a/src/mame/video/nick.cpp b/src/mame/video/nick.cpp index ddaf8c0aff2c5..130823661d2c5 100644 --- a/src/mame/video/nick.cpp +++ b/src/mame/video/nick.cpp @@ -185,7 +185,7 @@ void nick_device::device_reset() // device_timer - handler timer events //------------------------------------------------- -void nick_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void nick_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { int scanline = screen().vpos(); diff --git a/src/mame/video/nick.h b/src/mame/video/nick.h index 6a878fd97f61f..a21cbdebf20d1 100644 --- a/src/mame/video/nick.h +++ b/src/mame/video/nick.h @@ -79,7 +79,7 @@ class nick_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_memory_interface overrides virtual space_config_vector memory_space_config() const override; diff --git a/src/mame/video/niyanpai.cpp b/src/mame/video/niyanpai.cpp index 6aa036fa5020b..04a58b7d9a914 100644 --- a/src/mame/video/niyanpai.cpp +++ b/src/mame/video/niyanpai.cpp @@ -162,7 +162,7 @@ void niyanpai_state::update_pixel(int vram, int x, int y) m_tmpbitmap[vram].pix(y, x) = color; } -void niyanpai_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void niyanpai_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/nmk16.cpp b/src/mame/video/nmk16.cpp index f48b9207bdf2e..ca7595c1aeb6c 100644 --- a/src/mame/video/nmk16.cpp +++ b/src/mame/video/nmk16.cpp @@ -81,7 +81,7 @@ void nmk16_state::video_init() m_bgbank = 0; m_mustang_bg_xscroll = 0; - m_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(nmk16_state::dma_callback),this)); + m_dma_timer = timer_alloc(*this, FUNC(nmk16_state::dma_callback)); save_pointer(NAME(m_spriteram_old), 0x1000/2); save_pointer(NAME(m_spriteram_old2), 0x1000/2); save_item(NAME(m_bgbank)); diff --git a/src/mame/video/pastelg.cpp b/src/mame/video/pastelg.cpp index 8753792ff1674..4bff0ff533558 100644 --- a/src/mame/video/pastelg.cpp +++ b/src/mame/video/pastelg.cpp @@ -258,7 +258,7 @@ void pastelg_common_state::video_start() m_videoram = make_unique_clear(width * height); - m_blitter_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pastelg_state::blitter_timer_callback), this)); + m_blitter_timer = timer_alloc(*this, FUNC(pastelg_state::blitter_timer_callback)); save_item(NAME(m_blitter_desty)); save_item(NAME(m_blitter_sizex)); diff --git a/src/mame/video/pc4.cpp b/src/mame/video/pc4.cpp index 6f8b1e8543ee4..1eeb0934f090e 100644 --- a/src/mame/video/pc4.cpp +++ b/src/mame/video/pc4.cpp @@ -58,7 +58,7 @@ uint32_t pc4_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c } -void pc4_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void pc4_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/video/pecom.cpp b/src/mame/video/pecom.cpp index 3c2280c335bdb..212efb216f470 100644 --- a/src/mame/video/pecom.cpp +++ b/src/mame/video/pecom.cpp @@ -82,6 +82,6 @@ void pecom_state::machine_start() save_item(NAME(m_reset)); save_item(NAME(m_dma)); save_pointer(NAME(m_charram), 0x0800); - m_reset_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pecom_state::reset_tick),this)); + m_reset_timer = timer_alloc(*this, FUNC(pecom_state::reset_tick)); } diff --git a/src/mame/video/powervr2.cpp b/src/mame/video/powervr2.cpp index e3d86fb3fa5a6..201d3498e2489 100644 --- a/src/mame/video/powervr2.cpp +++ b/src/mame/video/powervr2.cpp @@ -1879,11 +1879,11 @@ void powervr2_device::process_ta_fifo() //printf("%d %d\n",tafifo_listtype,screen().vpos()); switch (tafifo_listtype) { - case DISPLAY_LIST_OPAQUE: machine().scheduler().timer_set(attotime::from_usec(100), timer_expired_delegate(FUNC(powervr2_device::transfer_opaque_list_irq), this)); break; - case DISPLAY_LIST_OPAQUE_MOD: machine().scheduler().timer_set(attotime::from_usec(100), timer_expired_delegate(FUNC(powervr2_device::transfer_opaque_modifier_volume_list_irq), this)); break; - case DISPLAY_LIST_TRANS: machine().scheduler().timer_set(attotime::from_usec(100), timer_expired_delegate(FUNC(powervr2_device::transfer_translucent_list_irq), this)); break; - case DISPLAY_LIST_TRANS_MOD: machine().scheduler().timer_set(attotime::from_usec(100), timer_expired_delegate(FUNC(powervr2_device::transfer_translucent_modifier_volume_list_irq), this)); break; - case DISPLAY_LIST_PUNCH_THROUGH: machine().scheduler().timer_set(attotime::from_usec(100), timer_expired_delegate(FUNC(powervr2_device::transfer_punch_through_list_irq), this)); break; + case DISPLAY_LIST_OPAQUE: m_transfer_opaque_list_irq.call_after(attotime::from_usec(100)); break; + case DISPLAY_LIST_OPAQUE_MOD: m_transfer_opaque_modifier_volume_list_irq.call_after(attotime::from_usec(100)); break; + case DISPLAY_LIST_TRANS: m_transfer_translucent_list_irq.call_after(attotime::from_usec(100)); break; + case DISPLAY_LIST_TRANS_MOD: m_transfer_translucent_modifier_volume_list_irq.call_after(attotime::from_usec(100)); break; + case DISPLAY_LIST_PUNCH_THROUGH: m_transfer_punch_through_list_irq.call_after(attotime::from_usec(100)); break; } tafifo_listtype= DISPLAY_LIST_NONE; // no list being received listtype_used |= (2+8); @@ -3961,7 +3961,7 @@ void powervr2_device::pvr_dma_execute(address_space &space) } /* Note: do not update the params, since this DMA type doesn't support it. */ /* TODO: timing of this */ - machine().scheduler().timer_set(state->m_maincpu->cycles_to_attotime(m_pvr_dma.size/4), timer_expired_delegate(FUNC(powervr2_device::pvr_dma_irq), this)); + m_pvr_dma_irq.call_after(state->m_maincpu->cycles_to_attotime(m_pvr_dma.size/4)); } powervr2_device::powervr2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) @@ -3982,14 +3982,21 @@ void powervr2_device::device_start() computedilated(); -// vbout_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(powervr2_device::vbout),this)); -// vbin_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(powervr2_device::vbin),this)); - hbin_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(powervr2_device::hbin),this)); - yuv_timer_end = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(powervr2_device::yuv_convert_end),this)); - - endofrender_timer_isp = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(powervr2_device::endofrender_isp),this)); - endofrender_timer_tsp = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(powervr2_device::endofrender_tsp),this)); - endofrender_timer_video = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(powervr2_device::endofrender_video),this)); +// vbout_timer = timer_alloc(*this, FUNC(powervr2_device::vbout)); +// vbin_timer = timer_alloc(*this, FUNC(powervr2_device::vbin)); + hbin_timer = timer_alloc(*this, FUNC(powervr2_device::hbin)); + yuv_timer_end = timer_alloc(*this, FUNC(powervr2_device::yuv_convert_end)); + + endofrender_timer_isp = timer_alloc(*this, FUNC(powervr2_device::endofrender_isp)); + endofrender_timer_tsp = timer_alloc(*this, FUNC(powervr2_device::endofrender_tsp)); + endofrender_timer_video = timer_alloc(*this, FUNC(powervr2_device::endofrender_video)); + + m_pvr_dma_irq.init(*this, FUNC(powervr2_device::pvr_dma_irq)); + m_transfer_opaque_list_irq.init(*this, FUNC(powervr2_device::transfer_opaque_list_irq)); + m_transfer_opaque_modifier_volume_list_irq.init(*this, FUNC(powervr2_device::transfer_opaque_modifier_volume_list_irq)); + m_transfer_translucent_list_irq.init(*this, FUNC(powervr2_device::transfer_translucent_list_irq)); + m_transfer_translucent_modifier_volume_list_irq.init(*this, FUNC(powervr2_device::transfer_translucent_modifier_volume_list_irq)); + m_transfer_punch_through_list_irq.init(*this, FUNC(powervr2_device::transfer_punch_through_list_irq)); fake_accumulationbuffer_bitmap = std::make_unique(2048,2048); diff --git a/src/mame/video/powervr2.h b/src/mame/video/powervr2.h index 520c75f99c0e6..0e3bb33a51dbe 100644 --- a/src/mame/video/powervr2.h +++ b/src/mame/video/powervr2.h @@ -330,6 +330,13 @@ class powervr2_device : public device_t, TIMER_CALLBACK_MEMBER(transfer_punch_through_list_irq); TIMER_CALLBACK_MEMBER(pvr_dma_irq); + transient_timer_factory m_pvr_dma_irq; + transient_timer_factory m_transfer_opaque_list_irq; + transient_timer_factory m_transfer_opaque_modifier_volume_list_irq; + transient_timer_factory m_transfer_translucent_list_irq; + transient_timer_factory m_transfer_translucent_modifier_volume_list_irq; + transient_timer_factory m_transfer_punch_through_list_irq; + void pvr_dma_execute(address_space &space); void pvr_scanline_timer(int vpos); uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); diff --git a/src/mame/video/rpunch.cpp b/src/mame/video/rpunch.cpp index 02e7dcfbd2888..18b9381ef5e3a 100644 --- a/src/mame/video/rpunch.cpp +++ b/src/mame/video/rpunch.cpp @@ -77,7 +77,7 @@ VIDEO_START_MEMBER(rpunch_state,rpunch) m_pixmap->fill(0xf, pixmap_rect); /* reset the timer */ - m_crtc_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(rpunch_state::crtc_interrupt_gen),this)); + m_crtc_timer = timer_alloc(*this, FUNC(rpunch_state::crtc_interrupt_gen)); save_item(NAME(*m_pixmap)); } diff --git a/src/mame/video/segag80r.cpp b/src/mame/video/segag80r.cpp index 8840c83a099cc..6a174f8ed5bc7 100644 --- a/src/mame/video/segag80r.cpp +++ b/src/mame/video/segag80r.cpp @@ -21,7 +21,7 @@ enum { spaceod_bg_detect_tile_color = 1 }; * *************************************/ -void segag80r_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void segag80r_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/segag80v.cpp b/src/mame/video/segag80v.cpp index bc126f72fe403..2bc680c8bc175 100644 --- a/src/mame/video/segag80v.cpp +++ b/src/mame/video/segag80v.cpp @@ -309,7 +309,7 @@ void segag80v_state::sega_generate_vector_list() } // set the drawing end time for this frame - m_draw_end_time = machine().scheduler().time() + attotime(0, IRQ_ATTOS - time_remaining); + m_draw_end_time = machine().time() + attotime(0, IRQ_ATTOS - time_remaining); } diff --git a/src/mame/video/segaic16.cpp b/src/mame/video/segaic16.cpp index 2c060d0c9477c..ab1e03c206a47 100644 --- a/src/mame/video/segaic16.cpp +++ b/src/mame/video/segaic16.cpp @@ -1258,7 +1258,7 @@ void segaic16_video_device::tilemap_init(int which, int type, int colorbase, int info->numpages = 16; info->draw_layer = tilemap_16b_draw_layer; info->reset = tilemap_16b_reset; - info->latch_timer = machine().scheduler().timer_alloc( timer_expired_delegate(FUNC(segaic16_video_device::tilemap_16b_latch_values),this) ); + info->latch_timer = timer_alloc(*this, FUNC(segaic16_video_device::tilemap_16b_latch_values)); break; case TILEMAP_16B_ALT: @@ -1267,7 +1267,7 @@ void segaic16_video_device::tilemap_init(int which, int type, int colorbase, int info->numpages = 16; info->draw_layer = tilemap_16b_draw_layer; info->reset = tilemap_16b_reset; - info->latch_timer = machine().scheduler().timer_alloc( timer_expired_delegate(FUNC(segaic16_video_device::tilemap_16b_latch_values),this) ); + info->latch_timer = timer_alloc(*this, FUNC(segaic16_video_device::tilemap_16b_latch_values)); break; default: diff --git a/src/mame/video/segas32.cpp b/src/mame/video/segas32.cpp index 316b2b0592948..0b886dc01bccc 100644 --- a/src/mame/video/segas32.cpp +++ b/src/mame/video/segas32.cpp @@ -240,8 +240,8 @@ void segas32_state::device_start() if (!m_gfxdecode->started()) throw device_missing_dependencies(); - m_vblank_end_int_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(segas32_state::end_of_vblank_int), this)); - m_update_sprites_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(segas32_state::update_sprites), this)); + m_vblank_end_int_timer = timer_alloc(*this, FUNC(segas32_state::end_of_vblank_int)); + m_update_sprites_timer = timer_alloc(*this, FUNC(segas32_state::update_sprites)); /* allocate a copy of spriteram in 32-bit format */ m_spriteram_32bit = std::make_unique(0x20000/4); diff --git a/src/mame/video/seta2.cpp b/src/mame/video/seta2.cpp index 063b5b1b2ceb6..009632a0084e4 100644 --- a/src/mame/video/seta2.cpp +++ b/src/mame/video/seta2.cpp @@ -889,7 +889,7 @@ void seta2_state::video_start() m_realtilenumber[i] = i % m_spritegfx->elements(); } - m_raster_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(seta2_state::raster_timer_done), this)); + m_raster_timer = timer_alloc(*this, FUNC(seta2_state::raster_timer_done)); save_pointer(NAME(m_private_spriteram), 0x1000 / 2); } diff --git a/src/mame/video/sgi_re2.cpp b/src/mame/video/sgi_re2.cpp index 76ed188d4339c..5106de347fbfe 100644 --- a/src/mame/video/sgi_re2.cpp +++ b/src/mame/video/sgi_re2.cpp @@ -78,7 +78,7 @@ void sgi_re2_device::device_start() set_rdy(true); set_drq(false); - m_step = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sgi_re2_device::step), this)); + m_step = timer_alloc(*this, FUNC(sgi_re2_device::step)); } void sgi_re2_device::device_reset() diff --git a/src/mame/video/sprint8.cpp b/src/mame/video/sprint8.cpp index 724d9f4f1abc2..1f09c7b139a3d 100644 --- a/src/mame/video/sprint8.cpp +++ b/src/mame/video/sprint8.cpp @@ -117,7 +117,7 @@ void sprint8_state::video_start() m_tilemap1->set_scrolly(0, +24); m_tilemap2->set_scrolly(0, +24); - m_collision_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sprint8_state::collision_callback),this)); + m_collision_timer = timer_alloc(*this, FUNC(sprint8_state::collision_callback)); } diff --git a/src/mame/video/starfire.cpp b/src/mame/video/starfire.cpp index b87e215dfd5f0..57cd247d73fb6 100644 --- a/src/mame/video/starfire.cpp +++ b/src/mame/video/starfire.cpp @@ -20,7 +20,7 @@ void starfire_base_state::video_start() { m_screen->register_screen_bitmap(m_screen_bitmap); - m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(starfire_base_state::scanline_callback),this)); + m_scanline_timer = timer_alloc(*this, FUNC(starfire_base_state::scanline_callback)); m_scanline_timer->adjust(m_screen->time_until_pos(STARFIRE_VBEND), STARFIRE_VBEND); /* register for state saving */ diff --git a/src/mame/video/tank8.cpp b/src/mame/video/tank8.cpp index 2d77a22b2ff7d..a3188d0523409 100644 --- a/src/mame/video/tank8.cpp +++ b/src/mame/video/tank8.cpp @@ -166,7 +166,7 @@ void tank8_state::draw_bullets(bitmap_ind16 &bitmap, const rectangle &cliprect) } -void tank8_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tank8_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/tc0180vcu.cpp b/src/mame/video/tc0180vcu.cpp index db1a846e1347c..b8a76dcf9a896 100644 --- a/src/mame/video/tc0180vcu.cpp +++ b/src/mame/video/tc0180vcu.cpp @@ -166,7 +166,7 @@ void tc0180vcu_device::vblank_callback(screen_device &screen, bool state) // fires //------------------------------------------------- -void tc0180vcu_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void tc0180vcu_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/tc0180vcu.h b/src/mame/video/tc0180vcu.h index 1a973315035d0..1bc9e009533ea 100644 --- a/src/mame/video/tc0180vcu.h +++ b/src/mame/video/tc0180vcu.h @@ -36,7 +36,7 @@ class tc0180vcu_device : public device_t, public device_gfx_interface, public de virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum { diff --git a/src/mame/video/thomson.cpp b/src/mame/video/thomson.cpp index 3898033180f8c..81e6bc5ac7f11 100644 --- a/src/mame/video/thomson.cpp +++ b/src/mame/video/thomson.cpp @@ -1164,17 +1164,17 @@ void thomson_state::video_start() m_caps_led.resolve(); - m_thom_video_timer = machine().scheduler().timer_alloc(timer_expired_delegate()); + m_thom_video_timer = timer_alloc(); - m_thom_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(thomson_state::thom_scanline_start),this)); + m_thom_scanline_timer = timer_alloc(*this, FUNC(thomson_state::thom_scanline_start)); m_thom_lightpen_nb = 0; m_thom_lightpen_cb = nullptr; - m_thom_lightpen_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(thomson_state::thom_lightpen_step),this)); + m_thom_lightpen_timer = timer_alloc(*this, FUNC(thomson_state::thom_lightpen_step)); save_item(NAME(m_thom_lightpen_nb)); m_thom_init_cb = nullptr; - m_thom_init_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(thomson_state::thom_set_init),this)); + m_thom_init_timer = timer_alloc(*this, FUNC(thomson_state::thom_set_init)); m_thom_bwidth = 0; m_thom_bheight = 0; diff --git a/src/mame/video/triplhnt.cpp b/src/mame/video/triplhnt.cpp index 0937758003fa6..736d66887a5b8 100644 --- a/src/mame/video/triplhnt.cpp +++ b/src/mame/video/triplhnt.cpp @@ -35,7 +35,7 @@ void triplhnt_state::video_start() } -void triplhnt_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void triplhnt_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/twin16.cpp b/src/mame/video/twin16.cpp index d64d6824edcb0..7a8f03cbebbe2 100644 --- a/src/mame/video/twin16.cpp +++ b/src/mame/video/twin16.cpp @@ -447,7 +447,7 @@ void twin16_state::video_start() memset(m_sprite_buffer,0xff,0x800*sizeof(uint16_t)); m_video_register = 0; m_sprite_busy = 0; - m_sprite_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(twin16_state::sprite_tick),this)); + m_sprite_timer = timer_alloc(*this, FUNC(twin16_state::sprite_tick)); m_sprite_timer->adjust(attotime::never); /* register for savestates */ diff --git a/src/mame/video/tx1.cpp b/src/mame/video/tx1.cpp index fd89b9c96a1a4..c614cfae98572 100644 --- a/src/mame/video/tx1.cpp +++ b/src/mame/video/tx1.cpp @@ -1102,7 +1102,7 @@ VIDEO_START_MEMBER(tx1_state,tx1) m_rod_bmp = std::make_unique(256 * 3 * 240); /* Set a timer to run the interrupts */ - m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tx1_state::interrupt_callback),this)); + m_interrupt_timer = timer_alloc(*this, FUNC(tx1_state::interrupt_callback)); /* /CUDISP CRTC interrupt */ m_interrupt_timer->adjust(m_screen->time_until_pos(CURSOR_YPOS, CURSOR_XPOS)); @@ -2986,7 +2986,7 @@ VIDEO_START_MEMBER(tx1_state,buggyboy) m_rod_bmp = std::make_unique(3 * 256 * 240); /* Set a timer to run the interrupts */ - m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tx1_state::interrupt_callback),this)); + m_interrupt_timer = timer_alloc(*this, FUNC(tx1_state::interrupt_callback)); /* /CUDISP CRTC interrupt */ m_interrupt_timer->adjust(m_screen->time_until_pos(CURSOR_YPOS, CURSOR_XPOS)); @@ -3000,7 +3000,7 @@ VIDEO_START_MEMBER(tx1_state,buggybjr) m_rod_bmp = std::make_unique(256 * 240); /* Set a timer to run the interrupts */ - m_interrupt_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tx1_state::interrupt_callback),this)); + m_interrupt_timer = timer_alloc(*this, FUNC(tx1_state::interrupt_callback)); /* /CUDISP CRTC interrupt */ m_interrupt_timer->adjust(m_screen->time_until_pos(CURSOR_YPOS, CURSOR_XPOS)); diff --git a/src/mame/video/uv201.cpp b/src/mame/video/uv201.cpp index 82710b3dcf704..be7d400b55798 100644 --- a/src/mame/video/uv201.cpp +++ b/src/mame/video/uv201.cpp @@ -164,7 +164,7 @@ void uv201_device::device_reset() // device_timer - handle timer events //------------------------------------------------- -void uv201_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void uv201_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { int scanline = screen().vpos(); diff --git a/src/mame/video/uv201.h b/src/mame/video/uv201.h index 204b651d3d11c..71b203e2a63bd 100644 --- a/src/mame/video/uv201.h +++ b/src/mame/video/uv201.h @@ -89,7 +89,7 @@ class uv201_device : public device_t, // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; private: enum diff --git a/src/mame/video/vectrex.cpp b/src/mame/video/vectrex.cpp index f0fa6031dbc5a..9bac886def1dd 100644 --- a/src/mame/video/vectrex.cpp +++ b/src/mame/video/vectrex.cpp @@ -275,7 +275,7 @@ void vectrex_state::video_start() void vectrex_base_state::vectrex_multiplexer(int mux) { - timer_set(attotime::from_nsec(ANALOG_DELAY), TIMER_UPDATE_SIGNAL, m_via_out[PORTA], &m_analog[mux]); + timer_set(attotime::from_nsec(ANALOG_DELAY), TIMER_UPDATE_ANALOG, m_via_out[PORTA] | (mux << 8)); if (mux == A_AUDIO) m_dac->write(m_via_out[PORTA] ^ 0x80); // not gate shown on schematic @@ -361,7 +361,7 @@ void vectrex_base_state::v_via_pb_w(uint8_t data) vectrex_multiplexer((data >> 1) & 0x3); m_via_out[PORTB] = data; - timer_set(attotime::from_nsec(ANALOG_DELAY), TIMER_UPDATE_SIGNAL, data & 0x80, &m_ramp); + timer_set(attotime::from_nsec(ANALOG_DELAY), TIMER_UPDATE_RAMP, data & 0x80); } @@ -369,7 +369,7 @@ void vectrex_base_state::v_via_pa_w(uint8_t data) { /* DAC output always goes to Y integrator */ m_via_out[PORTA] = data; - timer_set(attotime::from_nsec(ANALOG_DELAY), TIMER_UPDATE_SIGNAL, data, &m_analog[A_Y]); + timer_set(attotime::from_nsec(ANALOG_DELAY), TIMER_UPDATE_ANALOG, data | (A_Y << 8)); if (!(m_via_out[PORTB] & 0x1)) vectrex_multiplexer((m_via_out[PORTB] >> 1) & 0x3); @@ -406,7 +406,7 @@ WRITE_LINE_MEMBER(vectrex_base_state::v_via_cb2_w) } } - timer_set(attotime::zero, TIMER_UPDATE_SIGNAL, state, &m_blank); + timer_set(attotime::zero, TIMER_UPDATE_BLANK, state); m_cb2 = state; } } diff --git a/src/mame/video/victory.cpp b/src/mame/video/victory.cpp index c8179b29e180a..d5ac009f660a3 100644 --- a/src/mame/video/victory.cpp +++ b/src/mame/video/victory.cpp @@ -47,8 +47,8 @@ void victory_state::video_start() m_scrollx = m_scrolly = 0; m_video_control = 0; memset(&m_micro, 0, sizeof(m_micro)); - m_micro.timer = machine().scheduler().timer_alloc(timer_expired_delegate()); - m_bgcoll_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(victory_state::bgcoll_irq_callback), this)); + m_micro.timer = timer_alloc(); + m_bgcoll_irq_timer = timer_alloc(*this, FUNC(victory_state::bgcoll_irq_callback)); /* register for state saving */ save_item(NAME(m_paletteram)); diff --git a/src/mame/video/vtvideo.cpp b/src/mame/video/vtvideo.cpp index 7480691e83b2b..afc3ebfc272bd 100644 --- a/src/mame/video/vtvideo.cpp +++ b/src/mame/video/vtvideo.cpp @@ -111,11 +111,11 @@ void vt100_video_device::device_start() m_write_lba7.resolve_safe(); // LBA7 is scan line frequency update - m_lba7_change_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vt100_video_device::lba7_change), this)); + m_lba7_change_timer = timer_alloc(*this, FUNC(vt100_video_device::lba7_change)); m_lba7_change_timer->adjust(clocks_to_attotime(765), 0, clocks_to_attotime(765)); // LBA3 and LBA4 are first two stages of divide-by-17 counter - m_lba3_change_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vt100_video_device::lba3_change), this)); + m_lba3_change_timer = timer_alloc(*this, FUNC(vt100_video_device::lba3_change)); screen().register_vblank_callback(vblank_state_delegate(&vt100_video_device::vblank_callback, this)); diff --git a/src/mame/video/wswan.cpp b/src/mame/video/wswan.cpp index a845117e6b2d8..aa996633f32be 100644 --- a/src/mame/video/wswan.cpp +++ b/src/mame/video/wswan.cpp @@ -167,7 +167,7 @@ void wswan_video_device::device_reset() } -void wswan_video_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void wswan_video_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/wswan.h b/src/mame/video/wswan.h index f532ae5d3ab5e..3261c0b511b42 100644 --- a/src/mame/video/wswan.h +++ b/src/mame/video/wswan.h @@ -52,7 +52,7 @@ class wswan_video_device : public device_t, public device_video_interface // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; void setup_palettes(); void draw_background(); diff --git a/src/mame/video/x68k_crtc.cpp b/src/mame/video/x68k_crtc.cpp index c7e870ccf0177..bc138f4fd4b99 100644 --- a/src/mame/video/x68k_crtc.cpp +++ b/src/mame/video/x68k_crtc.cpp @@ -70,11 +70,11 @@ void x68k_crtc_device::device_resolve_objects() void x68k_crtc_device::device_start() { - m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(x68k_crtc_device::hsync), this)); - m_operation_end_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(x68k_crtc_device::operation_end), this)); - m_raster_end_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(x68k_crtc_device::raster_end), this)); - m_raster_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(x68k_crtc_device::raster_irq), this)); - m_vblank_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(x68k_crtc_device::vblank_irq), this)); + m_scanline_timer = timer_alloc(*this, FUNC(x68k_crtc_device::hsync)); + m_operation_end_timer = timer_alloc(*this, FUNC(x68k_crtc_device::operation_end)); + m_raster_end_timer = timer_alloc(*this, FUNC(x68k_crtc_device::raster_end)); + m_raster_irq_timer = timer_alloc(*this, FUNC(x68k_crtc_device::raster_irq)); + m_vblank_irq_timer = timer_alloc(*this, FUNC(x68k_crtc_device::vblank_irq)); // save state save_item(NAME(m_reg)); diff --git a/src/mame/video/ygv608.cpp b/src/mame/video/ygv608.cpp index 3d7c47724eadc..4828b96dbda09 100644 --- a/src/mame/video/ygv608.cpp +++ b/src/mame/video/ygv608.cpp @@ -514,7 +514,7 @@ inline void ygv608_device::raster_irq_check() } -void ygv608_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void ygv608_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch(id) { diff --git a/src/mame/video/ygv608.h b/src/mame/video/ygv608.h index 586cf44597cfb..83cff4af2c911 100644 --- a/src/mame/video/ygv608.h +++ b/src/mame/video/ygv608.h @@ -105,7 +105,7 @@ class ygv608_device : public device_t, virtual uint32_t palette_entries() const override { return 256; } - void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; address_space *m_iospace; private: diff --git a/src/mame/video/zx.cpp b/src/mame/video/zx.cpp index 7ce719a7e1cf3..134f7836fd8ec 100644 --- a/src/mame/video/zx.cpp +++ b/src/mame/video/zx.cpp @@ -22,7 +22,7 @@ #include "includes/zx.h" -void zx_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void zx_state::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/zx8301.cpp b/src/mame/video/zx8301.cpp index 3e7e858f1d0bb..ede7969abcfa7 100644 --- a/src/mame/video/zx8301.cpp +++ b/src/mame/video/zx8301.cpp @@ -158,7 +158,7 @@ void zx8301_device::device_start() // device_timer - handler timer events //------------------------------------------------- -void zx8301_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +void zx8301_device::device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) { switch (id) { diff --git a/src/mame/video/zx8301.h b/src/mame/video/zx8301.h index 5a93738be46b4..7b0d1bdaac329 100644 --- a/src/mame/video/zx8301.h +++ b/src/mame/video/zx8301.h @@ -67,7 +67,7 @@ class zx8301_device : public device_t, protected: // device-level overrides virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_timer(timer_instance const &timer, device_timer_id id, int param, void *ptr) override; // device_config_memory_interface overrides virtual space_config_vector memory_space_config() const override; diff --git a/src/osd/modules/render/aviwrite.cpp b/src/osd/modules/render/aviwrite.cpp index aff5429446ef0..42bf113c00fce 100644 --- a/src/osd/modules/render/aviwrite.cpp +++ b/src/osd/modules/render/aviwrite.cpp @@ -60,7 +60,7 @@ void avi_write::begin_avi_recording(const char *name) // build up information about this new movie avi_file::movie_info info; info.video_format = 0; - info.video_timescale = 1000 * (primary_screen ? ATTOSECONDS_TO_HZ(primary_screen->frame_period().m_attoseconds) : screen_device::DEFAULT_FRAME_RATE); + info.video_timescale = 1000 * (primary_screen ? ATTOSECONDS_TO_HZ(primary_screen->frame_period().attoseconds()) : screen_device::DEFAULT_FRAME_RATE); info.video_sampletime = 1000; info.video_numsamples = 0; info.video_width = m_width; diff --git a/src/osd/osdnet.cpp b/src/osd/osdnet.cpp index b90a139731c8f..9a40df90dbc68 100644 --- a/src/osd/osdnet.cpp +++ b/src/osd/osdnet.cpp @@ -38,8 +38,8 @@ class osd_netdev *open_netdev(int id, class device_network_interface *ifdev, int osd_netdev::osd_netdev(class device_network_interface *ifdev, int rate) { m_dev = ifdev; - m_timer = ifdev->device().machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(osd_netdev::recv), this)); - m_timer->adjust(attotime::from_hz(rate), 0, attotime::from_hz(rate)); + m_timer.init(ifdev->device().scheduler(), *this, FUNC(osd_netdev::recv)); + m_timer.adjust(attotime::from_hz(rate), 0, attotime::from_hz(rate)); } osd_netdev::~osd_netdev() @@ -48,12 +48,12 @@ osd_netdev::~osd_netdev() void osd_netdev::start() { - m_timer->enable(true); + m_timer.enable(true); } void osd_netdev::stop() { - m_timer->enable(false); + m_timer.enable(false); } int osd_netdev::send(uint8_t *buf, int len) @@ -66,7 +66,7 @@ void osd_netdev::recv(void *ptr, int param) uint8_t *buf; int len; //const char atalkmac[] = { 0x09, 0x00, 0x07, 0xff, 0xff, 0xff }; - while(m_timer->enabled() && (len = recv_dev(&buf))) + while(m_timer.enabled() && (len = recv_dev(&buf))) { #if 0 if(buf[0] & 1) diff --git a/src/osd/osdnet.h b/src/osd/osdnet.h index 32e41663dcc43..c03a6cb36137f 100644 --- a/src/osd/osdnet.h +++ b/src/osd/osdnet.h @@ -47,7 +47,7 @@ class osd_netdev void recv(void *ptr, int param); class device_network_interface *m_dev; - emu_timer *m_timer; + persistent_timer m_timer; }; class osd_netdev *open_netdev(int id, class device_network_interface *ifdev, int rate);