***************************** TI TMS5220 Emulator (c) Frank Palazzolo Updated by Raphael Nabet ***************************** The TI TMS5220 Speech chip uses Linear-Predictive decoding scheme to produce speech from very compact data. This scheme is very similar to the U.S. Federal Standard LPC-10e coding system, which was developed soon after this chip. It is virtually identical to the chip used in the landmark "Speak 'N Spell" toy produced in the '70s. Acknowledgements: ----------------- I would like to thank Larry Brantingham, the original designer of the chip, for his technical help. I would also like to thank Neill Cortlett, who first showed that this chip could be emulated in real-time in his Multi-Gauntlet Emulator. Theory of operation: -------------------- The TI speech chip contains a 128-bit parallel-in, serial-out FIFO, a 10-pole digital lattice filter which models the vocal tract, and a D/A converter. It was originally design to operate either with a microcomputer interface, or with a serial speech ROM. The Speech ROM functionality is now emulated, although no arcade games require it currently. The input data is writen a byte at a time into the chip, and it is decoded bitwise into variable length frames. Possible Frame Types are as follows: Energy RF Pitch K1 K2 K3 K4 K5 K6 K7 K8 K9 K10 ----------------------------------------------------------------- Silent 0000 Stop 1111 Repeat XXXX 1 XXXXXX Unvoiced XXXX 0 000000 XXXXX XXXXX XXXX XXXX Voiced XXXX 0 XXXXXX XXXXX XXXXX XXXX XXXX XXXX XXXX XXXX XXX XXX XXX Stop Frame: Stops the current speech Repeat Frame: Uses the digital filter coefficients from the previous frame, with new Energy and Pitch values Unvoiced Frame: Uses Noise generator to feed 4 pole digital filter (All other coefficients are set to zero) Voiced Frame: Uses Pulse Generator to feed 10 pole digital filter All parameters (Energy, Pitch, K1-K10) are indexes into a lookup table for actual values (see TMS5220R.c) K1-K10 are reflection coefficients for the lattice filter. Each frame is used to generate 200 samples, and 8 times during each frame, (every 25 samples), these values are linearly interpolated to smooth out frame transitions. The Noise generator is based on a shift-register type random-bit generator. The Pulse generator is based on a lookup table. API: ---- TBD More: ----- For further technical info, the data sheet is floating around on the net. (I believe the name is TMS.PDF) If you can't find a copy, email me and I'll point you towards it. Feel free to contact me if you have a question. Frank Palazzolo palazzol@home.com