Friday, 29 August 2014

New P600fw alpha (august 28)

Notable changes:

- Incorrect Osc B tuning problem fixed on at least one P600.
- Voices CVs are now updated even when the voice isn't playing (fixes wrong notes attacks after a while).
- Pot value display range is now 0..99 or -50..49 depending on the pot.
- Fixed problem with wheels resolution.

Download links at: http://sfx.gligli.free.fr/zik/p600/dev/2014-08-28/

Saturday, 16 August 2014

Matrix 1000 emulator

I just added a Matrix 1000 emulator I made on github: https://github.com/gligli/m1k-emu

It emulates enough of the hardware to be used as a development tool, of course it won't produce sound but it can read MIDI in, buttons and display CVs/7segment/LEDs/...

Here's the binary: https://github.com/gligli/m1k-emu/raw/master/usim.exe (it's a command line tool)
You'll need these DLLs besides the exe too: libgcc_s_dw2-1.dll libstdc++-6.dll

Tuesday, 12 August 2014

New synth hacking project: Faster CPU & firmware mod for the Oberheim Matrix 1000

(I already began posting about it in this gearslutz thread, this will only be a recap)

The Oberheim Matrix 1000, while being a proper 6 voices DCO analog synthesizer rack, has a pretty bad MIDI implementation (50Hz update rate, editing some parameters lock up the synth for seconds, some don't even work,...).
Considering MIDI is the only way patches can be edited, this makes it a serious drawback!

Recently, Nordcore, a guy from a german forum started disassembling the firmware ROM and publishing a few patches to make the MIDI better (see this gearslutz post).
My goal was to go further and replace the CPU by a faster and compatible one, so that it leaves room for speed improvements.
  1. Hardware

  2. So, I desoldered the old 6809, soldered a 40pin socket in its place, I also added a socket for the 8Mhz crystal.
    The CPU I now use is a HD63C09P, it is compatible with the 6809, but can run at higher clock speed.
    I clocked it with a 16Mhz crystal, so twice the original speed.
    I had to add a CD4040 on top of the CPU and solder a few wires to divide that clock by 2 for the peripherals (MIDI UART, DCO Timers).

    I also made myself a sort of devkit by replacing the firmware ROM by a RAM chip and a microcontroller to update it, the wiring is really ugly but it works fine so far.

  3. Software

  4. The whole synth engine is updated in an interrupt that is clocked by one of the external 8254  which is running at 50Hz stock.
    My first mod was to make it 4 times faster, process incoming MIDI all those 4 times but update the synth only once in the same period. That way the sound engine still runs the same (envelopes, LFOs, ... stay at stock speed) but MIDI is processed much faster!

    This allowed for much smoother MIDI, yet some parameters like VCA level or VCF envelope amount were still hogging the synth.
    It turns out each time a MIDI message is received, the synth is directly updated, and for some parameters it can take a few hundred milliseconds, so if the MIDI message queue has many pending messages, the wait can rapidly become seconds!
    Nordcore had the following idea: don't update the synth for each MIDI message, but instead raise a flag, and do the update only once per interrupt.
    I implemented it and it works quite fine, editing those parameters isn't perfectly smooth, but one can say it is realtime editing, at last :)

    Last but not least, 50Hz updates means the fastest envelope time is 20 milliseconds, which is quite bad. The CPU being at least twice faster, getting this to 10ms this was perfectly doable.
    I chose to implement it as a turbo mode (enabled by pressing '+' while powering the synth) that doubles the speed of everything (Envelopes, LFOs, ...).
    At first I wanted to have turbo mode always-on while maintaining patch compatibility, but it's not really doable, as there would always be some minor differences in sound due to the odd way the Matrix 1000 handles time based parameters.

Picture of the mod: http://sfx.gligli.free.fr/zik/m1k/m1k_new_cpu.jpg
Quick demo of realtime editing over an arp: http://sfx.gligli.free.fr/zik/m1k/m1k_midi_tweak_demo.mp3
Wiring diagram: http://sfx.gligli.free.fr/zik/m1k/m1k-wiring.pdf
My modified firmware so far: http://sfx.gligli.free.fr/zik/m1k/MATRIX_123_R2.BIN (this is a modified stock firmware, if Oberheim or anyone has a problem with it, I can publish a patch instead)

PS: The firmware was only tested on my own Matrix 1000 so it is alpha quality for now!