Das allgemeine Vorgehen zum Ansprechen der Interface-Karte entnehmen Sie bitte den kartenspezifischen Ausführungen unter der Rubrik HARDWARE.
Unter DOS ist der E/A Bereich des PC unmittelbar ansprechbar. Jede Programmiersprache stellt dazu entsprechende Kommandos bereit; spezielle Treiber sind nicht erforderlich. Dennoch kann es sinnvoll sein, entsprechende Routinen für den Kartenzugriff zu schreiben. Die nachfolgenden Beispiele sollen einige Anregungen geben.
BASIC |
Die nachfolgend angegebenen Beispiele gelten für die Karte 1512B-LC. Für andere Karten ist die Routine entsprechend anzupassen. |
| Karte erkennen | DECLARE SUB dmxinit ()
Sucht die Karte im Rechner und gibt die Kartenadresse aus. Falls keine Karte gefunden wird, Programmende. Sonst Kartenbetriebssystem laden, Voreinstellungen (aus einem Datenarray) laden und Kartenspeicher löschen. cardadr = 0
FOR i = 0 TO 3
OUT &H100 + &H20 * i, 0
OUT &H101 + &H20 * i, 0
OUT &H102 + &H20 * i, &HAA
NEXT i
FOR i = 0 TO 3
OUT &H100 + &H20 * i, 0
OUT &H101 + &H20 * i, 0
porttest = INP(&H102 + &H20 * i)
IF porttest = &HAA THEN cardadr = (&H100 + &H20 * i)
NEXT i
IF cardadr = 0 THEN PRINT " keine Karte gefunden!": END
PRINT "---------------------------"
PRINT "Kartenadresse: "; cardadr
PRINT "---------------------------"
' *******************************************
' überträgt die Betriebssystem-Software für
' die Karte, die aus einer Datei namens
' SLHDMX12.BIN gelesen wird.
' *******************************************
OPEN "SLHDMX12.BIN" FOR INPUT AS #1
i = 0
WHILE NOT EOF(1) ' liest/überträgt
x$ = INPUT$(1, #1) ' Betriebssystem
OUT cardadr, i AND 255 ' Adresse lowbyte
OUT cardadr + 1, INT(i / 256) ' Adresse highbyte
OUT cardadr + 2, ASC(x$)
i = i + 1
WEND
PRINT "--------------------------------------------"
PRINT "Betriebssystem "; i; " Bytes geladen "
PRINT "--------------------------------------------"
FOR i = 0 TO 8 ' überträgt Parameter
OUT cardadr, (i + &H7F0) AND 255 ' Adresse lowbyte
OUT cardadr + 1, INT((i + &H7F0) / 256) ' Adresse highbyte
OUT cardadr + 2, dmxdef(i) ' Datenwert
NEXT i
FOR i = &H0 TO &HFF ' Setze alle Kanäle = 0
OUT cardadr, (i + &H400) AND 255 ' Adresse lowbyte
OUT cardadr + 1, INT((i + &H400) / 256) ' Adresse highbyte
OUT cardadr + 2, 0 ' Datenwert
OUT cardadr, (i + &H500) AND 255 ' Adresse lowbyte
OUT cardadr + 1, INT((i + &H500) / 256) ' Adresse highbyte
OUT cardadr + 2, 0 ' Datenwert
NEXT i
END SUB
|
| Karte starten | DECLARE SUB dmxstart ()
Das angegebene Beispiel gilt für die Karte 1512B-LC. Für andere Karten ist die Routine entsprechend anzupassen. dummy = INP(cardadr + 3) END SUB |
| Karte stoppen | DECLARE SUB dmxstop ()
Das angegebene Beispiel gilt für die Karte 1512B-LC. Für andere Karten ist die Routine entsprechend anzupassen. OUT cardadr, 0 END SUB |
| In Karte schreiben | DECLARE SUB dmxtrans (kanal, value)
Das angegebene Beispiel gilt für die Karte 1512B-LC. Für andere Karten ist die Routine entsprechend anzupassen. IF kanal < 1 OR kanal > 512 THEN EXIT SUB ' Fehler! IF value > 255 THEN EXIT SUB ' Fehler! OUT cardadr, (&H400 + kanal - 1) AND 255 ' Adresse lowbyte OUT cardadr + 1, INT((&H400 + kanal - 1) / 256) ' Adresse highbyte OUT cardadr + 2, value ' Datenwert END SUB |