# TMS6100

The Texas Instruments TMS6100 Voice Synthesis Memory (VSM) is a 1 or 4-bit serial mask factory-programmed read-only memory IC. It is a companion chip to the TMS5100, CD2802, TMS5110, (rarely) TMS5200, and (rarely) TMS5220 speech synthesizer ICs, and was mask-programmed with LPC data required for a specific product. It holds 128 Kib (16 KiB) of data, and is mask-programmed with a start address for said data on a 16 KiB boundary. It is also mask-programmable whether the /CE line needs to be high or low to activate, and also what the two (or four) 'internal' CE bits need to be set to activate, effectively making the total addressable area 18 bits. Finally, it is mask-programmable whether the bits are read out 1-bit serially or 4 at a time.

## TMS6125

The TMS6125 is a smaller, 32 Kib (4 KiB) version of effectively the same chip, with some minor changes to the 'address load' command format to reflect its smaller size.
Texas Instruments calls both of these serial roms (TMS6100 and TMS6125) "VSM"s (Voice Synthesis Memory) on their datasheets and literature.
Both VSMs use 'local addressing', meaning the chip keeps track of its own address pointer once loaded. Hence every bit in the chip can be sequentially read out, even though internally the chip stores data in 8-bit bytes.
(For the following section, CE stands for "Chip Enable" and is used as a way to enable one specific VSM.)

## Commands

The VSM has supports 4 basic commands, based on two input pins called 'M0' and 'M1':
* no operation/idle: this command tells the chip to 'do nothing' or 'continue doing what was being done before'.
* load address: this command parallel-loads 4 bits from the data bus. to fully load an address, this command must be executed 5 times in sequence, for a load of a 20 bit block (LSB-first 14 bit address, 4 CE bits, and two unused bits, effectively 18 address bits) into the internal address pointer. On the TMS6125 the command must be executed 4 times instead, and only a 16 bit block is loaded (12 address bits, two unused bits, and two CE bits).
* read bit: this reads a single bit at the loaded address, and advances the 3 bit 'bit pointer' to point to the next bit within the address; if the bit pointer overflows, the address pointer is incremented. If the address pointed to on a specific chip is outside of the mask-programmed range of said VSM, the VSM will leave the data bus 'open' in a high impedance state, so another chip wired in parallel (which has the address within its mask-programmed range) can supply the data instead. A rarely used mask option made the read bit command read 4 bits at once; this was used on a few non-speech products, and could not be used with the TI-manufactured LPC speech ICs.
* read and branch: this reads 16 bits of data from the current address(and bit?) pointed to, and loads the value read into the address pointer, leaving the high bits of the address pointer alone. (This was intended for making VSMs with multiple languages available, where the initial load addresses could remain static, so for example they would not require changes to code in a microcontroller, and only the values pointed to in the VSM needed changing. In practice it doesn't seem to have ever been used, as it doesn't work when more than one VSM chip shares a bus, which is what was done in most cases.)

## Part Numbering

When used on Texas Instruments' Consumer Division products, the VSMs are always marked CDxxxxx where xxxxx is a 4 or 5 digit mask rom ID code, typically 23xx or 62xxx. The chips are SOMETIMES (typically after 1981) also marked TMC0350, as this seems to be the 'internal use class' of the chip. The very first VSMs (used in the Speak and Spell, 1978 version) were marked TMC0351 and TMC0352 and did not have a CD number. These two SEEM to have been 'grandfathered in' as CD2300 and CD2301, as all later VSMs start at CD2302 (used in the 'Vowel Power' Speak and Spell expansion cartridge). It should also be noted that CD22xx, CD25xx and CD28xx numbers are used for chips that are NOT VSMs.
When used on Texas Instruments' non-consumer division products (such as generic voice chips for other computers/measurement devices which were still TI-branded) the chips are labeled VMxxxxx.
When used on 3rd party products, the chips are marked CMxxxxx instead. The numbering scheme for the xxxxx part seems to be common between both CDxxxxx and CMxxxxx chips (but NOT VMxxxxx chips), so no chip of either series will have a common xxxxx number.