C 64
Centronics-Schnittstelle
6/84, S. 34-36

Epson für Commodore 64

Ein Beweis für die Vielseitigkeit des User-Ports ist seine Programmierung als Centronics-Schnittstelle. Daß dies mit wenig Material, einem Lötkolben und einer Stunde Zeit zu realisieren ist, zeigt dieser Bericht am Beispiel der Epson-Drucker.

Drucker User-Port
Pin Nummer Bezeichnung Bezeichnung Pin Nummer
1 STROBE PA2 M
2 DATA 1 PB0 C
3 DATA 2 PB1 D
4 DATA 3 PB2 E
5 DATA 4 PB3 F
6 DATA 5 PB4 H
7 DATA 6 PB5 J
8 DATA 7 PB6 K
9 DATA 8 PB7 L
10 ACKNLG FLAG2 B
16 GND GND A

Für den Anschluß eines Druckers an den C 64 ist zunächst nur der serielle Bus, an dem auch das Diskettenlaufwerk angeschlossen ist, vorgesehen. Dieses Konzept, mehrere Geräte an einer Schnittstelle zu betreiben, hält zum einen die Anzahl der Anschlüsse am Computer in Grenzen, zum anderen genügt für die Verbindung ein einfaches Kabel. Des weiteren kann man sich auf ein einheitliches Protokoll zur Datenübertragung von und zu den Geräten beschränken (bei Commodore mittels OPEN, CLOSE, CMD, PRINT mit logischer Datei- und Gerätenummer).

Der Nachteil dabei ist, daß man nur die von Commodore angebotene Peripherie direkt anschließen kann, wie zum Beispiel die Drucker 1526, 1525, 1520 oder den MPS 801. Möchte man aber einen Drucker eines anderen Herstellers wie zum Beispiel einen Epson MX/RX und FX-80 (Bild 1) anschließen, ist es mit einer einfachen Kabelverbindung oft nicht mehr getan. Standard bei Druckern ist nicht der serielle Bus von Commodore, sondern die Centronics- und die RS232-Schnittstelle. Die Epson-Drucker sind dabei in der Regel mit einer Centronics- Schnittstelle ausgestattet.

Bild 1. Der Epson-FX-80-Drucker

Die Lösung dieses Anschlußproblems ist auf zwei verschiedenen Wegen möglich. Entweder wird ein vergleichsweise teures Interface zwischen C 64 und dem Epson zwischengeschaltet beziehungsweise in den Drucker eingebaut, oder, was preiswerter und flexibler ist, es wird der User-Port als Centronics-Schnittstelle programmiert.

Voraussetzung dafür ist allerdings, daß der User-Port nicht anderweitig benötigt wird (EPROM-Brenner, Modem, RS232 etc.). Von der elektronischen Seite gibt es gegen eine Direktverbindung keine Einwände, solange der Eingang am Drucker den mit dem User-Port verbundenen CIA nicht mehr als mit den im Datenblatt spezifizierten 3.2 mA im Low-Zustand pro Signalleitung belastet. Wir haben an einem Epson-FX-80-Drucker einen Eingangs-Kurzschlußstrom von 1,6 mA gemessen, womit ein sicherer Betrieb des CIA garantiert ist. Außer dem beschriebenen Kabel ist keine weitere Hardware erforderlich.

Man benötigt nun einen 24poligen User-Port-Stecker (zum Beispiel TRW 251-12-50-17081/350-4SN-9) sowie einen 36poligen Centronics-Stecker (zum Beispiel Amphenol 57-30360). Die Centronics-Konvention verlangt ein abgeschirmtes Kabel und schreibt vor, daß alle Signalleitungen mit einer eigenen Signalmasse-Leitung verdrillt werden müssen. Unser C 64 arbeitet aber trotz Verzicht auf diesen Aufwand bisher fehlerfrei mit einem FX-80 zusammen.

Das Kabel (Bild 2 und 3): Es müssen elf Verbindungen hergestellt werden (Flach- und Rundkabel).

Bild 2. Das Verbindungskabel vom User-Port zur Centronics-Schnittstelle
Bild 3. Der Verkabelungsplan

Die Treibersoftware

Die Software arbeitet einwandfrei mit Programmen zusammen, die eine ASCII-Ausgabe-Option besitzen, wie dies bei den meisten Textverarbeitungsprogrammen der Fall ist. Es soll hier auch lediglich der Hard- und Software-Kern der Schnittstelle dargestellt werden.

Das Programm ist mit 87 Byte Länge sehr kurz und kann damit im Kassetten-Puffer ($033C bis $03FB), oder wie hier im sonst ungenutzten Bereich ($02A7 bis $02FF) untergebracht werden. Es wirkt wie folgt: Die Standard-Zeichenausgaberoutine des Betriebssystems, CHROUT, wird durch einen geänderten Vektor in das Erweiterungsprogramm umgeleitet. Dieses überprüft, ob die Ausgabe über Gerätenummer 4 (Standardnummer für Drucker) erfolgen soll. Wenn nicht, springt es sofort in das Betriebssystem zurück. Ansonsten wird das zu übertragende Byte an CIA2 Port B gelegt und über einen Strobe-Impuls über Port A, Bit 2 dem Drucker mitgeteilt, daß die anliegenden Daten gültig sind. Der Drucker quittiert den Datenempfang über das Acknowledge-Signal. Dieses setzt am C 64 über den FLAG-2-Eingang Bit 4 des Interrupt-Registers von CIA 2. Der CIA wird so programmiert, daß dadurch aber kein Interrupt ausgelöst wird. Das Programm wartet vielmehr, bis dieses Bit gesetzt ist, löscht es beim Auslesen automatisch und springt erst dann in das rufende Hauptprogramm zurück. Damit ist ein voller Handshake gewährleistet.

Aus dem Assemblerlisting (Bild 4) geht eine Gliederung in drei Abschnitte hervor:
1. Zeile 190-280
Abfrage, ob Ausgabe über Gerätenummer 4 erfolgen soll
Bei ASCII-Code 13 (Carriage Return) wird automatisch noch ein ASCII-Code 10 (Line Feed) gesendet. Durch Weglassen der Zeilen 250 bis 280 wird kein automatischer Line Feed gesendet.
2. Zeile 320-420
Ausgabe eines Byte
3. Zeile 500-670
Programmierung des CIA2 für die Ausgabe. Umstellen des Ausgabevektors auf den Programmteil 1

Bild 4. Das Assemblerlisting

Die praktischen Anwendungen

Der Umgang mit dieser Schnittstelle gestaltet sich im praktischen Betrieb recht einfach und problemlos. Das Programm wird in der vorliegenden Form in den Bereich $02A7 bis $02FD geladen und durch Aufruf des Initialisierungsteils JSR $02D4 beziehungsweise SYS 724) für die Druckausgabe vorbereitet. Das kann zum Beispiel der angefügte Basic-Lader (Bild 5) übernehmen. Man kann dann zum Beispiel ein Basic-Programm mit folgender Sequenz listen:

OPEN 1,4 : CMD 1 : LIST

Damit werden sämtliche Daten über den Drucker ausgegeben und nach:

PRINT # 1 : CLOSE 1

werden die Daten wieder auf den Bildschirm ausgegeben.

100 print"load  centronics-schnittstelle wait"
105 print:print" mit auto-line-feed"
110 print" thomas kraetzig 21.2.84"
120 print" bitte geeignetes kabel verwenden"
130 restore
140 for i=0 to 86
150 read x:poke 679+i,x
160 next
180 sys 724
190 end
191 data72,165,154,201,4,240,3,76,205,241,104,201,13,208,5,32,187,2,169,10
192 data141,1,221,173,0,221,41,251,141,0,221,9,4,141,0,221,173,13,221,41
193 data16,240,249,24,96,120,169,255,141,3,221,173,2,221,9,4,141,2,221,173
194 data0,221,9,4,141,0,221,169,16,141,13,221,173,13,221,169,167,141,38,3
195 data169,2,141,39,3,88,96
Bild 5. Der Basic-Lader

Man beachte, daß nach Drücken der Kombination RUN/STOP RESTORE (non maskable Interrupt) sämtliche Zeiger auf ihre Standardwerte zurückgestellt sind. Deshalb muß die Schnittstelle durch SYS 724 wieder neu initialisiert werden.

Die Möglichkeiten, einen Drucker wie den Epson MX/FX-80 mit einer solchen Schnittstelle zu betreiben, sind beinahe unbegrenzt. So ist es beispielsweise möglich, ein Hardcopyprogramm zu schreiben, mit dem Ausdrucke in der Form des Bildes 6 ausgedruckt werden können. Ein Epson FX-80 braucht für ein solches Bild etwa 32, in doppelter Größe zirka 70 Sekunden. Auch ist es möglich, im Grafik-Modus einen neuen Zeichensatz mit near-Letter-Quality zu entwerfen. Dieser druckt dann, zwar deutlich langsamer, aber dafür wesentlich schöner, zum Beispiel wichtige Briefe, aus.

Bild 6. Probeausdruck einer Hardcopy

Die Nachteile dieser Lösung sind natürlich immer im Verhältnis zum finanziellen Aufwand zu sehen. So ist es mit dem abgebildeten Basicprogramm nicht möglich, die Steuer- und Grafikzeichen des Commodore 64 auszudrucken. Auch der gezeigte Hardcopyausdruck ist nur mit einem zusätzlichen Programm zu realisieren.

Bei weiterem Interesse können Sie sich an die Autoren wenden.

(A. Wängler/T. Krätzig)
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →