diff options
author | 2015-09-13 08:41:44 +0200 | |
---|---|---|
committer | 2015-09-13 08:41:44 +0200 | |
commit | f88cefad27a1737c76e09d99c9fb43e173506081 (patch) | |
tree | 2d8167d03579c46e226471747eb4407bd00ed6fa /src/devices/sound/hc55516.h | |
parent | e92ac9e0fa8e99869894bea00589bbb526be30aa (diff) |
Move all devices into separate part of src tree (nw)
Diffstat (limited to 'src/devices/sound/hc55516.h')
-rw-r--r-- | src/devices/sound/hc55516.h | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/devices/sound/hc55516.h b/src/devices/sound/hc55516.h new file mode 100644 index 00000000000..a6323f8ee4f --- /dev/null +++ b/src/devices/sound/hc55516.h @@ -0,0 +1,95 @@ +// license:BSD-3-Clause +// copyright-holders:Aaron Giles +#pragma once + +#ifndef __HC55516_H__ +#define __HC55516_H__ + +class hc55516_device : public device_t, + public device_sound_interface +{ +public: + hc55516_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + hc55516_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); + ~hc55516_device() {} + + /* sets the digit (0 or 1) */ + void digit_w(int digit); + + /* sets the clock state (0 or 1, clocked on the rising edge) */ + void clock_w(int state); + + /* returns whether the clock is currently LO or HI */ + int clock_state_r(); + +protected: + // device-level overrides + virtual void device_config_complete(); + virtual void device_start(); + virtual void device_reset(); + + // sound stream update overrides + virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); + + void start_common(UINT8 _shiftreg_mask, int _active_clock_hi); + + // internal state + sound_stream *m_channel; + int m_active_clock_hi; + UINT8 m_shiftreg_mask; + + UINT8 m_last_clock_state; + UINT8 m_digit; + UINT8 m_new_digit; + UINT8 m_shiftreg; + + INT16 m_curr_sample; + INT16 m_next_sample; + + UINT32 m_update_count; + + double m_filter; + double m_integrator; + + double m_charge; + double m_decay; + double m_leak; + + inline int is_external_oscillator(); + inline int is_active_clock_transition(int clock_state); + inline int current_clock_state(); + void process_digit(); +}; + +extern const device_type HC55516; + +class mc3417_device : public hc55516_device +{ +public: + mc3417_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); +protected: + // device-level overrides + virtual void device_start(); + + // sound stream update overrides + virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); +}; + +extern const device_type MC3417; + +class mc3418_device : public hc55516_device +{ +public: + mc3418_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); +protected: + // device-level overrides + virtual void device_start(); + + // sound stream update overrides + virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); +}; + +extern const device_type MC3418; + + +#endif /* __HC55516_H__ */ |