*****************************

    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




