.
.
...für DOS
...für WINDOWS 3.1, 95, 98
...für LINUX

Hardware-Beschreibung
back
HOME
.

TREIBER UNTER DOS

Die Programmierung der DMX PC-Karten ist unter DOS besonders einfach, da in allen Programmiersprachen direkte I/O-Zugriffe möglich sind. Außerdem sind so geschriebene Programme im Allgemeinen recht schnell.

Programme, Beispiele und Treiber werden ohne Anspruch auf Vollständigkeit und ohne Gewähr veröffentlicht. Änderungen, auch hardwareseitig, die dem technischen Fortschritt dienen, bleiben explizit vorbehalten. Diese Seiten werden fortlaufend ergänzt.

Aktueller Stand: 1.9.1999.


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