The Amstrad CPC 464 - or: Schneider CPC 464, as it was branded in Germany - was my first real home computer (I started with a Busch 2090 Microtronic in 1984, which was a CPU trainer, similar to the KIM-1). I got the CPC from my parents in April 1985. I was always fascinated with speech synthesis - and so I had to get the DK'tronics speech synthesizer for the CPC in June 1985. I must say that I was disappointed with the quality of the speech that was delivered by the SPO256-AL2. The voice was very unnatural and hard to understand; by then, the software-based speech synthesizers that I had seen on the Commodore 64 and Atari 800 (e.g., "S.A.M."), and especially on the TI 99/4a, were so much better... Back then I thought - well, maybe one day I can create a more natural-sounding speech synthesizer for the CPC on my own. Then, when the Emic 2 was released, the idea of creating a "next-generation speech synthesizer" for the CPC popped up again - and here it is!
Some details: I used Lattice / Atmel G16V8 PLD's for the address decoding, and WinCUPL for programming them. WinCUPL does not work currently on Windows 10, so I had to use an old Windows XP installation - I guess there are other tools (Atmel Studio?) for programming them, but WinCUPL is easy to use and a good start for beginners. I got the idea of using the G16V8's for address decoding by looking at similar designs. For the Atmega 328, I did some Arduino projects before and wanted to go one step farther, so I read a book about AVR Programming and used the AVR gcc toolchain instead of the Arduino IDE this time. The other "glue logic" components are standard 74LSxx chips.
After a longer learning period about the CPC 464 expansion port, the way the Z80 handles IO requests, address decoding, and Z80 data bus latching, a first breadboard prototype as shown in this video was working, but the microcontroller software was not optimal yet:
To take it to the next level, I decided I wanted a real PCB, and started to learn KiCad. Some great tutorials on the web (such as "Getting to Blinky 2.0") helped me tremendously. Finalizing the microcontroller programming turned out to be challenging; it had some severe synchronization and timing difficulties between the Atmega 328 (16 MhZ) and the Z80 in the CPC (4 Mhz). But the hard work finally paid off - the PCB worked out of the box:
In the following days, I will add some more details about the challenges I faced during realization of this project, and how I overcame them. For now, just a couple of pictures, stay tuned ;-)