summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/machine/mb87078.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/machine/mb87078.h')
-rw-r--r--src/emu/machine/mb87078.h103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/emu/machine/mb87078.h b/src/emu/machine/mb87078.h
new file mode 100644
index 00000000000..03b16c5f63d
--- /dev/null
+++ b/src/emu/machine/mb87078.h
@@ -0,0 +1,103 @@
+/*****************************************************************************
+
+ MB87078 6-bit,4-channel electronic volume controller emulator
+
+ An excerpt from the datasheet about the chip functionality:
+ "A digital signal input controls gain every 0.5 dB step from 0dB to -32dB.
+ - Gain variable range: 0 dB to -32 dB by 0.5dB or -infinity
+ - Gain variable range is expanded to connect two channels serially (0 dB to -64 dB)
+ - Each channel gain can be set respectively
+ - Test function is provided (to confirm internal data)
+ - Data is initialized by reset signal (all channels are set to 0dB)
+ - Logic I/O is TTL comatible"
+
+ There are 6 digital data input/output pins and DSEL pin that selects
+ the group (there are two) of internal registers to be read/written.
+
+ Group 0 is 6-bit gain latch
+ Group 1 is 5-bit control latch (2-bits are channel select and 3-bits are volume control)
+
+ Digital I/O Setting:
+ /TC DSEL D0 D1 D2 D3 D4 D5 I/O MODES (when /TC==H ->write)
+ H H DSC1 DSC2 EN C0 C32 X Input mode
+ H L GD0 GD1 GD2 GD3 GD4 GD5 (set)
+ L H DSC1 DSC2 EN C0 C32 L Output mode
+ L L GD0 GD1 GD2 GD3 GD4 GD5 (check)
+
+ Channel Setting:
+ DSC2 DSC1 CHANNEL
+ L L 0
+ L H 1
+ H L 2
+ H H 3
+
+ Electrical Volume Setting:
+ DATA* GAIN
+ GD5 GD4 GD3 GD2 GD1 GD0 EN C0 C32 (dB)
+ 1 1 1 1 1 1 1 0 0 0
+ 1 1 1 1 1 0 1 0 0 -0.5
+ 1 1 1 1 0 1 1 0 0 -1
+ 1 1 1 1 0 0 1 0 0 -1.5
+ 1 1 1 0 1 1 1 0 0 -2
+ [..........................................]
+ 0 0 0 0 0 1 1 0 0 -31
+ 0 0 0 0 0 0 1 0 0 -31.5
+ X X X X X X 1 X 1 -32
+ X X X X X X 1 1 0 0
+ X X X X X X 0 X X -infinity
+
+ X=don't care
+ * When reset, DATA is set to 0 dB (code 111111 100)
+
+
+ MB87078 pins and assigned interface variables/functions
+
+ /[ 1] D0 /TC [24]
+ | [ 2] D1 /WR [23]
+ MB87078_data_w()| [ 3] D2 /CE [22]
+ MB87078_data_r()| [ 4] D3 DSEL [21]-MB87078_data_w()/data_r() parameter
+ | [ 5] D4 /RESET [20]-MB87078_reset_comp_w()
+ \[ 6] D5 /PD [19]
+ [ 7] DGND VDD [18]
+ [ 8] AGND 1/2 VDD [17]
+ [ 9] AIN0 AOUT3 [16]
+ [10] AOUT0 AIN3 [15]
+ [11] AIN1 AOUT2 [14]
+ [12] AOUT1 AIN2 [13]
+
+*****************************************************************************/
+
+#ifndef MB87078_H
+#define MB87078_H
+
+#define MAX_MB87078 4
+
+/* The interface structure */
+struct MB87078interface {
+ void (*gain_changed_cb)(int channel, int percent /*, float decibels*/);
+};
+
+
+void MB87078_stop(void);
+void MB87078_start(int which, const struct MB87078interface *intf);
+
+void MB87078_data_w(int which, int data, int dsel);
+void MB87078_reset_comp_w(int which, int level);
+
+
+/* MB87078_gain_decibel_r will return 'channel' gain on chip 'which'.
+ Returned value represnts channel gain expressed in decibels,
+ Range from 0 to -32.0 (or -256.0 for -infinity)
+*/
+float MB87078_gain_decibel_r(int which, int channel);
+
+
+/* MB87078_gain_percent_r will return 'channel' gain on chip 'which'.
+ Returned value represents channel gain expressed in percents of maximum volume.
+ Range from 100 to 0. (100 = 0dB; 50 = -6dB; 0 = -infinity)
+
+ This function is designed for use with MAME mixer_xxx() functions.
+*/
+int MB87078_gain_percent_r(int which, int channel);
+
+#endif