Monday, December 29, 2014

chipspeech Diary, Part 2

Last summer I spent a good part of my late night research time on Texas Instrument Voice Synthesis Processor (VSP) LPC10 decoding chips. TI made LOTS of these from the late 70s to the late 80s, both for the OEM market and for its own use, under different names. They usually prefixed them TMC or CD for internal use, and TMS for OEM use, but their naming was not always consistent, which leads to lots of confusion.

The goal for chipspeech is to playback LPC10 streams coming from any Texas Instrument device/software and to do so in a sample accurate manner.

We are very close to that goal, but since I found no less than 8 variants of VSPs - all of which had to be accounted for in my emulation core - I'm convinced in fact, that there may be more.

A variant is a unique combination of the following features:

  • Pitch encoding format (5 or 6 bit indexes)
  • Energy ROM look-up table
  • Pitch ROM look-up table
  • K (lattice filter) ROM look-up table
  • Voiced chirp ROM look-up table
  • Variable frame size (TMS5220 rev A and up)
Those are the main characteristics which can quite significantly alter the tonal quality of the output voices. For instance, if you play a stream made for a variant on another variant you could get anything from a slightly unusual nasal quality playing certain words of phonemes, to a completely alien-like version of it, to typical circuit bending whooshes and 'blurps'.

We could have created even more sub categories to account for other observed behaviors, like for instance what happens when an unvoiced (noise) frame is followed by a silence frame (Energy either fades or not). There are probably even more subtle differences especially considering the influence of the various internal interpolation stages 'shifts' depending on the chip - but nothing that you could easily hear I am willing to bet.

The following is a list of VSPs found in devices that we have acquired and dismantled (some of which are incredibly rare). This list is by NO means complete as we do not have infinite resources... nor storage space :).  And I do plan on revisiting this as new discoveries are made.

TMC0280/CD2801 were found in:
  • Language Translator/Language Tutor (same thing)
  • Speak & Math
  • Speak & Read
  • Speak & Spell (UK, that's why the US carts sound funny with it)

TMC0281/TMS5100  were found in:
  • Speak & Spell (US - Buttons)
  • Dictée Magique (French Speak & Spell)
  • Speak & Spell (Japanese - Buttons)
  • Century 'Dazzler' CVS arcade PCB.

TMC0281D/TMS5100A  (Energy table changed from the previous) were found in:
  • Speak & Spell (US - later membrane)
  • Speak & Spell (US - Compact)

TMS5110 (A/C) Found in:
  • Stern/Valadron Bagman PCB
  • Chrysler Electronic Voice Alert
  • Coleco Talking Teacher/K28 Talking Learning Computer (not the Votrax one)

CD2802 Found in:
  • Touch & Tell
  • Vocaid

CD2501E/TMS5200 Found in:
  • TI99/4A Speech Adapter

TMS5220 Found in:
  • IBM PCjr Speech Adapter

TMS5220(A/C) Found in:
  • Magical Wand Speaking Reader (A rev)

How I categorized the variants:

A) Made a full regression test suite of LPC10 streams, each testing a different edge case. I send the streams to the VSPs, record and compared results.

B) Dumped the internal ROM tables of the chips. When idle, VSPs serially output the current values for Energy, Pitch and K's on its PROMOUT pin.  We can thus read the internal values of the internal ROM tables again by crafting custom LPC10 streams where each and every possible values of Energy, Pitch and K entries are set in succession. But we need a different stream for 5 and for 6bit pitch variants, of course!

Logic analyser dumps of ROMCLOCK,T11 and PROMOUT running these streams were then analysed with custom code, then text editor mangled and compared against each other. (Thanks to Lord Nightmare for the explanation of the PROMOUT logic!)

Each TMS51XX/5bit style chip was placed on a Stern Bagman PCB with a customized EPROM @ 9T, offset 0x1032, BIT6 "channel", replacing the French "Aye Aye Aye", (death sound) with the custom LPC stream. Since there are two form factors for those chips (DIP and SDIP), a ZIF adapter was used when needed:

Each TMS52XX/6bit style chips was placed on a custom made protoboard with custom FTDI programs to send the LPC10 stream using the 'Speak External' command

Portions of this research was contributed to MAME/MESS and hopefully will be used for the introduction of the various Speak & Spell drivers that they are working on.

Thursday, September 18, 2014

chipspeech Diary, Part 1

In case you haven't noticed, we take hardware research and emulation very seriously here at Plogue.

-We never take any information for granted, whether its from official datasheets, patents or third party research.

-We always double check and investigate what we do on hardware: creating custom tests suites for each and every chip, sending values and capturing the results digitally.

-We then create models and iteratively refine them as we add new tests, often for virtually every possible edge case there is.

You can imagine that this is a long, VERY long process. We sadly never know when our products will ship because simply knowing how an integrated circuit works in and out does not magically make it a product! (stating the obvious)

We started this project 8 years ago but it really started kicking into speed in the last 3. Back then there wasn't a single 'speech chip' plugin out there(at least I think). And there is now a handful of them, and STILL we are not ready to party with the rest of them.

We hope that this new blog series will help you wait a little bit longer for what we hope will be the one that sets the standard, like chipsounds did.


It all began with gathering, or more like compulsive hoarding of nearly every vintage consumer device that talked. We set our start point to 1975,  the date where the first ever speech synthesizer IC reached the market, the TSI Speech+  up to the dawn of the 90's where essentially everything went boringly intelligible. 

How many devices are we talking about?
Quite a lot actually.

Thursday, September 11, 2014

Plogue livenes

Is a Nintendo Entertainment System "homebrew" application that I've developed in order to improve the emulation of the RP2A03 for chipsounds 2.0, which is currently in development.

It allows you to change the values of the APU's memory mapped registers ($4000 to $4017) using nothing but the Nintendo d-pad.

A side effect is that it can also be used to generate live minimalistic 'music' on a NES by manually toggling a bit at a time, which is of course completely unintuitive!

Changing the pitch value for a specific channel on a musical scale implies changing multiple bits at once, something that is clearly impossible here.

As I like a challenge, I tried to see if I could make something remotely musical out of this incredible restriction set. The following piece was recorded live (not sequenced in any way) on a real NTSC NES:

A)The main DMC 'sample' that starts the piece is actually the application code and graphics being interpreted as Delta Modulation.
B)My NES is stereo mod-ed, so there is a slight touch of post mix and reverb, but that's it.

If you want to try it our for yourself you can download the latest .nes ROM here

Revision history:
1.1 Fixed the wrap around on the lower part of the screen
1.0 Initial version

How can you run this on a real NES and not just in an emulator?

1)Put it on a Powerpak
2)Make yourself a nice UNROM (Mapper 2) dev cartridge out of one of those carts
(mirroring is irrelevant). I won't get into the details of that, but here's what mine now looks like: