summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/mc14411.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/mc14411.h')
-rw-r--r--src/devices/machine/mc14411.h74
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)