Close
0%
0%

LambdaSpeak 4 aka LambdaSpeak AI

Where we harness the power of AI and OpenSource to spin a new generation of LambdaSpeak 3 for the Amstrad CPC # RC2026/10 Entry! #

Similar projects worth following
The successor of LambdaSpeak 3, built with AI: LambdaSpeak AI. Speech, sound, MP3, MIDI, ROM emulation, DSK emulation... what else?? And for a third of the price of LambdaSpeak 3!

https://www.retrochallenge.org/p/entrants-list-202610.html

LambdaMikel


LambdaMikel's avatar Platform: Amstrad CPC
Project :

In 2018, LambdaSpeak 3 brought new dimensions in speech synthesis and sound to the Amstrad CPC. It's MikroE S1V30120 text2speech module offered DECtalk - for the first time, CPC users could enjoy natural sounding speech synthesis on the CPC. It was also able to emulate the vintage Amstrad SSA-1 and DK'tronic speech synthesizer, which used the infamous GI SP0256-AL2 chip. Now, 8 years later, we have incredibly powerful MCU, in particular, the RP2350. Harnessing the power of OpenSource and AI, using Claude Code, we are realizing LambdaSpeak 4. The device will need minimal hardware. The firmware was already written by Claude - I will design the PCB and hopefully, by the end of the month, we will have a fully working LambdaSpeak 4, at a third of the LambdaSpeak 3 price, but with some amazing new features as well!


RetroChallenge 2026/10 Three Quarter Update: 

https://www.retrochallenge.org/p/entrants-list-202610.html 

RetroChallenge 2026/10 Halftime Update: 

https://www.retrochallenge.org/p/entrants-list-202610.html 

  • ALMOST FEATURE COMPLETE!

    Michael Wessel • 16 hours ago • 0 comments

    New video: 

    One RP2350B doing the work of a shelf full of expansion cards. Here is what is running, all of it demonstrated in the video:

    • Speech. DECtalk voices, plus SP0256 emulation faithful enough that period software finds the hardware and talks — the animated vector head included, now running from a ROM instead of a disc.
    • The clock. A DS3231 that speaks the time, date and temperature, and can also be read into BASIC variables. |BIGCLOCK shows it in big digits using my own font from 1987, lifted out of ZAHLEN.BAS on an old MW-Soft disc — eleven glyphs of ten rows of seven, exactly the 770 bytes that program saved.
    • MIDI, both ways. Ultimate MIDI Card emulation and LambdaSpeak 3 style serial MIDI. ALF plays through it, and MIDI in drives the drum machine.
    • LambdaDrum. Eight voices, sample playback, driven from a BASIC drummer.
    • Amdrum. Write-driven 8-bit PCM, compatible with the original 1980s software — the real AmDrum.dsk runs.
    • MP3 playback through the serial module, with transport control.
    • ROM emulation. Four 16 KB slots in the card’s own flash, so a CPC carries four expansion ROMs on one board and they swap without a programmer or a PROM. There is a GUI uploader for them now: one pulldown per slot, the images offered by name, and a slot can be silenced if a ROM ever hangs the machine.

    A ROM of its own

    The card has its own expansion ROM, LAMBDASPEAK AI, with 53 RSX commands — speech, the voice modes, the settings and their getters, the clock, MP3, MIDI, the drum modes, Amdrum, the sample store, and |ROMUP, which lets a CPC reflash its own expansion ROM from BASIC.

    TFM’s original LambdaSpeak III ROM boots on the card too, and most of it works. Rather than port it, we decoded its whole command surface out of the ROM image — all 79 of its RSXs — and wrote a fresh one against the current protocol instead. The old one was built for 2021 conventions this card has deliberately moved on from, so a clean start made more sense than chasing compatibility.

    Credit where it is due

    Claude Code did most of the work here — firmware, protocol, the ROM, the tools, the documentation. I did the testing on real hardware, the steering, and a fair share of the ideas and diagnosis; several of the trickier bugs were found by me watching the CPC and saying “that is not what it should sound like”. It has been a genuinely good way to work on something this fiddly.

    What is next

    A bit of debugging first — |SAY from the new ROM still trips over a race in the card’s text handling, and a few of the 53 RSXs have not been exercised at all yet. Everything else in the video is real.

    After that, the two things I would most like on this board:

    • Disc emulation. The card already answers the expansion bus and already serves 16 KB ROM images out of its own flash, so a DSK on the Pico’s storage is a natural next step. The timing is the easy part; the data separator is where the work is.
    • PlayCity emulation, maybe. Two more AY chips and a CTC would give the CPC six extra sound channels, and this card is already mixing four sources in software — so it is more a question of bus cycles than of audio.

    Neither is a RetroChallenge-sized job, but the card has turned out to have room for both.

  • ROM Emulation working!

    Michael Wessel • 5 days ago • 0 comments

    By now, we also have ROM emulation working. LambdaSpeak AI can emulate the DK’tronics speech synth (SP0256-AL2), and it came with an RSX extension ROM providing BASIC RSX commands such as |say (Navy text-to-allophone rule-based algorithm). In addition, there are four more slots for arbitrary foreground / background ROMs; here with Boulder Dash. There is a simple Python client, and ROMs load over USB in ~1 second: 

  • RetroChallenge 2026/10 - Halftime Update

    Michael Wessel • 7 days ago • 0 comments

    HALFTIME: IT SPEAKS

    Thirteen days ago the boards were at the fab. Today the card said hello to a CPC 464, sang its own name, read out the date and temperature, played an MP3, and exchanged MIDI with a microKORG.

    It also has a new name. The silkscreen says LambdaSpeak AI now, which given how this project is being built seemed more honest than “4”.

    The day in one line

    A bare PCB at breakfast, a talking CPC by midnight. One day of bring-up cleared nine of the numbered steps in the test plan, leaving two:

    step
    1bLED bar, activity LEDs✅
    1cbuttons✅
    2banalog path, filter, trimmers, mixing✅
    3the CPC bus✅
    3bSOUND injection✅
    4speech — SSA-1 and DECtalk✅
    6serial / MP3✅
    6bMIDI in and out✅
    6c>td >✅
    5LambdaDrum—
    7ROM emulationwall hit, diagnosed

    The moment that mattered: PRINT INP(&FBEE) returning 128. That single number is cpc_bus.pio catching a real Z80 I/O cycle, decoding &FBEE off sixteen address lines, turning the ’245 around, putting the status byte on the bus and the Z80 reading it back — the entire job the CPLD used to do, running in PIO. Then OUT &FBEE,27:OUT &FBEE,7:OUT &FBEE,45:OUT &FBEE,53 — HH1 EH LL OW — and the card said “hello”.

    Six things that were wrong

    Nothing worked first time, and the failures are the interesting part.

    1. The data buffer was pointing the wrong way. U1‘s A side faces the connector, and a 74LVC245 sends A to B when DIR is high — so high means the CPC drives us, and low means we drive the CPC. The PIO had it inverted, so the card sat on the Z80’s data bus continuously. The 464 showed the grey screen of death and never reached BASIC. U1’s CE is tied to ground, so there is no high-Z to fall back on: direction is the only control there is.

    2. The read responder could never match an address. in pins, 16 with the ISR shifting right puts incoming data in the MSBs, leaving addr << 16 to be compared against a plain 0xFBEE. Every read took the skip branch. The write watcher uses the same setting harmlessly because it does in pins, 32, where a full-width IN fills the register either way — which is precisely why the two programs look consistent side by side.

    3. Four pins of U4 were not soldered. /IORQ, /RD, /WR and /ROMEN never reached the Pico at all, while /RSET on the pin right next to them worked perfectly. This one was found in software: a ‘245 output beats a 50 kΩ pull, so flipping the RP2350’s internal pull and watching whether the level follows separates “nothing is driving this pin” from “something is holding it”. Five lines of C turned “the bus doesn’t work” into “U4 pins 15 to 18” in one command, with no scope and no magnifier.

    4. The write watcher was drowning. It triggered on /WR, so it caught every memory write the Z80 did — four million of them — and sorted I/O from memory in software afterwards. The RX FIFO is four deep and discards silently when full, so an OUT to our port stood a good chance of being thrown away in the flood. The symptom was speech that dropped the odd allophone. Gating on /IORQ keeps memory cycles out entirely.

    5. ROMDIS was fighting the disk interface. With the card installed, the DDI-3’s Parados ROM vanished completely — cassette-only BASIC, no banner. U5 is push-pull, so it does not release ROMDIS, it holds it low for as long as the card is powered, and a 2.2 kΩ pull-down cannot lift a totem-pole output. The DDI-3 could never assert the line.

    The design notes had predicted this exact failure months ago, named the diode as the fix, and consciously decided not to spend the part because “stacking two ROM cards is unusual.” The very first machine this card met...

    Read more »

  • 10/13/2026: PCBs arrived - on time for the RC2026/10 halftime update!

    Michael Wessel • 10/13/2026 at 11:34 • 0 comments

    The PCB arrived from the fab - now it's time to bring it up. This is quite a bit of soldering, so I am not sure I can make it 'til the "halftime update" for the RetroChallenge by 10/15/2026, but I'll try! Latest, I should have it up and running the coming weekend. Stay tuned! Hopefully, there will be first YouTube video soon. If not - consider this log post my halftime update :-) 

    Image

  • Let the RC2026/10 Challenge begin!

    Michael Wessel • 10/03/2026 at 15:18 • 0 comments

    LET THE CHALLENGE BEGIN!

    RetroChallenge 2026/10 is three days old and the boards are already at the fab. That is either excellent planning or a sign that I am going to spend the other twenty-eight days debugging. Probably both.

    What LambdaSpeak 4 is

    LambdaSpeak 3 is a speech synthesizer, sample player, serial interface and real-time clock for the Amstrad CPC. It does all of that with a pile of increasingly hard-to-find silicon: an Epson S1V30120 running DECtalk v5, an SP0256-AL2 for the authentic 1980s robot voice, an ATmega644P to run the show, an XC9572 CPLD to decode the bus, and a 25LC1024 EEPROM for samples.

    LambdaSpeak 4 replaces every one of those with a single RP2350B module.

    LambdaSpeak 3, built todayLambdaSpeak 4
    board parts$80.78≈ $19
    off-board modules$42.00$7.00
    PCB$10.00$10.00
    total≈ $133≈ $37

    The difference is almost entirely five parts:

    $50U4 SP0256-AL2 — vintage, out of production. Emulated.
    $35Epson S1V30120 TTS click board. DECtalk in firmware.
    $7U1 ATmega644P, DIP-40
    $6 + $2.50U2 XC9572 CPLD and its PLCC-84 socket
    $2.50U3 25LC1024 EEPROM
    ≈ $103replaced by one $5 module

    A single SP0256-AL2 now costs more than an entire LambdaSpeak 4. At that price it is not a component any more, it is a collectible — which is the strongest argument there is for emulating it rather than socketing it.

    And it is not a like-for-like comparison in the other direction either: this card also does expansion-ROM emulation, LambdaDrum, and MIDI in and out.

    The division of labour

    This project is an experiment in working with an AI rather than just asking one for snippets, so it is worth being precise about who did what.

    Claude designed the electronics. The schematic is not drawn — it is generated. There is a Python file, netlist.py, that is the single authoritative description of what connects to what, and gen_sch.py turns it into a KiCad schematic with deterministic UUIDs, so regenerating never disturbs the board. Claude wrote both, plus the symbol library, the Core2350B and CPC-connector footprints, the firmware, and a checker, diff_netlist.py, that reads KiCad’s own netlist export back and compares it to netlist.py node for node. It has to say “MATCH — every net agrees” or something is wrong.

    That paid for itself repeatedly. Three examples that would all have been dead boards:

    • The 3-way DIP switch SW2 was wired as if poles were pins 1-2 and 3-4. They are numbered around the package — 1&6, 2&5, 3&4 — so as drawn, closing the first switch would have shorted the audio buffer output straight to ground.
    • D1‘s cathode went to a +5V net that reached one capacitor and nothing else, so the CPC’s supply would have stopped at a reservoir cap and the card would only ever have run on USB.
    • The MP3 module header was reversed. The manual lists the pins in one order and the module’s silkscreen in another; it took a photo of LambdaSpeak 3 and a read of its sources to settle which.

    I did the PCB layout. All of it — placement, the octagon outline, the silkscreen, the artwork. That is the part no generator was going to do, and honestly the part I enjoy most.

    And we argued about it a lot, which turned out to be the useful bit. More on that below.

    Image

    Image

    The board

    Two layers, 119.4 × 107.3 mm, 79 footprints, 131 nets, 1642 track segments, 122 vias, and a ground pour on both sides.

    Around the edges: MIDI IN and MIDI OUT on proper DIN sockets, a 3.5 mm line out, a 3.5 mm MP3 in, and the CPC MX4 edge connector along the bottom. The MP3 module and the DS3231 clock mount on the back, on headers, exactly as they did on LambdaSpeak 3.

    Across the top is the ten-segment LED bar — five segments of mode and five of level meter, both lit at once, which matters in Amdrum and LambdaDrum where...

    Read more »

View all 5 project logs

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates

Image