summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/sound/hc55516.h
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2015-09-13 08:41:44 +0200
committer Miodrag Milanovic <mmicko@gmail.com>2015-09-13 08:41:44 +0200
commitf88cefad27a1737c76e09d99c9fb43e173506081 (patch)
tree2d8167d03579c46e226471747eb4407bd00ed6fa /src/devices/sound/hc55516.h
parente92ac9e0fa8e99869894bea00589bbb526be30aa (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.h95
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__ */