/Vintage/Sinclair/82/Peripherals/Currah uSpeech/

k1.spdns.de / Vintage / Sinclair / 82 / Peripherals / Currah uSpeech /

Currah Microspeech (Currah µSpeech)

Currah µSpeech interface Manufacturer: Currah Computer Components Ltd.
Graythrop Industrial Estate, Hartlepool TS25 2DF
Released: 1983
Original retail price: £29.95

Currah was acquired by dk'tronics in 1985. dk'tronics continued to manufacture the MicroSpeech unit, and many of their software titles supported it.


Micro Speech is easy to use – simply plug into your Spectrum and TV and enjoy a new dimension; instant voicing of all the keys, infinitive vocabulary at your command, intonation to add character to speech, exciting new range of sound and speech games. Micro Speech talks through your TV's loudspeaker, ensuring top quality sound. Unlimited vocabulary means that Micro Speech can say anything. There is nothing it cannot say!

The unit uses an allophone system, which means that like you and I it doesn't care about the writing or spelling of the words, but simply speaks by concatenating speech sounds (allophones). To this purpose the string variable s$ has been reserved.

The unit contains a ULA which works on a WRITE command from the microprocessor, a ROM containing the keyword speech patterns and SP0256-AL2 speech processor. It also contains a clock for clear speech and an audio modulator to transfer the sound to the TV lead. The sound can be adjusted by using a screwdriver on the screw showing at the top right hand side of the unit.

The µSpeech allocates itself the top 256 bytes of memory at switch-on and moves down the USR graphics and RAMTOP. More can be allocated to that buffer by the use of CLEAR.

It plugs into the TV and the Mic socket and provides both, video and audio, to it's own TV output.

Draw backs

Audio is not output separately. So to use it, you must connect the Specci to your telly via aerial TV socket.

this is not completely true: the audio signal was also available on the 3.5mm plug. You could plug this into any audio amplifier like your HiFi equipment.

For cost reasons, the unit did not provide a system bus connector on it's rear side. Sadly, most joystick interface manufacturers took the same approach, meaning that you could not have a joystick and the MicroSpeech unit plugged in at the same time. But Currah could sell another item: the Currah µSlot. >:-)

The unit allocated itself the top 256 bytes of memory at switch-on and moved down the USR graphics and RAMTOP. This made it incompatible with some programmes, particularly games, which used that space for machine code.

Some games will not run while this unit is attached, notably the RoboCop arcade game port.

Odd bits (from Wikipedia)

By default, the unit spoke every key-press the user made, even the direction keys which came out as "CURSOR". This could be controlled by a reserved variable KEYS. Typing LET KEYS=0 would turn this feature off.

Booty (Firebird Software Ltd) detected the presence of a MicroSpeech unit and presented the user with a completely different game to that which would be played if the MicroSpeech unit was not present.

Programming speech (from Wikipedia)

Specific words and phrases could be spoken by assigning a value to the reserved string variable S$. This was interpreted letter-by-letter unless brackets were used to denote other allophones. A simple example would be "(dth)is", (dth) representing the voiced dental fricative /ð/. Sixty-three allophones were provided. Rudimentary pitch modulation could be achieved by altering the case of the letters—upper case letters being pronounced at a slightly higher pitch.

A more complex example:

10 LET a$=" (oo)K (AA)"
20 LET b$="w(ii)z (ggg) (ii),"
30 LET c$=" (dth)is iz it"
40 LET S$=a$+b$+c$

Technical details

The unit contained a ULA which worked on a WRITE command from the microprocessor, a ROM containing the keyword speech patterns, and an SP0256-AL2 speech processor. It also contained a clock for clear speech and an audio modulator to transfer the sound to the TV lead. A small adjustment screw was provided, to allow fine tuning of the audio output.

Supported Games

Very likely to be incomplete.

Title                Publisher
3-D Monster Chase Romik Software
3D Lunattack Hewson Consultants Ltd
3D Monster Maze Romik
All or Nothing Abbex Electronics Ltd
Arrow of Death 1 Digital Fantasia
Arrow of Death 2 Digital Fantasia
Auf Wiedersehen Pet Tynesoft
Bingo Tynesoft
Blade Alley PSS
Blastermind! Martech Games Ltd
Blasteroids Martech
Bongo Anirog Software
Booty Firebird Software Ltd
Cagara Players Software
Colour Clash Romik Software
Connect 4 John Westhead
Crazy Golf Mr. Micro Ltd
Currah MicroSpeech Currah Computer Components Ltd
Currah MicroSpeech Demonstration Aardvark Software of Hartlepool
Currah MicroSpeech Software Cecomsa
Electro-Man in Revenge of the Bugs Sinclair User
Firebirds Lyversoft
Fruit Snapper LiveWire Software
Giant's Revenge Thor Computer Software
Grand Prix Driver Britannia Software Ltd
Gremlins Thor Computer Software
Harlequin Mr. Micro Ltd
Hunchback Ocean Software Ltd
Insult Generator Greg Fox
Jack and the Beanstalk Thor Computer Software
Jack and the Beanstalk Your Computer
Learn with Ted Playground Software
Lunar Jetman Ultimate Play The Game
Lunar Rescue Lyversoft
Max Headroom Quicksilva Ltd
Maze of Terror Kevin Hillyer
Maziacs DK'Tronics Ltd (i don't hear any speech [kio])
Mega Fruit Thor Computer Software
Mined-Out Quicksilva Ltd
Moon Alert Ocean Software Ltd
Mr. Wimpy Ocean Software Ltd
Mystic Tower Aardvark Software of Hartlepool
Night Stalker Thor Computer Software
Pi-Balled Automata UK Ltd
Pogo Ocean Software Ltd
Pontoon Oxford Computer Publishing
Powerhouse Your Computer
Psi-Spy Postern Ltd
Punchy Mr. Micro Ltd
Rainy Day CCS
Rockfall Crash
Rockfall II Crash
Roulette Oxford Computer Publishing
Sexy Black Jack Load 'n' Run [IT]
Shark Attack Romik Software
Skelby - The Schizophrenic Droid QBIT
Spectrum Voice Chess Artic Computing Ltd
Spiders Web Thor Computer Software
Sport of Kings Mastertronic Added Dimension
Spyship SOS Dynamic Software
Starbike The Edge
Steve Davis Snooker CDS Microsystems
Terrahawks CRL Group PLC
The Birds and the Bees Bug-Byte Software Ltd
The Blob 16/48 Tape Magazine
The Covenant PSS
The Evil Dead Palace Software
The Golden Baton Digital Fantasia
The Island Crystal Computing
The Time Machine Digital Fantasia
The War of the Worlds CRL Group PLC
Timebomb CDS Microsystems
Titanic R&R Software Ltd
Twin Kingdom Valley Bug-Byte Software Ltd
Voice Chess Artic
Word Generator ZX Computing
Xavior PSS
Zepherus National Software Library
Zig Zag DK'Tronics Ltd

Technical Details on Currah Hardware

Loosely based on nocash / problempakutt.de, by my own research and by Thomas Busse:


The hardware must be 'enabled' to be accessible. Any access to anything with address $0038 toggles the 'enable' state of the interface. This means: memory read, write, input, output and program execution. It just doesn't matter. The last condition, execution, is used to enable the interface and it's rom when the regular system timer interrupt restarts here, to switch in the interface rom, execute some code therein and finally just jump to this address again to switch the interface off and resume execution of the normal interrupt code in the ZX Spectrum rom. There are no further BIOS hooks; initialization upon reset is also done from inside of the hooked IRQ handler.

Normally a RST7 or a memory read at address $0038 is used to toggle the rom. Rockfall II (but not Rockfall) interestingly used IN $0038 to toggle the rom to detect the presence of the interface. I wouldn't recomment to use I/O for that because of the many '0' bits which will activate lots of other hardware! I actually learned something about the IN opcode from this code snippet which i probably just had forgotten some years ago…

When the interface is 'enabled', then the rom and the SP0256 speech processor are visible and can be read or accessed. The interface uses memory mapped i/o to access the SP0256 speech processor.

The address space of the interface is $0000 to $3FFF, but only bits A12 and A13 are actually used. So there are these 4 addresses:

$0XXX  r: access the rom, w: void
$1XXX access the SP0256
$2XXX unknown
$3XXX w: set the intonation flag; r: unknown

The ZX Spectrum rom is fully disabled (all 16 kB) while the interface is enabled.

The µSpeech rom is only 2 kB in size and it is visible at address $0000 and mirrored at address $0800.

Writing to address $1XXX writes the lower 6 bits as a command into the SP0256. The AL2 rom has only 64 allophone entry points and the upper 2 bits are hard-wired to 0.

Reading from address $1XXX reads the busy bit (Load Request /LRQ) in D0: 1=Buffer full, 0=Ready to receive data. The upper bits contain garbage and are not always pulled high as might be expected. Also the busy bit occassionally seems to return 'busy' even when the interface is idle. (see video on Thomas Busse's page.) /LRQ is set when a command is written to the command register and cleared when the SP0256 state machine reads it. So, as soon as it becomes 0, the next command can be written to the SP0256. The SBY pin (indicating when all data is finished) is probably not connected. (to be verified. Seen by the timing of the busy bit it may well be the SBY pin instead.)

Data can be written to SP0256 when status bit 0 is low. Otherwise the old command in the command register is overwritten. The last allophone should be followed by a pause (eg. 00h=Pause10ms), because the SP0256 cannot stop but continues to generate noise with the last filter setting until a new command is written to the command register. It does not repeat the whole command.

Writing to address $3XXX sets the 'intonation': Address bit A0 set's intonation to low frequency (A0=0: ~3MHz clock / ~10kHz samples) or high frequency (A0=1: approx. 7% higher). The shift in frequency is soft and takes around 0.05 to 0.5 seconds, the timing seems to vary (Thomas Busse). The data value written is not used.

The intonation bit is a special feature of the Currah hardware, not of the SP0256 speech chip itself. It modifies the CLK passed to the SP0256. So, aside from the frequency, this also alters the durations of all allophones and pauses.

Currah µSpeech BIOS/BASIC extension

Unlike most or all other speech devices, the Currah hardware includes a BIOS extension. Currah related BASIC commands are:

LET keys=0           ;disable spoken keystrokes (recommended for LOAD/SAVE)
LET keys=1 ;enable spoken keystrokes (default)
LET s$="he(ll)(oo)" ;say hello (normal lowercase)
LET s$="hE(ll)(oO)" ;say hello (with raised intonation on "e" and "(oo)")
PAUSE 1 ;wait for Vblank IRQ (where s$ is processed)
CLEAR n ;change RAMTOP (speech buffer is between RAMTOP and UDG)
IF PEEK(65364)=81 ;buffer pointer LSB, [FF54h]=51h=buffer_empty (on 48K)
IF s$(TO 1)="*" ;check if s$ was processed (copied to speech buffer)
IF s$(TO 1)="?" ;check if s$ was rejected (contained invalid characters)
IF s$(TO 1)=other ;check if s$ was not yet processed (or buffer full)

On power up, the Currah BIOS allocates 256 bytes between RAMTOP and UDG, containing a 6-byte "header", and a 250-byte buffer; which contains allophone numbers (and intonation flag in bit6), in the format as written to address to 1000h (ie. not in ASCII format as used in the BASIC s$ variable). On the Spectrum this region is at FFxxh (on Spectrum 16K it's at 7Fxxh):

FF57h - Flag byte
FF56h - Spare (unused general purpose byte; NOT reserved for anything)
FF55h - Hi byte of buffer pointer ;ntains FF51h when empty
FF54h - Lo byte of buffer pointer ;/
FF53h - Spare (unused general purpose byte; NOT reserved for anything)
FF52h - Spare (unused general purpose byte; NOT reserved for anything)
FF51h..FE58h - Speech buffer (default size=250) [FF51h]=next allophone

In BASIC, the spoken keystrokes and s$ strings are good for a first "oh it does really speak" impression, although after soon, the keystroke feature may become annoying, and the automatic modification of the first character in s$ may cause compatibility problems with various BASIC programs that do use s$ for other purposes.

Moreover, allocating 256 bytes between RAMTOP and UDG may cause problems with many machine code programs. And, hooking the IRQ handler changes Vblank handling timings which may also cause problems with a few programs.


Name Letzte Änderung Länge 
Current Selling Prices/ 2019-08-20 05:24 10 
Games for Currah µSpeech/ 2019-08-22 19:20 34 
Technical Information/ 2020-08-27 14:08 18 
XL/ 2019-08-20 05:24
All the stuff.jpg
size: 430 × 378
2005-11-02 12:32 72191 
Box - front-2.JPG
size: 321 × 400
2008-07-22 13:30 31103 
Box - front.jpg
size: 400 × 300
2006-02-07 12:10 32318 
Box - rear side.jpg
size: 400 × 300
2006-02-07 12:11 31424 
Box, torn, front side.jpg
size: 640 × 480
2015-04-21 16:06 66739 
Box, torn, rear side.jpg
size: 640 × 480
2015-04-21 16:06 66274 
Compiling Words (1983, Currah).z80 1996-12-24 22:32 5355 
Currah µSpeech - Hot Spot (redclash).jpg
size: 1207 × 905
2017-10-29 10:10 184542 
Currah µSpeech - open (redclash).jpg
size: 1207 × 905
2017-10-29 10:09 268971 
Currah µSpeech - PCB rear side (redclash).jpg
size: 723 × 542
2017-10-29 10:47 99854 
Currah µSpeech.jpg
size: 400 × 318
2005-11-02 12:57 37603 
CurrahMicroSpeech Ad#2.jpg
size: 800 × 1166
2015-04-21 16:06 195126 
CurrahMicroSpeech Ad#3.jpg
size: 800 × 1148
2015-04-21 16:06 192966 
CurrahMicroSpeech Ad#4.jpg
size: 945 × 1335
2015-04-21 16:06 242369 
size: 615 × 873
2015-04-21 16:07 110115 
size: 593 × 567
2015-04-21 16:06 57784 
Manual.html 2005-12-01 10:54 31886 
Manual.pdf 2017-10-28 14:53 137791 
Manual.txt 2005-12-01 10:55 26541 
Setup with Specci.jpg
size: 600 × 450
2007-01-21 20:14 65326 
SP0256-AL2 cc-by-sa ZyMOS.png
size: 694 × 321
2013-10-04 12:35 287761 
Tape - side 1.tzx 2001-12-06 18:55 20032 
Tape - side 2.tzx 2001-12-06 18:53 15004 
Hardware feature [WoS] 112 
problemkaputt.de - hardware ports doku 113 
Thomas Busse – obscuretronics 113 
ZX Spectrum with Currah microspeech for sale - YouTube 104 

I try to ask for permissions for each image, but this is extremely time-consuming. So if you find your work here, i'll be happy to to add a courtesy note to the image or, on demand, remove the image. Please send mail to kio.

powered by vipsi - your friendly VIP Script Interpreter

Valid HTML Valid CSS