Interrupts 80x86/ INT 17
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.