Breakout: Hooked up antenna and free game dip switch as well.

[Couriersud]
This commit is contained in:
couriersud 2015-05-04 01:44:27 +02:00
parent 42fdc36a0b
commit 33d543883f
3 changed files with 160 additions and 190 deletions

View File

@ -58,13 +58,21 @@ NETLIST_START(diode_models)
NET_MODEL(".model LedGreen D(IS=93.2p RS=42M N=4.61 BV=4 IBV=10U CJO=2.97P VJ=.75 M=.333 TT=4.32U Iave=40m Vpk=4 type=LED)")
NET_MODEL(".model LedBlue D(IS=93.2p RS=42M N=7.47 BV=5 IBV=10U CJO=2.97P VJ=.75 M=.333 TT=4.32U Iave=40m Vpk=5 type=LED)")
NET_MODEL(".model LedWhite D(Is=0.27n Rs=5.65 N=6.79 Cjo=42p Iave=30m Vpk=5 type=LED)")
NET_MODEL(".model 1N4001 D(Is=14.11n N=1.984 Rs=33.89m Ikf=94.81 Xti=3 Eg=1.11 Cjo=25.89p M=.44 Vj=.3245 Fc=.5 Bv=75 Ibv=10u Tt=5.7u Iave=1 Vpk=50 mfg=GI type=silicon)")
NETLIST_END()
NETLIST_START(bjt_models)
NET_MODEL(".MODEL BC237B NPN(IS=1.8E-14 ISE=5.0E-14 ISC=1.72E-13 XTI=3 BF=400 BR=35.5 IKF=0.14 IKR=0.03 XTB=1.5 VAF=80 VAR=12.5 VJE=0.58 VJC=0.54 RE=0.6 RC=0.25 RB=0.56 CJE=13E-12 CJC=4E-12 XCJC=0.75 FC=0.5 NF=0.9955 NR=1.005 NE=1.46 NC=1.27 MJE=0.33 MJC=0.33 TF=0.64E-9 TR=50.72E-9 EG=1.11 KF=0 AF=1 VCEO=45V ICRATING=100M MFG=ZETEX)")
NET_MODEL(".model BC237B NPN(IS=1.8E-14 ISE=5.0E-14 ISC=1.72E-13 XTI=3 BF=400 BR=35.5 IKF=0.14 IKR=0.03 XTB=1.5 VAF=80 VAR=12.5 VJE=0.58 VJC=0.54 RE=0.6 RC=0.25 RB=0.56 CJE=13E-12 CJC=4E-12 XCJC=0.75 FC=0.5 NF=0.9955 NR=1.005 NE=1.46 NC=1.27 MJE=0.33 MJC=0.33 TF=0.64E-9 TR=50.72E-9 EG=1.11 KF=0 AF=1 VCEO=45V ICRATING=100M MFG=ZETEX)")
NET_MODEL(".model BC556B PNP(IS=3.83E-14 NF=1.008 ISE=1.22E-14 NE=1.528 BF=344.4 IKF=0.08039 VAF=21.11 NR=1.005 ISC=2.85E-13 NC=1.28 BR=14.84 IKR=0.047 VAR=32.02 RB=1 IRB=1.00E-06 RBM=1 RE=0.6202 RC=0.5713 XTB=0 EG=1.11 XTI=3 CJE=1.23E-11 VJE=0.6106 MJE=0.378 TF=5.60E-10 XTF=3.414 VTF=5.23 ITF=0.1483 PTF=0 CJC=1.08E-11 VJC=0.1022 MJC=0.3563 XCJC=0.6288 TR=1.00E-32 CJS=0 VJS=0.75 MJS=0.333 FC=0.8027 Vceo=65 Icrating=100m mfg=Philips)")
NET_MODEL(".model 2SA1015 PNP(Is=295.1E-18 Xti=3 Eg=1.11 Vaf=100 Bf=110 Xtb=1.5 Br=10.45 Rc=15 Cjc=66.2p Mjc=1.054 Vjc=.75 Fc=.5 Cje=5p Mje=.3333 Vje=.75 Tr=10n Tf=1.661n VCEO=45V ICrating=150M MFG=Toshiba)")
NET_MODEL(".model 2SC1815 NPN(Is=2.04f Xti=3 Eg=1.11 Vaf=6 Bf=400 Ikf=20m Xtb=1.5 Br=3.377 Rc=1 Cjc=1p Mjc=.3333 Vjc=.75 Fc=.5 Cje=25p Mje=.3333 Vje=.75 Tr=450n Tf=20n Itf=0 Vtf=0 Xtf=0 VCEO=45V ICrating=150M MFG=Toshiba)")
NET_MODEL(".model 2N3643 NPN(IS=14.34E-15 ISE=14.34E-15 ISC=0 XTI=3 BF=255.9 BR=6.092 IKF=0.2847 IKR=0 XTB=1.5 VAF=74.03 VAR=28 VJE=0.65 VJC=0.65 RE=0.1 RC=1 RB=10 CJE=22.01E-12 CJC=7.306E-12 XCJC=0.75 FC=0.5 NF=1 NR=1 NE=1.307 NC=2 MJE=0.377 MJC=0.3416 TF=411.1E-12 TR=46.91E-9 ITF=0.6 VTF=1.7 XTF=3 EG=1.11 KF=0 AF=1 VCEO=30 ICRATING=500m MFG=NSC)")
NET_MODEL(".model 2N3645 PNP(IS=650.6E-18 ISE=54.81E-15 ISC=0 XTI=3 BF=231.7 BR=3.563 IKF=1.079 IKR=0 XTB=1.5 VAF=115.7 VAR=35 VJE=0.65 VJC=0.65 RE=0.15 RC=0.715 RB=10 CJE=19.82E-12 CJC=14.76E-12 XCJC=0.75 FC=0.5 NF=1 NR=1 NE=1.829 NC=2 MJE=0.3357 MJC=0.5383 TF=603.7E-12 TR=111.3E-9 ITF=0.65 VTF=5 XTF=1.7 EG=1.11 KF=0 AF=1 VCEO=60 ICRATING=500m MFG=NSC)")
// 3644 = 3645 Difference between 3644 and 3645 is voltage rating. 3644: VCBO=45, 3645: VCBO=60
NET_MODEL(".model 2N3644 PNP(IS=650.6E-18 ISE=54.81E-15 ISC=0 XTI=3 BF=231.7 BR=3.563 IKF=1.079 IKR=0 XTB=1.5 VAF=115.7 VAR=35 VJE=0.65 VJC=0.65 RE=0.15 RC=0.715 RB=10 CJE=19.82E-12 CJC=14.76E-12 XCJC=0.75 FC=0.5 NF=1 NR=1 NE=1.829 NC=2 MJE=0.3357 MJC=0.5383 TF=603.7E-12 TR=111.3E-9 ITF=0.65 VTF=5 XTF=1.7 EG=1.11 KF=0 AF=1 VCEO=60 ICRATING=500m MFG=NSC)")
NET_MODEL(".model BC817-25 NPN(IS=9.198E-14 NF=1.003 ISE=4.468E-16 NE=1.65 BF=338.8 IKF=0.4913 VAF=107.9 NR=1.002 ISC=5.109E-15 NC=1.071 BR=29.48 IKR=0.193 VAR=25 RB=1 IRB=1000 RBM=1 RE=0.2126 RC=0.143 XTB=0 EG=1.11 XTI=3 CJE=3.825E-11 VJE=0.7004 MJE=0.364 TF=5.229E-10 XTF=219.7 VTF=3.502 ITF=7.257 PTF=0 CJC=1.27E-11 VJC=0.4431 MJC=0.3983 XCJC=0.4555 TR=7E-11 CJS=0 VJS=0.75 MJS=0.333 FC=0.905 Vceo=45 Icrating=500m mfg=Philips)")
// 2N5190 = BC817-25
NET_MODEL(".model 2N5190 NPN(IS=9.198E-14 NF=1.003 ISE=4.468E-16 NE=1.65 BF=338.8 IKF=0.4913 VAF=107.9 NR=1.002 ISC=5.109E-15 NC=1.071 BR=29.48 IKR=0.193 VAR=25 RB=1 IRB=1000 RBM=1 RE=0.2126 RC=0.143 XTB=0 EG=1.11 XTI=3 CJE=3.825E-11 VJE=0.7004 MJE=0.364 TF=5.229E-10 XTF=219.7 VTF=3.502 ITF=7.257 PTF=0 CJC=1.27E-11 VJC=0.4431 MJC=0.3983 XCJC=0.4555 TR=7E-11 CJS=0 VJS=0.75 MJS=0.333 FC=0.905 Vceo=45 Icrating=500m mfg=Philips)")
NETLIST_END()

View File

@ -91,70 +91,17 @@ static Astable555Desc b2_555_desc(OHM(560.0), M_OHM(1.8), U_FARAD(0.1));
static Mono555Desc c9_555_desc(OHM(47000.0), U_FARAD(1.0)); // R33, C21
//check these values
//static Paddle1HorizontalDesc pad1_desc(15047.0, 47.0, &c9_555_desc);
static CapacitorDesc c32_desc(U_FARAD(0.1));
static CapacitorDesc c36_desc(N_FARAD(1.0)); //0.001uF = 1nF
static CapacitorDesc c37_desc(P_FARAD(330.0));
#if 0
static BufferDesc pad_en_buf_desc(DELAY_NS(15.0), DELAY_NS(15.0)); // Prevents 12ns glitch on PAD_EN_n signal from resetting C9. TODO: is this accurate?
#endif
#if 0
static VIDEO_DESC( breakout )
VIDEO_RESISTANCE(1, K_OHM(0.0))
VIDEO_RESISTANCE(2, K_OHM(3.9))
VIDEO_RESISTANCE(3, K_OHM(3.9))
VIDEO_RESISTANCE(4, K_OHM(3.9))
VIDEO_RESISTANCE(5, K_OHM(3.9))
VIDEO_RESISTANCE(6, K_OHM(3.9))
//VIDEO_RESISTANCE(Video::HBLANK_PIN, K_OHM(0.0))
VIDEO_ORIENTATION(ROTATE_90)
VIDEO_CONTRAST(4.0)
// Values guessed based on screenshots. TODO: Make more accurate
// X, Y, W, H, R, G, B
VIDEO_OVERLAY( 15.570e-6, 0.0, 1.911e-6, -1.0, 0.80, 0.15, 0.05 ) // Red Bricks
VIDEO_OVERLAY( 17.481e-6, 0.0, 1.956e-6, -1.0, 0.95, 0.65, 0.05 ) // Amber Bricks
VIDEO_OVERLAY( 19.437e-6, 0.0, 1.956e-6, -1.0, 0.05, 0.65, 0.25 ) // Green Bricks
VIDEO_OVERLAY( 21.393e-6, 0.0, 1.955e-6, -1.0, 0.95, 0.95, 0.20 ) // Yellow Bricks
VIDEO_OVERLAY( 51.345e-6, 0.0, 1.956e-6, -1.0, 0.05, 0.65, 0.95 ) // Blue Paddle
// TODO: Different overlays for cocktail cabinet
VIDEO_DESC_END
static AUDIO_DESC( breakout )
AUDIO_RESISTANCE(1, K_OHM(47.0))
AUDIO_RESISTANCE(2, K_OHM(47.0))
AUDIO_RESISTANCE(3, K_OHM(47.0))
AUDIO_RESISTANCE(4, K_OHM(47.0))
AUDIO_GAIN(3.0)
VIDEO_DESC_END
#endif
static Mono9602Desc n8_desc(K_OHM(33.0), U_FARAD(100.0), K_OHM(5.6), P_FARAD(0)); // No capacitor on 2nd 9602
static Mono9602Desc f3_desc(K_OHM(47.0), U_FARAD(1.0), K_OHM(47.0), U_FARAD(1.0));
static Mono9602Desc a7_desc(K_OHM(68.0), U_FARAD(1.0), K_OHM(22.0), U_FARAD(10.0));
static Mono9602Desc a8_desc(K_OHM(27.0), U_FARAD(1.0), K_OHM(27.0), U_FARAD(1.0));
#if 0
static Dipswitch53137Desc dipswitch1_desc("bonus_credit", "Bonus Credit", 3, "None", "100", "200", "300", "400", "500", "600", "700", "800");
#endif
//static DipswitchDesc dipswitch2_desc("cabinet_type", "Cabinet Type", 0, "Normal", "Cocktail");
//static DipswitchDesc dipswitch3_desc("coinage", "Coinage", 0, "1 Coin / 1 Credit", "1 Coin / 2 Credits");
//static DipswitchDesc dipswitch4_desc("ball_count", "Ball Count", 0, "3", "5");
CIRCUIT_LAYOUT( breakout )
#if 0
CHIP("S1", 53137, &dipswitch1_desc)
CHIP("S2", DIPSWITCH, &dipswitch2_desc)
CHIP("S3", DIPSWITCH, &dipswitch3_desc)
CHIP("S4", DIPSWITCH, &dipswitch4_desc)
#endif
#if (SLOW_BUT_ACCURATE)
SOLVER(Solver, 48000)
@ -165,8 +112,6 @@ CIRCUIT_LAYOUT( breakout )
PARAM(Solver.GS_THRESHOLD, 2)
//PARAM(Solver.SOR_FACTOR, 1)
#endif
//CHIP("CLOCK", CLOCK_14_318_MHZ)
MAINCLOCK(Y1, 14318000.0)
// DIPSWITCH - Free game
SWITCH(S1_1)
@ -188,17 +133,92 @@ CIRCUIT_LAYOUT( breakout )
ANALOG_INPUT(V5, 5)
ALIAS(VCC, V5)
//#define VCC "V5", Q
#define GNDD "GND", Q
//CHIP("Y1", CLOCK_14_318_MHZ) //Y1
#define GNDD "ttllow", Q
#define P "ttlhigh", Q
//----------------------------------------------------------------
// Clock circuit
//----------------------------------------------------------------
#if 1 || (SLOW_BUT_ACCURATE)
MAINCLOCK(Y1, 14318000.0)
CHIP("F1", 9316)
NET_C(Y1.Q, F1.2)
CONNECTION("F1", 14, "H1", 13)
CONNECTION("F1", 13, "H1", 12)
CONNECTION("F1", 15, "E1", 5)
CONNECTION(P, "F1", 1)
CONNECTION(P, "F1", 7)
CONNECTION(P, "F1", 10)
CONNECTION(GNDD, "F1", 3)
CONNECTION(P, "F1", 4)
CONNECTION(GNDD, "F1", 5)
CONNECTION(GNDD, "F1", 6)
CONNECTION("E1", 6, "F1", 9)
#define CKBH "F1", 13
#define DICECLOCK "H1", 11
#else
/* This works with bugs. The DICECLOCK (Y2) duty cycles are out of sync.
* Speed gain is from 50% to 60% and not what would have been expected.
*/
MAINCLOCK(Y1, 14318000.0 / 2.0)
#define CKBH "Y1", Q
CLOCK(Y2, 14318000.0 / 3.5)
#define DICECLOCK "Y2", Q
NET_C(ttlhigh, H1.13)
NET_C(ttlhigh, H1.12)
NET_C(ttlhigh, E1.5)
#endif
//----------------------------------------------------------------
// Startup / Antenna latch
//----------------------------------------------------------------
TTL_INPUT(antenna, 0)
DIODE(CR3, "1N914")
DIODE(CR4, "1N914")
DIODE(CR5, "1N914")
DIODE(CR7, "1N914")
QBJT_EB(Q1, "2N3644")
QBJT_EB(Q2, "2N3643")
QBJT_EB(Q3, "2N3643")
CAP(C19, CAP_U(0.1))
CAP(C16, CAP_U(0.1))
RES(R25, 100)
RES(R26, 330)
RES(R27, 100)
RES(R31, 220)
RES(R32, 100)
NET_C(GND, CR5.A, Q2.E, C16.2, R25.2, Q3.E)
NET_C(CR5.K, Q2.B, antenna)
NET_C(Q2.C, C16.1, R25.1, Q3.B, R27.2)
NET_C(R27.1, CR7.A, R31.2) //CR7.K == IN
NET_C(R31.1, Q1.C)
NET_C(Q3.C, R26.2, CR3.A, CR4.A, E9.5) // E9.6 = Q Q3.C=QQ CR3.K = COIN*1 CR4.K = COIN*2
NET_C(R26.1, Q1.B, C19.2, R32.2)
NET_C(Q1.E, C19.1, R32.1, V5)
#define LAT_Q "E9", 6
#define Q_n "Q3", C
#define COIN1_n "F8", 5
#define COIN2_n "H9", 5
CONNECTION("CR7", K, "D8", 11) //set
CONNECTION("CR3", K, COIN1_n) //reset
CONNECTION("CR4", K, COIN2_n) //reset
CHIP_CAPACITOR(C32, &c32_desc)
CHIP_CAPACITOR(C36, &c36_desc)
CHIP_CAPACITOR(C37, &c37_desc)
#if 0
CHIP("PAD_EN_BUF", BUFFER, &pad_en_buf_desc)
#endif
CHIP("A3", 7474)
CHIP("A4", 7408)
CHIP("A5", 7400)
@ -243,7 +263,6 @@ CIRCUIT_LAYOUT( breakout )
CHIP("E8", 7474)
CHIP("E9", 7404)
CHIP("F1", 9316)
CHIP("F2", 7411)
CHIP_9602_Mono(F3, &f3_desc)
CHIP("F4", 7474)
@ -315,13 +334,6 @@ CIRCUIT_LAYOUT( breakout )
//LM380 //speaker amplifier
//LM323 //regulator
#if 0
CHIP("PAD1", PADDLE1_HORIZONTAL_INPUT, &pad1_desc)
PADDLE_CONNECTION("PAD1", "C9")
#endif
CHIP_LATCH(LATCH)
//HSYNC and VSYNC
#define H1_d "L1", 14
#define H2_d "L1", 13
@ -380,19 +392,12 @@ CIRCUIT_LAYOUT( breakout )
#define SCORE "D3", 5
#define VERT_TRIG_n "H1", 8
#define DICECLOCK "H1", 11
#define SCLOCK "K1", 15
#define CKBH "F1", 13
#define PAD_n "K3", 8
#define PAD_EN_n "C2", 8
//#define P VCC
#define P "ttlhigh", Q
#define COIN "L9", 6
#define COIN1_n "F8", 5
#define COIN2_n "H9", 5
#define CREDIT_1_OR_2 "L9", 3
#define CREDIT_1_OR_2_n "F9", 8
#define CREDIT2 "F9", 6
@ -421,9 +426,6 @@ CIRCUIT_LAYOUT( breakout )
#define FREE_GAME_TONE "N7", 3
#define BONUS_COIN "L9", 11
//#define Q "E9", 6
#define LAT_Q "E9", 6
#define Q_n "LATCH", 3
#define SBD_n "D2", 11
#define PLAY_CP "D2", 8
@ -517,10 +519,6 @@ CIRCUIT_LAYOUT( breakout )
#define RH_SIDE "H2", 3
#define TOP_BOUND "K4", 6
// CONNECTION(CREDIT_1_OR_2, "CREDIT_LIGHT1", 1)
// CONNECTION(CREDIT2, "CREDIT_LIGHT2", 1)
// CONNECTION(SERVE_WAIT_n, "SERVE_LIGHT", 1)
//Audio
CONNECTION("M9", 2, "F6", 5)
CONNECTION("M9", 2, "F7", 15)
@ -554,16 +552,6 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION("A7", 6, "B9", 4)
CONNECTION(VB_HIT_SOUND, "B9", 5)
#if 0
CONNECTION(GND, "S1", 1)
CONNECTION(P, "S1", 2)
CONNECTION(GND, "S1", 4)
CONNECTION(P, "S1", 3)
CONNECTION(GND, "S1", 12)
CONNECTION(P, "S1", 11)
CONNECTION(GND, "S1", 9)
CONNECTION(P, "S1", 10)
#endif
NET_C(S1_1.1, GND)
NET_C(S1_2.1, GND)
NET_C(S1_3.1, GND)
@ -1138,23 +1126,6 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(P_HIT_SOUND, "D7", 4)
CONNECTION("B8", 15, "D7", 3)
//Clock Generator
CONNECTION(CKBH, "H1", 12)
CONNECTION("F1", 14, "H1", 13)
CONNECTION("F1", 15, "E1", 5)
CONNECTION(P, "F1", 1)
CONNECTION(P, "F1", 7)
CONNECTION(P, "F1", 10)
CONNECTION(GNDD, "F1", 3)
CONNECTION(P, "F1", 4)
CONNECTION(GNDD, "F1", 5)
CONNECTION(GNDD, "F1", 6)
CONNECTION("E1", 6, "F1", 9)
//CONNECTION("Y1", 1, "F1", 2)
NET_C(Y1.Q, F1.2)
// RH and LH Sides
CONNECTION(V128, "N4", 1)
CONNECTION(V64, "N4", 2)
@ -1212,25 +1183,15 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(V16_d, "J8", 14)
CONNECTION("J8", 13, "J9", 10)
#if 0
CONNECTION(P, "S3", 1)
CONNECTION(V4_d, "S3", 2)
CONNECTION("S3", 3, "J9", 11)
#else
CONNECTION(V4_d, "S3", 1)
CONNECTION("S3", 2, "J9", 11)
RES(R15, RES_K(1))
NET_C(R15.1, V5)
NET_C(R15.2, S3.2)
#endif
CONNECTION("J9", 8, "L9", 5)
CONNECTION("J9", 6, "L9", 4)
//COIN2 circuit
//CONNECTION("COIN2", 1, "F9", 1)
//CONNECTION(GNDD, "F9", 1) //TODO: coin2 not implemented
CONNECTION("COIN2", 2, "F9", 1)
CONNECTION("COIN2", 1, "F9", 3)
NET_C(COIN2.Q, GND)
@ -1311,10 +1272,6 @@ CIRCUIT_LAYOUT( breakout )
//TODO: hows this whole latch stuff work? what about Q_n going to COIN1_n and COIN2_n
CONNECTION(CREDIT_1_OR_2_n, "D8", 13)
CONNECTION(EGL, "D8", 12)
CONNECTION("LATCH", 1, "D8", 11) //set
CONNECTION("LATCH", 2, COIN1_n) //reset
//CONNECTION("LATCH", 3, COIN2_n) //set //TODO: coin2 here
CONNECTION( "LATCH", 3, "E9", 5) //output
CONNECTION(LAT_Q, "D6", 1)
@ -1608,20 +1565,8 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(PSYNC, "B9", 1)
CONNECTION(VSYNC_n, "B9", 2)
#if 0
//CONNECTION("VIDEO", 1, "E2", 11)
CONNECTION("VIDEO", 2, PLAYFIELD)
CONNECTION("VIDEO", 3, BSYNC)
CONNECTION("VIDEO", 4, SCORE)
CONNECTION("VIDEO", 5, "B9", 3)
//CONNECTION("VIDEO", 6, P)
CONNECTION("VIDEO", Video::HBLANK_PIN, HSYNC)
CONNECTION("VIDEO", Video::VBLANK_PIN, "E3", 10)
#else
// VIDEO SUMMING
RES(R41, RES_K(3.9))
//RES(R42, RES_K(3.9))
RES(R42, RES_K(3.9))
RES(R43, RES_K(3.9))
RES(R51, RES_K(3.9))
@ -1653,15 +1598,7 @@ CIRCUIT_LAYOUT( breakout )
ALIAS(videomix, R41.1)
#endif
#if 0
// Audio Summing
CONNECTION("AUDIO", 1, "B9", 11)
CONNECTION("AUDIO", 2, "B9", 8)
CONNECTION("AUDIO", 3, FREE_GAME_TONE)
CONNECTION("AUDIO", 4, "B9", 6)
#else
RES(R36, RES_K(47))
RES(R37, RES_K(47))
RES(R38, RES_K(47))
@ -1673,26 +1610,6 @@ CIRCUIT_LAYOUT( breakout )
NET_C(R36.1, R37.1, R38.1, R39.1)
ALIAS(sound, R36.1)
#endif
#ifdef DEBUG
// RAM access
/*CONNECTION("LOG1", 3, H4) //A
CONNECTION("LOG1", 4, H8) //B
CONNECTION("LOG1", 5, H16) //C
CONNECTION("LOG1", 6, V32) //D
CONNECTION("LOG1", 7, V64) //E
CONNECTION("LOG1", 8, V128) //F
CONNECTION("LOG1", 9, V16) //G
CONNECTION("LOG1", 10, RAM_PLAYER1) //H
CONNECTION("LOG1", 11, H32) //I
CONNECTION("LOG1", 12, H128) //J
CONNECTION("LOG1", 13, "H4", 8) //K
CONNECTION("LOG1", 14, "E1", 4) //L
CONNECTION("LOG1", 15, "F2", 12) //M
CONNECTION("LOG1", 16, "L3", 6)*/ //N
#endif
// POTS
POT2(POTP1, RES_K(5)) // 5k
PARAM(POTP1.DIALLOG, 1) // Log Dial ...
@ -1745,6 +1662,28 @@ CIRCUIT_LAYOUT( breakout )
ALIAS(CON_CREDIT1, L9.3) // CREDIT_1_OR_2
ALIAS(CON_CREDIT2, F9.6) // CREDIT2
//----------------------------------------------------------------
// Coin Counter
//----------------------------------------------------------------
CONNECTION(CSW1, "E2", 1)
CONNECTION(CSW2, "E2", 2)
RES(R14, 150)
QBJT_SW(Q6, "2N5190")
DIODE(CR8, "1N4001")
NET_C(E2.3, R14.1)
NET_C(R14.2, Q6.B)
NET_C(GND, Q6.E)
NET_C(Q6.C, CR8.A)
NET_C(CR8.K, V5)
ALIAS(CON_T, Q6.C)
// Not on PCB: Coincounter
RES(CC_R, 20) // this is connected
NET_C(CC_R.1, CON_T)
NET_C(CC_R.2, V5)
//----------------------------------------------------------------
// Not connected pins
//----------------------------------------------------------------
@ -1759,7 +1698,6 @@ CIRCUIT_LAYOUT( breakout )
NET_C(ttlhigh, J6.3, J6.4, J6.5, J6.6)
NET_C(ttlhigh, E1.9, E1.11)
NET_C(ttlhigh, E2.1, E2.2)
NET_C(GND, D9.1, D9.2, D9.13, D9.3, D9.4, D9.5)

View File

@ -95,7 +95,6 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_video(*this, "fixfreq"),
m_dac(*this, "dac") /* just to have a sound device */
{
}
@ -158,12 +157,23 @@ public:
: ttl_mono_state(mconfig, type, tag),
m_led_serve(*this, "maincpu:led_serve"),
m_lamp_credit1(*this, "maincpu:lamp_credit1"),
m_lamp_credit2(*this, "maincpu:lamp_credit2")
m_lamp_credit2(*this, "maincpu:lamp_credit2"),
m_coin_counter(*this, "maincpu:coin_counter"),
m_sw1_1(*this, "maincpu:sw1_1"),
m_sw1_2(*this, "maincpu:sw1_2"),
m_sw1_3(*this, "maincpu:sw1_3"),
m_sw1_4(*this, "maincpu:sw1_4")
{
}
required_device<netlist_mame_analog_output_t> m_led_serve;
required_device<netlist_mame_analog_output_t> m_lamp_credit1;
required_device<netlist_mame_analog_output_t> m_lamp_credit2;
required_device<netlist_mame_analog_output_t> m_coin_counter;
required_device<netlist_mame_logic_input_t> m_sw1_1;
required_device<netlist_mame_logic_input_t> m_sw1_2;
required_device<netlist_mame_logic_input_t> m_sw1_3;
required_device<netlist_mame_logic_input_t> m_sw1_4;
NETDEV_ANALOG_CALLBACK_MEMBER(serve_cb)
{
@ -180,6 +190,19 @@ public:
output_set_value("lamp_credit2", (data < 2.0) ? 0 : 1);
}
NETDEV_ANALOG_CALLBACK_MEMBER(coin_counter_cb)
{
coin_counter_w(machine(), 0, (data > 2.0) ? 0 : 1);
}
DECLARE_INPUT_CHANGED_MEMBER(cb_free_play)
{
m_sw1_1->write((newval>>0) & 1);
m_sw1_2->write((newval>>1) & 1);
m_sw1_3->write((newval>>2) & 1);
m_sw1_4->write((newval>>3) & 1);
}
protected:
// driver_device overrides
@ -278,6 +301,8 @@ static INPUT_PORTS_START( breakout )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) NETLIST_LOGIC_PORT_CHANGED("maincpu", "startsw1")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 ) NETLIST_LOGIC_PORT_CHANGED("maincpu", "startsw2")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) NETLIST_LOGIC_PORT_CHANGED("maincpu", "servesw")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Antenna") NETLIST_LOGIC_PORT_CHANGED("maincpu", "antenna")
PORT_START("DIPS")
PORT_DIPNAME( 0x01, 0x00, "Balls" ) PORT_DIPLOCATION("SW4:1") NETLIST_LOGIC_PORT_CHANGED("maincpu", "sw4")
@ -286,18 +311,20 @@ static INPUT_PORTS_START( breakout )
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW3:1") NETLIST_LOGIC_PORT_CHANGED("maincpu", "sw3")
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:1") NETLIST_LOGIC_PORT_CHANGED("maincpu", "sw2")
PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:1") NETLIST_LOGIC_PORT_CHANGED("maincpu", "sw2")
PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
PORT_DIPSETTING( 0x80, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x04, DEF_STR( Upright ) )
PORT_DIPNAME( 0xf0, 0x00, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW1:1,2,3,4") PORT_CHANGED_MEMBER(DEVICE_SELF, breakout_state, cb_free_play, 0)
PORT_DIPSETTING( 0x00, "No Free Play" )
PORT_DIPSETTING( 0x10, "100" )
PORT_DIPSETTING( 0x20, "200" )
PORT_DIPSETTING( 0x30, "300" )
PORT_DIPSETTING( 0x40, "400" )
PORT_DIPSETTING( 0x50, "500" )
PORT_DIPSETTING( 0x60, "600" )
PORT_DIPSETTING( 0x70, "700" )
PORT_DIPSETTING( 0x80, "800" )
#if 0
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Antenna") NETLIST_LOGIC_PORT_CHANGED("maincpu", "antenna")
PORT_START("VR1")
PORT_ADJUSTER( 50, "VR1 - 50k, Paddle 1 adjustment" ) NETLIST_ANALOG_PORT_CHANGED("maincpu", "vr0")
PORT_START("VR2")
PORT_ADJUSTER( 50, "VR2 - 50k, Paddle 2 adjustment" ) NETLIST_ANALOG_PORT_CHANGED("maincpu", "vr1")
#endif
INPUT_PORTS_END
static MACHINE_CONFIG_START( pong, pong_state )
@ -340,16 +367,7 @@ static MACHINE_CONFIG_START( breakout, breakout_state )
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK)
MCFG_NETLIST_SETUP(breakout)
#if 0
MCFG_NETLIST_ANALOG_INPUT("maincpu", "vr0", "ic_b9_R.R")
MCFG_NETLIST_ANALOG_MULT_OFFSET(1.0 / 100.0 * RES_K(50), RES_K(56) )
MCFG_NETLIST_ANALOG_INPUT("maincpu", "vr1", "ic_a9_R.R")
MCFG_NETLIST_ANALOG_MULT_OFFSET(1.0 / 100.0 * RES_K(50), RES_K(56) )
MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot0", "ic_b9_POT.DIAL")
MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot1", "ic_a9_POT.DIAL")
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1a", "sw1a.POS", 0, 0x01)
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1b", "sw1b.POS", 0, 0x01)
#endif
MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot1", "POTP1.DIAL")
MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot2", "POTP2.DIAL")
MCFG_NETLIST_LOGIC_INPUT("maincpu", "coinsw1", "COIN1.POS", 0, 0x01)
@ -360,9 +378,14 @@ static MACHINE_CONFIG_START( breakout, breakout_state )
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw4", "S4.POS", 0, 0x01)
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw3", "S3.POS", 0, 0x01)
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw2", "S2.POS", 0, 0x01)
#if 0
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1_1", "S1_1.POS", 0, 0x01)
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1_2", "S1_2.POS", 0, 0x01)
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1_3", "S1_3.POS", 0, 0x01)
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1_4", "S1_4.POS", 0, 0x01)
MCFG_NETLIST_LOGIC_INPUT("maincpu", "antenna", "antenna.IN", 0, 0x01)
#endif
MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "snd0", "sound", breakout_state, sound_cb, "")
MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "vid0", "videomix", fixedfreq_device, update_vid, "fixfreq")
@ -371,6 +394,7 @@ static MACHINE_CONFIG_START( breakout, breakout_state )
MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "led_serve", "CON_P", breakout_state, serve_cb, "")
MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "lamp_credit1", "CON_CREDIT1", breakout_state, credit1_cb, "")
MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "lamp_credit2", "CON_CREDIT2", breakout_state, credit2_cb, "")
MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "coin_counter", "CON_T", breakout_state, coin_counter_cb, "")
/* video hardware */
MCFG_FIXFREQ_ADD("fixfreq", "screen")