public attoseconds_t m_attoseconds_per_cycle; // attoseconds per adjusted clock cycle // construction/destruction //------------------------------------------------- // device_execute_interface - constructor //------------------------------------------------- public device_execute_interface(machine_config mconfig, device_t device) : base(device, "execute") { m_scheduler = null; m_disabled = false; m_vblank_interrupt = null; m_vblank_interrupt_screen = null; m_timed_interrupt = null; m_timed_interrupt_period = attotime.zero; m_nextexec = null; m_driver_irq = null; m_timedint_timer = null; m_profiler = profile_type.PROFILER_IDLE; m_icountptr = null; m_cycles_running = 0; m_cycles_stolen = 0; 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; for (int line = 0; line < m_input.Length; line++) { m_input[line] = new device_input(); } // configure the fast accessor assert(device.interfaces().m_execute == null); device.interfaces().m_execute = this; }
} //device_interrupt_delegate(&_class::_func, #_class "::" #_func, DEVICE_SELF, (_class *)0), _tag); //define MCFG_DEVICE_VBLANK_INT_DEVICE(_tag, _devtag, _class, _func) device_execute_interface::static_set_vblank_int(*device, device_interrupt_delegate(&_class::_func, #_class "::" #_func, _devtag, (_class *)0), _tag); //define MCFG_DEVICE_VBLANK_INT_REMOVE() device_execute_interface::static_set_vblank_int(*device, device_interrupt_delegate(), NULL); public static void MCFG_DEVICE_PERIODIC_INT_DRIVER(device_t device, device_interrupt_delegate func, int rate) { device.execute().set_periodic_int(func, attotime.from_hz(rate)); } //device_interrupt_delegate(&_class::_func, #_class "::" #_func, DEVICE_SELF, (_class *)0), attotime::from_hz(_rate));
public static void MCFG_DEVICE_VBLANK_INT_DRIVER(device_t device, string tag, device_interrupt_delegate func) { device.execute().set_vblank_int(func, tag); } //device_interrupt_delegate(&_class::_func, #_class "::" #_func, DEVICE_SELF, (_class *)0), _tag);
//void set_vblank_int(device_interrupt_delegate callback, const char *tag) //{ // m_vblank_interrupt = callback; // m_vblank_interrupt_screen = tag; //} //template <class FunctionClass> void set_vblank_int(const char *tag, const char *devname, void (FunctionClass::*callback)(device_t &), const char *name) //{ // set_vblank_int(device_interrupt_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr)), tag); //} //template <class FunctionClass> void set_vblank_int(const char *tag, void (FunctionClass::*callback)(device_t &), const char *name) //{ // set_vblank_int(device_interrupt_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)), tag); //} public void set_periodic_int(device_interrupt_delegate function, attotime rate) //template <typename Object> void set_periodic_int(Object &&cb, const attotime &rate) { m_timed_interrupt = function; //m_timed_interrupt = std::forward<Object>(cb); m_timed_interrupt_period = rate; }
public void set_vblank_int(device_interrupt_delegate function, string tag) //template <typename Object> void set_vblank_int(Object &&cb, const char *tag) { m_vblank_interrupt = function; //m_vblank_interrupt = std::forward<Object>(cb); m_vblank_interrupt_screen = tag; }
//void remove_vblank_int() //{ // m_vblank_interrupt = device_interrupt_delegate(*this); // m_vblank_interrupt_screen = nullptr; //} //template <typename F> void set_periodic_int(F &&cb, const char *name, const attotime &rate) //{ // m_timed_interrupt.set(std::forward<F>(cb), name); // m_timed_interrupt_period = rate; //} //template <typename T, typename F> void set_periodic_int(T &&target, F &&cb, const char *name, const attotime &rate) //{ // m_timed_interrupt.set(std::forward<T>(target), std::forward<F>(cb), name); // m_timed_interrupt_period = rate; //} public void set_periodic_int(device_interrupt_delegate function, attotime rate) { m_timed_interrupt = function; //m_timed_interrupt.set(std::forward<F>(cb), name); m_timed_interrupt_period = rate; }
public void set_vblank_int(string tag, device_interrupt_delegate callback) //template <class FunctionClass> void set_vblank_int(const char *tag, void (FunctionClass::*callback)(device_t &), const char *name) { set_vblank_int(callback, tag); //set_vblank_int(device_interrupt_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)), tag); }
//template <typename... T> void set_vblank_int(const char *tag, T &&... args) //{ // m_vblank_interrupt.set(std::forward<T>(args)...); // m_vblank_interrupt_screen = tag; //} public void set_vblank_int(device_interrupt_delegate function, string tag) { m_vblank_interrupt = function; //m_vblank_interrupt = std::forward<Object>(cb); m_vblank_interrupt_screen = tag; }