Matrix 1000 - Bugfixing

A

Anonymous

Guest
Hi,

hab den Code vom Matrix 1000 mal durch den Dissasembler gepustet... und 2 lange Nächte und eine lange Zugfahrt später gibt es einen ersten Erfolg: wen der Bug 'Envelope 1 Sustain-Level kann per Midi nicht eingestellt werden' schon immer gestört hat: einfach im EPROM die Adresse 5E48 von 38 auf 2D ändern (alles Hex) 8)
 
Fetz, du bist genial!

:bravo:


PS: Wg. anderem Thema meld ich mich noch, muss mich da bei buchy nochma richtig einlesen!
 
Supercoooool!

Weiter so ;-)

P.S. welche Eprom Version? Meine beiden (weisssen) Matrixe haben imho unterschiedliche. Zumindestens haben die eine andere Beschriftung.
 
http://wolzow.mindworks.ee/analog/m1k-firmware.htm

Das erste war ein (erhoffer) Glückstreffer: ein fehlerhafter Tabelleneintrag beim Umsetzen der Midi-Bytes auf den interen Patchspeicher - den richtigen Wert habe ich geraten.

Der mich am nächst-meisten störende ist schon heftiger: "VCF Frequency (parameter 21) update is much more sluggish than in case of the rest of parameters."

Der hier ist vermutlich wieder nicht ganz so schlimm: Envelope 2 to VCA 2 (parameter 29) cannot be set individually but only sending the entire set of patch data. (Vermutlich(d.h ich rate mal so...) ein weiterer Tabelleneintrag der einfach nicht die richtige Update-Funktion aufruft.)

Eine richtig üble Sache ist mir schon beim Betrachten des Schaltplans aufgefallen: Der Ram-Baustein hat 2 Adressleitungen an einem (Port=)Registerausgang - ohne weiter Logik. Das dient dazu die insgesamt 64KByte Patch-Rom, 24KByte Patch Ram, 8KByte I/O, 8KByte unbenutzt und 8KByte System-Ram in einem Adressraum von 32KByte unterzubringen. Das EPROM mit dem Betriebsystem (ca.22KByte) ist fest in den anderen 32KByte des Adressraums gelegt.
Schaltet man nun das RAM auf 'Patchmemoryzugriff' um hat man *kein* normales RAM mehr: *keine* Funktionsaufrufe, *keine* Interupts. Letzteres müsste die entsprechende Routine durch setzen der Interuptmaske für *beide* (Midi und Timer) Interupts sicherstellen, wird aber für MIDI nicht gemacht. Das müsste ab und an mal ziemlichen Murks im Patchmemory hinterlassen (+ evtl. Absturz) wenn auf der Midi-Schnittstelle das Leben tobt während der User gerade den Patch wechselt.


Die Systemversion wird beim Einschalten ganz kurz angezeigt, bei meinem war das "111". (Das sind die ersten drei Bytes im Eprom (ASCII))
 
Fetz schrieb:
Hi,

hab den Code vom Matrix 1000 mal durch den Dissasembler gepustet... und 2 lange Nächte und eine lange Zugfahrt später gibt es einen ersten Erfolg: wen der Bug 'Envelope 1 Sustain-Level kann per Midi nicht eingestellt werden' schon immer gestört hat: einfach im EPROM die Adresse 5E48 von 38 auf 2D ändern (alles Hex) 8)

GEIL!!! blogcontent!! absolut coole info!!
 
Jo, finde ich auch absolut klasse, solche Info's.
Auch wenn ich gar keinen Matrix hab, damit machst Du bestimmt viele glücklich.

:supi: :supi: DoppelPlusGut !!
 
Wenn da Interesse besteht kann ich gerne 'ne Stange EPROMS bestellen & brennen, ein paar mehr Bugs hätte ich aber schon noch gerne raus - und das ganze auch gerne noch ein wenig mehr getestet.
Interessenten können sich ja hier im Thread verewigen. Geld verdienen will/muß ich mit sowas nicht, würde aber Selbstkostenerstattung nebst gleichhoher Spende an unseren Forumsgastgeber eintreiben wollen - macht so gerundete 7.77€ zusammen.


Auch wenn ich gar keinen Matrix hab
..ach, ich hab auch nur einen. Überlege gerade ob der Trend nicht zur zweit-Matrix geht (
wavey.gif
micromoog). Dann bau ich einen so um, das er ein Programm-RAM bekommt, das er es per MIDI laden kann :twisted:
 
auf hacking steht zuchthaus!
Ich denke in dem fall wird aber von einer anzeige abgesehen :D

geht das eigentlich immer so problemlos einen eeprom auszulesen und das programm zu rekonstruiren?

in was für einer sprache ist das geschrieben?

coole sache auf jeden fall auch wenn ich keinen matrix hab.
 
whaaaa, wie geil!!!! RIESEN PHATTES DANKE für das tolle angebot :kussi: habmich schon sooo genervt über den matrix-1000 wegen diesem nerv-edit-kram... Fetz, du bist n weltenretter!!!!!!!! mein matrix1000 blinselt jetzt speziell freundlich aus seinem rack hervor.
 
Fetz, wenn du noch was erreichst: ich nehme auch einen EEPROM!

Super Sache!
 
Reverse Engineering ist in .de erlaubt, wenn es dem Bugfixing dient.

Der Code ist in handgeschriebenem 6809 Assembler. Das eigentliche EPROM auslesen ist simpel, sowas wie in den QM-Geräten (vertauschte Daten und Adressleitungen) kann einen aber schon ein bis drei Tage aufhalten.

Ich hab bislang mitnichten ein 'rekonstruiertes Program', sondern ein ca. 10000 Zeilen (wären 150 A4-Seiten) langes Dissasemblerlisting.
Bis ich darin *richtig* edieren kann und das Ergebnis dann auch läuft muß ich noch einiges tun.[1]

Zurzeit lege ich so nach und nach die Daten- und Programmbereiche fest.
Ausserdem habe ich die Hardwareadressen mit Symbolen versehen, damit sehe ich dann wo überall Hardwarezugriffe sind.

Für den 'ersten Bug' bin ich dem Midi-Dateninterupt nachgegangen, zur Auswerteroutine gelangt und dort dann auf die Routine gestossen, die die Daten in den Patchpuffer einträgt. Und ein skeptischer Blick auf die entscheidenden Stelle der Tabelle war dann die Lösung. (Aufgrund der sehr speziellen Fehlersymptomatik war das zwar immer noch Glück, aber eben nicht ganz unerwartet.)


[1] Dazu muß ich alle Tabellen mit Adressen drin richtig erkannt haben, sowie alle Codeteile und Datenteile richtig zugeordnet haben. Bislang geht eben nur Patchen - sobald irgendeine Korrektur länger wird müsste ich rumtricksen.
 
ok das versteh ich jetzt. das ist so wie die firmen glauben nur weil ein sps spezialist kommt kann es ja kein problem sein das es keine sourcen mehr gibt. und dann sucht man sich zum trottel und rechnet speicherzellen nach. sps (s7) programmierung kommt assembler ja doch recht nahe da ja auch sehr hardware nah gearbeitet wird. ich kann mir also sehr gut vorstellen was du dir da aufgehalst hast. cool
 
Ein wenig schrägen Humor muß man den Programmierern ja schon zugestehen:
Code:
        LDX     #M79B1                   * Lade Indexregister X mit $79B1
        LDB     #$07                     * Lade Akku B mit 7
        JSR     Z83DE                    * Jump Subroutine 

     ....

Z83DE   TFR     X,Y                      * Kopiere X -> Y 
        CLR     ,X+                      * Lösche die Speicherstelle auf die X zeigt, erhöhe dann X um eins 
        DECB                             * Zähle Akku B eins runter
Z83E3   LDA     ,Y+                      * Lade A mit der Speicherstelle auf die Indexregister Y zeigt, dann Y increment
        STA     ,X+                      * Speichere Akku A .....                      
        DECB                             
        BNE     Z83E3                    * Springe zu Z83E3 wenn die vorherige Operation nicht Null als Ergebniss hatte
        RTS                              * Return to sender

na, was macht das? (Kommentare von mir für die Leute deren 6809 Kenntnis schon etwas eingerostet ist...)
 
sach ma fetz, stimmt das tatsächlich ?
>Reverse Engineering ist in .de erlaubt, wenn es dem Bugfixing dient.

da krieg ich ja fast lust mal wieder einzusteigen (der a6 häts ja z.b. auch nötig ... dann wäre man aber sicher eine ganze zeitlang beschäftigt ..)

6809 kenn ich nicht, 6502 war das letzte für mich ... aber sieht für mich aus wie die umständlichste art 8 speicherstellen zu löschen, hab mich sicher verlesen ... klär mich auf :)

ach ja und gratuliere! (obwohl ich keinen matrix hab)
 
Hmm, das was ab $79B1 liegt wird in 6-Byte Häppchen um ein Byte nach hinten verschoben. Was das im Zusammenhang macht wird mir nicht ganz klar. Wie gesagt, die Frage ist was dort liegt. Da es noch unterhalb von 32K ist könnte das Code oder irgendeine Tabelle sein. Teil vom MIDI-Handling ?
 
Der multidiletant hatte schon recht - die Routine kopiert immer das frisch gelöschte Byte eins nach hinten. Das sind so kleine Programmmererscherze... die Kollegen sollen sich ja auch mal wundern dürfen.

Dafür habe ich jetzt das Problem mit dem langsamen Verstellen der Filterresonanz eingekreist.
Code:
*UVCFF Update VCF Frequenzy
UVCFF   LDY     <$65                     * 
        JSR     UD_VCFKBD                * Update VCF Keyboard Modulation
        JSR     UVCFP                    * Update VCF Keyboard FM
        JSR     UVCFR                    * Update VCF Resonance
        JSR     UD_VCAAMT                * Update VCA Fixed Modulation Amount
        JSR     UVCAM                    * Update VCA modulation Amount 
        RTS

Jede diese Routinen ruft zusätzlich eine immer gleiche ca 360Byte lange generelle Updateroutine auf, das ist einfach zuviel Code.
Das ganze sieht nach einem quick Hack aus, weil irgendwas in der eigentlichen UD_VCFKBD nicht richtig gesetzt wird.

Die Lösung ist nur leider sehr Aufwendig, die muß wohl komplett neu, und dann alles nur einmal berechnen, nicht fünf mal hintereinander fast das gleiche.

Ausserdem muß ich dazu noch ein wenig genauer verstehen was da eigentlich genau gemacht wird. (Es gibt da so eine Liste da werden nach meinem jetzigen Verständniss in wirrer Reihenfolge Modulationstabellenzeiger, Skalare und Funktionsadressen reingeschrieben, das kann so nicht sein. )


@Summa: den Dissassembler habe ich von genau der Seite, hab aber schon (und werde auch noch ein wenig mehr) dran rumbasteln.

Ausserdem braucht man noch Schaltplan, Datenblatt von SIO und Timer...
 
Das war jetzt erstmal die erste vorsichtige Anfrage was da auf mich zukommt (also ob ich eher 10 oder 100 Eproms bestelle...).
Da ich da sicher noch ein paar Wochen dran sitzte (heute hatte ich z.b. keine Lust auf Codestochern ...) kann sich jeder dann aussuchen, was er haben will. Derzeit gäbe es eben nur den einen Patch, später vielleicht dann mehr.

Satz ist gut: als 8-Bitter ist das 1 (in Worten: ein) 27C256 EPROM und wenn ich da den Müll rauswerfe passen da glatt noch 140 Presets extra rein. (Gebts zu: da habt ihr alle drauf gewartet!)

Irgendwann nächste Woche werd ich mal sehen das ich EPROMS & Versandtaschen bekomme, ab dann kann man welche bekommen.
 
...also brandeilig ist das bei mir jetzt nicht, warte gerne bis es mal irgendwann eine "Endversion" (oder "Hab keinen Bock mehr im Code zu stochern Version" ;-) ) gibt...
 
@Fetz
Noch mal ein kleiner Motivationsschub: :bravo:

Mir wird als ganz schwindelig mit was ihr Freaks da so rumwirbelt :D ,
aber lass dich nicht unter Druck setzen, die Welt musste rund 18 Jahre drauf warten, da kommts jetzt auf ein paar Monate auch nicht mehr an... ;-)

...ein klasse M1000-OS darf dann auch ruhig ein paar Dollar kosten...
 
am besten ,wenns fertig ist nochmal laut geben, dann können die interessenten klar JA , ich will eins / 2 / 3... haben..
 
Benutzt wer eigentlich den Groupmode (12..18... stimmige Kombination aus mehreren Matrix 1000)?


Ansonsten hab ich mal den Weg der Midi-Parameter verfolgt und bin dabei auf folgendes gestossen:

Sysex: F0H 10H 06H 03H - 'Master Parameter Data', im 'Global Parameters Data Format' sind 2 Bytes fälschlich als 'unused' gekennzeichnet:

15 Enable Prgramm Change (normal 1, wenn man da 0 sendet ist Program Change hinterher verriegelt.)
31 Active Sense Mode (normal 1, wenn man da 0 sendet wird Active Sense geechot (wenn Echo Modo On) und nicht mehr normal erzeugt)

=> man sollte die Doku also zumindest für diese beiden Bytes also auf 'sollte immer 1 sein' ändern.

9 weitere Bytes werden beim initialisieren gelöscht, aber nicht weiter verwendet, der Rest ist wirklich undefiniert.

Warum sich die Vibrato-Sachen(...) nicht einstellen lassen (sollen) ist mir noch nicht klar, einigermassen sinnig eingetragen werden sie jedenfalls.

Das sind auf jeden Fall globale Parameter, die nicht mit dem Patch gespeichert werden. (Ist das nicht eher dusselig?)



Das Wetter soll ja nicht so toll werden, dann komm ich wohl dazu den Code für die NRPNs aufzudröseln. Wenn die funktionieren würden, würden sie nix anderes machen als SysEx F0H 10H 06H 06H 'Remote Parameter Edit '. Immerhin könnte ein BCR 2000 die direkt senden. (Oder lieber möglichst viel auf CCs bringen(alles passt nicht)? Meinungen dazu?)

(Als BCR2000 Besitzer neige ich dazu genau das Teil zu unterstützen, passt ja auch preislich ganz gut zum Matrix. )
 
Ich hab mal mit dem Groupmode experimentiert. Habs dann aber bleiben lassen. Warum weiss ich nicht mehr so genau, ist lange her. Glaube der 2te Matrix hat nicht immer die Einstellungen vom ersten mitgenommen.

Bin in 2 Wochen wieder im Studio, kann dann wieder testen wennst Info zum Groupmode brauchst.
 
Fetz schrieb:
Benutzt wer eigentlich den Groupmode (12..18... stimmige Kombination aus mehreren Matrix 1000)?


Ansonsten hab ich mal den Weg der Midi-Parameter verfolgt und bin dabei auf folgendes gestossen:

Sysex: F0H 10H 06H 03H - 'Master Parameter Data', im 'Global Parameters Data Format' sind 2 Bytes fälschlich als 'unused' gekennzeichnet:

15 Enable Prgramm Change (normal 1, wenn man da 0 sendet ist Program Change hinterher verriegelt.)
31 Active Sense Mode (normal 1, wenn man da 0 sendet wird Active Sense geechot (wenn Echo Modo On) und nicht mehr normal erzeugt)

=> man sollte die Doku also zumindest für diese beiden Bytes also auf 'sollte immer 1 sein' ändern.

9 weitere Bytes werden beim initialisieren gelöscht, aber nicht weiter verwendet, der Rest ist wirklich undefiniert.

Warum sich die Vibrato-Sachen(...) nicht einstellen lassen (sollen) ist mir noch nicht klar, einigermassen sinnig eingetragen werden sie jedenfalls.

Das sind auf jeden Fall globale Parameter, die nicht mit dem Patch gespeichert werden. (Ist das nicht eher dusselig?)



Das Wetter soll ja nicht so toll werden, dann komm ich wohl dazu den Code für die NRPNs aufzudröseln. Wenn die funktionieren würden, würden sie nix anderes machen als SysEx F0H 10H 06H 06H 'Remote Parameter Edit '. Immerhin könnte ein BCR 2000 die direkt senden. (Oder lieber möglichst viel auf CCs bringen(alles passt nicht)? Meinungen dazu?)

(Als BCR2000 Besitzer neige ich dazu genau das Teil zu unterstützen, passt ja auch preislich ganz gut zum Matrix. )

ich hab bisher immer die finger vom matrix1000 gelassen, weil mir die bedienung per editor-software keinen spass bringt..
wenn du das jetzt hinkriegst, das man den per midi-controller-kiste steuern kann, würde ich mir glatt einen matrix 1000 zulegen. wäre doch echt der hammer..
 


Neueste Beiträge

News

Zurück
Oben