General Instruments Speech Emulator ----------------------------------- 11132012 K.Horton --- Weelllll I happened across this large box doodad on ebay so I had to buy it. And I'm glad I did, since it's designed to emulate the GI series of speech processors (SPO256, SPO264, SPR128, etc) and their external speech ROMs! It's a largish box, with a SYS/RUN LED on the front, a reset toggle switch and a large covered power button, where the cover must be lifted before it can be toggled on/off. On the back are two RS-232 ports labelled "CRT CH A" and "MODEM CH B". There's a toggle switch with three positions, designated "CH A" "CH B" and "CH A&B". Apparently you can connect this doodad between a modem and CRT, for use on say a time sharing system. Also on the back is a speaker, a "digital out" plug which is simply the digital audio coming out of the SPO256's audio pin (in case you wanted to try it out on your prototype product), a speaker jack and power input plus fuse. Inside the box is a great big giant 5V linear power supply and a smaller +12V/ -12V supply. There's a large card cage which appears to be someone's standard product (in the 1980's anyways) and four cards. Two of them are 16K byte RAM boards with sockets for 32 9114 RAM chips which are 1K*4 bits each. One board is jumpered to map it into 0000-3FFF and the other is mapped in at 4000-7FFF. The lower board has 8 of the RAM chips missing since the SPO256 cannot use the first 4K of address space (0000-0FFF), so the chips were not stuffed. This means there's a total of 28K of RAM which is enough to emulate up to an SPO264 and 1 16K SPR128 chip at the same time. There's more empty card slots so I suspect you could add up to 60K of RAM to it this way. These RAM boards are some standard product, and GI did not make them. The other two boards are more interesting. One of them has the CPU on it, which is a PIC1664 ROMLESS chip. It's a massive 64 pin ceramic and gold lidded monster which was used to develop PIC programs for the PIC1650. There's an AY-3-1015 UART, a baud rate generator, some RS232 level converters and two ISL6554 EPROMs which are weird 512 byte EPROMs. These hold the 512 words of PIC code. The other board contains an SPO256-AL2, which is your standard allophone chip, however it's wired up for external ROM mode and the on-chip ROM with the allophones in it is not used. There's also a chip labelled "SPR-X" which was later sold by GI as the "SPR000" which converts a standard RAM/ROM/EPROM bus into the weird serial bus the SPO256 wants for its external ROMs. There's a few other things like 2 8 bit latches for loading the RAM from the PIC, and some tristate buffers that tristates the SPR-X's address pins so the PIC can run them to load new data into RAM. There is an audio amplifier and filter (seems to be the stock datasheet one) and that's about it. The baud rate and all that jazz is settable via dip switches. It came set to E71, 9600 baud which is what I am running it at (the fastest the thing will go). There's a few commands that can be sent, and it's case sensitive. All values are in octal. ewww octal. Commands: Sxxxx,data,data,data,...,L Store data in RAM. xxxx = octal start address. Note that address 0 is actually 1000h in RAM, which is the start of memory on an SPO256. The data is comma separated, and of course octal too. Sending is terminated by sending an L. So to load the first 4 locations of RAM, we can do this: S0,12,14,55,377,L which will store 0ah into location 1000h (12 octal = 0a hex), 0ch into location 1001h, 02dh into location 1002h, and 0ffh into location 1003h. ---- Gxxx Causes it to speak the desired word/phrase. xxx is the octal value of the word to speak. i.e. G0 will cause it to speak the first word, G1 the next, and so on. This command loads the value xxx onto the 8 address lines of the SP0256, then hits /ALD to load it and cause it to speak. The device will wait until it's done talking, then send back "Q" which means it finished speaking. This lets your code feed it a string of words/phrases to speak and it will know when it's done, so it can send the next one. ---- $ This performs some extensive RAM tests. There's 3 different tests that can be run, but only one is useful. To invoke it, you send the following command: $0 It will then say: ST ADDR =000000: and you then type in a start address. i.e. "0" then press enter. Next, it will say: END ADDR=167777: then you type in an end address and hit enter. This unit only has 28K of RAM so the last valid memory location is 067777 which is 6FFFh. After that it will blink the SYS/RUN LED as it checks memory. If there is a problem, it will spit out: ERROR@ xxxxx for each RAM location that failed, where xxxxx is the location in octal. If there are no errors, it will stop blinking the LED and send a CRLF and then you can enter another command. The only way to stop the test is to hit the reset button. $1 and $2 appear to simply be hardware testing versions. $1 will constantly read from RAM and $2 will constantly write to it. There are no other inputs or outputs, and it will not blink the LED. The only way to exit these is to reset it. ---- Ixxxx This command will allow you to inspect memory, and optionally change it. After the above it will print: xxxxx=yyy: where xxxx is the address, and yyy is the data. You can then enter a byte of data in octal of course, and hit enter. It will then save this value. If you hit / without editing memory, it will go to the next address and print its value. If you DO edit the address, it will terminate and go back waiting for another command. ---- The last three commands are related, and useless. These three commands control ports A,C, and D on the PIC and lets you directly read and write them. Since the software directly controls them as it is to perform all its operations, this is silly, but here is how it works. hitting A, C, or D will print: A=xxx: Where xxx is the octal value for the port. If you type an octal value in here, it will then set the port. Hitting enter alone without typing anything in will cancel entry and it will wait for a new command. So, that's about it.