Home » RBC Forums » General Discussion » General Instrument CTS256A-AL2 vs. Microchip CTS256AL2
General Instrument CTS256A-AL2 vs. Microchip CTS256AL2 [message #10320] |
Fri, 28 April 2023 03:28  |
lynchaj
Messages: 1080 Registered: June 2016
|
Senior Member |
|
|
Hi, I tried this question on retro-comp mailing list but no response. Thought I'd try again here
Is there a difference between the General Instrument CTS256A-AL2 and Microchip CTS256AL2 text-to-speech chips?
As I recall, Microchip purchased General Instrument and continued selling their products relabeled under the Microchip brand.
Something similar happened with Dallas Semiconductor and Microchip. Some of the old DS parts are still available from Microchip.
If there is a difference, can anyone explain what it is? Are they pin compatible? Can they be distinguished in software?
Would like to hear some expert advice on this topic. Thanks, Andrew Lynch
PS, I have the GI CTS256A-AL2 datasheets. These are the parts Radio Shack/Archer used to sell. I think they may have sold the Microchip parts at some point as well but I don't recall. I cannot find datasheets for Microchip CTS256AL2
[Updated on: Tue, 16 April 2024 17:34] Report message to a moderator
|
|
|
Re: General Instruments CTS256A-AL2 vs. Microchip CTS256AL2 [message #10321 is a reply to message #10320] |
Fri, 28 April 2023 13:10   |
jayindallas
Messages: 110 Registered: June 2021
|
Senior Member |
|
|
I'll look into the chips you mentioned this weekend if no one else has resolved it by then.
I bought two such chips at Radio Shack, back in the day:
I have the two bulky RS packages in hand to remind me to do something with the actual chips and documentation.
___________________________________________________
Archer Catalog # 276-1786 $16.95
CTS256A-AL2
Text-To-Speech_Controller Chip
Companion to SPO256-AL2 Voice Synthesizer
___________________________________________________
Archer Catalog # 276-1784 $12.95
SPO256-AL2
Voice Synthesizer IC
Allophone Speech Set
___________________________________________________
My actual chips and documentation were stored separately in some of my boxes the conductive foam to protect the chips. I'll scavenge through my old ICs and see if they survived.
THE CAVEAT IS THAT I DON'T HAVE EITHER CTS DATASHEET YET:
THE QUICK ANSWER IS YES THEY ARE LIKELY THE SAME:
THE LOGIC GOES...
1) The Dec 1986 General Instruments Application Note or 'Ap-Note' was written by Microchip (in the reference links below) reveals that the CTS256A-AL2 is actually a PIC7041 microcontroller, programmed to handshake an ASCII text stream into its buffer, and to convert the data by its algorithm, into a buffered stream for the SPO256A-AL2 to trigger its time-length allophones (human voice sound fragments). The CTS apparently stands for Convert Text to Sound. The PIC7041 is a 2nd source for the Texas Instruments TMS7041. So Microchip likely originated the chip after buying General Instruments, whereas GI tended to use their own processors instead of competitors. Microchip may have seen the CTS as a necessary augment to sell the SPO which they liked enough as a product to invest time and money to develop the CTS algorithm, or more economically purchase it from someone who had created a good algorithm. Maybe GI had an in-house algorithm for one of their processors and Microchip simply converted to a PIC.
2) The same Ap-Note was revised to revision level D, but it describes a problem with the CTS that it did not fix, the Ap-Note simply offers a work-around. Its important to read that Ap-Note to see what the compromise is and how it might affect the performance you'd like to get from the CTS-SPO set.
3) As the Ap-Note only changed the documentation, not the CTS algorithm, its likely that by Dec 1986, Microchip saw the CTS-SPO as a diminishing market and thus didn't see the value in fixing the algorithm. This exhibits that they chose not to change the CTS, which being a PIC7041 all along, was likely never a different General Instruments chip version.
4) This leads to the use of an old brandname temporarily to help existing and potential customers to find the chip in existing references until the new company thinks its time to apply their brandname instead, as it was pointed out in the original message about the CTS. Evidence suggests that possible conclusion is the most likely when augmented by the Ap-Note.
5) As I understand the Ap-Note after reading it yesterday in a distracting environment, the inherent problem is that the handshake into the CTS is somewhat in error, but the bigger problem is part of a non-existent handshake with the SPO. The Ap-Note states that there can be overrun in the SPO buffer, when particularly a numeric character generates an allophone of more syllables. And as an ASCII character can be sent quickly, it can outpace the time-length 'sound' of multiple allophones. The Ap-Note suggested this was something that was not well planned for in the CTS handshakes and thus slowing down the baud rates and not overloading buffers would be the work-around. I want to read that Ap-Note further to better confirm this initial impression.
6) As I said, I don't have a CTS datasheet yet... I may find one while looking through my boxes of chips. I tried to find the CTS mentioned in the annual databooks but the doesn't appear in the 1980 databook (but the AY-3-8910 and AY-3-8912 appeared, not the AY-3-8913).
6.A) In the 1982 databook, the SPO250 example schematics shows a PIC1655A to serve as CTS-type function and leaves it to customers to choose a microcontroller and develop an algorithm. Specifying a PIC processor in the 1982 databook suggests a relationship with Microchip, though I don't know the date of the acquisition.
6.B) The SPO256A-AL2 is mentioned on page 5-9 of the 1982 databook but refers the reader to an "Allophone Speech Synthesis Manual" for any information. Note too, that while the SPO250 required a PIC1655A and the CTS256A-AL2 used a PIC7041, it may be that the CTS was too new to make the printing deadline of the 1982 databook, and hence another augment document was created (the "Allophone Speech Synthesis Manual").
7) Its possible that Radio Shack got the right to sell some of the CTS/SPO256A-AL2 around 1984 (reference the Radio Shack datasheet in the link references), because Microchip saw it as a declining market, as Texas Instruments ('TI') was developing an alternate sound chip technology that was from real voices and compressed for playback. I used the TI voice chip set in a line of Radio Shack/Tandy wireless phones and answering machines I did the digital design and firmware on in the around 1986 to 1989; I think I even used the TI TMS7000 series microcontroller (used in the CTS) because it consumed the lowest power consumption on batteries, giving it longer use between charging, despite Motorola's bold and wrong claim that their micros were the best at low power consumption. I might dig up the schematics and firmware and compare the circuit complexity to that to the GI/Microchip's sound system. As I said, the voice quality was superb in TI's technology. I even took my wordlist for the narrators and figured out how to re-use some of the words to create a voice menu in it. I probably have a few of those chips in my ancient collection.
Some reference datasheets etc:
https://bitsavers.org/components/gi/speech/
Index of /components/gi/speech
Size * Name * Last modified
3.4M General_Instrument_-_AN-0505D_-_CTS256A-AL2_Code-to-Speech_Chipset_-_10Dec1986.pdf 2009-08-02
1.3M General_Instrument_-_SP0250_Applications_Manual_-_Jun1982.pdf 2009-08-02
15M General_Instrument_-_SP0256A-AL2_datasheet_(Radio_Shack_276-1784)_-_Apr1984.pdf 2014-05-26
681K General_Instrument_SP0250_Speech_Synthesizer_preliminary_datasheet.pdf 2009-08-02
4.5M SP-0256_Design_Spec_198111.pdf 2022-07-01
294K SP-0256_Instruction_Set.pdf 2022-07-01
https://bitsavers.org/components/gi/_dataBooks/
Index of /components/gi/_dataBooks
Size * Name * Last modified
35M 1982_GI_Microelectronics_Data_Catalog.pdf 2010-11-15
FUN WITH A GENERAL INSTRUMENTS AY-3-8910
I have a fond interest in General Instruments because I had a lot of fun playing around with their AY-3-8910 back in 1979. I wire-wrapped the example S-100 card for the programmable sound generator (PSG) and added it to my sparse Cromemco Z2 with a Miniterm Assoc. MERLIN video board. I experimented with the PSG through the Merlin monitor and then hand assembled Z80 code and saved it to my North Star floppy. I still have the Cromemco Z2 and the S-100 board, but after 44 years it would be wiser and faster to make a new pcb for it rather than restore a wirewrap version.
I experimented with all the sound-effects, programmed a crude keyboard version of a piano that no one could play... DUH, and eventually I figured out how to decode sheet music and coded the Beatles music, "Norwegian Wood."
Its all magnetic flux on some North Star diskettes I have not imaged. But I now have the beginnings of a dedicated "engineering lab" at a bigger house, so I might be able to recover those files.
[Updated on: Thu, 25 May 2023 09:41] Report message to a moderator
|
|
|
|
|
Re: github project may have extracted the CTS256A-AL2 code [message #10336 is a reply to message #10321] |
Sat, 06 May 2023 20:45   |
jayindallas
Messages: 110 Registered: June 2021
|
Senior Member |
|
|
scruss wrote: "...Neither. It uses the public domain algorithm developed by the US Naval Laboratories..."
Yeah, I saw that yesterday as I was digging for some CTS & SPO datasheets which I now have some.
lynchaj wrote: "...CTS256A is really just a programmed PIC7041...has anyone been able to use the algorithm to make their own CTS256A by programming[/i]..."
Yesterday I ran across a github link where it appeared that someone simply read the code out of the PIC7041.
I think this is the link:
https://github.com/GmEsoft/CTS256A-AL2
I don't know how he accessed the code but this suggests he was able to get it:
CTS256A.ASM Disassembled and commented source of the ROM contained in the PIC7040 Microcontroller
CTS256A.PRN Raw disassembly listing of the ROM contained in the PIC7040 Microcontroller
CTS256A.BIN Binary image of the ROM
[Updated on: Thu, 02 May 2024 10:16] Report message to a moderator
|
|
|
|
Re: Programming the Naval algorithm as a CTSx for PIC/TMS7000 or otherwise [message #10338 is a reply to message #10336] |
Sun, 07 May 2023 16:26   |
jayindallas
Messages: 110 Registered: June 2021
|
Senior Member |
|
|
lynchaj wrote: "...CTS256A is really just a programmed PIC7041...has anyone been able to use the algorithm to make their own CTS256A by programming..."
I wouldn't choose to do this in a TMS7000 or a PIC7000 series micro. I had a TI TMS7000 Series, in-circuit emulator on my desk in 1999 when I left for Grad-School, and I wouldn't expect it to still be there in Tandy Center Tower II, which has been renamed, at least.
The only advantage is that the circuit could be used as drawn in the Radio Shack datasheets. Personally, that wouldn't be enough advantage to avoid using a modern micro with Today's power. But anyone can choose what they prefer if they're going to be spending their time doing it.
About coding it to fix the Ap-Note about the CTS256A-AL2...
If you were to implement the naval algorithm on a modern microcontroller, you could remove the trouble with the incomplete allophones (not having enough time to make all the sounds sent to the SPO) by adding a lookup table for each allophone with a figure for how long it takes to sound it out, plus a little 'e' value to make sure its always got a little more time than necessary (a buffer overrun avoidance method). Lookup tables are very fast and efficient in software.
For example, if you have 314 allophones and timed pauses between sounds, then the conversion can be coded to result in a table or array index from 0 to 313. As an example, in an array, if you want to know the duration+'e' value for allophone #75, you just take the value from array Duration[75]. No logic or decision tree is required to find the value. Likewise you can encode the allophone string as another array using the same index, 75. You would take a long string and have the index to the start of one allophone string in array Start[75] and the length of the allophone string in array Length[75]... as an example.
You could also speed up the text to allophone algorithm by using a binary tree construct restructured into an array, that uses no pointers to make it real fast. With a root node's index=1 or tree[1], its left link is the root nodes index=1*2=2 or tree[2] and its right link is the root nodes index=1*2+1=3 or tree[3]. At any node in this binary tree constructed as an array, any node's left link is at the node's index*2 or tree[index*2] and its right link is at the node's index*2+1 or tree[index*2+1]
That's a complex structure to explain, but I've used it in many realtime microcontroller calculations. I usually construct such data in spreadsheets and then write a formula cell to convert the spreadsheet data it into a format that the assembler needs for tables.
That's basically how to do micro emulator... use the opcode bytes as index into data structures and you never write any conditional code that gets longer and longer and have to be debugged. Maybe a topic for another day. Its a powerful tool for anyone's microcoding 'toolkit'.
But the basic code for a CTSx would be:
Method 1:
In this lesser case the CTSx doesn't buffer allophones, just sends one to the SPO256, lookup up how long that should take and adds it to the rolling timer, so it knows when it is done and can then send the next allophone. It can send the allophone and do the next conversion, hopefully before the next-send-timer has expired (this method's weakness).
Everytime CTSx identifies an allophone to send to the SPO256, it lookup its duration+'e' value and addd it to the rolling timer; resulting in the time to send the NEXT allophone that hasn't been converted yet. After the allophone is sent to the SPO256 and BEFORE the SPO hass completed sounding it out, the CTSx starts the conversion to designate the next allophone. Hopefully that conversion is done before the SPO256 allophone is finished.
Method 2:
The improves the SPO256 stream of allophones (and any pauses in between the sounds) because it lets the CTSx do several allophone conversions at a time and loads them into a new CTSx ram buffer that will accumulate the next batch of allophones to be sent to the SPO256. It accumulates the initial timer value and adds with buffered allophone's duration+'e' so it can set an interrupt to load the next batch of allophones just as the SPO256 finishes its previous buffer.
Method 1&2 are a teaching construct, not really two alternatives. Method 1 is for basic understanding of the duration+'e' construct. Method 2 makes it better by doing batches of allophones and holding them in the CTSx ram buffer until the SPO256 is scheduled to the finished sounding the previous batch.
Thus Method 2 is really the proper way to program it.
And on last note:
And then I have to add that the Start[75] and Length[75] examples can be made more efficient by combining allophone strings where one allophone is a sub-string of another allophone string.
Example: Without trying to be true to actual allophone values, this crude example would have allophone index 75 as the string "SP" and allophone index 130 as the string "SPR".
Using that "SP" can overlay "SPR"... then the Start[75] and Start[130] could point to the same starting character "S" in the string because "SP" is a sub-string of "SPR". It follow in this example that Length[75]=2 and Length[130]=3.
The trick is taking all the strings and reducing it to the minimum total length of all strings with as many as possible in substrings. This is also a useful construct in assembler and disassembler code.
[Updated on: Thu, 02 May 2024 10:19] Report message to a moderator
|
|
|
|
Re: Is the PIC/TMS7041 field programmable? [message #10340 is a reply to message #10339] |
Mon, 08 May 2023 08:25   |
jayindallas
Messages: 110 Registered: June 2021
|
Senior Member |
|
|
lynchaj wrote: "...Is the PIC7041/TMS7041 field programmable?..."
My TMS 7000 Series design projects were 7042-based processor, not the 7041.
The TMS7000 had two EPROM prototyping constructs:
A) EProm window,
B) EProm piggyback (28 pin socket into ceramic)
I still have these TMS7000 Series Items:
ITEM-1 :: "TMS7000 Family Data Manual" | publication ID "SND001B" | version "June 1986, Revision B"
ITEM-2 :: "TMS7000 Programmer's Pocket Reference" | publication ID "SPNF002A"
ITEM-3 :: EProm window: " SE77C42JDL | LBW 8814 | 1986 TI | 7436014 Japan "
ITEM-4 :: EProm piggyback: " SE70CP160J | MSA71000 Japan "
In ITEM-1, the TMS7041 is referenced in the appendix in section C.2 page C-3. It lists that EProm piggyback pinout (TMS and EPROM socket) and lists the part as a "SE70P161." There are 6 pages that describe the TMS7041; I'll scan them and attach a zip file of images this evening.
lynchaj wrote: "...it is unclear to me if the ROM is programmable or not. OTP makes the most sense..."
I'll read ITEM-1 and ITEM-2 Today and see if I can answer that definitively; at least in regard to the TMS series, the internal ROM was masked ROM.
--------------------------------------------------
More documents are available at the directory link below:
https://bitsavers.org/components/ti/TMS7000/
Index of /components/ti/TMS7000
Name____________________________________________________________________ Last_modified___
brochure/ 2024-03-24 07:29
datasheet/ 2024-03-24 07:47
evm/ 2024-03-24 07:33
xds22/ 2024-03-24 07:29
SPND001A_TMS7000_Family_Data_Manual_1983.pdf 2021-07-31 15:30
SPND001B_TMS7000_Family_Data_Manual_1986.pdf 2024-03-24 08:02
SPND001C_TMS7000_Family_Data_Manual_1989.pdf 2017-08-04 13:50
SPNF002A_TMS7000_Pocket_Reference_198402.pdf 2024-03-24 07:48
SPNU002B_TMS7000_Assembly_Language_Programmers_Guide_198407.pdf 2024-03-24 07:28
TMS7000_Family_Microarchitecture_-_Nov_1982.pdf 2009-07-16 16:49
TMS7742_to_TMS77C82_Conversion.pdf 2024-03-24 07:48
TMS77C01_PIT_Users_Manual_198408.pdf 2024-03-24 07:28
TMS77C82_EPROM_Erratum.pdf 2024-03-24 07:28
Index of /components/ti/TMS7000/brochure
Name____________________________________________________________________ Last_modified___
CMF134_TMS7K_Brochure_1988.pdf 2024-03-24 07:29
MPL_54_TMS7K_Brochure_1983.pdf 2024-03-24 07:29
Index of /components/ti/TMS7000/datasheet
Name____________________________________________________________________ Last_modified___
TMS7742_198511.pdf 2024-03-24 07:29
TMS7742JD_198512.pdf 2024-03-24 07:29
TMS77C82_198802.pdf 2024-03-24 07:47
Index of /components/ti/TMS7000/evm
Name____________________________________________________________________ Last_modified___
electrickery.nl/ 2024-03-24 07:28
EvaluationModuleROMs.zip 2024-03-24 07:28
RTC-EMV7000C_Schematic.pdf 2024-03-24 07:28
SPNU007_TMS7000_Evaluation_Module_Users_Guide_1986.pdf 2024-03-24 07:28
Index of /components/ti/TMS7000/xds22
Name____________________________________________________________________ Last_modified___
SPDU017_XDS_22_Installation_And_Operation_Guide_198310.pdf 2024-03-24 07:29
SPDU019_XDS_Breakpoint_Trace_Installation_And_Operation_Guide_198310.pdf 2024-03-24 07:29
SPDU020_XDS_TMS7000_Emulator_Hardware_198403.pdf 2024-03-24 07:29
Direct-Link, Texas Instruments TMS7000 Series Files on bitsavers.org are:
SPND001A_TMS7000_Family_Data_Manual_1983.pdf
SPND001B_TMS7000_Family_Data_Manual_1986.pdf
SPND001C_TMS7000_Family_Data_Manual_1989.pdf
TMS7000_Family_Microarchitecture_-_Nov_1982.pdf
SPNU002B_TMS7000_Assembly_Language_Programmers_Guide_198407. pdf
[Updated on: Thu, 02 May 2024 10:26] Report message to a moderator
|
|
|
|
Re: No source of new-old CTS256A-AL2 economical micro solutions [message #10342 is a reply to message #10341] |
Mon, 08 May 2023 16:37   |
jayindallas
Messages: 110 Registered: June 2021
|
Senior Member |
|
|
For me, I think the way to go is to replace the CTS256A-AL2 with a RPi Zero W running the CTS code equivalent and fabricate a PCB to plug into any RPi header, for a SP0256 to generate synthesized voice. You could offer a speaker circuit or better yet, use Bluetooth to transmit it to a particular soundbar. With a WIFI-SSH link, other WIFI-enabled devices can send it text-to-voice messages. Its cheap, you can repurpose the RPi Zero for a temporary project.
Its such a good idea, I might do something similar with my General Instrument AY-3-8910 Programmable Sound Generator. No such text-to-sound-effect equivalence but an incoming sound effect request would be easy.
[Updated on: Thu, 02 May 2024 10:50] Report message to a moderator
|
|
|
|
|
Re: No source of new-old CTS256A-AL2 economical micro solutions [message #10352 is a reply to message #10351] |
Sun, 14 May 2023 22:19   |
jayindallas
Messages: 110 Registered: June 2021
|
Senior Member |
|
|
scruss wrote: "...The Raspberry Pi Pico is kinda 5 V tolerant: you won't kill it if you feed it a TTL pulse, but go much over 5 V and you'll toast it..."
Yes, you can damage a RPi Pico with 5Vdc or 12Vdc if that is what you want to do. But interfacing the Pico to the 5Vdc TTL system is the correct design.
lynchaj wrote: "...it is unclear to me if the ROM is programmable or not. OTP makes the most sense..."
lynchaj wrote: "...it does suggest if one were to obtain an SE70P161, it could be programmed to emulate a CTS256A-AL2. Probably cheaper and easier to pay the highway robbery prices on eBay for the genuine article CTS256A-AL2..." THIS IS TRUE
jayindallas wrote: "...I think the way to go is... to buy and program a Raspberry Pi PICO Wireless...to interface with an old SPO256A-AL2...."
lynchaj wrote: "...Although certainly a challenging design, I don't think it is beyond possibility...a Commodore VIC II replacement chip...I think its of comparable sophistication..." THIS IS TRUE
scruss wrote: "...The RC2040 CP/M emulator on a Raspberry Pi Pico fakes a SPO256-AL2..."
AJ Lynch referenced that project as a comparable complexity to making new-improved CTS256A-AL2s (aka 'CTS+') if an OTP PIC7041 version or a TMS77SE70P161 were obtainable in some volume and reasonably priced.
However, I know that the TMS7041s in circa '86-'88 were masked Rom, not OTP. Whether the PIC was made as an OTP at some point, I wouldn't know.
The SE70P161 (TMS7041 with a eprom window), could be used to develop the CTS+ code, and if the chips were available in quantity, they could replace an new-old CTS256A-AL2, as lynchaj suggested. But SE70P161 are likely to be even more rare than the original CTS256A-AL2 chips, lynchaj noted. Algorithm data-structure conversion and CTS+ development could be done using a SE70P161 but each code change would require time erasing the eprom and programming it again; not a more convenient, in-circuit-programming, quick turn-around.
I just happen to have one of each in the 7042 eprom versions. The SE70P162 piggyback device and the TMS7742 windowed EPROM device.
TMS70x1 and TMS70x2 Compatibility:
The [blue]1986 TMS7000 Family Data Manual[/b] describes the TMS70x1 devices (TMS7001,TMS7041,SE70P161) in Appendix C. It notes that the SE70P161, the piggyback EProm package uses '2764 and '27128 EProms. But it recommends using the TMS70x2 devices for new designs (new as in 1986).
It states: The TMS70x1 devices are not recommended for new designs. For designs that require an on-chip UART, we recommend using the enhanced features and performance of the TMS70x2, TMS70Cx2, or the TMS7742 EProm devices.[/b]
The TMS70x2 asynchronous serial port runs twice as fast as the TMS70x1; that may require changing the initialization code to make the TMS70x2 UART to run at the slower speed of the TMS70x1.
The TMS70x2 devices have the same pinout as the TMS70x1 devices.
List of Old chips that could be used for a new CTS+
Forget all the masked rom chips, only the EProm chips are feasible to make a CTS+.
From the TMS70x1 series:
(1) SE70P161 piggyback device, there was no windowed EPRom device.
From the TMS70x2 series:
(1) SE70P162 piggyback device,
(2) TMS7742 windowed EPROM device {5Mhz, 4K EProm, 256 bytes ram} For OTP-like applications or code development.
From the TMS70Cx2 series: (CMOS)
(1) SE70CP162 piggyback device,
(2) TMS77C82* windowed EPROM device {7.5Mhz, 8K EProm, 256 bytes ram} For OTP-like applications or code development.
* Note that this was listed as an Advance Information Product in 1986,
PROJECT RISK:
Compared to all that unknown dealing with a TMS7000 series, it would be a lot easier to simply make a RPi PICO board, to replace the Microchip/GI CTS256A-AL2 chip, that could interfaced with the SPO256A-AL2. I've got about six PICO board, half are wireless. Could it be put on a 40 pin DIP socket plug-in? Maybe, it would likely require a two-pcb stack sized maybe wider than a CTS256A-AL2 or higher above the motherboard.
However, I think this project has a small market of few people that have the right chips in their collection. Fixing the Ap-Note issue seems to be easy as I described a few messages ago. But I'm not sure its worth the trouble.
The process:
(1) The Naval algorithm and/or CTS code would have to be read and analyzed.
(2) That foundation would be re-written into a data structure and code, so it would compute more quickly and perhaps reduce power while idle.
(3) The data structure would also require each allophone duration + 'e' timing, that would be measured or calculated.
(4) Code development would be extended by the Erase-EProm-Program-Eprom cycle; if more SE70P161s were available, the erase time would be reduced by having a batch of pre-erased SE70P161s waiting.
Doing all that in the old obtuse TMS7000 series would be tedious... a RPi solution would be faster and easier... because it uses modern code and software tools and has fast in-system program updates.
It might even be faster developing the algorithm, data structure and SPO handshake FIRST with a RPi Pico and then take the proven code and hand-cross assemble it into the TMS7000 series ASM. That would drastically reduce the time working with the obtuse SE70P161.
[Updated on: Thu, 02 May 2024 11:11] Report message to a moderator
|
|
|
|
|
|
CHAPTER 01 :: "Introduction to Hardware Emulation of the 7000 Series" [message #10366 is a reply to message #10365] |
Sun, 21 May 2023 11:08   |
jayindallas
Messages: 110 Registered: June 2021
|
Senior Member |
|
|
All copyrights are reserved by the author
Updated January 25th, 2024
CHAPTER 01 :: Introduction to Hardware Emulation of the 7000 Series
General Overview
This document is about creating a modern 'hardware-emulation' of the 7000 Series microprocessor that can function as an in-circuit replacement. It would be designed as surface-mount printed circuit board assembly, constructed atop a 40 pin DIP socket, so it can be inserted into vintage or modern circuitry, designed for a 7000 Series microprocessor. It would consist of a modern MPU, with additional I/O expansion to operate at interface electrical characteristics and timing of the 7000 Series microprocessor. It would effectively be a viable 7000 Series in-circuit replacement for vintage electronic hobbyists.
The MPU would emulate these 7000 Series operational aspects:
(1) the operation of the microprocessor,
(2) the execution of its firmware,
(3) the timing of all socket pin signal activity and
(4) the intended clock rate*.
* The MPU would offer some configuration options within and beyond the capability of the original microprocessor versions.
The MPU code would take advantage of the speed and resources of a modern MPU, being written mostly in a high level language for faster development and testing, and where appropriate, written in the MPU's native assembly language.
Origin of this Project
The topic originated during a discussion about two voice synthesis chips sold by Radio Shack in the mid-1980s: the General Instruments CTS256A-AL2 "Text-To-Speech Controller IC" and its associated SPO256A-AL2 "Voice Synthesizer IC."
A little research uncovered that the former text-to-speech processor is actually a PIC-7041 microprocessor with internal text-to-speech firmware for controlling the associated General Instruments SPO256A-AL2 chip. The PIC was a second-source provider of the Texas Instruments TMS 7000 Series microprocessor. Herein, it will only be referred to as the "the processor" or "7000 Series" or "7000 Series microprocessor".
Today, the General Instruments CTS256A-AL2 and SPO256A-AL2 are rarely available on auction sites and arguably over-priced when they do appear. So the two natural questions arose:
" (1). Can a modern MPU hardware-emulate the CTS256A-AL2 in real-time, within a 40 pin DIP package profile? "
" (2). Can it run the original CTS256A-AL2 firmware in real-time? "
The answer to part (1) is... YES, the hardware-emulation can be done.
However, the answer to part (2) is... CONDITIONAL, depending upon the firmware used.
If the firmware is available or accessible, then the answer to part (2) is... YES it can run the original CTS256A-AL2 firmware inside the real-time emulation.
If the firmware is neither available nor accessible, then the answer to part (2) is... NO, it cannot run the original CTS256A-AL2 firmware.
However, it could run newly created 7000 Series firmware.
In either case of running specifically the General Instruments CTS256A-AL2 "Text-To-Speech Controller IC" firmware, a selectable second version should be created to include a fix for the interface problem described in the 'Ap-Note'. Any new firmware written in TMS 7000 Series assembly language to emulate the CTS256A-AL2, will need to be validated by beta-testers.
Intended Project Systems
There are currently three target systems for developing the emulator code easily:
Stage 1
A Linux system for its initial code development and possibly later testing. Coupled with a breadboard interface, it could validate the hardware interface before printed circuit board layout.
A Raspberry Pi board has ample resources and speed for Stage 1. However, it is not useful as a real-time microprocessor due to its background OS tasks stealing processor time... unless one core can be reserved for the real-time 7000 Series signal emulation. Reasonable real-time validation could be attainable with a digital scope, but it will be easier to do these validations in the next stage.
Stage 2
A combination of a small MPU board, additional IO expansion and a 40 pin socket. This can be used for development and testing of all aspects of emulation. It borrows some of the code development from Stage 1 and adds IO expansion and pin electrical characteristic and timing emulation. Together, this assembly can function to develop an in-circuit replacement emulator of a 7000 Series microprocessor.
A Raspberry Pi 'Pico' MPU is the most cost effective choice.
Stage 3
A final design to further reduce the circuit profile and allow a more advantageous MPU and programmable logic to replace the development MPU of Stage 2. Adding a portal to external communications for configuration could be included.
Schedule for More Chapter Uploads
I've listed my plan for additional chapters below. Each should take an additional two weeks to write, *once* I schedule them as an active task. Though this is specifically focused on the 7000 Series, these chapters should be useful for other microprocessors emulation projects and may be helpful for emulating some LSI chips.
However, LSI chips can be more challenging in regard to signal timing because they may be implemented in digital logic circuitry rather than real-time firmware. However, two of the Western Digital WD 10xx series chips used on my circa '83 "Versa-Floppy-Winchester III" IEEE-696 S-100 card for SD SYSTEMS aka SYNTECH DATA SYSTEMS... were actually 8051 chips! One did ECC and the other did RAM buffering, if I recall. So not all LSI is custom logic circuitry, just like the General Instruments CTS256A-AL2 being a PIC 7041 microcontroller rather than a LSI custom digital logic chip.
PART 1 :: Getting the Foundation or 'Big Picture' First:
CHAPTER 02 :: Basic Emulation - Processor Operations
CHAPTER 03 :: Basic Emulation - Execution of Firmware
CHAPTER 04 :: Basic Emulation - Pin Characteristics & Timing
PART 2 :: Advantages for Coding Smarter and Faster:
CHAPTER 05 :: Processor Emulation - Machine Code to Instruction( )
CHAPTER 06 :: Processor Emulation - Advantageous C++ Constructs
CHAPTER 07 :: Processor Emulation - Advantageous Data Structures
PART 3 :: Advance Directly to Efficient Constructs:
CHAPTER 08 :: Advanced - Build Data Structures in Spreadsheets
CHAPTER 09 :: Advanced - Processor Operations and Firmware
CHAPTER 10 :: Advanced - Pin Timing and Emulation Clock
CHAPTER 11 :: Advanced - Testing Firmware Execution
PART 4 :: 2001: A CodeSpace Odyssey:
CHAPTER 12 :: Imagination Unleashed - Adding Virtual Features
CHAPTER 13 :: Adding Virtual (confidential until posted)
CHAPTER 14 :: Adding Virtual (confidential until posted)
CHAPTER 15 :: Adding Virtual (confidential until posted)
CHAPTER 16 :: Adding Virtual (confidential until posted)
One of my active projects is hardware-emulating a vintage Z80 CPU. I hope to turn that project into variants of other vintage CPUs. I decided to keep that work more confidential to limit 'leap-frogging' off my revealed ideas; that's just the international state of electronics.
Series 7000 Downloads
Below will be the download files for useful information on the 7000 Series.
Texas Instruments TMS7000 Series Files on bitsavers.org are:
1982 TI TMS7000 Family Microarchitecture.pdf 2009-07-16 16:49 4.8M
1983 TI TMS7000 Family Data Manual.pdf 2021-07-31 15:30 10M
1986 TI TMS7000 Family Data Manual.pdf 2004-02-01 00:19 20M
1989 TI TMS7000 Family Data Manual.pdf 2017-08-04 13:50 32M
[Updated on: Thu, 25 January 2024 21:50] Report message to a moderator
|
|
|
|
|
|
7000 Series Unobtainium may be OBTAINium? [message #10645 is a reply to message #10641] |
Sun, 31 March 2024 11:50   |
jayindallas
Messages: 110 Registered: June 2021
|
Senior Member |
|
|
I did a further search on your LINK and found some available OTP TMS77C82 both 40-DIP and a PQCC
There are:
. TMS7000
. TMS70C00 - This is odd, CMOS was later stage, looks like they went back to 7000 in CMOS for big market?
. TMS7001
. TMS70C02 -2 parts have the twice as fast serial port than the 7001
. . . . These have the best pricing, $4 qty 1, $2 qty 4-ish
. . . . This would be external EPROM which fits you suggestion.
. . . . You'd need to compare the CTS pins to the external EPROM pins to see if ports assignments change the code.
. TMS77C82 -82 also has 8K of OTP EPROM!!! (it was just advanced info in my 1986 TMS7000 Manual.
. . . . STOCK: TMS77C82FNL (PQCC-44)
. . . . STOCK: TMS77C82NL (PDIC-40)
. . . . Prices are not shown.
Also note that some of the part descriptions say 3Mhz, I'm not sure that's very accurate. My manual said the 77C82 were going to be 7.5Mhz.
OTP 8K Eprom is probably expensive, (low stock too) but there may be Eprom Burn control 'hacks' to make OTP work for several versions (i.e. development version). Its based on a trick to burn bits that were unburned in an earlier version, to change block addresses for jumps or vector tables. A confusing methodology that difficult to explain, until after you identify a procedure that works; that bounds to possibilities and thus makes it simpler to explain. :)
I'll include my text file below, created as I searched that site for TMS 7000 Series part numbers.
I am unfamilar with the Second-Source MicroChip part number prefixes... you might try them and find even more parts available.
THIS IS MY TEXT FILE OF SEARCHES. I DIDN'T BOTHER CONDENSING NOR ORGANIZING IT.
There are repetition and errors. I'll probably edit it when I have more time.
---------------------------------------------------------------
7000:
https://www.findchips.com/search/TMS7000
(STOCK AVAILABLE)
TMS7000NL-2 by: Texas Instruments
IC,MICROCONTROLLER,8-BIT,TMS7000 CPU,MOS,DIP,40PIN,PLASTIC
https://www.findchips.com/detail/tms7000nl-2/Texas-Instruments
---------------------------------------------------------------
70C00:
https://www.findchips.com/search/TMS70C00
TMS70C00NL by: Texas Instruments
IC,MICROCONTROLLER,8-BIT,TMS7000 CPU,CMOS,DIP,40PIN,PLASTIC
https://www.findchips.com/detail/tms70c00nl/Texas-Instruments
---------------------------------------------------------------
7001:
https://www.findchips.com/detail/tms7001
(STOCK AVAILABLE)
TMS7001NL-2 by: Texas Instruments
IC,MICROCONTROLLER,8-BIT,TMS7000 CPU,MOS,DIP,40PIN,PLASTIC
https://www.findchips.com/detail/tms7001nl-2/Texas-Instrument
(NO STOCK)
TMS7001N2L-2 by: Texas Instruments
IC,MICROCONTROLLER,8-BIT,TMS7000 CPU,MOS,SDIP,40PIN,PLASTIC
https://www.findchips.com/detail/tms7001n2l-2
---------------------------------------------------------------
SEARCH "tms70c"
---------------
STOCK: TMS70C02FNLR MMP CMOS PLCC 44 PIN
https://www.findchips.com/detail/tms70c02fnlr/Texas-Instruments
STOCK: TMS70C02NA 3MHz, M.CONTROLLER, PDIP40
https://www.findchips.com/detail/tms70c02na/Texas-Instruments
STOCK: TMS70C02NL 3 MHz, M.CONTROLLER, PDIP40
https://www.findchips.com/detail/tms70c02nl/Texas-Instruments
STOCK: TMS70C00NL M.CONTROLLER,TMS7000 PDIP40
https://www.findchips.com/detail/tms70c00nl/Texas-Instruments
STOCK: TMS70C00ANL 3MHz, M.CONTROLLER, PDIP40
https://www.findchips.com/detail/tms70c00anl/Texas-Instruments
STOCK: TMS70C02FNL 3MHz, M.CONTROLLER, PQCC44
https://www.findchips.com/detail/tms70c02fnl/Texas-Instruments
---------------------------------------------------------------
SEARCH "tms77c"
---------------
STOCK: TMS77C82FNL OTP-PROM, M.CONTROLLER, PQCC44
https://www.findchips.com/detail/tms77c82fnl/Texas-Instruments
NONE: TMS77C82NA by: Texas Instruments 8-BIT, OTPROM, 3MHz, MICROCONTROLLER, PDIP40
https://www.findchips.com/detail/tms77c82na/Texas-Instruments
---------------------------------------------------------------
SEARCH "tms700"
---------------
STOCK: TMS7001NL-2 TMS7001, PDIP40
https://www.findchips.com/detail/tms7001nl-2/Texas-Instruments
NONE: TMS7001N2L-2 TMS7001, SDIP40
https://www.findchips.com/detail/tms7001n2l-2/Texas-Instruments
---------------------------------------------------------------
[Updated on: Thu, 04 April 2024 11:13] Report message to a moderator
|
|
|
Re: General Instruments CTS256A-AL2 vs. Microchip CTS256AL2 [message #10646 is a reply to message #10645] |
Sun, 31 March 2024 17:38   |
lynchaj
Messages: 1080 Registered: June 2016
|
Senior Member |
|
|
Hi Jay
There are many parts in the TMS7xxx family. The CTS256 is a repackaged TMS7041 so a replacement has to include a serial port and that eliminates a bunch of parts like TMS7000, TMS7020, TMS7040, etc. won't work. Also, they need to come in DIP-40. Several devices come in PLCC-44 and those won't be useful without an additional adapter.
However, there are still at least 10 TMS7xxx models I've identified as likely to work. It appears all the DIP-40 parts have the same pinout which is really great. Any part ending with a 1 or 2 available in DIP-40 should work regardless if it has internal ROM or not. By strapping the MODE pin high, it places the TMS7xxx in "microprocessor mode" and forces all external ROM access. The internal registers and memory are still accessible.
I am thinking even if the TMS7xxx part had mask ROM or was burned with OTP ROM, using the MODE pin causes this to be ignored so that might make for some really inexpensive used parts. Just completely disregard the internal ROM whether it is empty or programmed with something else and use the CTS256 firmware in an external 2732.
The TMS7xxx is very much like the Intel 8051 chip set, and it appears there is an almost one-for-one features and models. For instance, the TMS7001 is a close analog of the i8031. Even the coding is analogous and the peripheral and register file are similar. Considering the 8051 and TMS7041 were contemporaries in the late 1970's/early 1980's it is not surprising they are so closely matched.
There are 5 NMOS models and 5 CMOS models I've identified so far as good candidates:
NMOS:
PIC7001
PIC7041
TMS7001
TMS7041
TMS7742
CMOS:
TMS70C01
TMS70C41
TMS70C02
TMS70C42
TMS77C82
There are likely even more out there I just haven't found yet.
I am guessing you could probably even reuse the TMS7000 parts in a parallel input only mode since the serial port doesn't exist. There were some speech synthesizers that used the PC parallel port back in the 1980's. However, most of the hobbyist text-to-speech designs I've seen use the serial port since real parallel ports are hard to come by these days.
My test board is basically done, and I am itching to give this a try. I can order 5 PCBs from JLCPCB and test out this theory. I sure hope it works. If it does, it is a game changer for CTS256 hobbyists. No more dependence on eBay extortion brokers. We'll be digging through the bargain basement trash bin looking for useable processors that can be repurposed as CTS256 clones.
I have ordered some TMS7001NL-4 chips which claim to be 10MHz capable. However, the TMS7xxx has clock doubling AND clock quadrupling options. So it is hard to tell exactly what the CTS256 is doing. Going to need to evaluate what speeds are actually required. If the CTS256 is clock doubling, then the 5MHz parts (TMS7001NL-4) will work and if it is clock quadrupling then the 2.5 MHz parts (TMS7001NL-2) will work. Going to have to run some test and/or examine the CTS256 firmware source listing to see if there are any clues as to what they are doing with the input 10MHz clock.
My guess is that Archer/Radio Shack negotiated to buy in bulk with GI back in the day to use their low end components. If so, then the CTS256 is actually a 2-3 MHz part using clock quadrupling. But that's just a guess. For commercial sales, I would think Archer/Radio Shack would use the cheapest, slowest parts they could get away with to get the best margins on sales. I think that would preclude top-end, faster parts. Plus, I am not seeing anything about the Naval speech algorithm that is speed intensive.
I guess we'll find out though. To be safe, I am starting with the TMS7001NL-4 parts and to get proof of life. It is functions OK, then press down on speed ratings until they stop working.
Best of luck and thanks for doing the research! Andrew Lynch
PS, these look promising https://www.aliexpress.us/item/3256805865105091.html
TMS77C82 in DIP40 for less than $3 each. Apparently, the internal ROM can be programmed just like a 27C64 using a 40 pin to 28 pin adapter.
PPS, in the TMS77C82 datasheet, look at pages 5 & 6 to explain microprocessor mode. Note on page 6, if MC=VCC, then there is ZERO internal memory above $0200. All the internal ROM is disabled so it must to boot from external ROM or it is bricked. One remaining question is whether the CTS256 firmware can detect if it is running in external ROM and takes countermeasures. I hope not but we'll see soon enough. Since the source code exists, we at least have a chance of making fixes.
[Updated on: Sun, 31 March 2024 18:05] Report message to a moderator
|
|
|
Tables of Various 7000 Series Device Features/Specifications [message #10647 is a reply to message #10646] |
Sun, 31 March 2024 19:41   |
jayindallas
Messages: 110 Registered: June 2021
|
Senior Member |
|
|
Microprocessor Interface Mode
USING A VINTAGE MASKED-ROM TMS/PIC-70xx SERIES WITH EXTERNAL EPROM AND RAM:
-------------------------------------------------
I read Section 9 of the TMS7000 Family Data Manual to evaluate the trade-offs of using a vintage MASKED-ROM 7000 in "Microprocessor Interface Mode. This mode is enabled by pulling the "Mode Control" pin (MC) to Vcc. This disables the internal masked-ROM and switches some of the I/O pins into Address, Data, Control functions, and of course changes some of the processing timing as it accesses external EPROM and RAM.
NOTE: That you'll have less 7000 Series I/O pins available in this external memory mode, so there are trade-offs that must be considered.
This would give you a code development environment that is 'friendly' with Today's electronic labs; with some parallels to Andrew J. Lynch's 8051 development board, to port externally compiled code into this system.
*IF* this applies to all TMS/PIC 7000 Series devices ever released, then anyone can buy a vintage masked-rom 70xx device and plug it into a "Microprocessor Interface Mode PCB," and use it as a 7000 Series processor running from external EPROM and RAM.
If that applies, even a Radio Shack CTS256A-AL2 chip could be your 7000 Series code development processor! But you might not want to risk that CTS.
COMPARISON OF 7000 SERIES DEVICES:
-------------------------------------------------
Note:
The 700x number's "ones position" denotes the device model of feature architecture
The 70x0 number's "tens position" denotes the number on on-chip Kilobytes of ROM or EPROM
The 70Cxx and 77Cxx denote a CMOS technology chip. (lower power advantage)
The 70xx and 77xx denote a NMOS technology chip.
From the Manual 2.1 Summary and Device Comparison
-------------------------------------------------
The TMS7000 family NMOS devices can be summarized as follows:
- TMS7000 is the basic 8-bit, single-chip microcomputer,containing a CPU, a timer, flexible I/O, and 128 bytes of on-chip RAM, but no on-chip ROM
- The TMS7020 and TMS7040 have the same basic features of the TMS7000 with the addition of 2K and 4K of on-chip ROM, respectively.
- The TMS7002 (ROMless) and TMS7042 (4K bytes on-chip ROM) have the same features as the TMS70x0 devices with the addition of a serial port (UART), a 13-bit timer (Timer 2), a 10-bit timer (Timer 3) and 256 bytes of on-chip RAM.
- NMOS prototyping devices include the TMS7742 and the SE70P162. The TMS7742 is an EPROM version of the TMS7042 and contains 4K bytes of on-chip EPROM. The SE70P162 piggyback device is based on the TMS70x2 architecture and acts like a ROM-coded TMS70x2 device.
Table 2-1. TMS7000 NMOS Family Feature Summary
___________ ___________ ___________
| TMS7040 | TMS7042 | TMS7742 |
| TMS7020 | | |
| TMS7000 | TMS7002 | |
____________________________|___________|___________|___________|
| Max oscillator frequency: | 5 Mhz | 8 Mhz | 5 Mhz |
|____________________________|___________|___________|___________|
| Voltage: | 5V+_ 10% | 5V+_ 10% | 5V+_ 10% |
|____________________________|___________|___________|___________|
| Operating temperature: | 0C to 70C | 0C to 70C | 0C to 70C |
|____________________________|___________|___________|___________|
| On-chip ROM (Kbytes): | 4 | 2 | 0 | 4 | 0 | 4 (EPROM) |
|____________________________|___________|___________|___________|
| Internal RAM (bytes): | 128 | 256 | 256 |
|____________________________|___________|___________|___________|
| Interrupt levels: | | | |
| External: | 2 | 2 | 2 |
| Total: | 4 | 6 | 6 |
|____________________________|___________|___________|___________|
| Timers/Event counters: | | | |
| 13-bit | 1 | 2 | 2 |
| 10-bit | - | 1 | 1 |
|____________________________|___________|___________|___________|
| I/O lines: Bidirectional | 16 | 22 | 22 |
| Input only | 8 | 2 | 2 |
| Output only | 8 | 8 | 8 |
| Additional features: | - |Serial Port|Serial Port|
| Development support: | | | |
| Prototyping: | | | |
| EPROM | TMS7742 | TMS7742 | - |
| Piggyback | SE70P162 | SE70P162 | SE70P162 |
| XDS | Yes | Yes | Yes |
| EVM | Yes | Yes | Yes |
|____________________________|___________|___________|___________|
-------------------------------------------------
The TMS7000 family CMOS devices can be summarized as follows:
- The CMOS TMS70C00 has the same features as the TMS70x0 devices, adding low power requirements to the list of features.
- The CMOS TMS70Cx2 contain the same features as the TMS70X2 devices, with the addition of programmable-sense interrupts and two 21-bit timers... and adding he low power requirements to the features.
- Prototyping devices include the SE70CP160 and SE70CP162 (piggyback) devices, which are based on the TMS70Cxx architecture and act like ROM-coded TMS70xx or TMS70Cxx devices.
Table 2-2. TMS7000 CMOS Family Feature Summary
___________ ___________ ___________
| TMS70C40A | TMS70C42 | TMS77C82*|
| TMS70C20A | | |
| TMS70C00A | TMS70C02 | |
____________________________|___________|___________|___________|
| Max oscillator frequency: | 5 Mhz | 6 Mhz | 7.5 Mhz |
|____________________________|___________|___________|___________|
| Voltage: | 5V+/-10% | 2.5V to 6V| 2.5V to 6V|
|____________________________|___________|___________|___________|
| Operating temperature: | | | |
| Industrial: |-40C t0 85C|-40C t0 85C|-40C t0 85C|
| Commercial: | 0C to 70C | 0C to 70C | 0C to 70C |
|____________________________|___________|___________|___________|
| On-chip ROM (Kbytes): | 4 | 2 | 0 | 4 | 0 | 8 (EPROM) |
|____________________________|___________|___________|___________|
| Internal RAM (bytes): | 128 | 256 | 256 |
|____________________________|___________|___________|___________|
| Interrupt levels: | | | |
| External: | 2 | 2 | 2 |
| Total: | 4 | 6 | 6 |
|____________________________|___________|___________|___________|
| Timers/Event counters: | | | |
| 21-bit | - | 2 | 2 |
| 13-bit | 1 | - | - |
| 10-bit | - | 1 | 1 |
|____________________________|___________|___________|___________|
| I/O lines: Bidirectional | 16 | 24 | 24 |
| Input only | 8 | - | - |
| Output only | 8 | 8 | 8 |
| Additional features: | - |Serial Port|Serial Port|
| Development support: | | | |
| Prototyping: | | | |
| EPROM | - | TMS77C82* | - |
| Piggyback | SE70CP160A| SE70P162 | SE70P162 |
| XDS | Yes | Yes | Yes |
| EVM | Yes | Yes | Yes |
|____________________________|___________|___________|___________|
* Advance information
[Updated on: Thu, 02 May 2024 11:14] Report message to a moderator
|
|
|
Re: TMS7000 Series Devices (Manual section 2.1) [message #10648 is a reply to message #10647] |
Mon, 01 April 2024 12:01   |
lynchaj
Messages: 1080 Registered: June 2016
|
Senior Member |
|
|
Hi
On the duodyne project, there is a board I am currently working on with a CTS256 & SP0256 text-to-speech system along with dual SN76489 programmable sound generators and an ADC/DAC pair.
The CTS256 & SP0256 text-to-speech seems to work OK. At least I can get it to start and can hear it work. It is the full complement of IO as suggested by Radio Shack; serial port, parallel IO, expansion/exception EPROM, buffer SRAM, and UART PARMs register.
I am thinking this basic design can be modified nearly any TMS7xxx microcontroller. Especially TMS7xx1 or TMS7xx2 since they have the serial port. Possibly the TMS7xx0 series if you use only the parallel IO for input. As of now, we've been using the serial port exclusively for build and test because there is a debug monitor which has proven invaluable in debugging the system.
The CTS256 uses a simple memory mapping architecture so all the devices show up as regions of memory. Each device gets its own 4KB of memory. It is rather wasteful (IMO) but it was meant to be done on the cheap "back in the day" for low-cost commercial appeal. Can't fault them for that.
My plan is to make a new board solely to test the theory of external boot firmware. I don't see it using any other pins other than the ones it is currently using for the expansion EPROM and buffer SRAM options. Both seem to work just fine as best I can tell.
The board I am designing is called DAISY256. Not an April Fools Day joke. I am going to order some PCBs and build the design. If anyone wants to join me, please PM or email me.
Thanks, Andrew Lynch
PS, I'll send you a 160x100mm PCB for free if you will help with build and test
PPS, what I am proposing with DAISY256 is somewhat like the SE70P162. However, that piggy-back MCU chip is even more scarce that CTS256s. There seem to be very few in existence at all and even fewer for sale. Would be nice for debugging but not a suitable replacement for CTS256. We need something cheap and common as dirt to really move the extortionary prices of CTS256s down.
[Updated on: Mon, 01 April 2024 12:19] Report message to a moderator
|
|
|
Prototyping 7xxx Devices appear to support External Memory?! [message #10649 is a reply to message #10648] |
Mon, 01 April 2024 18:37   |
jayindallas
Messages: 110 Registered: June 2021
|
Senior Member |
|
|
1). Testing a TMS/PIC 70x1 would be the best, first test of using "Microprocessor Interface Mode" (MC-->--Vcc) to run the github .bin code from a CTS256A-AL2, running via external EPROM. Using a 70x1 should require NO MODIFICATION to the .bin code. Andrew J. Lynch seems to be closer to achieving that and it would verify that a 70x1 in Micro-Interface-Mode would be as good as a vintage CTS256A-AL2.
A 40-pin DIP 70x1 in a sandwich PCB with a few Surface Mount components for EPROM and interface, gives you an inexpensive CTS equivalent.
2). I found something interesting in the manual Today. Even the prototyping devices like the piggy-back EPROM and the Windows EPROM devices, both seem to have their MC (Mode Control) pin still configurable. Suggesting my prototyping chips from circa '86-'89 designs...
ITEM-3 :: EProm window: " SE77C42JDL | LBW 8814 | 1986 TI | 7436014 Japan "
ITEM-4 :: EProm piggyback: " SE70CP160J | MSA71000 Japan "
...could be used in Microprocessor Interface Mode too. This is further substantiated in the Manual's Section 9, describing a TMS77C42 in a demonstration or evaluation board of some sort. It suggests that you can tie MC to Vcc and access an external EPROM or use the windows internal EPROM when not tied to Vcc.
That's interesting!
I checked all the prototyping device specification pages and they all have the MC (Mode Control) available.
Its a bit ironic that I don't have a 7xx1 device, even among the prototyping devices. I have a prototype version of the 70Cx0 and the other is a 70C42 prototype equivalent. So... I am considering generating a quick board to see if the two devices I already have, can be more useful in regard to modifying the CTS256A-AL2 code over to the 70Cx2 device; faster UART, different TIMERS, and CMOS. Maybe even a 70Cx0 version of the code; as it has no UART, perhaps a hardware interface to the SPO.
Vintage 7000 Series pricing might make one of {70x0,70x1,70x2} more economical.
I might spend a weekend doing a deep dive through my components and see if I can find my original CTS and SPO. The CTS would give me a 7xx1 device and the SPO would give me the original audio mate.
3). If any of the above works for me, I'll be motivated to study the CTS algorithm and code, deeply, to potentially port it to a 70x2 device, that necessarily requires code modification due to its device's extra features.
4).Doing a MCU-emulation on a 7000 Series should be relatively easy due to its simplicity, but there are TWO timing profiles that must be supported:
1). Internal ROM Mode emulation, and
2). Microprocessor Interface Mode where accessing external memory devices also need to be emulated.
Not really any harder, just another layer of work. :S
[Updated on: Thu, 04 April 2024 11:10] Report message to a moderator
|
|
|
Re: TMS7000 Series Devices (Manual section 2.1) [message #10650 is a reply to message #10649] |
Wed, 03 April 2024 03:57   |
lynchaj
Messages: 1080 Registered: June 2016
|
Senior Member |
|
|
Hi
I've ordered some DAISY256 PCBs and associated parts. We'll soon see if my theory on a CTS256 work-alike is feasible with external firmware. Let's hope so because I think it opens a great deal of flexibility to do things with CTS256 & SP0256 that weren't really possible or a lot more difficult before.
I am going to start with the TMS7001NL-4 since that seems the logical starting point. No internal ROM and a serial port available in DIP40. However, next I would like to try TMS77C82 since they seem to be fairly common and low cost. They do have 8KB internal ROM but it can be programmed like a 2764 or better yet, bypassed with external ROM.
Once we get the firmware on the outside, then potentially we could have in-circuit updates to the CTS256 firmware using EEPROM or Flash. Really, there is nothing stopping from populating the whole 64KB address space with memory and even using a bank switching scheme. The only restrictions I see are $0000-$01FF are reserved for internal usage.
With custom CTS256 firmware, it opens up the possibility of using the SP0256 in new and different ways. For example, the SP0256 supports external ROM although only a few models actually use it such as SP0256-017. However, I think all the SP0256 models support the external speech serial ROM so were there a way to exploit this interface, the SP0256s could be extended. Meaning that non-AL2 SP0256s could be given the 59 allophone information so they too could be used for text-to-speech applications.
At present, only the SP0256A-AL2 chips can work with the CTS256 for text-to-speech. The rest such as SP0256A-080, etc. give random responses and generally are worthless outside of their particular application. That could change and dramatically increase the supply of usable SP0256 parts. However, I think custom CTS256 firmware would need to be configured to know what SP0256 was attached and if external serial speech ROM were present.
Unfortunately, the external serial speech ROM (aka SPR016, SPR032, SPR128) are GI produced mask ROMs and both rare and not reprogrammable. The external serial speech ROM protocol is published in the datasheet so what is needed is an emulation. I think there would be two practical ways to emulate the serial speech ROM: use a fast microcontroller or a CPLD & parallel EPROM.
The external serial speech EPROM is quite fast since the ROM clock is 1.56 MHz requiring and solution to provide sub-microsecond response times. That says "hardware" to me or at least a very fast microcontroller. For instance, if I assume using a semi-modern PIC16F1829 (DIP-20), it has mostly (except for branches) single clock tick instructions. It also has an internal clock of 32 MHz. That provides about 20 instructions per ROM clock tick.
There are only 8 control states and 2 of them are NOPs. They seem to be basic instructions like loading registers and feeding shift registers. It seems at least conceivably within the realm of the possible. I am assuming the PIC uses its own internal memory for data storage (2KB) and/or loads its Flash from an external I2C serial Flash. Everything has to be 5V compatible to work with the SP0256.

The other, less desirable alternative is to use a CPLD (EPM7032) paired with a parallel EPROM like 2716 or 2732. I am confident the CPLD would be fast enough since it would be essentially an all-hardware solution pulling data out of the paired EPROM. The interface to the SP0256 uses 7 lines and the 2732 EPROM uses 22 for a total of 29 GPIO pins which I think the EPM7032 supports.
I've thought about the problem of SP0256 external serial speech ROM expansion, but it relies on the presence of custom CTS256 firmware to work. Thus, this is really moot unless the TMS7001 with external CTS256 firmware experiment works. However, it does give an insight into what is possible once we break free from the static confines of the existing CTS256.
Thanks, Andrew Lynch
[Updated on: Wed, 03 April 2024 04:17] Report message to a moderator
|
|
|
Re: TMS7000 Series Devices (Manual section 2.1) [message #10655 is a reply to message #10650] |
Thu, 04 April 2024 04:59   |
lynchaj
Messages: 1080 Registered: June 2016
|
Senior Member |
|
|
Hi
I've got DAISY256 PCBs on the way and gathered up all the parts I have on hand for the project. Made some orders for the parts I am missing including 3 TMS7001NL-4 chips for initial testing. I think those are the most likely to work since they are the most closely similar to the PIC7041 that the CTS256 was derived from. The only difference being the lack of 4KB internal mask EPROM.
*IF* the TMS7001 works (that's a big IF), do you see anything preventing the TMS77C82 from working? I realize it has an 8KB internal EPROM but in microprocessor mode, that will be ignored so not really a difference. The TMS7xCx2 parts have some extra capabilities but if you don't use them, the CTS256 firmware should still work "as-is". Is that right? Or would the CTS256 firmware require modification?
I found some cheap TMS77C82 DIP40 chips on AliExpress so I ordered 3 to do some tests. Assuming I can get the TMS7001 parts to work, it should be just a simple swap with the TMS77C82 parts to test if they work. Probably could through a whole list of pin-compatible parts sorting out which ones work and which don't but only a couple of common chips (TMS7001 and TMS77C82) should be sufficient for the limited hobbyist demand for CTS256 replacements.
What do you think? Thanks
PS, I also ordered 5 TMS70C02 chips in DIP40 for about $13 from AliExpress. That's like $2.50 each shipped. I don't know if they will work but I think they have a reasonable chance. That's about 2% of the going rate on eBay where I routinely see CTS256s for >$100 each.
PPS, I think I've found another wrinkle in my plan. It turns out the divide by two or divide by 4 clock options are set in the mask at manufacturing. I am confident the CTS256 uses the /4 option since it requires a 10MHz crystal. However, other TMS7xxx use the /2 option and will need a 5MHz clock to get the same system performance. For a real time application like this, clock speed is super important so I recommend the crystal be socketed until we get this sorted out. I suspect the TMS7xCx2 parts will not work with a 10MHz crystal so make sure it is easy to replace. From the TMS7000 databook:

PPPS, this also clarifies the difference between TMS7001NL-2 and TMS7001NL-4. The -2 uses 5 MHz crystal and the -4 uses 10 MHz crystal. As long as the crystal is socketed, I am guessing either will work fine. This opens up more potentially suitable parts. I think the TMS7xCx2 parts all use /2 clocks (confirmed, paragraph 4.2.7 of TMS7000 databook, all TMS70Cxx use /2 only).
[Updated on: Thu, 04 April 2024 08:29] Report message to a moderator
|
|
|
CTS256 resurrection from old 70xx & SP-0256* too?! [message #10657 is a reply to message #10655] |
Thu, 04 April 2024 08:56   |
jayindallas
Messages: 110 Registered: June 2021
|
Senior Member |
|
|
1). "CTS" meant "CODE to SPEECH" per General Instruments documentation.
2). "SPO-250" and "SPO-256" was actually "SP-0250" and "SP-0256."
. . So "SPO" was "Speech Processor dash ZERO TWO FIVE ZERO" etc.
Re: TMS/PIC 70x1 as a CTS256 in Microprocessor Interface Mode
CTS256 Maintaining the SPO256 Timing:
As the CTS256: (1) is the same device thus same architecture/features as the 70x1, (2) is only acting as an in-stream data converter, and (3) the downstream SPO256 has a buffer on its input stream, its very likely to maintain adequate flow rate for the SPO256 in simple serial-in to serial-out interface configuration because the UART will handle the timing transfers.
Allophone (segments of speech/sound) duration timing for synthesizing human speech doesn't require much timing precision. We can understand human speech over a wide rate of enunciation speeds. So its generally not a "real-time" issue.
To most accurately perform like the CTS256, which is a good project goal, you'd have to be aware of 70x1 clock ranges in various device versions. I have not seen the deeper timing specs on the 70x1 architecture; my manual only gives it 5 or 6 printed pages in the appendix. The real factor to check, is the timing differential to access code/data externally. What I've read on the Microprocessor Interface Mode, suggests that the access speed of the internal ROM, is/was slower than most PROM/RAM chip access times. The examples pointed out that using cheaper/slower external memory chips might as well be designed in, as the access wouldn't be taking advantage of the faster access memory devices (BIG CLUE).
Serial-In to Serial-Out Interface:
For Serial-in To Serial-out, its less likely to impact pinouts due to the purpose of the CTS256. It simply reads an input stream and modifies it, then sends the new data to the output stream; as long as it can do the modifications slightly faster than the downstream needs it (with buffering), then the CTS256 is in real-time aspects, transparent; a finite automoton that maintains the stream rate. Its function in serial-in to serial out, therefore minimizes its external pinout requirements.
Other Stream Interfacing:
The possible problem would be the reassigned pin-functions when using Microprocessor Interface mode. When supporting various parallel interfaces upstream and/or downstream, there may be a need to change some of the code to workaround pins that are re-defined in Microprocessor Interface Mode. This needs to be confirmed for all supported CTS256 interface options.
Can the CTS256 Maintian Stream Flow Rate USING External Access to Memory?
It would be wise to use the external access time calculations for the 7{0,7,0C,7C}x{0,2} devices to calculate what performance changes may occur among these devices. In general, the CMOS speeds tend to use slower clock rates than the NMOS. So this will be step 1 when looking at the other possible substitute devices in Microprocessor Interface Mode. Most likely, the processor will still convert enough in-stream data to maintain some buffering.
Likely necessary code changes in the 7{0,7,0C,7C}x{0,2} would be due to CLOCK, TIMERS, UART, possibly INTERRUPTS and maybe pin assignments altered by the external pins repurposed to interfacing external memory. This would mostly be in initialization parts of the code. The conversion algorithm and buffer control code should be adequate within voice tolerance timing.
I'll start getting familiar with the GitHub CTS256 dissassembly code, over the next few weeks, and then begin looking for necessary code changes.
[Updated on: Thu, 02 May 2024 11:18] Report message to a moderator
|
|
|
Re: TMS7000 Series Devices (Manual section 2.1) [message #10659 is a reply to message #10657] |
Thu, 04 April 2024 10:00   |
lynchaj
Messages: 1080 Registered: June 2016
|
Senior Member |
|
|
Hi Jay
Yes, my whole premise of extending non-AL2 SP0256 chips with external serial speech ROMs is that we can modify the CTS256 firmware to support the new configurations. Without separating the CTS256 into a TMS7001 + external EPROM then the "house of cards" collapses. However, I think there is a reasonable chance it could work. Extending it to non-TMS7001 MCUs is another matter though.
According to the GitHub CTS256 firmware, the PIC7041 is pushed into "full expansion mode" which has the same pinout as microprocessor mode except the internal ROM is disabled. So the differences between the CTS256 PIC7041 and the TMS7001 + external EPROM are slight. Hinging on the ability of the external EPROM to emulate the internal mask ROM. It is entirely possible that I am wrong in my assertions and in that case, I'll have a pile of parts to use in other projects. Life goes on, I guess.
However, *assuming* we get the TMS7001 + external EPROM to work (big IF), then to move to the SP0256 external serial speech ROM emulation, I'll need someone to kick-off the PIC16F1829 programming. I did some simple PIC programming for a couple of small projects about 15 years ago and have forgotten everything about it. Will need to relearn PIC assembly programming on the modern PIC16F series. Hopefully someone can step in and get the project going in the right direction.
Thanks, Andrew Lynch
PS, regarding speed of memory, we found out that using too fast SRAM chips on the CTS256 (70ns) does not work. It is expecting 200-300 ns response times and any quicker than that and the latching doesn't have time to work properly. You end up munging the address bus on the data bus or vice versa.
[Updated on: Thu, 04 April 2024 10:02] Report message to a moderator
|
|
|
70x1 Memory Access Timing: Internal -versus- External Access [message #10660 is a reply to message #10659] |
Thu, 04 April 2024 11:03   |
jayindallas
Messages: 110 Registered: June 2021
|
Senior Member |
|
|
ACCESSING MEMORY: Internal versus External Timing:
I think external memory mode should work on the 70x1.
I'll do the 70x0 and 70x2 internal -vs- external memory access timing calculations in a few days. As there are different formulas posted for that interface mode, there should be a difference from internal ROM mode. Why else list additional formulas?
I'll do the spreadsheet with 70x{0,2} formulas with rough extrapolations to 70x1 and then INSERT the results IN THIS MESSAGE.
External Memory Data Hold Time:
Maybe another chip holds as long as the READ signal is held or an 8-bit transparent latch (like the ALE in the circuit) that extends the data for a slow CTS256 read data input. I'll dig a little deeper on this aspect
Maybe that should be designed into a PCB by default as a hedge strategy for the case where its necessary; If not necessary, jumper data lines across the removed latch?
[Updated on: Thu, 02 May 2024 11:19] Report message to a moderator
|
|
|
|
TMS7000 Series with Custom Micro-Coded Instructions [message #10666 is a reply to message #10663] |
Fri, 05 April 2024 21:14   |
jayindallas
Messages: 110 Registered: June 2021
|
Senior Member |
|
|
That was an interesting article on the TMS7000 Series.
I worked at Texas Instruments after High School and before University; everything I worked on was government contract stuff. From my small view of T.I. operations, I'd assume that most "Custom Micro Code" Instructions would be requested for Defense Contracts where money was not a real constraint. And *IF* they had any custom TMS7000s, they are very unlikely to be among any electronic junk cargo that ends up in China component salvage yards.
[Updated on: Thu, 02 May 2024 11:21] Report message to a moderator
|
|
|
|
Daisy 256 & the Speech Processor [message #10676 is a reply to message #10675] |
Sat, 06 April 2024 21:32   |
jayindallas
Messages: 110 Registered: June 2021
|
Senior Member |
|
|
I'll be glad to study the CTS and SP0 documents to assist on your work with the Daisy.
I've been reading up on the SP0256 and its a more interesting part than I thought. Its effectively an AY-3-8910 specialized for voice synthesis.
I'm reading the SP0256 documents in the /speech section of the bitsavers.org URL. I'll focus on the programming language documentation and the speech Vocal-Tract-Model
[Updated on: Thu, 02 May 2024 11:26] Report message to a moderator
|
|
|
Re: Daisy 256 & the Speech Processor [message #10678 is a reply to message #10676] |
Sun, 07 April 2024 07:08   |
lynchaj
Messages: 1080 Registered: June 2016
|
Senior Member |
|
|
Hi Jay
OK.
The SP0256 does have an internal 2KB parallel mask ROM. There doesn't appear to be a way to make it use an external parallel EPROM instead like the PIC7041. However, the SP0256 does support a specialized external serial speech ROM called the SPR016, SPR032, and SPR128. I've only seen the SPR016 models though and they are mask ROMs for specialized purposes like talking clock, etc.
What I'd like to do is use a PIC16F1829 or something similar to emulate the SPR016. The ROM clock from the SP0256 is 50% of the input crystal speed (3.12 MHz, so 1.56 MHz). The emulation has to perform sub-microsecond response times. That's a pretty tall order. The PIC16F1829 supports up to 32 MHz with its internal oscillator. Possibly faster with an external crystal source.
However, since most of the PIC16F instructions are single clock (except branching), I think that gives a ratio of about 20 PIC16F instructions to each external ROM clock tick. (32/1.56 = ~20.5)
Looking over the SP0256 and SPR016 datasheets, there are 8 commands for the external serial speech ROM and they all look to be rather primitive. Basically NOPs, loading registers, and stuffing bits in or out of a shift register. I am thinking that if branching kept to a minimum, that a PIC16F might be able to pull this off without an external oscillator. If more instructions are needed per ROM command, then I think the PIC16F with an external 16 MHz oscillator could rev the PIC16F to an equivalent 64 MHz and provide about 41 instructions per ROM clock tick. I think that should be more than enough but I'd like to avoid using the external crystal oscillator if possible.
Are you familiar with programming PIC MCUs? That is one area I could use some help with is writing the PIC assembler code to emulate the SPR016 serial speech ROM chip.
Due to its hard real-time nature, the PIC code has to be simple, or it won't meet its timelines. Of course, the entire premise of utilizing the external serial speech ROM on SP0256s rests on getting the TMS7001 with external EPROM to emulate the CTS256. Because without the ability to customize the CTS256 ROM image, the SP0256s won't know what to do with them. The CTS256 firmware will need to be modified to tell the SP0256 to use the info (59 allophones or whatever) stored in the serial ROM. As it is now, the CTS256 firmware assumes it is talking to a SP0256A-AL2 with its 59 allophones stored in its internal 2KB ROM. Everything else is ignored which is why the non-AL2 SP0256s don't work for general purpose speech synthesis. Either the 59 allophone info is not present in the internal ROM or it doesn't know to look in the external ROM.
Regardless, we'll soon know the truth. I have DAISY256 PCBs on the way along with some TMS7001s. I also ordered some TMS70C02s and TMS77C82s on the off-chance those MCUs might also work. If they do, they'll be the preferred MCU because they are lower power CMOS and much more available in the marketplace not too mention cheaper and more plentiful. AliExpress has both for less than $3 US each with shipping.
[Updated on: Sun, 07 April 2024 07:27] Report message to a moderator
|
|
|
Reverse-Engineering the Speech Processor ROM [message #10681 is a reply to message #10678] |
Sun, 07 April 2024 11:24   |
jayindallas
Messages: 110 Registered: June 2021
|
Senior Member |
|
|
Speech Processor External ROM Substitute: Possible? PROBABLY... YES
My 'Speech Processor' (SP) study is still at the block & code level, but it seems reasonable that one could design an external interface around parallel-bus memory to replace a 'Speech Processor external ROM' (SPR).
It makes sense that anyone developing code and data for a SPR would need a construct like this to TEST their development before paying the expense of making masked-ROM SPRs. 'General Instruments' (GI) may have sold a development board to do this or documented a circuit interface.
Speech Processor External ROM Substitute: Logic Interfaced or Microcontroller?
While developing a working interface with the SP or between the SP and SPR... using a microcontroller would probably be more advantageous, because changes are only made in software; the time to "CODE...LOAD...RUN" is very quick compared to hardware circuit changes and waiting for components to arrive.
In general use of an option like this, it would depend upon each hobbyist's comfort using a microcontroller in this way. The popularity of the Arduino has increased the familiarity with microcontroller use. Making use of this advantageous microcontroller option might to useful goal for many hobbyist to add to their abilities... or as I always phrased it, "adding something new to my bag-of-tricks" :)
Its necessary to assure that the microcontroller you prefer to use, is fast enough (with code execution time) to control TTL signal emulation by programming. AJ Lynch provided a good timing example in his previous message. Finding a +5Vdc microcontroller would also simplify things when interfacing vintage components.
[Updated on: Mon, 08 April 2024 06:47] Report message to a moderator
|
|
|
Re: Reverse-Engineering the Speech Processor ROM [message #10683 is a reply to message #10681] |
Sun, 07 April 2024 18:13   |
lynchaj
Messages: 1080 Registered: June 2016
|
Senior Member |
|
|
Hi Jay
I chose the PIC16F1829 because it is 5V and my programmer (TL866II T48) supports it directly. Also, it is a DIP-20 package and appears to be fast enough to do the job and has up to 14KB of internal Flash. I am thinking the assembler code would be about 1KB and up to 8KB reserved for SPR016 type information like an SPR128. The PIC16F1829 supports I2C serial Flash memories which it could use to load the internal Flash ROM on boot up if desired or skip the I2C memory and just program the image using the T48.
I suppose you could use an 8051 derivative to do the job as well. I looked into some of the 8051 type DIP-20 packages. Unfortunately, they are not supported by my T48 but they do have in-circuit programming capability. I decided against them mostly on the basis of T48 programmer support. I have programmed both devices a little but not much. Years ago I did a couple PIC type projects using assembler so I think it would be similar but more complicated.
There are other MCUs which would probably work fine too like AVR but 8051 and PIC are the ones I am familiar with so that was a big influence.
Aesthetically, the Microchip PIC is of the same designer as the PIC7041 and SP0256 although the current PIC MCUs have no relation to the older GI PICs. Completely different even though the name is the same and are from the same company. Strange how that worked out...
One could probably use a Raspberry Pi or OrangePI Zero 2W or some such but that seems like crazy overkill when a single $3 PIC chip could do the job sufficiently. Although a RPI is probably fast enough you could program it in C and still have plenty of time left to do other things. I have some OrangePI Zero 2W units and they are faster than a 1GHz Intel Atom notebook. Many cores, very fast!
Thanks, Andrew Lynch
PS, I think I have misread the PIC16F datasheet though, and I was confusing oscillator clock with PIC instruction cycle. Each instruction cycle is 4 oscillator clocks so even if the oscillator is going 64MHz, the actual instruction cycle is only going at 16MHz. So the ratio of ROM clock ticks to PIC instructions is only about 10 to one even *with* an external oscillator. Bummer. Most likely the PIC16F1829 is not fast enough to emulate a SPR016 interface. Will need to find something faster.
[Updated on: Sun, 07 April 2024 18:29] Report message to a moderator
|
|
|
|
|
Current Time: Thu Feb 13 23:33:45 PST 2025
Total time taken to generate the page: 0.00889 seconds
|