1 // license:BSD-3-Clause
2 // copyright-holders:Ryan Holtz
3 
4 #include "devices/net_lib.h"
5 
6 //
7 // ICL8038 is broadly similar to a 566 VCO, and can be simulated partially as such.
8 //
9 
10 NETLIST_START(ICL8038_DIP)
11 	VCVS(VI, 1)
12 	CCCS(CI1, -1)
13 	CCCS(CI2, 2)
14 	SYS_COMPD(COMP)
15 	SYS_DSW2(SW)
16 	VCVS(VO, 1)
17 	RES(R_SHUNT, RES_R(50))
18 
19 	PARAM(VO.RO, 50)
20 	PARAM(COMP.MODEL, "FAMILY(TYPE=CUSTOM IVL=0.16 IVH=0.4 OVL=0.01 OVH=0.01 ORL=50 ORH=50)")
21 	PARAM(SW.GOFF, 0) // This has to be zero to block current sources
22 
23 	NET_C(VI.OP, CI1.IN, CI2.IN)
24 	NET_C(CI1.OP, VO.IP)
25 	NET_C(COMP.Q, SW.I)
26 	NET_C(CI2.OP, SW.2)
27 	NET_C(COMP.VCC, R_SHUNT.1)
28 	NET_C(SW.1, R_SHUNT.2)
29 	NET_C(SW.3, VO.IP)
30 	NET_C(VO.OP, COMP.IN)
31 
32 	// Avoid singular Matrix due to G=0 switch
33 	RES(RX1, 1e10)
34 	RES(RX2, 1e10)
35 	NET_C(RX1.1, SW.1)
36 	NET_C(RX2.1, SW.3)
37 
38 	NET_C(COMP.GND, RX1.2, RX2.2)
39 
40 	RES(R1, 5000)
41 	RES(R2, 5000)
42 	RES(R3, 5000)
43 
44 	// Square output wave
45 	VCVS(V_SQR, 1)
46 	NET_C(COMP.Q, V_SQR.IP)
47 
48 	NET_C(COMP.GND, SW.GND, VI.ON, VI.IN, CI1.ON, CI2.ON, VO.IN, VO.ON, R2.2, V_SQR.IN, V_SQR.ON)
49 	NET_C(COMP.VCC, SW.VCC, R1.2)
50 	NET_C(COMP.IP, R1.1, R2.1, R3.1)
51 	NET_C(COMP.Q, R3.2)
52 
53 	ALIAS(11, VI.ON) // GND
54 	ALIAS(9, V_SQR.OP) // Square out
55 	ALIAS(3, VO.OP) // Triag out
56 	ALIAS(8, VI.IP) // VC
57 	ALIAS(4, CI1.IP) // R1
58 	ALIAS(5, CI2.IP) // R2
59 	ALIAS(10, VO.IP) // C1
60 	ALIAS(6, COMP.VCC) // V+
61 NETLIST_END()
62