Matrix-1000-Sensation: Seltener Bug nach über 30 Jahren endlich entdeckt!

Eine Einstellung für die Stimmenzuweisung im Matrix hat einfach nie funktioniert – und irgendwie scheint es bis jetzt keinem aufgefallen zu sein. Aber jetzt gibt’s da was.

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

„Hey, ich will das haben! Ich habe schließlich schon ein V1.20-ROM!“ — BITTE HIER WEITERLESEN

Vor ein paar Tagen hat Bob Grieb – der Ingenieur, der das Matrix-1000-Update entworfen und programmiert hat – eine Mail bekommen. Da schrieb ihm Tim, ein Matrix-Besitzer und Nutzer des V1.20-Updates. Die Mail merkte höflich an, dass die „Reassign/Rob“-Einstellung für die Stimmenzusweisung anscheinend nicht funktionierte, und fragte, ob es da womöglich ein Problem mit der V1.20-Firmware gäbe. Bob hat zwar keinen M1000 mehr, aber hatte sich damals eine Verilog-Simulation gebaut, um die Firmware umzuschreiben. Mit der Simulation fand er schnell heraus: Tim hatte Recht – die „Reassign/Rob“-Einstellung des Parameters 48 (0x30h) funktionierte nicht. Und das schon in V1.13, einem sehr frühen Patch der letzten Original-Firmware – der Fehler war anscheinend immer schon da gewesen.

Und scheinbar hat es niemand bemerkt. Oder hielt es zumindest für wichtig genug, einen Patch zu scheiben.

Wozu „Reassign/Rob“ gut ist – und warum dir das nie aufgefallen ist

Der Matrix-1000 hat sechs Stimmen. Wenn er sechs Noten gleichzeitig spielt, ignoriert er alle neue Noten, bis man wieder eine der Stimmen freigibt. Das ist die Voreinstellung, die es in zwei Varianten gibt: „Rotate“ – die normale Stimmenvergabe – und „Reassign“ – Noten, die noch einmal gespielt werden, werden erneut getriggert.

Das sind die Werte 0 und 1 für den Parameter 48. Dann gibt es noch 2 – Unisono, alle Stimmen werden parallel gespielt – und die 3 für „Reassign/Rob“.

„Reassign/Rob“ soll voice stealing aktivieren —wenn eine neue Note kommt, wird eine von den gerade gespielten beendet und der neuen Note zugewiesen. Wodurch meist ein Loch in der Fläche entsteht, das es extrem offensichtlich macht, dass die Ressourcen deines Synthesizers sehr begrenzt sind. Das fällt uns eher auf, wenn Noten plötzlich verschwinden, als wenn sie überhaupt gar nicht erst gespielt werden.

Also wenn ich ehrlich bin: ich hab’s nie bemerkt. (Wobei man ja auch immer erst einen Editor/Controller an den Matrix-1000 hängen muss, anders als beim Vorgänger Matrix-6.)

Bob hatte die Ursache schnell gefunden: Der Code für die Stimmenzuweisung hat einen Sicherheitscheck, der die möglichen Werte nach oben begrenzt – aber auf 2, nicht auf 3, weshalb der Aktivierungs-Code für den „Reassign/Rob“-Modus nie übertragen werden konnte. Gerade mal ein Byte muss geändert werden — nein, tatsächlich nur  ein Bit, Egal, welches ROM du hast: du könntest nach der Folge 0x81 0x02 0x22 0x02 suchen und sie ändern in 0x81 0x03 0x22 0x02; so einfach ist es. Und das nennen wir jetzt Matrix-1000-Firmware 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

Und wie bekomme ich V1.21 jetzt?

Leider bedeutet das, dass wir alle V1.20-ROMs wegwerfen müssen; man kann sie nicht korrigieren. Das eine Bit kann nicht einfach nachprogrammiert werden. Und wenn man von 1.20 auf V1.21 updaten will, muss man ohnehin den ROM-Chip austauschen; das muss wie gesagt ein neu hergestellter sein.

Und deshalb können wir das nicht einfach als kostenloses Update anbieten; der Chip muss erst gekauft und gebrannt und verpackt werden. Die Kosten fürs Update umfassen im Prinzip gerade mal das, und einen Euro für Bob (der, das kommt ja hinzu, überhaupt kein bisschen in der Pflicht ist, einen Bug zu korrigieren, der immer schon da war und für den er nichts kann). So ein ähnliches Angebot hatten wir schon bei der Version V2.14 für den Matrix-6, in der auch ein Legacy-Bug gefunden wurde; das Angebot geht aber nur an Leute, die einen V1.20-Chip aus einer Quelle besitzen, von der Bob was hat — also: gekauft bei ihm selbst, hier bei mir oder bei Alpes Machines, der den wunderbaren Controller im Video gebaut hat.

Ein letzter Gedanke: Man sollte sich fragen, ob es das eigentlich universell verhasste Voice Stealing wert ist, den Aufwand für ein Update zu treiben. Ich bin der Letzte, dem man erklären müsste, dass man auch nach der jeweils neuesten upgedateten Software GASsen kann, aber: wenn der Bug dir bisher nicht aufgefallen ist, brauchst du wahrscheinlich auch das Update nicht.

M1000 V1.20->V1.21 Update

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

Artikelnummer: 0002
Stückpreis: 12,00 EUR
(inkl. 19,00% MwSt. und zzgl. Versandkosten)
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…?