Ein Drucker für zwei

Die Situation ist gar nicht so selten: Für zwei PCs ist nur ein Drucker da. Ein Umschalter kostet Geld und ist oft auch aus räumlichen Gründen unpraktisch, weil die Länge eines Druckerkabels stark begrenzt ist. Es ist aber weder der besagte Umschalter noch ein zweiter Drucker notwendig, wenn Sie unsere Programme LPTCOM- und LPTSHARE.DEB verwenden. Die Programme, stehen über ein Nullmodem-Kabel in Verbindung und regeln den Datenfluß von zwei unterschiedlichen PCs auf einen Drucker. LPTCOM installiert sich in den Interrupt 17h des druckerlosen PCs und leitet alle Daten, die für die parallele Schnittstelle bestimmt sind, mit einer Übertragungsgeschwindigkeit von 38400 Baud (!) auf den seriellen Port um.

Gemeinsam mit dem Empfängerprogramm im anderen PC, LPTSHARE, kommt es zu einem einfachen »Handshaking« – als Quittung für jedes übertragene Byte wird der Statuscode des Druckers verwendet. Erhält LPTCOM 5 Sekunden lang keine Möglichkeit, ein Byte zu drucken, geht das Programm von einem Fehler aus. Die druckende Anwendung merkt von der Umleitung absolut nichts. Auch mit dem »Vermittler«-PC können Sie während dieser Zeit wie gewohnt wieterarbeiten. Beide Programme arbeiten diskret im Hintergrund und benötigen jeweils weniger als 500 Byte. Sogar Hardcopies funktionieren problemlos auf beiden PCs. Kommt es zu einem Fehler, etwa weil die Leitung unterbrochen ist oder das Papier fehlt, erhalten Sie die gewohnten Meldungen. LPTSHARE klinkt sich je nach Schnittstelle entweder in den Interrupt 0Ch oder 0Bh ein. Bei größeren Übertragungen verbraucht das Programm zur Koordinierung etwas Rechenzeit. Bei einem mit 4,77 MHz getakteten Original IBM-PC mit einem sehr langsamen Drucker ohne eigenen Puffer (IBM-Grafikdrucker) reduziert sich die Arbeitsgeschwindigkeit um rund ein Drittel. Da auf beiden Computern das Drucken zu jeder Zeit möglich ist, sollten Sie sich natürlich mit Ihrem Kollegen absprechen, um Drucksalat zu vermeiden. Eine Übertragungsrate von 38400 Baud (3840 Byte pro Sekunde), bei der effektiv rund 1 KByte Daten pro Sekunde gedruckt werden kann, gewährleistet eine hohe Datensicherheit bei akzeptabler Geschwindigkeit. Für Laserdrucker können Sie die Datenrate übrigens auch erhöhen, indem Sie den dritten Wert von rechts in der DW-Zeile im hinteren Teil der Listings verändern. Beide Programme sind natürlich mit den selben Werten zu konfigurieren:

Baudrate Wert
115200 1
57600 2
38400 3
19200 6
9600 C
7200 10
4800 18
2400 30
1200 60

Allerdings zeigt diese Erhöhung der Übertragungsgeschwindigkeit nur bei schnelleren Geräten einen Effekt – viele PCs sind einfach zu langsam, um auf die Übertragung eines Datenbytes mit der maximalen Rate von 115,2 KBaud (11,52 KByte pro Sekunde) in einer angemessenen Zeitspanne reagieren zu können. Probleme ergeben sich jedoch auch dadurch nicht. Solche können lediglich entstehen, wenn ein anderes Übertragungsprogramm gestartet wird, das auf die gleiche Schnittstelle zugreift, oder wenn zwischendurch die Schnittstellenparameter verändert werden. Wie Sie eine einfache Nullmodem-Verbindung realisieren können, erfahren Sie im Kapitel »Andere Hardware«.

Name: LPTCOM.DEB
Funktion: Leitet Druckerausgaben auf eine serielle Schnittstelle um.
Übersetzung: DEBUG <LPTCOM.DEB
Prüfsumme: 632E
Anwendung: LPTCOM P,SP = Parallele Schnittstelle (1 … 4) S = Serielle Schnittstelle (1 oder 2)</strong>
Einschränkungen: Funktioniert nur in Verbindung mit LPTSHARE.
A
MOV AX,[82]         ;100
ADD [150],AX        ;103
CMP By[84],32       ;107
JNZ 112             ;10C
DEC By[149]         ;10E
MOV AX,3517         ;112
INT 21              ;115
MOV [198],BX        ;117
MOV [19A],ES        ;11B
MOV DX,14E          ;11F
MOV AX,2517         ;122
INT 21              ;125
MOV SI,8            ;127
MOV AX,[SI+19C]     ;12A
CALL 147            ;12E
SUB SI,2            ;131
JNB 12A             ;134
CALL 13E            ;136
MOV DX,19C          ;139
INT 27              ;13C
XOR DX,DX           ;13E
CS:ADD DX,[148]     ;140
IN AL,DX            ;145
RET                 ;146
MOV DX,3F8          ;147
ADD DL,AH           ;14A
OUT DX,AL           ;14C
RET                 ;14D
CMP DX,D3CF         ;14E
JNZ 197             ;152
PUSH CX             ;154
PUSH DX             ;155
CS:MOV [16B],AL     ;156
CMP AH,1            ;15A
MOV AH,90           ;15D
JNB 194             ;15F
MOV AH,0            ;161
INT 1A              ;163
CS:MOV [180],DX     ;165
MOV AX,0            ;16A
CALL 147            ;16D
MOV DX,5            ;170
CALL 140            ;173
TEST AL,1           ;176
JNZ 18B             ;178
MOV AH,0            ;17A
INT 1A              ;17C
SUB DX,100          ;17E
CMP DX,5A           ;182
JB 170              ;185
MOV AH,C9           ;187
JMP 194             ;189
CALL 13E            ;18B
TEST AL,1           ;18E
JNZ 16A             ;190
MOV AH,AL           ;192
POP DX              ;194
POP CX              ;195
IRET                ;196
JMP 0:0             ;197
DW 100,303,3,100,380

RCX
A6
NLPTCOM.COM
W
Q
Name: LPTSHARE.DEB
Funktion: Leitet von der seriellen Schnittstelle empfangene Daten auf den Drucker um.
Übersetzung: DEBUG <LPTSHARE.DEB
Prüfsumme: 7170
Anwendung: LPTSHARE P,SP = Parallele Schnittstelle (1 … 4)

S = Serielle Schnittstelle (1 oder 2)

Einschränkungen: Funktioniert nur in Verbindung mit LPTCOM.
A
MOV AX,[82]         ;100
ADD [15B],AX        ;103
MOV AX,250C         ;107
MOV CL,EF           ;10A
CMP By[84],32       ;10C
JNZ 11B             ;111
DEC By[141]         ;113
DEC AL              ;117
MOV CL,F7           ;119
MOV DX,146          ;11B
INT 21              ;11E
MOV SI,A            ;120
MOV AX,[SI+176]     ;123
CALL 13F            ;127
SUB SI,2            ;12A
JNB 123             ;12D
MOV DX,[140]        ;12F
IN AL,DX            ;133
IN AL,21            ;134
AND AL,CL           ;136
OUT 21,AL           ;138
MOV DX,176          ;13A
INT 27              ;13D
MOV DX,3F8          ;13F
ADD DL,AH           ;142
OUT DX,AL           ;144
RET                 ;145
PUSH AX             ;146
PUSH DX             ;147
XOR DX,DX           ;148
CS:MOV DX,[140]     ;14A
IN AL,DX            ;14F
CS:MOV [168],AL     ;150
MOV AX,220          ;154
OUT 20,AL           ;157
STI                 ;159
MOV DX,D3CF         ;15A
INT 17              ;15D
OR AH,1             ;15F
TEST AH,80          ;162
JZ 16C              ;165
MOV AX,0            ;167
INT 17              ;16A
MOV AL,AH           ;16C
MOV AH,0            ;16E
CALL 13F            ;170
POP DX              ;173
POP AX              ;174
IRET                ;175
DW 408,101,303,3,100,380

RCX
82
NLPTSHARE.COM
W
Q

Quelle: 200 Utilities für PC-/MS-DOS von Gerhard Schild und Thomas Jannot