---------------------------------------------- Centronics-Drucker-Interface für Sharp PC-1403 ---------------------------------------------- Bei der Nutzung des Sharp PC-1403 entsteht schnell der Wunsch, einen vollwertigen Nadeldrucker anschließen zu können. Hier wird ein Interface beschrieben, welches an die 11-polige Schnittstelle des Sharp PC-1403 angeschlossen wird und über ein übliches Centronics-Kabel den Anschluss eines üblichen Druckers ermöglicht. Die Centronics-Schnittstelle an Druckern, die auch "parallele Schnittstelle" genannt wird, ist seit vielen Jahrzehnten gängig gewesen und ist trotz des heute üblichen USB-Anschlusses noch oft anzutreffen. Die Schaltung des Centronics-Interface für den PC-1403 von Sharp muss eine Reihe von Aufgaben erfüllen: (1) Die 1-Bit-seriellen Daten, die vom Sharp PC-1403 über dessen 11-polige Schnittstelle ausgegeben werden, müssen in 8-Bit-parallele Daten für die Centronics-Norm der Drucker-Schnittstelle umgewandelt werden. Dabei müssen Drucker und Computer gegenseitig auf einander warten. Dies erfordert eine ausgeklügelte interne Steuerung des Interface. (2) Sharp gibt Steuerzeichen aus, die - während sie übermittelt werden - von einem Xout Signal (Xout ist Hi) begleitet und gekennzeichnet werden. Leitet man diese Steuerzeichen an den Epson-Drucker weiter, druckt dieser Unsinn. Daher muss die Weitergabe dieser Steuerzeichen an den Epson-Drucker unterdrückt werden. (3) Sharp gibt am Zeilenende ein Steuerzeichen "0E" (hexadezimal) aus, welches beim typischen Epson-Drucker LQ300+ und LQ400 oder ähnlichen Druckern nicht etwa den erwünschten Zeilenvorschub auslöst, sondern die Bedeutung "Breitdruck für eine Zeile" hat. Der Drucker führt also lediglich einen Wagenrücklauf (CR) ohne Zeilenvorschub (LF) durch, aber schaltet auf Breitdruck, mit der unerwünschten Folge, dass alle Zeilen auf dieselbe Stelle des Papiers gedruckt werden. Das Zeichen "0E" muss in das Zeichen "0A" verwandelt werden, damit der Zeilenwechsel stattfinden kann (auto line feed), denn "0A" wird vom Epson-Drucker als "LF = line feed" verstanden. (4) Schließlich gibt es noch bei Verwendung der BASIC-Befehle wie LPRINT oder LLIST ein abweichendes Zeichen im Zeichensatz des Druckers Sharp CE-126P, so dass dieser nicht zu 100% mit dem ASCII-Zeichensatz PC437 (USA, Standard-Europa) übereinstimmt. Statt "30" wird vom Sharp PC-1403 der Code "F0" zum Drucker gesendet, wenn die Ziffer 0 gemeint ist. Wie das Schaltbild zeigt, wurde für die Erfüllung der Aufgaben (1) bis (3) eine digitale Hardware-Lösung entwickelt, die überwiegend auf CMOS-Bausteinen der Serie 4000 beruht. (1) Zur Entgegennahme der 1-Bit-seriellen Daten: Der Baustein 4094 (rechts oben) ist ein seriell-parallel-Wandler für 8 Bit. Vom 11-poligen Anschluss (oben links) wird das einzelne, vom PC-1403 gesendete Bit nacheinander achtmal angefordert, entgegengenommen und in das Schieberegister 4094 eingelesen. Die Abfolge des Einlesens wird durch Signale der Leitungen Busy und ACK gesteuert. Das gepufferte Busy-Signal, welches vom PC-1403 kommend an Pin 4 anliegt, dient innerhalb des Centronics-Interface als Clock-Signal. Der Baustein 4017 zählt 8 Bit ab, stoppt sodann über das Signal auf der Leitung "8" die Entgegennahme weiterer serieller Daten vom PC-1403, indem über die Leitung ACK keine Steuersignale mehr an den PC-1403 herausgehen. Ferner prüft ein Gatter, ob sowohl das PC-1403 Busy Signal als auch das Centronics Busy Signal Lo sind und bekannt geben, dass der PC-1403 mit der Datenübergabe fertig ist und der Drucker zur Entgegennahme von Daten bereit ist; wenn ja, löst das Signal auf der Leitung "8" über das Signal "Ready" das interne Strobe-Signal aus, welches von Lo auf Hi geht; die Länge dieses Impulses wird vom "int.strobe timer" bestimmt. Zur Ausgabe der 8-Bit-parallelen Daten: Das "int.strobe" Signal veranlasst den Baustein 4094, die Daten parallel an den IC-Pins 4,5,6,7,14,13,12,11 für die Bits 8 bis 1 auszugeben. Diese werden über 8 parallele Treiber-Gatter 74HCT541 an die Centronics-Buchse geleitet und in Richtung zum Epson-Drucker weitergegeben. Der "tilt pulse/strobe monoflop" erzeugt, ausgelöst vom Abfallen des "int.strobe" Signals von Hi auf Lo ein etwas zeitverzögertes Signal, welches über die Leitung "Centronics Strobe" den Drucker zur Entgegennahme der 8-Bit-parallelen Daten auffordert. Nach Entgegennahme des "Centronics Strobe" Signals durch den Drucker gibt dieser über die Leitung "Centronics Busy" ein Antwortsignal, dass der Drucker arbeitet. Dieses Centronics Busy Signal wird verwendet, um die Abläufe in der Steuerelektronik des Interfaces intern weiterhin zu stoppen. Sobald der Drucker die Information verarbeitet hat, gibt er dies durch das Centronics ACKNLG Signal bekannt, welches den Reset am Zähler-bis-8 4017 auslöst, den Stopp der Steuerelektronik des Interface beendet und damit die Entgegennahme weiterer serieller Daten vom PC-1403 freigibt. (2) Diese oben beschriebenen internen Abläufe des Interface ermöglichen bereits die Übermittlung von Daten vom Sharp PC-1403 zum Epson Drucker. Allerdings sendet der Sharp PC-1403 bei Verwendung des BASIC-Befehls LPRINT nicht nur den Text, sondern vorweg auch einige Byte spezieller Steuerzeichen an den Sharp-Drucker CE-126P, mit denen der Drucker Epson nichts anfangen kann, so dass dieser vor dem eigentlichen Text zwei lange Zeilen Unsinn druckt. Das Interface soll diese Steuerzeichen unterdrücken und nicht an den Drucker weitergeben. Wir können sie recht einfach identifizieren, weil das Signal Xout bei Übermittlung von Zeichen des Textes stets Lo ist, aber parallel zu den speziellen Steuerzeichen von Lo auf Hi wechselt. Verkomplizierend wirkt, dass bei Übermittlung dieser speziellen Steuerzeichen das Signal ACK die Polung umkehren muss, damit der PC-1403 den Datenaustausch korrekt fortsetzt. Die Polungsumkehr des ACK-Signals wird elegant von einem EXOR-Gatter erledigt, welches in der ACK-Leitung eingefügt ist. Die Unterdrückung ("Tilt") der unerwünschten Steuerzeichen ist etwas aufwendiger. Dafür wird zunächst das Xout Signal mittels eines bistabilen Flipflops kurzfristig gespeichert. Mit dem Signal Xout=HI wird das Centronics-Strobe Signal umgeleitet und nicht an den Drucker gegeben, sondern dient nun - als Signal "tiltpuls" - direkt dem Reset des Zählers-bis-8 (Baustein 4017), so dass anstelle der Weitergabe des Zeichens an den Drucker unmittelbar das nächste Zeichen vom Sharp PC-1403 geladen wird. So erreichen die speziellen Steuerzeichen wie beabsichtigt den Drucker nicht. Wer plant, das Centronics-Interface ohne den BASIC-Befehl LPRINT zu verwenden und beispielsweise Maschinensprache-Routinen nutzen will, welche keine speziellen Steuerzeichen senden, kann den Jumper auf der Platine auf "ohne Tilt" umsetzen. (3) Vom Sharp PC-1403 wird am Zeilenende das Zeichen "0E" gesendet. Auch dieses Zeichen ist zwar ein Steuerzeichen, aber Xout bleibt hier Lo, so dass dieses Zeichen von unserem "Tilt" Mechanismus nicht unterdrückt wird. Allerdings wird "0E" vom Epson-Drucker (und vielen anderen) nicht als Zeilenwechsel interpretiert. Drucker wie Epson LQ300+ hingegen benötigen das Steuerzeichen "0A" für LF (line feed), denn es erzeugt den gewünschten Zeilenwechsel. Der Baustein 4078 erkennt das Zeichen "0E" und sorgt mit dem EXOR-Gatter in der Datenleitung von Bit 3 dafür, dass aus einem "0E" ein "0A" wird. Auch dieser Eingriff des Interface in den Datenfluss kann abgeschaltet werden; hierfür dient ein nach außen ausgeführter Umschalter mit der Bezeichnung "auto line feed". (4) Bei Nutzung dieses Centronics-Interface zusammen mit herkömmlichen Druckern mit dem üblichen ASCII Zeichensatz entsteht in Zusammenarbeit mit dem Sharp PC-1403 noch ein weiteres Problem: Der Sharp PC-1403 sendet für die Ziffer 0 den Code "F0"; vom Epson Drucker wird laut ASCII Code Tabelle PC437 (USA, Standard-Europa) aber ganz anders gedruckt: Es erscheint ein Zeichen, das aus drei kurzen übereinander angeordneten horizontalen Strichen besteht. Auch dieses Zeichen "F0" ließe sich theoretisch durch weitere Hardware im Interface gegen "30" austauschen. Ich empfehle jedoch, dies mit einer einfachen Software-Routine von BASIC aus zu erledigen, indem jede Null im Text gegen einen Buchstaben "großes O" ersetzt wird. Arbeitet man hingegen zum Drucken mit einer Maschinensprache-Routine, wird dieser Austausch überflüssig. Denn in den Stringvariablen des Sharp PC-1403 wird der "richtige" ASCII Code verwendet, und die Null wird mit dem Code "30" gespeichert. ------------------------------------ Die im Centronics-Interface eingebauten Funktionen reichen für einen einfachen Betrieb des Nadeldruckers Epson LQ300+ oder Epson LQ400 aus. Die mit LLIST ausgegebenen Listings des Programms enthalten zwar das störende Zeichen (drei waagerechte Striche) statt der Null, aber für schnelle Kontrollen von Programmen ist das nach kurzer Gewöhnung kein echtes Hindernis. Die Breite der jeweiligen Zeile bleibt jedoch mit Befehlen wie LPRINT oder LLIST auf 24 Zeichen beschränkt. Eine Nutzung der vollen Breite des DIN-A4 Papiers erfordert Maschinensprache-Routinen. Die Vorgehensweise ist folgendermaßen: Der Text einer Zeile wird zunächst in eine String-Variable großer Länge gespeichert, z.B. P(0)*77 Sodann werden davon jeweils Teilstücke zu je 7 Byte abgetrennt (z.B. mit dem Befehl MID$) und in die Variable A$ gespeichert. Die Variable A$ hat den großen Vorteil, dass sie unverrückbar im RAM an immer derselben Stelle aufzufinden ist und deswegen einfach als Zwischenspeicher zur Übergabe der Texte von BASIC zur Maschinensprache verwendet werden kann. Die Variable A$ wird mit Hilfe der BASIC-Befehle mit dem Text gefüllt, und anschließend liest die Maschinensprache diese Variable aus. Auf diese Weise wird jedes dieser Text-Stücke zu je 7 Byte von der Maschinensprache-Routine an die 11-Pin-Schnittstelle gesendet, von dort in die Centronics-Schnittstelle geleitet und zum Drucker Epson weitergegeben und dort zunächst zwischengespeichert. Dasselbe geschieht für alle 11 Text-Teilstücke, bis die Zeile komplett übertragen wurde. Sodann werden noch anschließend die Zeichen "0D" und "0A" (hexadezimal, für CR und LF) gesendet, und so die Zeile abgeschlossen und gedruckt.