Spo256al2 is an allophone generator, think phonemes or universal syllables
It holds 64 sounds, (actually 60, 4 are various lengths of silence. )
This can create speech, but due to the strangeness of language, words are not always pronounced phonetically. Even the word phonetically isn’t pronounced phonetically. So parts of words with the same spelling can be pronounced very differently.
This means that every word needs to be manually assembled from its base allophones. This process is tedious. The other issue with the SP0256AL2 is that they are becoming both rate and expensive.
A couple of years ago I created an emulation for the Spo256al2 on a PI Pico that I included into the RC2040 and the Pico RomWBW
The CTS256al2 is an off the shelf processor chip TMS7041 made by GE, running code created by the US Naval laboratory.
The CTS256al2 is a test processor. It processes a string of text by processing words against a set of patterns against over 400 pronunciation rules. The process is similar to the way regX strings are parsed. but with a very limited set of patterns.
From these rules it converts the text directly into allophones. with (and I quote from the datasheet “over 90% accuracy” This does assume you are an American.
Patterns:
# – one or more vowels
. – voiced consonant: B D G J L M N R V W X
% – suffix: ER E ES ED ING ELY (FUL?)
& – sibilant: S C G Z X J CH SH
@ – T S R D L Z N J TH CH SH preceding long U
^ – one consonant
+ – front vowel: E I Y
: – zero or more consonants
* – one or more consonants
> – back vowel: O U
< – anything other than a letter
? – two or more vowels
Matching Rules example for words or parts of words beginning with U
//== [ U ] ==
{‘U’,0xFE8E,”<[U]<“,{YY1,UW2,0}},
{‘U’,0xFE93,”[UN]I”,{YY2,UW1,NN1,0}},
{‘U’,0xFE98,”<[UN]”,{AX1,NN1,0}},
{‘U’,0xFE9C,”<[UPON]”,{AX1,PA3,PP1,AA1,NN1,0}},
{‘U’,0xFEA5,”@[UR]#”,{UW1,ER1,0}},
{‘U’,0xFEAA,”[UR]#”,{YY1,UW1,ER1,0}},
{‘U’,0xFEAF,”[UR]*”,{ER1,0}},
{‘U’,0xFEB2,”[U]^<“,{AX1,0}},
{‘U’,0xFEB6,”[U]^^”,{AX1,0}},
{‘U’,0xFEBA,”[UY]”,{AY1,0}},
{‘U’,0xFEBC,”<G[U]#”,{0}},
{‘U’,0xFEC1,”G[U]%”,{0}},
{‘U’,0xFEC5,”G[U]#”,{WW1,0}},
{‘U’,0xFEC9,”@[U]”,{UW2,0}},
{‘U’,0xFECC,”[U]”,{YY1,UW1,0}},
Only a few examples of these patters were made public, to protect the chip from being copied.
The CTS256-al2 It was made available to the public, but was never hugely popular, except in high end equipment.
So, Original CTS256-al2 are unobtainium and/or incredibly expensive.
The code in the original chip has been extracted ( GMESoft-Github), and can be used to program tms7041’s and there is a Microchip equivalent PIC7041 processor that can also be used.
Of course these two chips are also rare/expensive too.
You can also create the CTS256AL2 by emulating the PIC7041 and running the original code, which really isn’t ideal to embed into another micro processor.
but…
Michel Bernard on git hub has managed to extract all of the rules.
With these it should be possible to re create the pattern matching.
So I wrote the pattern matching from scratch.
This was challenging as id never written this sort of pattern matching software before.
Eventually I had a program that would take text to allophones that I could pass to the spo256al2 emulation.
With the original CTS256AL2 you could buy (or create) an exceptions list. This was another set of rules that could take words (exceptions) that didn’t work very well with the original rules, and add your own allophones.
mecparts on Github had extracted one of the popular eeproms and listed its contents, so I added this to the software. The upshot of this is (and I didn’t add this) ‘Zee80’ is now pronounced ‘Zed80’ as it right an proper 🙂
I have incorporated both systems into a c program that drives my existing emulation of the SP0256_AL2 and added this to the RomWBW computer kit code https://github.com/ExtremeElectronics/
I’m also developing a RC2014 interface so you can drive the emulation with real hardware.
-

Pico RomWBW standalone Z80 CPM Computer kit
Price range: £39.60 through £58.80 Select options This product has multiple variants. The options may be chosen on the product page
