Saturday, 26 October 2013

Today's P600fw alpha (october 26)

I took a bit of time to merge changes I made in overcycler back in P600fw, and also added a few missing features.

Here are all the changes I made:

  • Overall speedup: refresh rate at full load is now twice faster.
  • Various fixes, especially in the assigner.
  • MIDI in pitch bend & modulation wheel messages support.
  • MIDI out is now sending note on/off, pitch bend and modulation wheel messages.
  • Footswitch support, can be used to latch new chords in unison mode, and to hold the current arpeggio while arpeggiating.
  • External clock support for the arpeggiator, clock source can be changed using "From tape" + 8 (either MIDI clock, or pulse clock sent into "Cassette in". You can then choose the actual arp clock ratio using the "Arpeggiator speed" parameter, from 1/3 to 1/384).

Also, here's a description of the new user interface commands:

  • In manual mode, or by pressing "To tape" in preset mode, you get access to 20 extended parameters (2 per keypad number), the "Speed" potentiometer edits the last chosen one.

Keypad # Parameter name Choices
First press
0 Arpeggiator speed -
1 LFO shape pulse-triangle,random-sine,noise-saw
2 Vibrato speed -
3 Vibrato amount -
4 Modulation delay -
5 Amplifier envelope shape fast-exp,fast-lin,slow-exp,slow-lin
6 Bender target off,vco,vcf,vca
7 Glide -
8 Unison detune -
9 Amplifier velocity amount -
Second press

0 Arpeggiator speed -
1 LFO osc a/b target ab,a,b
2 LFO speed range low,high
3 Modulation wheel range min,low,high,full
4 Modulation wheel target lfo,vibrato
5 Filter envelope shape fast-exp,fast-lin,slow-exp,slow-lin
6 Bender range 3rd,5th,Octave
7 Assigner priority mode last,low,high
8 Osc pitch mode free,semitone,octave
9 Filter velocity amount -

  • Anytime, by maintaining "From tape" and pressing a keypad number, you get access to misc functions.

Keypad # Function name Choices
1 MIDI receive channel omni,1-16
2 MIDI send channel 1-16
3 Calibrate bender -
4 Select voice 1-6
5 Kill selected voice on,off
6 Dump presets -
7 Set basic saw patch -
8 Set clock source internal,MIDI,tape

Download links at:

A new stable release should be out soon, so please report any problem you could find. Using github issues ( for this would be cool.

EDIT: Built a new version that seems to fix "ghost" tones people had in post-beta1 versions.

Wednesday, 9 October 2013

Overcycler, the software

I worked on the software these last days, it's of course based on a good chunk of P600fw (envelopes, lfo, assigner, midi, storage, ...)

Besides a few PCB bugs I worked around in software, or using the soldering iron, the hardware works great :D

The microcontroller is really powerful, which allowed me to use very high sample rates (90Khz wih 2x oversampling, so effectively 45Khz), there is very little aliasing up to the highest MIDI notes.

Something I wasn't sure about was CV sample and hold performance (basically, it's a modern simplified version of the Prophet 600 design).
I was happy to see that it's very stable, and slew rate is great :)
 Here's a VCA envelope example:

 We can see that the fastest attack speed is below 100 microseconds (most analog synthesizers are 10 times slower !).

Noise was a problem at first, but  using various tweaks, it got much better (signal to noise ratio goes from 50db for oscillators to 100db for the master mixer now).


Here's a little demo I made recently:
(Simple saw patches, I can't use the potentiometers to tweak the sound for now)

And an older one:
(I had noise problems at that time, but it' a better raw sound demo)

I also set up a github repository for code and schematics:
(PCBs are still buggy tho)

PS: That's all for now, have a nice read :)

Overcycler, the hardware

I have now finished designing and building the hardware:

I have some more pictures there:
It's made of 5 PCBs:

- 3x Voice Card, each one having 2 voices.

ICs (per card): 2x SSM2044 VCFs; 2x MCP4922 dual 12bit DACs; 1x 74HCT4051 multiplexer; 1x TL074 op-amp.

- The VCA Board, implementing the 6 voices VCAs, and 2 more for the master mixer.

ICs: 2x SSM2164 quad VCA; 4x TL082 / 1x NE5532 / 2x TL074 op-amps; 1x 74HCT4051 multiplexer

- The Main Board, hosting the power supply, the microcontroller, the potentiometer multiplexer, the master CV DAC, and various digital I/O (MIDI, screen, footswitch, ...).

ICs: 1x mX-LPC1768-S; 1x MPC4921 single 12bit DAC; 2x 74HCT4053 multiplexers; 1x 6N138 optocoupler


I used this microcontroller kit: NGX mX-LPC1768-S It's based on the ARM Cortex M3, has plenty of peripherals, and is ultra fast.

The 12 ocillator DACs are driven by the µC through a fast SPI bus.

The analog chips are driven by control voltages generated by the master CV DAC, through sample and hold mechanisms (1 to 32 demultiplexer into reservoir capacitors into high impedance voltage followers, basically).

The master mixer has an hardwired left to right voice panning, to allow for some spatialization (inspired by the Oberheims).

Screen and keypad communicate with the µC through a standard serial connection.

I use a MicroSD card for storage, I use a MicroSD to SD adapter I soldered on the main board.

I plan to add USB-Host, to be able to plug an USB-MIDI keyboard directly, and maybe USB-Device to allow for mass storage access to the MicroSD.

My prototype PCBs had some bugs, which I hack-fixed for now, otherwise everything works nicely :)

Overcycler, a DIY 6 voice hybrid synthesizer

I'm now working on a fully DIY synthesizer project, I started it about 3 months ago.

It will be:
- An expander, in a slanted box ( ).
- 6 voice polyphonic with separate outs, 4 part multitimbral.
- Hybrid , two 12bit DACs per voice (wavetable oscillators for now), one SSM2044 filter, and 1/4 of SSM2164 VCA.
- Using a 20x4 characters LCD / 16 keys keypad / 10 potentiometers user interface.
- Using relatively simple hardware, strongly based on the KISS principle :)
- Having a strong character, each stage will allow some overdrive (filter, VCAs, ...)

I learned a lot while working on the Prophet 600, and I thought it could help me design a slightly different synth from the usual analog ones, more or less inspired  by the PPG Wave.

Nothing groundbreaking, Mutable Instruments have done this for a while, but I had an unused set of SSM2044/SSM2164, and I wanted to see how far I could go in simplifying a polyphonic hybrid synthesizer.

Korg Mono/Poly modifications (fatness, snappiness, sizzle)

(I posted this on

I got the idea of Mono/Poly pre filter changes from this cool blog:

When I compared my upgraded P600 to my Mono/Poly, I thought: either I sell it, or I try to make it better.
So I chose to change all the opamps for TL082, capacitors (using lower value tantalum for envelopes), and added a pre-filter gain and treble boost (using resistors and a cap).
The sound is now ridiculously better, the filter starts to overdrive nicely past 1 osc at half level, I have lots of treble, even past 20Khz, and while I can't do 20 seconds envelopes anymore, they are way more percussive!

Detailed changes:

- I changed all the 4558 opamps for TL082, because even if 4558 has a nice vintage sound, it's awfully slow and not dynamic. The VCOs summing amplifier (1/2 IC18 on KLM-354) would be the most important to change, I think it's responsible for the so called useless VCO mixer on the MP4!
- I changed R1 on KLM-355 for a lower value (I tried may values, 10k seemed like the best compromise between sound fatness and mixer usability).
- I added the treble boost from synthhacker, I had to choose different values to accomodate for R1.
- I changed C23 and C25 on KLM-355 for 2.2uf Tantalums, so envelopes are both faster and snappier (due to tantalums low esr).

A few demos I made after these changes : 

Changes since P600fw beta 1.0 (Alpha versions)

(July 17)

I added/changed the following things in my dev version since beta1 :

- Remade the assigner, closer to the Z80, with unison track, and priority modes that work in poly.
- Remade the user interface, there's now 2 parameters per keypad digit, one press or two, it displays a short message to ID the parameter, and you change its value using the "Speed" pot.
- Besides LFO, there's now an independant Vibrato, modwheel can be assigned to any one of those, and an automatic delay handles the other one.
- LFO can be assigned to osc A or B only.
- Unison detune.
- Speed pots now have a more progressive course.

(September 15)

I worked a bit on p600fw today, here's what I changed:

- Properly fixed envelopes attack snappiness, it goes down to 2 milliseconds on my P600, and on a friend's P600 with a new set of CD4051 (DAC sample and hold), it approaches the theoretical 500 microseconds :) (this should also fix tiny portamento glitches on envelopes start).
- Probably fixed "hot" tuning issues (I never had it, but I found a plausable explanation).
- Changed the way modulation delay works, it's nicer now (it restarts as soon as no key is pressed).
- Added "octave" pitch mode.
- Improved overall speed.
- Fixed various UI bugs.
- Changed MIDI base note (C2 now).

You can find it at: Index of /zik/p600/dev/2013-09-15

It's still an alpha version, but it's probably better than the last one.

(How to upgrade)

Yes this sysex is a firmware upgrade, but they are done in a special mode (cause main code can't overwrite itself), here's how you apply them:
Press both "from tape" & "to tape" buttons then turn on the 600, it should display "U".
Then send it the sysex, the display will show a spinning thing and end with "S" or "E", depending on success or error.
In case of error, you have to reboot and upload the sysex again until it succeeds.

If you use MidiOx, use this configuration:
(200 milliseconds might not be enough for some USB-MIDI interfaces tho, try increasing it if you always get 'E')

Still, keep in mind development versions are work in progress, they could thrash your patches, be buggy, or worse: work ;)

Sequential Circuits Prophet 600 firmware upgrade

(I wrote this for beta 1.0 manual,  but I think it should also be there...)

I love vintage analog synthesizers, and to be honest, my dream synth would be a Prophet 5, but when I heard what the Prophet 600 was capable of tone wise, I immediately thought its major weaknesses -- the lousy computer part, software envelopes and LFO -- could become its strength with a remake; basically the whole internal synth in voltage-controlled from a nice 14bit DAC, so with a fast modern microcontroller, it could become awesome, maybe even better than a Prophet 5!

I'm a long time coder, I love embedded/bare metal stuff, electronics. Synth wise, I’ve already worked on 2 projects:
  1. An Atmel based two DCOs + SSM2044 monosynth:
  2. A custom USB programmable wave data cartridge for the Yamaha RX5:
I started this project by making a PC emulator of the P600 digital hardware in order to learn how it worked -- and because at that point I didn't have a P600. Using a Z80 emulator library, the service manual and MiniSystem's blog, I was able to get it working to the point where I could see the CVs reacting to knob changes, envelopes and all...

Next, I scrapped the Z80 library and started writing my own C code which I compiled in a library and loaded in my P600 emulator/simulator so that it could do basic things like driving the analog synthesizer CVs, scanning the keyboard and displaying stuff on the 7-segment.

Then, I was lucky to find a mint P600 45 minutes from my town and bought it. Within a few hours, I had my C code working on it; I just had to write the Teensy low level pin interface, the rest was the same as in the simulator.

This was the point at which rewriting the firmware could really begin -- subsystem by subsystem -- including the envelopes, tuner, assigner, LFO. etc., until this beta, which I hope you will enjoy as much using as I did while developing! At times it was painful too, but nothing even remotely ambitious is ever simple I guess... :)


Welcome to my new blog about DIY synthesizers, synthesizer modding, and analog music gear as a whole.

Few years ago, I was more into Xbox 360 hacking, but then I started buying analog synthesizers, composing music with them, and also modding them.

I used to post about it in various forums (, ) but I thought it was time to centralize it in to a blog, to here it is :)