I'm Tamas, and I spend a lot of my spare time getting old speech synthesizers talking again. This one is a little different: instead of one synthesizer, it's the chip that sat inside a whole family of them.
The Silicon Systems SSI-263 (Votrax sold it as the SC-02, Aicom called it the AI901) was the voice of a lot of blind people's computers in the late 80s and 90s. This project is a register-level emulation of that chip, and around it, the original firmware of four talking devices, running unchanged and driving the emulated chip:
| Voice | Its own software | Runs in |
|---|---|---|
| Speak-Out talking box (GW Micro, 1995) | its NEC V40 firmware | MAME's V40, inside NVDA |
| Blazie Braille Lite 2000 in speech-box mode | the June 2003 firmware | MAME's Z180 |
| Aicom Accent-mini | Aicom's DOS device driver SPKEMS.DVC (Accent-EMS V4.5) |
MAME's 8086, with emulated expanded memory |
| Aicom Accent SA | the box's own 8085 firmware and dictionary ROMs (1986–1989) | MAME's 8085 |
The pronunciation rules, the number reading, the intonation and the timing are all the devices' own. The chip model makes every sample: nothing is recorded or concatenated.
Every one of these boxes wrote the same five registers. If the chip is right, every box that ever drove it can talk again, and each one sounds like itself, because its own rules are doing the talking. So the chip comes first. It's built from the evidence, not by ear alone:
- the phoneme ROM, read by Astra from Visual6502.org's die shots, and checked against Rob Elmer's Casso;
- the data sheet and the chip family's ISSCC paper;
- 63 minutes of my own Braille Lite 2000 recorded from its line out, used for development;
- a frozen hold-out set of other recordings that nothing is ever tuned on.
Where a measurement and my ears disagree, my ears win. So far they've been right every time.
Download the latest release. There are three NVDA add-ons, and they can all be installed together:
| Add-on | What you get | Settings |
|---|---|---|
speakout-ssi263 |
Speak-Out | rate 0–9, pitch 0–9, tone A–Z as the variant |
blazie-ssi263 |
Braille Lite / Braille 'n Speak | rate 1–16, pitch 1–63, tone 1–25 as the variant |
accent-ssi263 |
two voices, Accent-mini and Accent SA | the Accent's own commands: rate R0–H, pitch P0–9, voice V0–9 as the variant, inflection from monotone to full |
They run on NVDA 2021.1 through 2026.1, 32- or 64-bit, on Windows 7 and later, and now on Windows on ARM too. You don't need numpy or a Visual C++ runtime. All three support capital pitch change. The Braille Lite and Accent have an option to read numbers as words, because the Accent reads 100 as "one zero zero" and the Braille Lite stops short of trillions.
The Blazie Mode frontend runs the original Blazie firmware, with a menu for the
installed Braille Lite 2000, Braille 'n Speak 2000, and Type 'n Speak models and languages,
with direct six-dot keyboard input and its SSI-263 voice. Build with ./build_linux.sh, then run
./build/linux/blazie_emu_bt from a Blazie Mode terminal. M-chord with Dot 7 opens the host menu.
Braille Lite's own 18-cell output appears on BT Braille, with L2/R2 for back and L3/R3 for forward.
Speech-only models clear the cells; host menus use the device's normal speech and braille dialogs.
The released add-ons carry each device's firmware, because without it there's no voice. It isn't ours. It's here so these machines can speak again, and any of it will come down if its rights holders ask.
This repository only keeps Aicom's software in the tree. Aicom stopped making the Accent
line around 2000, and by 2001 even its own customers couldn't find anyone to ask.
firmware/AICOM.txt has what we know and where each file came
from. The Speak-Out and Braille Lite firmware stay out of git: to build those two add-ons
yourself, put your own copies in firmware/gw-micro-speakout/ and firmware/blazie/.
The README in each folder says which files, with their checksums.
- How the SSI-263 learned to speak again: the whole story, day by day, from the first ROM read to this release, and who found what along the way.
- Reading the chip off its die: how the phoneme ROM was read three separate ways from Visual6502's photographs, and what those bits do and don't tell us.
- Measuring a real SSI-263: how my own Braille Lite 2000 was recorded and measured, and the lessons that cost the most to learn.
- The chip engine: what the model does, part by part, and what it doesn't do yet.
- The four front ends: each device's own firmware, and the emulated machine it runs on.
- Open questions: what we still don't know, and where the answer would come from.
- Sources and credits: every data sheet, paper, patent, program and person this work stands on.
| Path | What it is |
|---|---|
src/ssi263/ |
The chip. chip.py is the reference, params.py holds every uncertain constant tagged by its source, native.py is the same chip in C behind the same interface |
src/csrc/ |
The chip in C99, the device boards, and the extracted MAME CPU cores with their BSD notices |
src/hosts/ |
The firmware hosts and native-board bindings. MAME is the default for all four devices; old cores are development references only |
src/data/rom_bits.csv |
The phoneme ROM |
src/HOLDOUT.md |
The hold-out rules, and a log of every change to the chip and every look at the hold-out |
docs/ |
The documentation (see above) |
tools/ |
Research and check tools: comparisons against the recordings, the C/Python gate, renders |
nvda/ |
The three NVDA drivers, their builds, and the driver test rig |
firmware/ |
Aicom's software, and the places the other firmware goes |
third_party/casso/ |
From Rob Elmer's Casso (MIT): the ROM extraction the die reading was checked against |
You'll need 64-bit and 32-bit Python 3.13, and w64devkit GCC in both its x86_64 and i686 builds. The research tools also want numpy, scipy, soundfile and librosa.
Nothing in the repository assumes where those live. Copy paths.local.example to
paths.local (it stays out of git) and fill in the keys you need, or set the same keys as
SSI263_<KEY> environment variables. A script that needs a missing key says which one.
python tools/check_no_machine_paths.py makes sure no one's own paths get committed.
python src/csrc/build_native.py # ssi263.dll, 64- and 32-bit, static
python nvda/build_speakout.py # every build checks the C chip against chip.py first
python nvda/build_blazie.py # native board and pipe host both use MAME's Z180
python nvda/build_accent.py
The add-ons land in nvda/dist/. python nvda/build_release.py builds all three together,
sharing native builds and chip checks. Every shipping CPU uses the extracted MAME core:
Z180, V40, 8086 and 8085. Packages include both Windows architectures and their MIT/BSD
notices. Unicorn, z180emu and the Python 8085 remain development comparison references;
they are not runtime payloads and no environment switch is needed for MAME.
| Command | What it checks |
|---|---|
python tools/check_native_core.py |
The C chip against chip.py: internal state exact, PCM identical, under every parameter switch |
python tools/check_no_machine_paths.py |
No tracked file names a folder on anyone's own machine |
python -S nvda/tools/driver_sim.py speakout|blazie|accent|accentsa|both "C:\Program Files\NVDA" tag |
A built driver against stand-in NVDA modules, importing only from NVDA's own library |
python nvda/tools/pitch_bug.py speakout|blazie|accent |
Capital pitch is never left raised |
- Engine, hosts and drivers: Tamas Geczy (tgeczy), with Claude.
- Visual6502.org: the SSI-263P die shots that everything here was read from. Greg James photographed the die in 203 images, and Christian Sattler corrected and stitched them into one 17265 × 14313 picture, from chips an anonymous donor sent them. The same page keeps the SSI-263A data sheets and programming guide. Without it there would be no ROM, and no chip.
- The die: Astra read the SSI-263's phoneme ROM from those shots, reviews the engine, and found the Windows-on-ARM fix.
- Casso: Rob Elmer, MIT (
third_party/casso/LICENSE). - MAME's CPU cores: BSD-3-Clause, with each core's authors and pinned source recorded
under
src/csrc/cpu/mame_*. Their license notices accompany the add-ons. - Unicorn 2.1.4 and z180emu: GPL development references for migration comparisons, outside the 0.7 release payloads.
- The Accent SA ROMs were shared by spacepup.
- The firmware belongs to its makers: the Speak-Out to GW Micro (hardware by Daniel Weirich, software by Douglas Geoffray), the Accent to Aicom Corporation. The Braille Lite's firmware is shared with permission.
- The whole story, day by day and with who found what, is in docs/history.md.
- Thanks, Derek, for your contributions.
- And thanks to everyone listening, testing and telling me what sounds wrong. That's how a chip model turns into a voice you can read with.
The code in this repository is MIT: see LICENSE. That covers our code only. The shipping CPU cores retain MAME's BSD-3-Clause terms; Casso retains its MIT notice. Firmware and the unshipped Unicorn/z180emu development references keep their own terms.