CCTeam - Home | Peter Munk
Projekt: Midi |
|||||||||||||||||||||||||||||||||
Ich habe probiert, Midi-Töne im einem Programm zu erzeugen, und dann
direkt an die Schnittstelle für den Synthesizer zu leiten. Das Problem
dabei war, dass es in der von mir gewählten Programmiersprache Delphi
keinen Befehl für die Ausgabe an Ports gibt. Dieses Problem löste ich
durch die Einbindung von Assembler Routinen. Eine Routine:
x : byte;
x := 100;
asm
push ax
push dx
mov al,byte ptr(x)
mov dx,$330
out dx,al
pop dx
pop ax
end;
delay(200);
Mit dem Befehl „asm" wird die Routine eingeleitet.
Mit dem Befehl „push ax" sowie „push dx" werden die Inhalte der Speicher
ax und dx in den Stack verschoben. Wichtig ist, das man am Ende des
Programms diese Speicherinhalte wieder in umgekehrter Reihenfolge aus
dem Stack heraus nimmt, da sonst das Programm abstürzt, weil der
Computer diesen Platz braucht.
Mit dem Befehl „mov al,byte ptr(x)" wird der Wert der Variablen x, der
ich vor der Assembler Routine den Wert 100 zugewiesen habe, in die
untere Hälfte (die 1. 8 Bit) des Speichers ax übertragen. Definiert man
die Variable x als word Variable, so müsste „mov ax,word
ptr(x)" dastehen.
Mit dem Befehl "mov dx,$330" wird der Wert 330 Hex in dem Speicher dx
verschoben. Das $-Zeichen bedeutet , dass der Computer die Zahl als Hex
Zahl lesen soll. Der Wert 330 h ist die Adresse, an der der Synthsizer
angeschlossen ist.
Mit dem Befehl "out dx,al" wird der Wert des al Speichers auf den Port
geschickt, wobei dx die Abresse beinhaltet.
Mit dem Befehl " pop dx" und "pop ax" werden die Speicherinhalte wieder
aus dem Stack gehohlt, und zwar in umgekehrter Reihenfolge, wie sie
vorher mit "push ..." hineingeschoben wurden.
Mit dem Befehl "end" wird die Routine beendet.
Mit dem Befehl "delay(200)" wird die Prozedur "delay" 200mal
wiederhohlt. Diese Prozedur beinhaltet nur eine sehr schwierige
Mathematikaufgabe, um den Computer eine Zeitlang zu beschäftigen, da
sonst die Ausgabe von Werten viel zu schnell ginge, und der Synthesizer
die Angaben nicht erkennen könnte.
Um diese Kernroutine wurde nun das Programm geschrieben. Um dem
Synthesizer auch die richtigen Werte zu geben, muss man die Strucktur
beachten (Siehe Tabelle 1).
Tabelle 1: Strutur
Das Programm wurde nun soweit entwickelt, dass es Töne, Tonleitern auf-
und abwärts und sogar die Werte aus speziellen Dateien auslesen und
abspielen kann. Das alles funktionierte auf dem Computer und Synthesizer
der Musikhochschule und auf dem Computer und Synthesizer von Herr
Deffner, aber nicht mit meiner Austattung. Dies liegt
höchstwahrscheinlich daran, dass ich keine Terratek Soundkarte haben,
und das Programm die Töne nicht auf Soundblasterkarten abspielen kann.
Nach langem herumprobieren und testen gelang es mir immer noch nicht die
Töne abzuspielen, und weil ich den geliehen Synthsizer wieder
zurückbringen musste, konnte ich meine Arbeit daran nicht fortsetzen.
(c) 2001 Peter Munk
P.S.: Ich entschuldige mich für das schlimme Schriftbild. Falls sie sich
weiterhin dafür interressieren, können sie gerne die Quelltexte und die
Dokumentation von mir
bekommen.Hier geht es zum Download(400
KB).
![]() Hier geht's zum Autor dieses Programms. |