Zum Inhalt springen

Interrupts 80x86/ INT 17

Aus Wikibooks

Int 17h Parallele Schnittstelle

Die BIOS-Funktionen des Int 17h können bis zu drei parallele Schnittstellen bedienen. Die Nummer der Schnittstelle wird im DX-Register übergeben. Nach Aufruf liefert jede der drei Funktionen das Status-Byte der Schnittstelle in AH zurück.

LPT1: DX = 0
LPT2: DX = 1
LPT3: DX = 2

Funktion 0 - Zeichen ausgeben

[Bearbeiten]
MOV   AH, 00   ; Funktionsnummer 0
MOV   AL, char ; ASCII-Zeichen
MOV   DX, 00   ; LPT1
INT   17h      ; Liefert in AH den Status zurück.

Funktion 1 - LPT initialisieren

[Bearbeiten]
MOV   AH, 01   ; Keyboard Status OHNE Abholung des Zeichens
MOV   DX, 02   ; LPT3
INT   17h      ; Liefert in AH den Status zurück.

Funktion 2 - LPT-Status abfragen

[Bearbeiten]
MOV   AH, 02   ; Shift Status
MOV   DX, 01   ; LPT2
INT   17h      ; Liefert in AH den Status zurück.

Status-Byte

[Bearbeiten]
Bit 7  0 = Drucker ist beschäftigt (busy)
Bit 6  1 = Empfangsbestätigung
Bit 5  1 = Kein Papier mehr
Bit 4  1 = Drucker ist Online
Bit 3  1 = Übertragungsfehler
Bit 2  unbenutzt
Bit 1  unbenutzt
Bit 0  1 = Time-Out-Fehler

Time-Out-Fehler werden immer dann gemeldet, wenn nach einer gewissen Anzahl an Versuchen das Zeichen nicht vom Endgerät angenommen wurde. Dies kommt relativ häufig vor, da die parallele Schnittstelle im Vergleich zu einem z.B. angeschlossenen Drucker sehr schnell ist. Der Time-Out-Wert ist daher per BIOS-Variable anpassbar.

0040:0078 - Time-Out-Wert LPT1
0040:0079 - Time-Out-Wert LPT2
0040:007A - Time-Out-Wert LPT3

Beim Booten wird durch das BIOS standardmäßig der Wert 20 eingetragen. Da die Wiederholschleife sehr kurz ist, wird der hier eingetragene Wert mit einer Konstanten, meist 262.140 (4*65536) multipliziert. Der Wert 20 entspricht daher mehr als 5 Millionen Versuchen.

Da es sich um eine reine Software-Schleife handelt, ist die Time-Out-Dauer direkt von der Prozessorgeschwindigkeit abhängig. Oft wird jedoch kein höherer Time-Out-Wert gesetzt, sondern eine größere interne Konstante gewählt, z. B. 8 * 65536. Sollten trotzdem Time-Out-Fehler auftreten, können die Time-Out-Werte über die BIOS-Variablen vom Benutzer weiter angepasst werden.