Wednesday, October 9, 2013

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... :)

1 comment: