Der Matrix 1000 nutzt 2 Interupts:
1. Den FIRQ für Midi-Daten. Die kommen mit maximal 3150 Bytes/Sekunde rein, d.h. der Interupt läuft maximal mit 3150Hz. Das ist für den Controller viel, zwischen zwei Datenworten schafft der grade mal 635 NOPs (sinnvolle Op-Codes vielleicht gut die Hälfte... das kann ich aber schlecht schätzen). In diesem Interupt werden die Midi-Datenworte lediglich in einen Puffer geschrieben.
2. Den IRQ für einen Timer. Irgendwie kann ich mir den nicht merken, der macht irgendwas zwischen 60 und 120Hz. Damit wird *alles* in dem System gemacht.
D.h. es gibt dort eine groooooße Schleife:
- die guckt ob Midi-Daten im Puffer stehen, die dann verwurstet werden.
- die Berechnung der Modulatoren und Modulationen und damit der Werte für die Steuerspannungen.
- die Ausgabe der Steuerspannungen auf dem DA-Wandler.
- die Anzeige-Ansteuerung und Taster-Abfrage.
Midi-Sys-Ex verstellen die Engine, das ist ein ziemlicher Rechenaufwand. Der muss aber getrieben werden, weil die Engine optimierte Daten braucht, damit die CPU die ganzen Modulationen überhaupt schafft.
Das bekloppte ist jetzt, dass dieses "Engine neu berechnen" für *jedes* Sys-Ex gemacht wird. Das ist nur wenig optimiert, ich glaube es waren drei Routinen, die da ggfls. auch nur Teilbereiche neu machen. Der "lahme" Filtercutoff-Sys-Ex mit Original Firmware liegt daran, dass dort die große Routine für "alles neu" aufgerufen wurde, dabei tut es auch eine der kleineren. (Zumindest habe ich nichts gefunden, was dagegen spricht. )
Eine naheliegende Optimierung ist nun, den Puffer etwas intelligenter abzuarbeiten - man trägt alle Änderungen ein, so lange noch Sys-Ex im Puffer stehen. Erst wenn die alle abgearbeitet sind, wird die Engine einmal neu berechnet. Dadurch hängt die Kiste nicht mehr sooo hinterher - und es treten seltener Pufferüberläufe auf.
Dieses Verfahren mit Puffer/Verarbeitung ist prinzipiell fehlerhaft. Für eine garantiert fehlerfreie Verarbeitung muss man den ganzen Midi-Datenstrom sichergestellt (mit bis zu 3kHz) komplett aufdröseln, bei den ganzen Modi, die der Matrix 1000 kann, ist das nicht machbar. (Das Problem sehe ich vor allem beim Chain-Modus, der erst weiß, welche Noten er durchreicht, wenn er den Voice-Assigner abgearbeitet hat.)