// license:CC0
// copyright-holders:Couriersud
#include "netlist/devices/net_lib.h"
//NL_CONTAINS segas16b_audio
NETLIST_START(segas16b_audio)
SOLVER(Solver, 48000)
//PARAM(Solver.DYNAMIC_TS, 1)
ANALOG_INPUT(VP5, 5)
ANALOG_INPUT(VP12, 12)
/* UPD7759 has resistor of 47K on reference pin
* ==> IREF ~30 uA
* According to datasheet maximum current sink
* is 34 * IREF.
*
* MAME must provide range of 0 to 1020 uA to the current sink.
*
*/
#if 0
CLOCK(T0, 10)
NET_C(GND, T0.GND)
NET_C(VP5, T0.VCC)
RES(T0R, RES_M(10000000))
NET_C(T0, T0R.1)
CS(T1, 0.0)
//PARAM(T1.FUNC, "0.001020 * (0.5 + 0.5 * sin(6280 * T))")
RES(T2, 1000)
NET_C(GND, T2.2, T1.2)
NET_C(T1.1, T2.1, T0R.2)
#endif
CS(SPEECH, 0)
//PARAM(SPEECH.FUNC, "0.001020 * (0.5 + 0.5 * sin(6280 * T))")
NET_C(SPEECH.2, GND)
ANALOG_INPUT(CH1, 0)
ANALOG_INPUT(CH2, 0)
#if 0
VS(CH1VS, 0)
PARAM(CH1VS.FUNC, "2.5 + 1.25 * sin(6280 * T)")
NET_C(CH1VS.2, GND)
ALIAS(CH2, CH1VS.1)
#endif
/* The YM3012 uses only one dac for the two channels.
* Sample-and-hold is used to two toggle between the two channels.
* This is not emulated here since the YM2151 signals are provided
* externally.
*
* Therefore two RCOM resistors are used for now directly connected
* to the channels.
*
* The YM3012 datasheet gives a formula for digital to VOUT:
* VOUT = 0.5 VDD + 0.25 * VDD *(-1 + D9 + d8/2 .. + d0/512 + 1/1024)/pow(2,N)
* N= S2Q*4+S1Q*2+S0Q
* 3 bits ignored (I0,I1,I2)
* Serial data stream: I0,I1,I2,D0,..., D9,S0,S1,S2
*
* Basically output is between 0.25 * VDD and 0.75 * VDD.
* This needs to be done in MAME interface
*/
TL084_DIP(D20)
LM324_DIP(XC20)
RES(RCOM1, 390)
RES(RCOM2, 390)
CAP(C21, CAP_U(2.2))
CAP(C22, CAP_U(2.2)) // Needs verification
CAP(C27, CAP_P(1500))
CAP(C28, CAP_P(1500))
// ------------------------------------
// YM2151/YM3012 inputs
// ------------------------------------
NET_C(CH1, RCOM1.1)
NET_C(RCOM1.2, C27.1, D20.5)
NET_C(D20.7, D20.6, C22.1)
NET_C(CH2, RCOM2.1)
NET_C(RCOM2.2, C28.1, D20.10)
NET_C(D20.8, D20.9, C21.1)
NET_C(GND, C27.2, C28.2)
// OPAMPS, no information on schematics, assume 12V since
// TL084 with 5V would be outside specifications
// No negative voltages found on schematics
NET_C(VP12, XC20.4, D20.4)
NET_C(GND, XC20.11, D20.11)
// ------------------------------------
// Speech inputs
// ------------------------------------
RES(R11, RES_K(1))
RES(R14, RES_K(5.6))
RES(R16, RES_K(6.8))
RES(R15, RES_K(12))
RES(R12, RES_K(1.3))
RES(R13, RES_K(6.2))
CAP(C25, CAP_U(0.0022))
CAP(C26, CAP_U(0.022))
CAP(C23, CAP_U(0.022))
CAP(C29, CAP_U(0.01))
CAP(C62, CAP_U(2.2))
NET_C(VP5, R11.1)
NET_C(SPEECH.1, R11.2, R14.1)
NET_C(R14.2, R16.1, C26.1, R15.1)
NET_C(R15.2, C25.1, XC20.5)
NET_C(XC20.7, XC20.6, C26.2, R12.1)
NET_C(R12.2, C23.1, R13.1)
NET_C(R13.2, C29.1, XC20.3)
NET_C(XC20.1, XC20.2, C23.2, C62.1)
NET_C(GND, R16.2, C25.2, C29.2)
// ------------------------------------
// Mixing and pre amplifier
// ------------------------------------
RES(R6, RES_K(10))
RES(R9, RES_K(47))
RES(R10, RES_K(47))
RES(R4, RES_K(10))
RES(R7, RES_K(47))
RES(R3, RES_K(10))
RES(R5, RES_K(10))
RES(VR1, RES_K(2)) // FIXME: Actually a potentiometer
CAP(C12, CAP_U(10))
CAP(C63, CAP_U(2.2))
CAP(C20, CAP_P(1000))
CAP(C19, CAP_U(47)) // FIXME: Needs verification
RES(AMP_IN, RES_K(100))
NET_C(C62.2, R6.1)
NET_C(C22.2, R9.1)
NET_C(C21.2, R10.1)
NET_C(R6.2, R9.2, R10.2, XC20.9, C20.1, R7.1) // FIXME: Schematics read "9" (XC20.9) - other AMP?
NET_C(R7.2, C20.2, C63.1, XC20.8) // FIXME: Schematics read "7" (XC20.7) - other AMP?
NET_C(VP5, R4.1)
NET_C(R4.2, C19.1, R5.1, XC20.10) // FIXME: Schematics read "8" (XC20.8) - other AMP?
NET_C(C63.2, R3.1)
NET_C(R3.2, VR1.1, C12.1)
NET_C(C12.2, AMP_IN.1)
NET_C(GND, VR1.2, C19.2, R5.2, AMP_IN.2)
// OUTPUT
ALIAS(OUT, AMP_IN.1)
// Not connected
NET_C(GND, XC20.13, XC20.12, D20.13, D20.12, D20.2, D20.3)
NET_C(GND, XC20.14, D20.14, D20.1)
NETLIST_END()