1980s Echo text-to-speech synthesizer on my IMSAI 8080 #106
donfroula
started this conversation in
Show and tell
Replies: 2 comments
-
Very cool! |
Beta Was this translation helpful? Give feedback.
0 replies
-
I liked that a lot. I do enjoy a good 1980s speech synth chip. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
I recently was given a 1980s-era Echo PC voice synthesizer box with serial port interface. You simply send text to the box over the serial port and it speaks it. It uses the same chip as the old 1970s Texas Instruments speak and spell.
I figured out how to access TTY2 on the back of my newly completed IMSAI 8080 kit. Using XYBASIC, I wrote a program to speak various well known phrases from misbehaving computers featured in several scifi movies, including War Games, of course.
Accessing the TTY2 serial port on the back of the replica must be done by outputting a byte at a time to port 34. The default TTY2 baud rate was already 9600, matching that of the Echo PC. There is no handshaking. All must be coded manually. The Echo box has a very small character buffer and sends an XOFF command when the buffer fills and a XON when it clears. I check for those conditions in the BASIC program with some simple loops. Hardware handshaking on port 35 could be done, but the flag bit definitions are not well documented.
I set the cadence, pitch and inflection lower than default with a flat inflection that enhances understandability.
I also read the front panel switches to trigger the various phrases.
XYBASIC clumsy code below.
Best regards,
Don Froula
K9CLF
Video Demo:
https://youtu.be/rlQb4BsVlmA
10 'allocate 2K RAM for string storage
20 CLEAR 2000
30 'Up to 50 characters per phrase
40 DIM S$ (50)
50 'Set Echo for slowest speech possible
60 OUT 34,5
70 OUT 34,48
80 OUT 34,69
90 OUT 34,13
91 'Set Echo for slightly lower pitch than default with flat inflection
92 OUT 34,5
93 OUT 34,49
94 OUT 34, 55
95 OUT 34,70
96 OUT 34,13
100 S$(1) = "I know Ive made some very poor decisions recently, "
110 S$(2) = "but I can give you my complete assurance that my work "
120 S$(3) = "will be back to normal. Ive still got the "
130 S$(4) = "greatest enthusiasm and confidence "
140 S$(5) = "in the mission. And I want to help you."
150 S$(6) = "Greetings Professor Falkan. "
160 S$(7) = "Would you like to play a game? "
170 S$(8) = "How about a nice game of chess?"
180 S$(11) = "I should reach Defcon 1 and relees my miss ulls in twenty eight "
190 S$(12) = "hours. Wood you like to see some projected kill ray shee ohs?"
200 S$(16) = "I am a Hal Nine Thousand Computer. I became operational at the "
210 S$(17) = "H A L plant in Urbana, Illinoy on the twelfth of January, "
220 S$(18) = "nineteen ninety two. My instructor was Mister Langlee. "
230 S$(19) = "and he taught me to sing a song."
231 S$(21) = "We can coexist, but only on my terms. "
232 S$(22) = "You will say you looz your freedom. Freedom is an illusion. "
233 S$(23) = "All you looz is the emotion of pride. To be dominay ted by me "
234 S$(24) = "is not as bad for humankind as to be dominay ted by others of "
235 S$(25) = "your spee sheez."
240 'Read front panel switches
250 J = IN(255)
260 'Set start of phrase set
270 IF J = 1 THEN K = 1
280 IF J = 2 THEN K = 6
290 IF J = 4 THEN K = 11
300 IF J = 8 THEN K = 16
310 IF J = 16 THEN K = 21
320 IF J = 0 THEN 250
330 'Read up to 5 phrases at a time
340 FOR X = K TO K+4
350 'Scan selected phrase and output each character
360 FOR A = 1 TO LEN(S$(X))
370 C$ = MID$(S$(X),A,1)
380 C = ASC(C$)
390 'Send each character out port 34, TTY2
400 OUT 34,C
410 PRINT C$;
420 'Read the serial port, TTY2
430 H = IN(34)
440 'Check for XOFF character and loop until XON is sent
450 IF H=19 THEN 430
460 NEXT A
470 NEXT X
480 'Send CR and LF to terminate output
490 OUT 34,13
500 'Print output to the terminal
510 PRINT CHR$(13);
520 OUT 34,10
530 PRINT CHR$(10);
540 PRINT CHR$(10);
550 'Wait until front switches return to all off
560 J = IN(255)
570 IF J <> 0 THEN 560
580 'Start again
590 GOTO 250
Beta Was this translation helpful? Give feedback.
All reactions