Matrix-1000 sensation: Rare bug spotted in the wild after 30-odd years!

An option for setting voice allocation in the Matrix simply does not work – never has – and nobody seems to have noticed up to now. But there’s a fix for that.

A cute golden bug akin to a cricket looking above the edge of a circuit board

“Hey, I want that update! Especially as I already own V1.20!” — PLEASE READ HERE

A couple of days ago, Bob Grieb – the engineer behind the Matrix-1000 update I am selling here – got a email from a Matrix owner using the updated V1.20. The mail politely noted that the “Reassign/Rob” setting wasn’t working, and inquired whether there might be a problem with the V1.20 firmware. Bob, who does no longer own a Matrix-1000, fired up a Verilog simulation he had created for testing, and found that the Matrix owner indeed was right – the “Reassign/Rob” setting of Parameter 48 (0x030h) wasn’t working, and it wasn’t working in firmware V1.13 either – a very early patch of the last factory firmware by Oberheim itself.

So it was a bug that had always been there, and nobody seems to have noticed. Or, at least, have cared enough to look for a fix.

What “Reassign/Rob” is supposed to do – and why you never noticed

The Matrix-1000 has six voices. When your Matrix is playing six notes at once, it won’t accept any new notes unless you release one of the notes being played. This is the default setting, and it comes in two flavours, “Rotate”, and “Reassign”. They are set with values 0 and 1 of parameter 48, and the Matrix-1000 manual also has two more settings, Unison (all voices playing at once), and “Reassign/Rob”.

The Matrix-1000 manual is a bit cryptic about the meaning of all this; quoting from the Matrix-6 manual instead:

  • ROTATE: When playing notes on the Keyboard, this polyphonic mode loops through the six Voices assigning each new note to next available voice.
  • REASGN: Abbreviation for “Reassign”, this polyphonic mode is similar to ROTATE but notes that have the same pitch (otherwise known as “note value”) are reassigned to the same voice. For example, if you play Middle C it will be assigned to a certain voice. Every time thereafter when Middle C is played on the Keyboard, that voice will play. “Reassign”, by the way, is the KEYBOARD MODE enabled in the Basic Patch.
  • UNISON: This mode takes the MATRIX-6 out of polyphonic mode and makes the synthesizer monophonic.
    (…)
  • REAROB “Reassign Rob”: When in Reassign (REASGN) mode, voices will be robbed from keys held in the same way as ROTROB.

So what the “Reassign/Rob” value actually is supposed to do, is to enable voice stealing — notes being played suddenly go missing, making it painfully obvious that your synth is running out of resources. It is infuriating when we notice, and we seem to notice the limitations of a 6-voice synth a lot more when notes suddenly vanish than when they never appear in the first place.

So to be honest, I never noticed that this doesn’t work. Did you?

Bob, however, found the reason: The code for the note-stealing setting is 3, but there is a safety check that limits the parameter to entries from 0-2 instead of 0-3, so that the correct value can never be received. It’s only one byte that has to be changed – no, one bit, actually: Look for 0x81 0x02 0x22 0x02 in the ROM and change it to 0x81 0x03 0x22 0x02; changing one lousy bit. It’s that simple. And this is what we decided to call V1.21.

A rack with a controller, a Matrix-1000 synthesizer, and a Lexicon digital reverb; the Matrix showing

V1.21 is displayed on powering up

So how do I get it?

Unfortunately, this means that we will have to throw all V1.20s away, we cannot correct them. The one bit we have to change cannot be reprogrammed, so to upgrade from V1.20 to V1.21, you have to create a new chip, send it, and swap it.

And this is the main reason we don’t give the update away – this needs chips, and this takes work, so we charge you what is basically just the price of the chip and a fiver for programming it, and one Euro for Bob. We had a similar deal for Matrix-6 V2.14 owners when Bob discovered another bug that had always been hiding in the Matrix-6 firmware — and I hope you think that this is fair, because it is: after all, the bug wasn’t Bob’s fault, so he is in no obligation to fix it for free.

One last thought: ask yourself whether voice stealing is really worth the hassle. I know perfectly well that it’s quite possible to go GASsing for a software update, but: If you haven’t noticed the bug before, you probably won’t need the patch.

M1000 V1.20->V1.21 Update

Matrix-1000 V1.21 Firmware Update ROM for V1.20 owners

Item number: 0002
Item price: 12,00 EUR
(incl. 19,00% sales tax and plus Shipping cost)
ROM chip with re-engineered firmware for the Oberheim Matrix-1000 synthesizer

Firmware chip for the Oberheim Matrix-1000, V1.21 (Update for V1.20 owners)

V1.21 fixes a bug that prevented using voice stealing in all former firmware versions and assumes that you own a V1.20 license, i.e. bought the chip from me, Alpes Machines, or Bob Grieb. Price covers the chip and the burning of the firmware but not the license for the update - if you don't have an updated synth yet, you will have to buy a V1.21 new. Firmware update engineered by Bob Grieb/tauntek.com. Sold with permission, please prove ownership of a V1.20 license. (That doesn't cover anything you bought from some guy on the internet, I'm afraid.)
   

Stereoping Hardware Controller for Crumar Bit

Stephan (aka umusic6) did some nice work:

Thanks to his efforts, there is now a Bit Edition of Stereoping’s Synth Controller, for Crumar Bit-01/One/99 with the Tauntek firmware. You can read up on the firmware, or order it, here.

(No, this is not an affiliate link, I have no share in this. But I think it’s a great project.)

Oberheim Matrix-6 and Matrix-1000 firmware update on eBay

Bob Grieb’s brilliant firmware rewrite for the Matrix-6 and Matrix-1000 machines has been in testing for some time. The code seems to be running fine and is definitely a huge improvement: Matrix-6 owners will gain a machine that is much more responsive, and has been ridded of a couple of nasty bugs. And even for Matrix-1000 owners that have been using GliGli’s v1.16 patches, the new software offers, in my humble and slightly biased opinion, great advantages.

Matrix-6/R Firmware V2.14 in box

Bob has started shipping EPROM chips containing the new code to people who do not have an EPROMMER available, and I’ve agreed to doing the same thing over in Europe. The price for the update is €25 plus shipping,this contains a payment to Bob as a recognition of the endless hours he spent in analysing and rewriting the code.

You can find a first batch of Matrix-1000 update PROMs on eBay, as well as update PROMS for the Matrix-6 and 6R – if they are gone, just follow one of the links below – there are order forms at the end of those pages.

 

Resetting a Matrix-1000 with a new battery

03-2020: Two important updates: There is a much simpler way to reset the memory in the Matrix – just hold the ENTER key while switching it on. You may have to repeat that a couple of times to get a stuck Matrix unstuck. And if you consider changing the battery yourself, you can find a step-by-step description with video here.

Happy days! Bob Grieb just sent the newest iteration of his brilliant firmware rewrite for the Oberheim Matrix-1000 for testing – a firmware that breathes new life into the old 8-bit hardware by optimising critical routines for a couple of crucial parameters. Smooth real-time control, very musical; in my opinion, even better than GliGli’s great v1.16 hackI’ve described the differences in this Gearslutz post –  and, in the last couple of iterations, displaying the value of edited parameters.

(I used Modstep as a drum machine/sequencer on the iPad, and my Matrix-1000 control panel for TB Midi Stuffother than the new iPad editor, it does produce smooth parameter sweeps.)

Well, to change the firmware, you have to open the Matrix and exchange the firmware EPROM for a new one, and doing that, I’ve noticed that this machine was still equipped with its original battery. By lucky chance, I am the proud owner of two Matrixes, and the battery in this one has been doing fine – what kind of super battery did they use in these days, has been in service ever since 1989, and still producing fine 3.0 Volts of power – but I decided to exchange it anyway for a new CR-2032.

As you might know, the battery in the Matrix-1000 is soldered in with most machines, as it was customary with most synths from these days. I guess they never thought that they were building for the anoraks of the future. No problem, I came across battery holders with the same 20.5mm raster used in the Matrix – so no need for drilling, just a simple solder-and-replace job. While soldering, I bridged the backup battery voltage with an external power supply, and I even thought of desoldering the GND terminal first – the rationale behind this being that soldering pens are earthed, so by soldering the positive terminal first you might short out the battery. (Actually bollocks, but I did it anyway.) So I saved my precious memory settings while soldering in the battery holder.

Only to slide in the new battery the wrong way round.

You might not have realised – well, I never do – but the pad connector of a CR2032 is actually the GND terminal, and the housing is Vcc. And is labeled with a clearly visible “+” sign. Well, I put the battery in the wrong way round anyway, thereby effectively losing all my patch and memory settings.

Foto 10.01.16, 16 43 46

The battery in its new holder, now in the correct position: the plus terminal facing upwards

This is, of course, no big deal. I keep moving sound banks between my two Matrixes anyway, so I have pretty recent Sysex backups. Unfortunately, the unbuffered RAM chip lost just enough memory to put the machine into an undefined state – it would no longer boot beyond the init routine displaying the firmware version.

So: How do you factory-reset a Matrix-1000 synth?

I ran into this problem before when I equipped my other Matrix with a new CPU – as you can imagine, this gave me some really bad moments. But factory-resetting an M-1000 is simple:

  • Switch off the the M-1000, disconnect it from mains, open it.
  • Disconnect the battery. Leave it disconnected.
  • Switch the M-1000 on, draining its buffer capacitors. Leave it for a couple of seconds – the completely powerless RAM should be all FF’s now.
  • Connect the M-1000 to mains, and switch it on. It should start now.
  • Do a calibration run, just to be sure. (Navigate to Ext. Funct., select 7, Enter, select 2, Enter.)
  • Reconnect the battery.

Done. Now you may switch off the Matrix, or supply it with fresh patch data.

Foto 10.01.16, 16 44 19In case you may have wondered, there is a very simple and effective way to disconnect/reconnect the battery in a running machine: push a strip of paper between the battery and the battery holder’s terminal. Remove it to reconnect.

Oberheim Matrix-6 source code file available

Update: Looking for the new, rewritten firmware? Info on how to get the latest version here

There is some (potentially) very good news for Matrix-6/6R owners hoping to get a firmware update – it has come a huge step closer. An extremely experienced engineer has just decided to put his annotated source code file for the Matrix-6 online – you will find it on his page at Oberheim Matrix 6 Firmware. Not the original sources from Oberheim, mind you – they are rumoured to have been lost when someone accidentally dropped the master source disk – but a very carefully annotated listing, reverse-engineered. The engineer who did this even spent the time to mark code that has been re-used in the Matrix-1000 firmware.

So what does that mean to you as a (potential) M6 owner?

The engineer has decided to abandon the project – he thinks that the performance problems of the Matrixes are a result of fundamental design decisions and would need too much effort to get around properly. But his code definitely improves the chances of doing something useful for the code. Someone with skill and spare time might even backport the M1000’s NRPN and matrix modulation Sysex commands into the M6 code.

BTW: My attempts at starting a documented source code file for the Matrix-1000 can be found here, with a hardware and software primer here. If I can find the time, I’ll try to backport a few of Bob’s insights into the M-1000 code.

With the amount of work waiting for me with Jen, I’m glad I don’t own a M-6…

“This device isn’t eligible for the requested build” – hä? Das Sch***Ding ist neu!?

Also sowas: Endlich kommt mein vor vier Wochen bestelltes iPad 2 (ich bin auserwählt – danke, Steve!), macht sich ganz wunderprächtig, und dann beim dritten oder vierten Sync schon das:
"Das iPad 'untergeekPad' konnte nicht aktualisiert werden. This device isn't eligible for the requested build."

<Sarkasmus>Super-Fehlermeldung, und richtig viel Hilfe dazu von Apple. </Sarkasmus>

Auf einmal ist meine neue Maschine des Updates auf die neueste Version nicht würdig – wieso denn bitte das? Eine kurze Google-Suche fördert viel Ratlosigkeit zutage – und zudem die Erkenntnis, dass das Phänomen offenbar quer durch den Apple-Gerätezoo auftreten kann: iPad2, iPad, iPhones aller Generationen… you name it. Bei einigen verschwindet das Problem, wenn man zum Updateauf einen anderen Mac wechselt. Andere versetzen ihr Gerät in den “DFU”-Wartungsmodus und haben Erfolg, wieder andere nicht.

Die Lösung brachte am Ende für mich dieser Post bei LEI Mobile: Er erklärt mir – vollkommen zutreffend – dass mein altes iPhone 3G Schuld ist an der iPad2-Sperre. Genauer gesagt: Das Downgrade auf iOS 3.1.3, das ich diesem Telefon nach erfolgreicher Reparatur habe angedeihen lassen – wenn ich meiner Liebsten das iPhone 3G als iOS4-Schnecke überreiche, landet es binnen kürzester Zeit an der Wand. – Weiter: Das Downgrade also war Schuld, noch genauer: das (ansonsten außerordentlich empfehlenswerte) Programm TinyUmbrella, das ich für diesen Zurückbuchungs-Vorgang auf iOS 3.1.3 eingesetzt habe.

Was normalerweise bei einem Update passiert, ist wohl folgendes: iTunes telefoniert kurz heim zu Apple und fragt nach, ob es denn mit dem Einspielen der Software so seine Richtigkeit habe. Das wundert uns versierte Apple-Paranoiker ja nicht wirklich und ist auch mit ursächlich dafür, dass Downgrades so ein Nerv sind. TinyUmbrella hebelt diesen Prozess aus und schaltet konsequent um auf den Update-Server für gejailbreakte jailgebreakte geknackte iPhones, Cydia. Und iTunes bekommt kein “Go” für das Update.

"Set hosts to Cydia on exit": Diese Option muss man abwählen (Klick für Vollansicht)

Also muss man dies tun: TinyUmbrella öffnen, in die “Advanced”-Einstellungen gehen, einmal tief durchatmen – ja, wir wissen, was wir tun! Sort of. – und die obige Einstellung aushaken: “Set Hosts to Cydia” muss abgewählt sein. Dann TinyUmbrella beenden und über iTunes updaten – jetzt flutscht’s.

Ach, übrigens: An der Update-Sperre könnte natürlich auch eine vorsichtige Firewall Schuld sein, die iTunes daran hindert, nach Hause zu telefonieren. Kommt uns das nicht irgendwie bekannt vor…?