summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/emu/sound/sn76477.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/emu/sound/sn76477.h')
-rw-r--r--trunk/src/emu/sound/sn76477.h130
1 files changed, 130 insertions, 0 deletions
diff --git a/trunk/src/emu/sound/sn76477.h b/trunk/src/emu/sound/sn76477.h
new file mode 100644
index 00000000000..6ca57935202
--- /dev/null
+++ b/trunk/src/emu/sound/sn76477.h
@@ -0,0 +1,130 @@
+/*****************************************************************************
+
+ Texas Instruments SN76477 emulator
+
+ SN76477 pin layout. There is a corresponding interface variable with the
+ same name. The only exception is noise_clock which must be programmatically
+ set. The other pins have programmatic equivalents as well.
+ The name of the function is SN76477_<pinname>_w.
+ All capacitor functions can also specify a fixed voltage on the cap.
+ The name of this function is SN76477_<pinname>_voltage_w
+
+ +-------------------+
+ envelope_1 | 1 | | 28| envelope_2
+ | 2 GND - 27| mixer_c
+ noise_clock | 3 26| mixer_a
+ noise_clock_res | 4 25| mixer_b
+ noise_filter_res | 5 24| one_shot_res
+ noise_filter_cap | 6 23| one_shot_cap
+ decay_res | 7 22| vco
+ attack_decay_cap | 8 21| slf_cap
+ enable o| 9 20| slf_res
+ attack_res |10 19| pitch_voltage
+ amplitude_res |11 18| vco_res
+ feedback_res |12 17| vco_cap
+ |13 OUTPUT 16| vco_voltage
+ |14 Vcc +5V OUT 15|
+ +-------------------+
+
+ All resistor values in Ohms
+ All capacitor values in Farads
+ Use RES_K, RES_M and CAP_U, CAP_N, CAP_P macros in rescap.h to convert
+ magnitudes, eg. 220k = RES_K(220), 47nF = CAP_N(47)
+
+ *****************************************************************************/
+
+#pragma once
+
+#ifndef __SN76477_H__
+#define __SN76477_H__
+
+#include "devlegcy.h"
+#include "machine/rescap.h"
+
+
+
+/*****************************************************************************
+ *
+ * Interface definition
+ *
+ *****************************************************************************/
+
+typedef struct _sn76477_interface sn76477_interface;
+struct _sn76477_interface
+{
+ double noise_clock_res;
+ double noise_filter_res;
+ double noise_filter_cap;
+ double decay_res;
+ double attack_decay_cap;
+ double attack_res;
+ double amplitude_res;
+ double feedback_res;
+ double vco_voltage;
+ double vco_cap;
+ double vco_res;
+ double pitch_voltage;
+ double slf_res;
+ double slf_cap;
+ double one_shot_cap;
+ double one_shot_res;
+ UINT32 vco;
+ UINT32 mixer_a;
+ UINT32 mixer_b;
+ UINT32 mixer_c;
+ UINT32 envelope_1;
+ UINT32 envelope_2;
+ UINT32 enable;
+};
+
+
+
+/*****************************************************************************
+ *
+ * Functions to set a pin's value
+ *
+ *****************************************************************************/
+
+/* these functions take 0 or 1 as a logic input */
+WRITE_LINE_DEVICE_HANDLER( sn76477_enable_w ); /* active LO, 0 = enabled, 1 = disabled */
+WRITE_LINE_DEVICE_HANDLER( sn76477_mixer_a_w );
+WRITE_LINE_DEVICE_HANDLER( sn76477_mixer_b_w );
+WRITE_LINE_DEVICE_HANDLER( sn76477_mixer_c_w );
+WRITE_LINE_DEVICE_HANDLER( sn76477_envelope_1_w );
+WRITE_LINE_DEVICE_HANDLER( sn76477_envelope_2_w );
+WRITE_LINE_DEVICE_HANDLER( sn76477_vco_w ); /* 0 = external, 1 = controlled by SLF */
+WRITE_LINE_DEVICE_HANDLER( sn76477_noise_clock_w ); /* noise clock write, if noise_clock_res = 0 */
+
+/* these functions take a resistor value in Ohms */
+void sn76477_one_shot_res_w(device_t *device, double data);
+void sn76477_slf_res_w(device_t *device, double data);
+void sn76477_vco_res_w(device_t *device, double data);
+void sn76477_noise_clock_res_w(device_t *device, double data); /* = 0 if the noise gen is clocked via noise_clock */
+void sn76477_noise_filter_res_w(device_t *device, double data);
+void sn76477_decay_res_w(device_t *device, double data);
+void sn76477_attack_res_w(device_t *device, double data);
+void sn76477_amplitude_res_w(device_t *device, double data);
+void sn76477_feedback_res_w(device_t *device, double data);
+
+/* these functions take a capacitor value in Farads or the voltage on it in Volts */
+#define SN76477_EXTERNAL_VOLTAGE_DISCONNECT (-1.0) /* indicates that the voltage is internally computed,
+ can be used in all the functions that take a
+ voltage on a capacitor */
+void sn76477_one_shot_cap_w(device_t *device, double data);
+void sn76477_one_shot_cap_voltage_w(device_t *device, double data);
+void sn76477_slf_cap_w(device_t *device, double data);
+void sn76477_slf_cap_voltage_w(device_t *device, double data);
+void sn76477_vco_cap_w(device_t *device, double data);
+void sn76477_vco_cap_voltage_w(device_t *device, double data);
+void sn76477_noise_filter_cap_w(device_t *device, double data);
+void sn76477_noise_filter_cap_voltage_w(device_t *device, double data);
+void sn76477_attack_decay_cap_w(device_t *device, double data);
+void sn76477_attack_decay_cap_voltage_w(device_t *device, double data);
+
+/* these functions take a voltage value in Volts */
+void sn76477_vco_voltage_w(device_t *device, double data);
+void sn76477_pitch_voltage_w(device_t *device, double data);
+
+DECLARE_LEGACY_SOUND_DEVICE(SN76477, sn76477);
+
+#endif/* __SN76477_H__ */