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

Hardware-Beschreibung
back
HOME
.

TREIBER UNTER WINDOWS

Treiber für ISA PC-Karten
Treiber für USB Interfaces
Treiber für PCMCIA Interfaces

Der Zugriff auf die DMX PC-Karte muß, wenn man diese Plattform verwenden will, über einen geeigneten Treiber erfolgen. Wir verwenden eine DLL, die alle Zugriffsfunktionen bereitstellt. Für Windows 3.x steht die Library SLHDMX2.DLL zur Verfügung, für Win 95/98/ME ist die 32-Bit Version SLHDMX33.DLL verfügbar. Unter Windows NT/2000 ist der Zugriff auf die DLL nicht möglich, diese Versionen erfordern ein besonderes Treiberkonzept (siehe dort)

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: 16.12.2000.

 WINDOWS 3.11   WINDOWS 95/98   WINDOWS Millennium   WINDOWS NT 


WINDOWS 3.1

Für Windows 3.1/3.11 (16-Bit Windows) ist die SLHDMX2.DLL vorgesehen. Der Standard für DLL-Aufrufe ist die PASCAL-Aufrufkonvention; für spätere Windows-Versionen läßt sich diese jedoch nicht mehr nutzen. Dennoch sind unter Win3.1 erstellte Applikationen auch unter Win95/98 lauffähig, nur kann man sie dort nicht erzeugen.
SLHDMX2.DLL    Diese DLL enthält Funktionen zum automatischen Auffinden der Karte, zum Schreiben in und Lesen aus der Karte sowie zum Starten und Stoppen des Datentransfers. Für die jeweils verwendete Karte muß zuvor das zugehörige Hardware-Betrrebssystem SLHDMXnn.BIN erfolgreich in die Karte geladen worden sein (siehe unter Hardware).
Kartenadresse ermitteln   
Declare Function vbCardadr% Lib "SLHDMX2.DLL" (ByVal CardAdr%)
findet die Adresse der Karte im Rechner. Bei Aufruf der Funktion mit CardAdr=0 wird die erste belegte Kartenadresse gefunden und ausgegeben. Bei Aufruf mit CardAdr=&H100 [&H120, &H140, &H160] wird nur diese Adresse geprüft. Wird keine Karte gefunden, ist der Rückgabewert Null.
Betriebssystem
übertragen
   
Declare Sub vbWOS Lib "SLHDMX2.DLL" (ByVal CardAdr%,
	ByVal Type%)
Betriebsprogramm in die Karte laden. Übergabeparameter:
CardAdr:  Kartenadresse
Type:   Kartentype: 1512A=12, 1512B-LC=12, 1512B=16, 1512C=17
In Karte schreiben   
Declare Sub vbWByte Lib "SLHDMX2.DLL" (ByVal CardAdr%,
	ByVal RAM%, ByVal Data%)
Ein Byte in das Karten-RAM schreiben. Übergabeparameter:
CardAdr:  Kartenadresse
RAM:   RAM-Adresse auf der Karte (&H0000 ... &H1FFF)
Data:   Datenbyte (&H00...&HFF)
Aus Karte lesen   
Declare Function vbRByte% Lib "SLHDMX2.DLL" (ByVal CardAdr%,
	ByVal RAM%)
Liest ein Byte aus dem Karten-RAM. Übergabeparameter siehe unter vbWByte. Rückgabewert: gelesenes Byte.
DMX starten   
1512A, 1512B, 1512B-LC
   
Declare Function vbDMXStart% Lib "SLHDMX2.DLL" (ByVal CardAdr%)
Startet die Übertragung der DMX-Karte.
Aufruf mit der Kartenadresse, Rückgabewert ist ein Dummy.
 
DMX starten   
1512C
   
Declare Function vbDMXResOff% Lib "SLHDMX2.DLL" (ByVal CardAdr%)
Startet die Übertragung der DMX-Karte.
Aufruf mit der Kartenadresse, Rückgabewert ist ein Dummy.
DMX stoppen   
1512A, 1512B, 1512B-LC
   
Declare Function vbDMXStop% Lib "SLHDMX2.DLL" (ByVal CardAdr%)
Beendet die Übertragung der DMX-Karte.
Aufruf mit der Kartenadresse, Rückgabewert ist ein Dummy.
 
DMX stoppen   
1512C
   
Declare Function vbDMXReset% Lib "SLHDMX2.DLL" (ByVal CardAdr%)
Beendet die Übertragung der DMX-Karte, Reset der Karten-CPU
Aufruf mit der Kartenadresse, Rückgabewert ist ein Dummy.
PC-Memory auslesen   
Declare Function vbMemRead% Lib "SLHDMX2.DLL" (ByVal Segment%,
	ByVal Adresse%)
Liest ein Byte aus dem PC-Speicher.


WINDOWS 95
WINDOWS 98
WINDOWS ME

Für Windows 95 bzw. Windows 98 (32-Bit Windows) ist die SLHDMX33.DLL vorgesehen. Da diese Windows-Versionen für DLL-Aufrufe die C-Aufrufkonvention erfordern, ist ausschleißlich diese DLL verwendbar. Dabei erfolgt der Zugriff auf die Kartenhardware ohne weitere Windows-Interaktion. Für mehrere konkurrierende Programme, die auf dieselbe Karte zugreifen wollen, muß also der Programmierer Sorge tragen, hier greift der Windows Schutzmechanismus nicht ein.
SLHDMX33.DLL    Diese DLL enthält Funktionen zum automatischen Auffinden der Karte, zum Schreiben in und Lesen aus der Karte sowie zum Starten und Stoppen des Datentransfers. Für die jeweils verwendete Karte muß zuvor das zugehörige Hardware-Betrrebssystem SLHDMXnn.BIN erfolgreich in die Karte geladen worden sein (siehe unter Hardware).
Kartenadresse ermitteln   
Declare Function vbCardadr Lib "SLHDMX33.DLL" Alias "vbCardAdr"
	(ByVal CardAdr%) As Integer
findet die Adresse der Karte im Rechner. Bei Aufruf der Funktion mit CardAdr=0 wird die erste belegte Kartenadresse gefunden und ausgegeben. Bei Aufruf mit CardAdr=&H100 [&H120, &H140, &H160] wird nur diese Adresse geprüft. Wird keine Karte gefunden, ist der Rückgabewert Null.
In Karte schreiben   
Declare Sub vbWByte Lib "SLHDMX33.DLL" (ByVal CardAdr%,
	ByVal RAMAdr%, ByVal Kanal%))
Ein Byte in das Karten-AM schreiben. Übergabeparameter:
CardAdr:  Kartenadresse
RAM:   RAM-Adresse auf der Karte (&H0000 ... &H1FFF)
Data:   Datenbyte (&H00...&HFF)
Aus Karte Lesen   
Declare Function vbRByte Lib "SLHDMX33.DLL" (ByVal CardAdr%,
	ByVal RAMAdr%) As Integer
Liest ein Byte aus dem Karten-RAM. Übergabeparameter siehe unter vbWByte. Rückgabewert: gelesenes Byte.
DMX starten   
1512A, 1512B, 1512B-LC
   
Declare Function vbDMXStart% Lib "SLHDMX33.DLL" (ByVal CardAdr%)
Startet die Übertragung der DMX-Karte.
Aufruf mit der Kartenadresse, Rückgabewert ist ein Dummy.
DMX starten   
1512C
   
Declare Function vbDMXResOff% Lib "SLHDMX33.DLL" (ByVal CardAdr%)
Startet die Übertragung der DMX-Karte.
Aufruf mit der Kartenadresse, Rückgabewert ist ein Dummy.
DMX stoppen   
1512A, 1512B, 1512B-LC
   
Declare Function vbDMXStop% Lib "SLHDMX33.DLL" (ByVal CardAdr%)
Beendet die Übertragung der DMX-Karte.
Aufruf mit der Kartenadresse, Rückgabewert ist ein Dummy.
DMX stoppen   
1512C
   
Declare Function vbDMXReset% Lib "SLHDMX33.DLL" (ByVal CardAdr%)
Beendet die Übertragung der DMX-Karte, Reset der Karten-CPU
Aufruf mit der Kartenadresse, Rückgabewert ist ein Dummy.
PC-Memory auslesen   
Declare Function vbMemRead Lib "SLHDMX33.DLL" (ByVal Segment%,
	ByVal Adresse%) As Long
Liest ein Byte aus dem PC-Speicher.


WINDOWS 95
WINDOWS 98
WINDOWS ME

Für den Zugriff auf I/O-Ports sorgt unter Windows 95 bzw. Windows 98 auch die WIN95IO.DLL. Sie bietet 8-Bit (Byte) und 16-Bit (Word) Schreib- und Lesezugriffe. Die Funktionen stehen royalty-frei zur Verfügung: eine Beschreibung ist in den Download-Files enthalten.
WIN95IO.DLL    Diese DLL enthält Funktionen für Schreib- und Lesezugriffe auf Portadressen und ist damit zum Betrieb aller Interfaces - Karten 1512A, 1512B, 1512B-LC und 1512C, sowie Printerport-Interface DMXPCP - geeignet. Bitte beachten Sie, daß zum Schreiben in das Karten-RAM auf diese Weise gegebenenfalls drei Zugriffe notwendig sind: RAM-Adresse HighByte setzen, RAM-Adresse LowByte setzen, Daten schreiben. Siehe Zugriffsvorschriften auf die Interfacekarten, die unter Hardware dokumentiert sind.
In Port schreiben   
Declare Sub vbOut Lib "WIN95IO.DLL" (ByVal nPort As Integer,
	ByVal nData As Integer)
Ein Byte in die ortadresse schreiben. Übergabeparameter:
nPort:  Portadresse
nData:   Datenbyte (&H00...&HFF)
Aus Port lesen   
Declare Function vbInp Lib "WIN95IO.DLL" (ByVal nPort As Integer)
	As Integer
Liest ein Byte aus der Portadresse. Übergabeparameter siehe unter vbOut.
Rückgabewert: gelesenes Byte.


WINDOWS 95
WINDOWS 98
WINDOWS ME

Alternativ ist für Windows 95 bzw. Windows 98 der Zugriff über ein OCX-Control möglich. Solche Controls lassen sich einfach in die entsprechenden Programmierumgebungen (Visual Basic, C++, Delphi) einbinden und stellen dann ihre Funktionen zur Verfügung. Zur Installation der OCX erhalten Sie ein vollständiges Installationsprogramm.
SLHDMX.OCX    Diese OCX enthält Funktionen zum automatischen Auffinden der Karte, zum Schreiben in und Lesen aus der Karte sowie zum Starten und Stoppen des Datentransfers. Es werden die Kartentypen 1512A, 1512B, 1512B-LC und 1512C, auch im gemischten Betrieb, unterstützt.

(wird fortgesetzt)




WINDOWS 95
WINDOWS 98
WINDOWS ME
WINDOWS NT

Unter Windows NT wird die Hardware vollständig vom Betriebssystem gekapselt, ein Zugriff über DLL-Bibliotheken ist hier nicht möglich. Windows würde in diesem Fall mit einem Exception Error reagieren. Für die Ansprache unter NT muß ein entsprechender Device Driver zum Einsatz kommen.

Ein solcher virtueller Device Driver (VxD) kapselt die Hardware von der Software ab und macht dem Betriebssystem die Existenz der Hardware bekannt. Ein einfacher Ansatz, der umständliche Programmierarbeit vermeidet, ist die Einbindung eines Universaltreibers zur Anspache von I/O Adressen. Da die DMX PC-Karten lediglich´auf I/O Adressen zugreifen müssen und keine Interrupt- oder DMX Ressourcen benötigen, ist diese Lösung sehr schnell erarbeitet.

TVICPORT.ZIP    Einen universellen Treiber names tvicport von Victor Ishikeev können Sie als Shareware von
http://www.entechtaiwan.com/tools.htm
oder dieser Seite downloaden. Das Archiv enthält Beispiele für die Ansprache des Treibers unter VISUAL BASIC 6, DELPHI2, DELPHI3, DELPHI4, BORLAND C BUILDER 3.0, BORLAND C++ 5.x, MS VISUAL C++ 6.0. Um auf die DMX PC-Karte zugreifen zu können, genügt es, die unter Hardware für die jeweilige Karte aufgeführten Zugriffe einfach umzusetzen. Zur Installation des TVICPORT Treibers lesen Sie bitte die dem Archiv beigefügten Textdateien.

Beispiel   

Die nachfolgend angegebenen Beispiele gelten für die Karte 1512B-LC. Für andere Karten ist die Routine entsprechend anzupassen. Die angegebenen Funktionen entsprechen den Aufrufen, wie sie unter WIN 9x von der SLHDMXnn.DLL bereitgestellt werden. Obwohl die nachfolgenden Beispiele im BASIC-Dialekt dargestellt wurden, sollte es wohl für keinen Programmierer ein Problem darstellen, dies auf die von ihm benutzte Sprache zu adaptieren.
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
  TVicPort1.OpenDriver

  FOR i = 0 TO 3
    TVicPort1.Port ( &H100 + &H20 * i) = 0
    TVicPort1.Port ( &H101 + &H20 * i) = 0
    TVicPort1.Port ( &H102 + &H20 * i) = &HAA
  NEXT i

  FOR i = 0 TO 3
    TVicPort1.Port ( &H100 + &H20 * i) = 0
    TVicPort1.Port ( &H101 + &H20 * i) = 0
    porttest = TVicPort1.Port(&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
    TVicPort1.Port(cardadr) = i AND 255                     ' Adresse lowbyte
    TVicPort1.Port(cardadr + 1) = INT(i / 256)              ' Adresse highbyte
    TVicPort1.Port(cardadr + 2) = ASC(x$)
    i = i + 1
  WEND
  PRINT "--------------------------------------------"
  PRINT "Betriebssystem "; i; " Bytes geladen "
  PRINT "--------------------------------------------"

  FOR i = 0 TO 8                                       	     ' überträgt Parameter
    TVicPort1.Port(cardadr) = (i + &H7F0) AND 255            ' Adresse lowbyte
    TVicPort1.Port(cardadr + 1) = INT((i + &H7F0) / 256)     ' Adresse highbyte
    TVicPort1.Port(cardadr + 2) = dmxdef(i)                  ' Datenwert
  NEXT i

  FOR i = &H0 TO &HFF                          		     ' Setze alle Kanäle = 0
    TVicPort1.Port(cardadr) = (i + &H400) AND 255            ' Adresse lowbyte
    TVicPort1.Port(cardadr + 1) = INT((i + &H400) / 256)     ' Adresse highbyte
    TVicPort1.Port(cardadr + 2) = 0                          ' Datenwert
    TVicPort1.Port(cardadr) = (i + &H500) AND 255            ' Adresse lowbyte
    TVicPort1.Port(cardadr + 1) = INT((i + &H500) / 256)     ' Adresse highbyte
    TVicPort1.Port(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 = TVicPort1.Port(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.
TVicPort1.Port(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!

  TVicPort1.Port(cardadr) = (&H400 + kanal - 1) AND 255          ' Adresse lowbyte
  TVicPort1.Port(cardadr + 1) = INT((&H400 + kanal - 1) / 256)   ' Adresse highbyte
  TVicPort1.Port(cardadr + 2) = value                            ' Datenwert
END SUB


PORT95NT.EXE    Ein weiterer Universal-Treiber names DLPortIO kann von Scientific Software Tools, Inc. geladen werden. Der Treiber wird kostenlos, jedoch ohne Support zur Verfügung gestellt, und unterstützt Windows 95, 98 und NT. Der Download ist über die Website von Scientific Software Tools, Inc, http://www.sstnet.com möglich.

Der Zugriff ist mit verschiedenen Befehlen möglich. Einen direkten Byte-Transfer erreicht man mit den Kommandos
DlPortReadPortUchar zum Lesezugriff und
DlPortWritePortUchar zum Schreibzugriff.
Die Umsetzung der Kartenfunktionen erfolgt dann analog zum obigen tvicport Beispiel. Bitte sehen Sie zur Umsetzung auch die Hardwarebeschreibung Ihrer Karte, die das genaue Zugriffsschema listet.