summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/audio/nl_segaspeech.cpp
blob: e5c1c0a665752e4bfea57350caf3b1b4d0e7b53d (plain) (tree)
1
              













































                                                                
          










































                                                                    
                                                                                       





                              
                                           



















                                                              
// license:CC0
// copyright-holders:Aaron Giles

//
// Netlist for Sega Speech board
//
// Derived from the schematics in the Sega G-80 manual.
//
// Known problems/issues:
//
//    * Mostly works. Not 100% sure about using a current source
//       for input.
//

#include "netlist/devices/net_lib.h"
#include "nl_segaspeech.h"

//
// Optimizations
//




//
// Main netlist
//

NETLIST_START(segaspeech)

	SOLVER(Solver, 1000)
	PARAM(Solver.DYNAMIC_TS, 1)
	PARAM(Solver.DYNAMIC_MIN_TIMESTEP, 2e-5)

	TTL_INPUT(I_SP0250, 0)
	PARAM(I_SP0250.MODEL, "74XXOC")
	NET_C(I_SP0250.GND, GND)
	NET_C(I_SP0250.VCC, I_V5)
	ALIAS(I_SPEECH, I_SP0250.Q)

	ANALOG_INPUT(I_V5, 5)
	ANALOG_INPUT(I_VM5, -5)

	//
	// There are two schematic drawings of the speech board
	// that show fairly different outputs from the SP0250.
	// Both have their problems.
	//
	// The simpler one is included in the Astro Blaster and
	// Space Fury manuals. This is largely correct, except
	// that it is believed (not verified) that R20 should be
	// 4.7K instead of 470 Ohms. This schematic does not show
	// the CD4053 mixer.
	//
	// The more complex schematic is included in the G-80
	// schematics package, and in the Star Trek and Zektor
	// manuals. It has several significant errors (all verified
	// from a working PCB):
	//
	//    1. U8 pins 2 and 3 are swapped
	//    2. The connection from R20 to GND should be removed
	//        (this also disconnected C50 and R21 from GND)
	//    3. R13 should be 220k, not 22k
	//
	// With the fixes above, the output sections of the two
	// schematics line up, minus the mixing section, which is
	// only shown on the more complex schematic.
	//
	// The mixing section is trivial, with 3 bits from a control
	// port controlling three switches in the CD4053. Bit 3
	// enables/disables speech. Bit 4 enables/disables an
	// unconnected source. And bit 5 enables/disables incoming
	// external sound. The incoming sound is also routed through
	// a pot to enable control over the relative volume.
	//
	// For purposes of this netlist, and since it runs at high
	// speeds, we tap the speech output before it hits the
	// CD4053 and manually manage the speech output.
	//
	// Since we use MAME to manage the mixing, the control bits
	// are managed directly there, rather than in this netlist.
	//

	//
	// This represents the schematic drawing from Astro Blaster
	// and Space Fury; there is no control register and it
	// works.
	//
	RES(R17, RES_K(10))
	RES(R18, RES_K(22))
	RES(R19, RES_K(250))
	RES(R20, RES_K(4.7))    // schematic shows 470Ohm, but a real PCB had 4.7k here
	RES(R21, RES_K(10))

	CAP(C9, CAP_U(0.1))
	CAP(C10, CAP_U(0.047))
	CAP(C50, CAP_U(0.003))

	TL081_DIP(U8)           // Op. Amp.
	NET_C(U8.7, I_V5)
	NET_C(U8.4, I_VM5)

	NET_C(I_SPEECH, R17.1, C9.1)
	NET_C(R17.2, I_V5)
	NET_C(C9.2, R18.1)
	NET_C(R18.2, C10.1, R19.2, U8.3)
	NET_C(R19.1, C10.2, GND)
	NET_C(R20.1, GND)
	NET_C(R20.2, U8.2, R21.2, C50.2)
	NET_C(U8.6, R21.1, C50.1)
	ALIAS(OUTPUT, U8.6)

	//
	// In the more complex case, this would feed into a
	// CD4053 for switching. We rely on this being managed
	// at the driver level.
	//

NETLIST_END()