diff options
Diffstat (limited to 'src/devices/machine/mc14411.h')
-rw-r--r-- | src/devices/machine/mc14411.h | 74 |
1 files changed, 39 insertions, 35 deletions
diff --git a/src/devices/machine/mc14411.h b/src/devices/machine/mc14411.h index 6012e679d03..b4d8c7b488e 100644 --- a/src/devices/machine/mc14411.h +++ b/src/devices/machine/mc14411.h @@ -29,26 +29,25 @@ class mc14411_device : public device_t { public: - // timers - enum timer_id // indexes + // timer indices + enum timer_id : int { - TIMER_F1 = 0, - TIMER_F2 = 1, - TIMER_F3 = 2, - TIMER_F4 = 3, - TIMER_F5 = 4, - TIMER_F6 = 5, - TIMER_F7 = 6, - TIMER_F8 = 7, - TIMER_F9 = 8, - TIMER_F10 = 9, - TIMER_F11 = 10, - TIMER_F12 = 11, - TIMER_F13 = 12, - TIMER_F14 = 13, - TIMER_F15 = 14, - TIMER_F16 = 15, - TIMER_ID_RESET = 16 + TIMER_F1, + TIMER_F2, + TIMER_F3, + TIMER_F4, + TIMER_F5, + TIMER_F6, + TIMER_F7, + TIMER_F8, + TIMER_F9, + TIMER_F10, + TIMER_F11, + TIMER_F12, + TIMER_F13, + TIMER_F14, + TIMER_F15, + TIMER_F16 }; // rate select inputs @@ -63,10 +62,10 @@ public: template <std::size_t Line> auto out_f() { return m_out_fx_cbs[Line-1].bind(); } - DECLARE_WRITE_LINE_MEMBER(reset_w); - DECLARE_WRITE8_MEMBER(rate_select_w); - DECLARE_WRITE_LINE_MEMBER(rsa_w); - DECLARE_WRITE_LINE_MEMBER(rsb_w); + void reset_w(int state); + void rate_select_w(uint8_t data); + void rsa_w(int state); + void rsb_w(int state); void timer_enable(timer_id i, bool enable); void timer_disable_all(); @@ -75,29 +74,34 @@ protected: mc14411_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides - virtual void device_start() override; + virtual void device_start() override ATTR_COLD; 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_reset() override ATTR_COLD; + + TIMER_CALLBACK_MEMBER(timer_tick); + TIMER_CALLBACK_MEMBER(reset_tick); private: void arm_timer(int i); - emu_timer *m_fx_timer[16]; - emu_timer *m_reset_timer; - - uint32_t m_fx_state[16]; // F1-F16 output line states + struct fx_timer + { + emu_timer *timer; + bool state; + bool enabled; + }; - // divider matrix - static const int s_counter_divider[16]; - static const int s_divider_select[4]; + fx_timer m_fx_timers[16]; + emu_timer *m_reset_timer; - devcb_write_line m_out_fx_cbs[16]; + devcb_write_line::array<16> m_out_fx_cbs; uint32_t m_divider; // main divider to use, 0-3 column index into counter_divider uint32_t m_reset; // Reset line state - bool m_timer_enabled[16]; + // divider matrix + static const int s_counter_divider[16]; + static const int s_divider_select[4]; }; DECLARE_DEVICE_TYPE(MC14411, mc14411_device) |