DSPLIB Web Site - Intellivoice information

Reverse-Engineering the...

I am currently reverse-engineering the Intellivoice with the hopes of simulating it, and being able to generate voice data for new games. I have been lucky enough to enlist the help of Ron Carlson, the man who directed the entire Intellivoice Project at Mattel. Much of the info on this page was provided by him. (Thanks Ron!).

Also - I have to thank Mark Magness, who has provided Data Sheets from his GI Databook.

So far, I have:

Info Still Needed: (Without this info I can proceed, but at a slower rate... )

The SPB640

Need Pinout Here

Here is the memory map of the SPB640 with respect to the CP1610 address space, as provided by Ron Carlson:

Valid SPB  Hex  AD2 AD1 AD0   Functions
 addr                         read the SPC cycle            write to SPB cycle
0080             1   0   0    Bit 15 outputs LRQ condition. Bus copy SD0-SD7 to D0-D7
                                                             (speech chip start addr)
0081             1   0   0    Bit 15 outputs full/          Bit 10=0; copies 5D0-5D9
                              not full fifo flag             onto the STACK
                                                            Bit 10=1; clear FIFO array
0082-00FF        1   0   0    copies D0-D7 to SD0-SD7       copy SD0-SD7 to D0-D7
01FE-0BFF        101 - 011    copies D0-D7 to SD0-SD7       copy SD0-SD7 to D0-D7
                 1   1   1    Tri-state SD0-SD15            accepts no inputs
Remember that the data read or written by the CP1610 could be 16-bits wide. SD0-SD7 refers to the peripheral bus that was unused but available for future expansion. At this time I am still a little unclear how the FIFO contents map into the SP0256's address space, but newly acquired datasheets on the GI serial ROMS should clear this up, I hope.
The SP0256

New Info! - There are documented test modes for the SP0256. This should make it much easier to figure out how it works. See the datasheets for details: Datasheets

The SP0256 contains a 4-bit GI micro, 2K of internal ROM and a 12-pole digital filter. It can be made to speak using its internal ROM data, or using external serial data. This is provided by the SPB640 in the Intellivoice design. (In other applications, it could be provided by a GI serial ROM.)

The internal ROM in the SP0256 used in the Intellivoice was pre-programmed with words and phrases which could be used in all cartridges. One interesting note - The SP0256-AL2 (sold a Radio Shack for a long time), was the same chip programmed with English allophones instead of INTV game phrases!

Instruction Set - Unknown to me at this time. I know it had 16 instructions. I believe these include a single level stack, register immediate loads, and register immediate adds/subtracts. I plan to proceed by sending data which consist of Space Spartans samples which have been altered, to see what I can learn.

Data Format - Unknown to me at this time. These should be based on the addressing modes of the micro, I suppose.

Digital Filter - This is a 12-pole digital filter, consisting of 6 cascaded 2nd order stages. The excitation for the filter was either white noise or a series of impulses at the pitch frequency. I believe this filter is identical to the one in the SP0250 chip. The SP0250 data sheet and applications guide has further details.

The Analog Section

I have traced out the low-pass filter section and regenerated a schematic for this here. It is a fifth-order elliptical filter implememented with GIC's. It was dubbed "the brickwall" for obvious reasons. (>120db attenuation in the stop band) I will be converting it to a digital filter for simulation purposes.

Voice Encoding

This was actually a VERY involved process in the original cartridge development. Cartridge space was critical and so special candidate screening and software processing were done to insure intelligibility and small code space. I'm putting this off until the end.