diff options
Diffstat (limited to 'trunk/src/mame/audio/videopin.c')
-rw-r--r-- | trunk/src/mame/audio/videopin.c | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/trunk/src/mame/audio/videopin.c b/trunk/src/mame/audio/videopin.c new file mode 100644 index 00000000000..91380cd0e40 --- /dev/null +++ b/trunk/src/mame/audio/videopin.c @@ -0,0 +1,99 @@ +/************************************************************************* + + audio\videopin.c + +*************************************************************************/ +#include "emu.h" +#include "includes/videopin.h" +#include "sound/discrete.h" + + +/************************************************************************/ +/* videopin Sound System Analog emulation */ +/* Jan 2004, Derrick Renaud */ +/************************************************************************/ + +/* Nodes - Sounds */ +#define VIDEOPIN_VOL_SND NODE_10 +#define VIDEOPIN_BELL_SND NODE_11 +#define VIDEOPIN_BONG_SND NODE_12 + +DISCRETE_SOUND_START(videopin) +/************************************************/ + /* videopin Effects Relataive Gain Table */ + /* */ + /* Effect V-ampIn Gain ratio Relative */ + /* Vol0 3.8 10/(10+50) 1000.0 */ + /* Bell 4.4 (47+10)/(47+10+50) 740.2 */ + /* Bong 3.8 10/(10+50) 1000.0 */ + /************************************************/ + + /************************************************/ + /* Input register mapping for videopin */ + /************************************************/ + /* NODE GAIN OFFSET INIT */ + DISCRETE_INPUT_DATA (VIDEOPIN_OCTAVE_DATA) + DISCRETE_INPUT_DATA (VIDEOPIN_NOTE_DATA) + DISCRETE_INPUT_NOT (VIDEOPIN_BELL_EN) + DISCRETE_INPUT_LOGIC(VIDEOPIN_BONG_EN) + DISCRETE_INPUT_NOT (VIDEOPIN_ATTRACT_EN) + DISCRETE_INPUTX_DATA(VIDEOPIN_VOL_DATA, 1000.0/7.0, 0.0, 0.0) + /************************************************/ + + /************************************************/ + /* Vol0,1,2 are 3 different amplitudes of the */ + /* same note. It has a selectable octave and */ + /* selectable frequency. */ + /* The base frequency is */ + /* 12.096MHz / octave / 3 / note freq / 2 */ + /* The final /2 is just to give a 50% duty, */ + /* so we can just start by 12.096MHz/6/octave */ + /* The octave is selected by 3 bits selecting */ + /* 000 32H = 12096MHz / 2 / 2 / 32 */ + /* 001 16H = 12096MHz / 2 / 2 / 16 */ + /* 010 8H = 12096MHz / 2 / 2 / 8 */ + /* 011 4H = 12096MHz / 2 / 2 / 4 */ + /* 100 2H = 12096MHz / 2 / 2 / 2 */ + /* 101 1H = 12096MHz / 2 / 2 / 1 */ + /* 110 6MHz = 12096MHz / 2 */ + /* 111 0V = Disable */ + /* We will convert the 3 octave bits to a */ + /* divide value in the driver before sending */ + /* to the sound interface. */ + /* */ + /* note data: 0xff = off, */ + /* 0xfe = /2, */ + /* 0x00 = /256 */ + /* We will send the note data bit inverted to */ + /* sound interface so it is easier to work with */ + /************************************************/ + // We will disable the divide if VIDEOPIN_OCTAVE_DATA = 0 + DISCRETE_DIVIDE(NODE_20, VIDEOPIN_OCTAVE_DATA, 12096000.0 /3.0 / 2.0, VIDEOPIN_OCTAVE_DATA) + DISCRETE_ADDER2(NODE_21, 1, VIDEOPIN_NOTE_DATA, 1) + // We will disable the divide if VIDEOPIN_NOTE_DATA = 0 + DISCRETE_DIVIDE(NODE_22, VIDEOPIN_NOTE_DATA, NODE_20, NODE_21) // freq + DISCRETE_SQUAREWAVE(VIDEOPIN_VOL_SND, VIDEOPIN_OCTAVE_DATA, NODE_22, VIDEOPIN_VOL_DATA, 50.0, 0, 0.0) + + /************************************************/ + /* Bong is just a triggered 32V signal */ + /************************************************/ + DISCRETE_SQUAREWFIX(VIDEOPIN_BONG_SND, VIDEOPIN_BONG_EN, 15750.0/64.0, 1000.0, 50.0, 0, 0.0) + + /************************************************/ + /* Bell is Hsync/16 with an R/C decay amplitude */ + /* the 1uF cap is rapidally charged when BELL */ + /* is enabled, then dischaged through the 1M */ + /* resistor when disabled. */ + /* We use 180 phase because of inverter Q17, */ + /* but it rally has no effect on sound. */ + /************************************************/ + DISCRETE_RCDISC2(NODE_30, VIDEOPIN_BELL_EN, 740.2, 1, 0, 1e6, 1e-6) + DISCRETE_SQUAREWFIX(VIDEOPIN_BELL_SND, VIDEOPIN_BELL_EN, 15750.0/16.0, NODE_30, 50.0, 0, 180.0) + + /************************************************/ + /* Final mix and output. */ + /************************************************/ + DISCRETE_ADDER3(NODE_90, VIDEOPIN_ATTRACT_EN, VIDEOPIN_VOL_SND, VIDEOPIN_BELL_SND, VIDEOPIN_BONG_SND) + + DISCRETE_OUTPUT(NODE_90, 65534.0/(1000.0 + 740.2 + 1000.0)) +DISCRETE_SOUND_END |