The Ultimate CPC MIDI Sound & Interface Card

Building a state-of-the art CPC MIDI Synthesizer with the Blue Pill, Serdashop's WaveBlaster S2, and Adafruit's MIDI Feather Modules

Similar projects worth following
I am building a MIDI synthesizer / MIDI interface for the Amstrad CPC line of computers. Features:
- Blue Pill-based (72 MHz)
- Send and receive MIDI data from (resp. with) the CPC
- Standalone MIDI Instrument
- MIDI Soft Through
- Flexible MIDI routing
- GM MIDI Sound Card for the CPC
- MIDI Interface for the CPC
- Works with Serdashop's DreamBlaster S2, Dreamblaster X2, E-Wave, McFly, and even the Yucatan FX GM MIDI Modules
- Only one additional chip required for address decoding (GAL22V10), since the Blue Pill does not have enough 5V-compatible GPIOs
- Minimal and versatile IO extension card to the CPC, using only software ISR's for IOREQ READ and WRITE handling (no additional \WAIT circuitry required, 72 MHz Blue Pill is fast enough to do that in software)

Part 12:
I have a new favorite sound module for the Ultimate MIDI Card - the X2 GS! It really sounds as good as my Roland Sound Canvas. The GS certified Roland MIDI sound bank makes all the difference in terms of sound quality. Whereas I was a bit disappointed by the X2, the X2 GS exceeded my expectations! Really an amazing sound module. Hence, I recommend the S2 for the price sensitive customer, and the X2 GS as the audiophile no-compromise-MIDI solution. Listen to the X2 GS here; this is a line-out recording. Sound starts at 2'10:

Part 11:
Thanks to PCBWay for sponsoring this project by giving me a free batch of PCBs!

They are thick and sturdy and I can recommend them. I am making this endorsement as an individual, and it should not be construed as coming from or being related to my employer in any ways. Interestingly, the PCBWay PCBs appear to be identical to the Seeed Fusion PCBs to me (maybe they are even using the same factory?) This is of course speculation.

Anyhow, I have assembled one with the new PCBWay PCB, and you can see and hear it in the following video, where I am comparing 4 different MIDI options: the Roland Sound Canvas, the S2, the McFly, and the EWave, all but the Sound Canvas are from Serdashop. The S2 is still my favorite. The line out audio of the EWave is at a lower level by default, and the McFly gave up on the MIDI data. It doesn't like the song it seems, there is some MIDI data in the song which makes it give up. Maybe the complexity of the song data is too high. Anyhow, there might be other songs which play fine with the McFly, I have to investigate that a bit further. However, it seem the S2 has highest line out levels and best clarity; the filtering (?) on both of the McFly and the EWave is too strong IMHO, they lack a bit of clarity. I will try another MIDI song on the McFly at some point to get a better understanding of what's going on.

Part 10:
Complex MIDI playback from the CPC, standalone. I took some time to implement the MIDI data stream recorder in Z80. It is basically a CPC MIDI realtime "sequencer" (without quantization) that just records and stores to memory all incoming MIDI messages, clock-indexed. To record data, I can just playback a MID file with the PC and stream the MIDI data into the CPC via a USB MIDI cable. The MIDI data gets recorded into CPC memory, and can then be played back standalone without requiring the USB MIDI cable and PC. I can also save the song data to disk, obviously. So I now have a way of playing back complex MIDI songs from the CPC standalone, without having to "program" them or having to use a tracker / composition program on the CPC. The standalone CPC MIDI song player & recorder is demonstrated in the video below. As usual, the assembler source code, and the 8 GM MID song fragments demonstrated here, can be found in the Github repo:

Part 9:
The project was well received on my YouTube channel, and I already sold the first batch. I have ordered another batch of PCBs. Thanks for the warm reception, CPC fans!

Part 8:
Thanks to OshPark for the super-swift service upgrade - the PCBs were back in record time, in flawless quality, and what's most important - they worked out of the box!

Part 7:
Prototype PCBs were designed and submitted to OshPark, Fingers crossed!

Part 6:
The breadboard is finished by now. I have added a DIL switch for option settings, i.e. MIDI and audio routing options: 

| Switch | Explanation                       | 
|   1    | Route CPC to S2                   | 
|   2    | Route CPC to MIDI OUT             | 
|   3    | Route MIDI IN to S2               | 
|   4    | Route MIDI IN to MIDI OUT         | 
|   5    | Route S2 L Channel to CPC Speaker | 
|   6    | Route S2 R Channel to CPC Speaker | 
|   7    | 1 = Enable card - make sure 8 = 0 | 
|   8    | 0 = Enable card - make sure 7 = 1 | 

Also, the S2 is now getting a proper reset signal at startup...

Read more »

  • Amazing GS / GM MIDI Sound with the X2 GS Module!

    Michael Wessel08/12/2021 at 05:59 0 comments

    The X2 GS is amazing! The licensed & certified GS soundbank in the X2 GS makes all the difference - whereas I was a bit dissappointed by the X2, I must say that the X2 *GS* sounds as good as my Roland Sound Canvas. I can highly recommend this module; now I have 2 clear favorites: the S2 for low-cost, and the X2 GS for high-end GS / GM MIDI Sound. Both are worth every penny! Thanks to @serdef for making it.

  • More MIDI Modules...

    Michael Wessel06/14/2021 at 15:08 0 comments

    I have also ordered a McFly and an E-Wave from Serdashop - these should work as well, same S2 connector! I am also going to order a Yucatan-FX later this year. Great that there is such a plethora of S2-compatible midi modules to choose from!

View all 2 project logs

Enjoy this project?



adam.klotblixt wrote 05/29/2021 at 16:28 point

Congrats on your fast success! Nice to see/hear it working.

  Are you sure? yes | no

Michael Wessel wrote 05/29/2021 at 17:19 point

Thanks Adam! And when I am done, I am going to make the sources public, as usual. Cheers Michael

  Are you sure? yes | no

adam.klotblixt wrote 05/26/2021 at 14:01 point

I've read that the Z80 refresh is disabled during WAIT, so memory might corrupt if you hold it too long.

  Are you sure? yes | no

Michael Wessel wrote 05/26/2021 at 15:16 point

That might be the case for Z80-based computers that rely on the Z80 for DRAM Refresh. The CPC does not though, so you can hold it as long as you want. The
Z80 is not refreshing the DRAM in the CPC, and there are actually very few Z80-based old computers that use the build-in Z80 hardware DRAM refresh feature. Most of them implement their own refresh logic.

  Are you sure? yes | no

Michael Wessel wrote 05/20/2021 at 19:42 point

Thanks Adam, yes - the Blue Pill has awesome performance for its price tag. Tensy 4.0 might also be tempting... if it only was 5V-compatible! So I rather go with the Blue Pill for now and the extra GAL for address decoding, that's still a cheaper and easier setup than all the additional level shifters I would need for a more powerfull MCU like the Tensy 4.0.

I will post it at some point when it does a little bit more.  At this point, it is nothing more than the GPIO port declarations, and an ISR that handles both IOREAD and IOWRITE requests coming from the GAL. To be sure I am not missing the databus value, I also halt the Z80 CPU long enough for IOWRITE requests to get a stable databus readout, and also while switching the databus GPIO from input to output  while serving the IOREAD request (and while switching it back to input mode again after the IOREAD request was served).

  Are you sure? yes | no

adam.klotblixt wrote 05/20/2021 at 19:06 point

Would love to have a look at the Blue Pill code. This is a great way to build cheap expansions to many retro computer systems.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

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