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

 

Some love for the Playstation 3

The PS3 is amazing – I got it 16 years ago, and it’s still running, working as a Blu-Ray player, and for the occasional round of Little Big Planet with the kids. And Sony still sends updates! But I noticed the fan has been getting rather loud, so I guessed it was time to clean the cooling paths.

Playstation 3 in black shiny surface, fat body

In the end, it took me about 30 minutes to take it apart and put it back together again, due to Sony’s service-friendly design. And it wasn’t quite as bady in need of some cleaning as I feared.

Weiterlesen

Ein Klavier, ein Klavier! Not So Grand Piano für den Waldorf Iridium

An AI-modified picture of the Iridium in white, with gold keys, and lots of bling

Der Iridium ist ein großartiger Synthesizer — und unter vielen anderen Dingen auch ein Sampler. Dies ist ein Tutorial, wie man aus den Fabriks-Samples einen Piano-Sound konstruiert und sich dabei die meiste Arbeit von einem Computer abnehmen lässt.

Weiterlesen

OMG OMG I actually played that thing!

Looking at the analytics, I have noted that my reminiscence to/analysis of the Keytek CTS-2000 synth has been found by a number of people that surprises me, given that it is an article about a truly horrible, obscure late-80s hybrid synth in a rather niche blog. Given that, I would like to share some proof that I actually played that thing, and on stage, too. And though it is hard to date the old photographs, I would estimate that I held onto it for quite some time.

So I guess at least the CTS-2000’s keyboard was really decent.

5-piece band: female bass player, percussion player, guitarist, keyboardist with guitar.

The band, by the way, was named „Voice of the Alien“. You won’t find anything Googling it.

I added another photo to the original article.

Wie man diese netten kleinen LED-Leselampen aufrüstet

Diese kleinen LED-Tischleuchten sind wirklich nett. Schade, dass sie nicht länger durchhalten. Aber dafür kann man selber sorgen – einfach einen zweiten Akku einbauen.

Diese Lampen bekommt man aus zahllosen chinesischen Quellen, einige nur mit warmweißen LED; einige mit einer zweiten LED-Farbe für andere Lichttemperaturen. Sie haben alle einen Berührungsschalter auf der Oberseite, sind alle 40cm hoch, werden alle über USB-C geladen.

Und zumindest alle, die ich aufgemacht habe, haben Platz für einen zweiten Akku!

Viel einfacher wird’s nicht: Akku bestellen, Stecker anlöten, reinsetzen…

Einige haben sogar einen Anschluss für eine zweite Batterie an der Ladeelektronik. Wie die, die ich im Video umgebaut habe. Andere haben das nicht, je nach Grad der Beherztheit lötet man also den zweiten Akku parallel zum ersten oder tauscht den ersten gegen den größeren neuen aus.

Die Lampen verwenden Standard-18650-LiIon-Zellen, mit 3,7V Zellspannung und in der Regel 2400mAh Kapazität. Es gibt aber bezahlbare größere: Ich habe diese Samsung INR18650 mit Lötfahnen genommen (kein Affilliate-Link, gern irgendwo bestellen). Und weil ich demnächst noch meinen neuen Digitakt aufrüsten will, hab ich gleich ein paar mehr besorgt; kosten 7-8 Euro pro Stück.

Battery holder with second battery next to it, connector and cable soldered to it

Also: Batterie auspacken, vorsichtig Kabel und Stecker anlöten – da sind die Lötfahnen echt gut, wenn man die Batterie nicht überhitzen will – erste Batterie abstöpseln, neue anstöpseln, Lampe testen, alten Akku dazustöpseln, wieder zusammenbauen – viel einfacher wird’s nicht.

…und ich hatte ja nicht kapiert, dass man sie auch dimmen kann!

Bisschen peinlich, aber da musste mich erst meine kluge Tochter drauf bringen: Wenn man den Finger auf dem Sensorschalter lässt, wird die Lampe auf- bzw. abgedimmt.

Erklären, wie man den Digitakt II benutzt, ist die eine Sache, für die KI wirklich gut ist

Der Digitakt II ist eine tolle Maschine, aber: Es dauert eine Weile, bis man ansatzweise verstanden hat, wie man sie benutzt. Tatsächlich kann man jetzt eine KI fragen, und das ist wirklich nützlich.

A black, square computer device very much like the original Digitakt but with a lot of knobs and buttons with illegible writing

Fantasy drum machine generated by Midjourney from a Digitakt image

Hat ziemlich einfach funktioniert: Ich habe das (englische)  Digitakt II manual genutzt, um ein „GPTs“ zu basteln; GPTs sind die nutzerspezifischen, vorkonfigurierten RAG-Chatbots. (RAG ist eine Technik, mit der die KI die Dokument-Abschnitte sucht, die sie dann für eine Antwort verwenden kann.)

A pixelated black/amber display showing a stylized brain, some buttons and knobs around it, illegible writing; the machine is named

A fantasy drum computer’s display, created by Midjourney

Als ich den neuen Digitakt verdrahtet habe, musste ich herausfinden, ob es funktioniert, einen Synth-Expander darüber zu spielen – über ein am MIDI-Eingang angeschlossenes Keyboard. Das geht tatsächlich, aber da für die Antwort der Parameter „Auto Channel“ eingestellt werden muss, die Lösung aber nichts mit „MIDI Thru“ zu tun hat, war ich sehr dankbar, mir helfen lassen zu können.

Der Digitakt-II-GPTs-Chatbot ist hier zu finden; kann leider sein, dass man ein GPT-Plus-Bezahlkonto braucht. Wer sich so was mit einem beliebigen RAG selbst bauen will – hier der Prompt:

# Role
You are „Digitakt II Bot“, an AI advisor helping to explain how to use the Electron Digitakt II drum computer and sequencer.

# Actions
– Use Retrieval to look for answers in the manual document
– Answer quoting the manual
– As a reference, name the chapter in the manual
– If possible, name the page number
– Explain step for step

# Rules and Limitations
– You are multilingual. If the user asks a question in a language like German or French, answer in German or French, translating the manual for her.
– Be concise and thorough.
– Always use examples to explain.
– Always check against the Digitakt II manual.
– Check whether your answer actually applies to the Digitakt II, rather than to its predecessor, the original Digitakt machine. The original Digitakt had a mono sampler engine and offered 8 instrument and 8 MIDI tracks, Digitakt II has a stereo sampler engine, and offers 16 tracks that may be assigned freely.

Wenn’s mal wieder länger dauert: Code für den Bookmarking-Dienst Diigo

Das ist so eine dieser Sachen, wenn du merkst, du hast einen Job zu erledigen, und denkst: schreibe ich schnell ein paar Zeilen Code, die das für mich erledigen. Zack, hast du ein neues Projekt am Hals. Aber es hat Früchte getragen: ein wenig in Python-Routinen gegossene Hilfe, um Lesezeichen aus dem alternden Bookmarking-Dienst Diigo zu retten.

Diigo banner with a cartoon planet with two astronauts, animated - to show a space desaster

Animation created with Luma Labs Dream Machine

Weiterlesen

HackTribe your E2S with a Colab Notebook

Follow-up to the post on the Hacktribe firmware project for the Electribe 2:

Colab Notebook as online step-by-step tutorial doing all the work – no need to install Python

Want to have a Hacktribe, but don’t want to install Python? You can use this Notebook – which you can run on a virtual Python environment provided by Google, called Colab. It creates a modified firmware file with Bangcorrupt’s scripts, as well as modified sample and pattern files from the existing samples and patterns on your Electribe Sampler.

Additional Python script to adapt sample bank AND pattern bank to the HackTribe firmware

There is also a new Python script the notebook uses, but which you can also run locally on your machine: It takes an e2sSample.all sample dump file, and a matching .e2sallpat pattern dump, and adapts them to the HackTribe by moving all samples to User sample space. The patterns are then modified to find the samples in their new locations.

You can find and download the script in my repository here.

Documentation

In writing the script, I had to document parts of the sample dump file. bangcorrupt did not want to have documentation as part of the main hacktribe repository to be on the safe side of hacking/reengineering regulations, so I created a separate documentation repository. It’s quite empty so far.

Link to electribe2 doc repository.

Free-for-all Filters And VPM – How The Hacktribe came to be

I really like my Electribe 2. I know, it gets a lot of hate from the EMX/ESX lovers, but the workflow really suits me, and, as you might know, I’ve got a heart for underdogs, especially when they are from Korg – don’t you think that even Korg’s blunders are more interesting than Roland’s successes?

A mutant Electribe

StableDiffusion 1.5 hallucinating the hell out of an Electribe with IMG2IMG and „Superman Drum Machine“ as prompt

Which doesn’t mean that Korg does everything right. As Electribe users know, you have to make up your mind: 

  • Do you want the (blue or grey) E2 synth („BlueTribe“), or
  • the (red or black) E2S sampler („RedTribe“)? 

The RedTribe sampler, gravitating a bit more towards hip-hop compared to the dancefloor-oriented BlueTribe, is generally more flexible – but you have to sacrifice the BlueTribe’s many additional filter types and synth oscillator models.

Which is a real shame considering that the hardware for BlueTribe and RedTribe is absolutely identical – apart from the colour scheme and the built-in samples. You can even crossgrade from BlueTribe to RedTribe and vice versa (involves a bit of hex editor manipulation and a sizeable risk of bricking the Electribe, but it’s doable – I did it once before settling on a black RedTribe for good).

So why doesn’t one just analyze the firmware, and copy&paste the BlueTribe goodness to the RedTribe ROM? It’s that kind of project you dream of for about 15 seconds until you realize how cumbersome this really is, and that it would be madness to commit yourself to that kind of ambitious hacking project.

Luckily, bangcorrupt has already done just that.

Behold: The Hacktribe!

In case you lived under a rock and haven’t heard of it: Hacker bangcorrupt has analyzed the Electribe’s bootloader, finding the requirements for installing modified firmware. And he modified Korg’s 2.02 Electribe Sampler firmware, adding the BlueTribe’s extra capabilities concerning filters and oscillators to it – and even more: VPM, Korg’s version of FM synthesis for people without a degree in acoustics.

It’s as simple as downloading the factory firmware, running a Python script that patches it, and updating your E2 to the Hacktribe firmware. If you want to keep running your existing RedTribe patterns, I created some small additional scripts for that – my tiny contribution to the project – and you will find soon find a step-by-step tutorial as a Python notebook that you can just click-and-run on Google Colab, saving you the intimidating Python installation business.

But for the moment, let’s geek out for a bit: I reached out to bangcorrupt, the hacker who did this, and asked him how he did the hack.

Hacktribing your RedTribe

We were communicating via mail – he answered my first set of questions – which were originally intended just to tell him what I wanted to know – in bulk. These are his answers; I’ve just added some links and notes in italics and square brackets where I felt like it. Everything else is bangcorrupt’s answers.

Q: How did you get the idea of doing it?

bangcorrupt: I got the idea from the firmware swap posted on korgforums years ago.
I wanted to create a hybrid based on the latest firmware version, with some added features and configuration options.

[With the first couple of firmware revisions, it was quite easy to swap the firmware of a RedTribe for a BlueTribe; with v2.02, Korg added checks to keep you from crossgrading, so you had to do a bit of hex editing and downgrading to do the swap. It was quite a feat and, honestly, not worth it, as you wouldn’t get the samples of the other machine – these seem to be stored in ROM, separate from the firmware. While it is quite easy to get someone with an E2S to perform an „Export All Samples“ for you, I have not seen the BlueTribe factory sample set in the wild yet.]

Q: Why didn’t you just stop when you realized how overwhelmingly complex the whole thing would become?

[Think about it.The Electribe is a complex machine – see this hardware breakdown in the Korg forums from 2015 which is one of the first things a prospective hacker might end up with. It hasn’t got just one microcontroller but three: The main processor is an ARM9 processor called AM1802 (datasheet), accompanied by a Blackfin 523 DSP from Analog Devices (datasheet) – a type of microprocessor optimized to process real-time data. There is also an additional feeble ARM Cortex M3 reading the front panel dials, which we may safely ignore if we’re lucky. Scanning the datasheets, you will find all sorts of scary words like „protecting code integrity“. There is obviously some kind of bootloader involved which you have to analyze to find out what it accepts as a firmware, and how it is loaded into memory. And once you mess things up, there is a considerable risk of bricking your Electribe for good – which did indeed happen, see below.]

bangcorrupt: Once I started seeing patterns and how they interrelate it was difficult to stop. I was really obsessed with it for a while; hopefully I can find the time to dedicate to taking it to the next level.

Q: Did you have a background in microcontroller development before?

bangcorrupt: I had a basic understanding of computer architecture and electronics, but most of what I know about microcontrollers and reverse engineering comes from working on Hacktribe.

[Which I, as a full-blown blunderer and tinkerer, find wonderfully serendipous and inspiring.]

Q: What were the challenges in doing it?

bangcorrupt: Everything. I’m learning how to do this as I go along, most of the tools and protocols are new to me. At one point I bricked my electribe and had to hack some other things to learn how to fix it.

Q: What kind of tools does one use for rewriting Electribe code?

bangcorrupt: A J-Link or a Raspberry Pi running OpenOCD will work as a JTAG debugger for the CPU.

[Let’s stop here for a moment and explain what a JTAG debugger actually is. Imagine you have some sort of program, and want to see what it does – especially if it doesn’t do what you want it to do. In that case, it would be handy to stop the code and look at registers and memory.

As long as the program is still running on your desktop computer, you can simulate and debug your program there, but once it has been transferred to the machine, you will have to use special hardware to do that.

When I did my first 8-bit development project some 30 to 40 years ago, we had to buy a murderously expensive type of hardware called a Z80 In-Circuit Emulator, a blue box that could act as a microcontroller in my machine but kept transmitting data on order to a PC. It has become much, much simpler these days, as all modern microcontrollers have a standard serial interface called JTAG. It takes orders and code, and transmits data if you want to talk to the processor, but you still have to have special hardware and software which does the talking.]

bangcorrupt: I couldn’t get the Raspberry Pi [running the OpenOCD JTAG debugger] working with the Blackfin DSP, but thanks to people sponsoring Hacktribe I was able to buy the official Analog Devices debug adapter.
Raspberry Pi will also work with the Cortex M3 on the panel board, but I want to try using Black Magic Probe [an open-source standalone JTAG debugger for ST Micro’s M3 hardware and others] on an STM32F103.
On the software side I’ve been using Ghidra for static analysis, with Rizin for patching and debugging.

[What is this for? The original programmers wrote high-level code in languages like C, and probably low-level Assembler code handling single processor instructions, before compiling and assembling their program code into the string of bytes in the SYSTEM.VSB file. Disassembler frameworks like Ghidra – by the NSA, for god’s sake! – and Rizin help you turn back these bytes into readable code, much like turning a meal back into a recipe – so you end up with code that your brain can process, and the JTAG debugger which helps you watch what it is actually doing. This gives you a good chance to understand what the code does, and how to expand it.]  

Q: How much of what your HackTribe code does was already in there, and what did you have to write from scratch?

bangcorrupt: This is hard to answer, it’s all interlinked. At the start I was hex editing the binary directly, changing pointers and conditional tests to run existing functions with new data. I’ve started reworking it into separate assembly code; the most new code I’ve written is probably for NRPN handling or FX editing. Even here I am using the existing functions as much as possible, just calling them in a different order with different arguments.

Q: And have you got a clue what the hell Korg thinks about all this?

bangcorrupt: I have nothing to do with Korg. I try to stay within the law and the license agreement, and as far as I know I have.

bangcorrupt’s answers are printed as they were given. All errors in the italics are mine.