Skip to content

sbelectronics/gpib-speech

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

gpib-speech

A GPIB (IEEE-488) speech synthesizer peripheral. Plug it onto the bus, print to it from any GPIB host, and it speaks what you printed through one of three vintage speech ICs.

The hardware is a custom Pi Pico 2 W carrier board with GPIB transceivers + level translation + an iSBX (Intel Multimodule) expansion socket. The speech IC lives on a small daughterboard that plugs into the iSBX socket — swap daughterboards to swap voices. A six-digit TIL311 hex-display daughterboard is also supported as a no-audio bring-up / debug mode that shows the engine's phoneme stream on its displays.

The original use case was a GRiD Compass laptop printing to LPT1; the firmware listens at GPIB address 21 (the GRiD-DOS default printer address) and accepts plain ASCII print jobs. Any GPIB host that knows how to talk to a listener at a configured primary address works.

Supported speech chips

Each chip is a different daughterboard with a different phoneme language. The firmware picks one at build time via the SPEECH_MODULE make variable. Only one chip module is compiled in — there's no runtime dispatch.

SPEECH_MODULE Chip Text-to-phoneme engine Notes
sp0256 Microchip / GI SP0256A-AL2 tts-c (NRL rules → SP0256 allophones) Default
sc01 Votrax SC-01A typentalk (C++ port of the Votrax Type 'N Talk firmware)
ssi263 Silicon Systems SSI-263 / SC-02 tts-263 (NRL rules extracted from the Mockingboard Speech Development disk)
til311 6-digit TIL311 hex display Same engine as sp0256 No audio — phoneme codes scroll across the displays. Useful for bringing up the GPIB / iSBX path without a working speech IC.

Each chip-module file in firmware/src/ owns its entire pipeline (text → phonemes → hardware writes), because the three chips' phoneme code sets are incompatible. Adding a fourth chip means writing one more speech_<chip>.c against the small contract in firmware/src/speech_chip.h.

Build & flash

See firmware/PREREQS.md for one-time setup (toolchain, Pico SDK, TTS engine checkouts). Once that's done:

cd firmware
make SPEECH_MODULE=sp0256        # or sc01 / ssi263 / til311
make flash                       # picotool loads build/gpib_speech.uf2

make always re-runs cmake configure, so changing SPEECH_MODULE between builds works without make clean.

The TTS engine source checkouts default to ~/projects/pi/tts-c, ~/projects/pi/typentalk, and ~/projects/pi/tts-263. Override via e.g. make TTS_263_SOURCE_DIR=/some/other/path, or pass an empty value to make CMake fetch the source from GitHub automatically.

Use

Plug the gpib-speech into your GPIB bus, plug the desired speech daughterboard into its iSBX socket, plug a small speaker into the audio output, and power it. From the GPIB host, send ASCII text to device address 21.

The firmware:

  1. Buffers incoming bytes until it sees a CR/LF.
  2. Hands the whole line to the chip's text-to-phoneme engine.
  3. Streams the resulting phonemes to the speech daughterboard over iSBX.

From a GRiD Compass running GRiD-DOS, that means just:

echo HELLO WORLD > LPT1

From any other GPIB host (Prologix adapter, HP-IB controller, NI-GPIB, etc.), it's whatever your stack's equivalent of "address device 21 as listener, send text" is.

Debug console

The Pico's USB-C port appears as a USB CDC serial device on the host (/dev/ttyACM0 on Linux). The firmware emits a per-byte trace of every GPIB byte received plus the phoneme stream produced by the text-to-phoneme engine, e.g.:

rx: 0x68 h [EOI]
rx: 0x65 e [EOI]
...
tts: "HELLO" -> HH EH LL OW PA4

make debug-connect from the firmware/ directory opens tio on /dev/ttyACM0.

Repository layout

Path Contents
firmware/ Pi Pico 2 W firmware (Pico SDK + CMake). Build instructions in firmware/PREREQS.md.
netlist.txt, partlist.txt, schematic-v0.7.pdf, gerbers/ Main-board hardware design files (Eagle netlist + fab artifacts).
netlist-module, partlist-module.txt Daughterboard design files.

Acknowledgements

Three open-source text-to-phoneme engines do the heavy lifting, all from Scott Baker:

  • tts-c — NRL rules → SP0256 allophones
  • typentalk — C++ port of the Votrax Type 'N Talk firmware
  • tts-263 — NRL rules → SSI-263 phoneme bytes

The GPIB listener/talker state machine was ported from blackgpib, a Pi Pico GPIB peripheral emulator for the GRiD Compass.

About

GPIB-based speech synthesizer for Grid Compass and similar computers

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors