Die billigste Centronics-Schnittstelle für den C 64
Diese Schnittstelle übertrifft mit ihren Leistungsmerkmalen viele käufliche Hardware-Schnittstellen um ein Vielfaches. Nicht aber im Preis: Nur etwa 15 Mark kostet diese »Selbstbau«-Centronics-Schnittstelle.
Leser des 64’er Magazins, die schon »seit Anfang dabei sind«, erkennen diese Schnittstelle bestimmt wieder. In Ausgabe 7/85 wurde sie unter dem Namen Eyssele-Schnittstelle vorgestellt.
Wie im Fernsehen! Jetzt fangen die auch schon mit Wiederholungen an! Diese Vermutung trifft nur in diesem speziellen Fall zu. Wir haben guten Grund, das Programm zu der Eyssele-Schnittstelle nochmals abzudrucken. Denn viele unserer Lesereinsendungen—auch einige Listings in diesem Sonderheft — beziehen sich auf diese Software-Schnittstelle. Die alten Hasen unter Ihnen mögen uns verzeihen. Aber seit einem Jahr wuchs unsere Leserzahl so gewaltig, daß ein großer Teil die Eyssele-Schnittstelle einfach noch nicht kennt.
Es handelt sich hierbei um ein Maschinenspracheprogramm mit 726 Byte Länge, das den Adreßbereich C900-CBD1 (dezimal: 51456 bis 52182) belegt (Listing 1). Damit kann zum Beispiel das DOS 5.1 auf der Demodiskette ohne Probleme zusätzlich geladen werden.
Das Programm ist ohne Einschränkung für alle Epson-kompatiblen Drucker anwendbar, die über einen Bitmustermodus verfügen. Dieser Modus wird für die Ausgabe der Commodore-eigenen Grafikzeichen benötigt. Das Programm besteht aus mehreren Programmteilen, von denen die meisten Erweiterungen bestehender Ein-/Ausgaberoutinen des Betriebssystems sind und bei der Initialisierung in diese eingebunden werden. Dadurch können schon bestehende Basic-Befehle wie OPEN und PRINT # zum Drucken benutzt, und Programme müssen nicht umgeschrieben werden. Zur Ansteuerung verschiedener Druckmodi wurden jedoch zusätzliche Gerätenummern definiert, deren Bedeutungen in Tabelle 1 erklärt sind. Gerätenummer 16 realisiert einen sogenannten Direktmodus, mit dem die internen Commodore-Zeichencodes ohne Wandlung an den Drucker gelangen. Der Direktmodus ist zur Ausgabe von Steuerzeichen oder bei der Verwendung des Druckers als Plotter zur Einzelnadelsteuerung beziehungsweise zur Ausgabe von Bitmustern geeignet. Der Textmodus (Groß- und Kleinschreibung) ist unter Gerätenummer 18 und, weil er wohl am häufigsten bei bereits bestehenden Programmen benutzt wird, unter Gerätenummer 4 ansprechbar. Die Gerätenummer 19 realisiert den Großschrift/Grafik-Modus, wie er beim C64 gleich nach dem Einschalten voreingestellt ist Der wichtige Modus zum Listen von Programmen wurde mit Gerätenummer 17 realisiert. Es läßt sich über die Sekundäradresse, wie in den Musterlistings (Bild 1 bis 3) gezeigt, noch zwischen vier Fällen unterscheiden. Einmal kann ausgewählt werden, ob das Listing, wie vom Bildschirm her gewohnt, mit Großbuchstaben und Grafikzeichen oder im Textmodus mit großen und kleinen Buchstaben gedruckt wird. Zum anderen kann man auswählen, ob die Steuerzeichen wie bei der Bildschirmausgabe als inverse Zeichen oder durch Abkürzungen wie <CRD> (Cursor down) im Klartext gedruckt werden. Durch all diese Möglichkeiten kann der Anwender zum einen auf seinem Drucker Ausgaben erzeugen, wie man sie von Commodore-Druckern her gewohnt ist, zum anderen auch alle Möglichkeiten seines Druckers voll nutzen.
GERÄTENUMMER 16 | = DIREKTMODUS |
GERÄTENUMMER 18,4 | = TEXTMODUS |
GERÄTENUMMER 19 | = GRAFIKMODUS |
GERÄTENUMMER 17 | = LIST-MODUS |
SEK-ADR. | MODUS | STEUERZEICHEN |
---|---|---|
0 | NORMAL | NORMAL |
1 | KLEIN | NORMAL |
2 | NORMAL | ERKLÄRT |
3 | KLEIN | ERKLÄRT |



Commodore-eigene Grafikzeichen
Die Ausgabe von Grafikzeichen erfolgt in der Routine OUTGEN ab Adresse $CAC4. Zu diesem Zweck wird der Zeichengenerator des C 64 ausgelesen. Die Zeichen, die aus einer 8x8- Punktmatrix bestehen, sind dort in je 8 Byte abgelegt. Jedes Byte repräsentiert das Punktmuster einer Zeile der Matrix. Ein Matrixdrucker druckt die Zeichen, indem er sie ebenso als Muster von matrixartig angeordneten Punkten zu Papier bringt. Jedoch gibt er die Punktmatrix nicht wie der Bildschirm zeilenweise, sondern spaltenweise aus. Deshalb wird in OUTGEN die im Zeichengenerator in 8 Zeilenbyte gespeicherte Zeichenmatrix zunächst in 8 Spaltenbyte umorganisiert. Nach Umschalten des Druckers in den sogenannten Bitmustermodus, in dem er jedes ankommende Datenbyte nicht mehr als ASCII-Zeichen, sondern als Musterbyte für eine Matrixspalte interpretiert, gibt OUTGEN die acht geänderten Zeichenbyte an den Drucker aus. Dieser fügt sie wieder zu einem 8x8- Punktmatrixzeichen zusammen. So ist es möglich, auf einem Matrixdrucker exakte Kopien der C 64-Bildschirmzeichen herzustellen, obwohl dieser nicht über den entsprechenden Zeichensatz verfügt.
So benutzen Sie das Programm
Das Listing sollten Sie mit dem MSE eingeben und auf Diskette oder Kassette speichern, bevor Sie es starten. Bevor Sie es allerdings laden, sollten Sie sich das Verbindungskabel User-Port-Centronics-Buchse zusammenlöten. Dazu ist in Tabelle 2 ein Verbindungsplan angegeben. Das Kabel sollte für eine störungsfreie Funktion nicht länger als ein Meter lang sein und aus einem abgeschirmten, mehradrigen Steuerkabel bestehen, das man in (fast) jedem Elektronik-Bastelgeschäft findet Dort sind auch meist der Centronics-Stecker und der Stecker für den User-Port erhältlich.
USER PORT | CENTRONICS | |
A | GND | 16 |
B | FLAG - BUSY | 11 |
C | D0 | 2 |
D | Dl | 3 |
E | D2 | 4 |
F | D3 | 5 |
H | D4 | 6 |
J | D5 | 7 |
K | D6 | 8 |
L | D7 | 9 |
M | PA2 - STROBE | 1 |
Initialisiert wird die geladene Treiberroutine mit SYS 12*4096+9*256 beziehungsweise SYS 51456.
Hierbei wird die Routine in das Betriebssystem eingebunden. Jedoch Vorsicht: Nach einem Break, zum Beispiel durch die Betätigung der Tasten RUN/STOP und RESTORE ausgelöst, muß die Routine erneut initialisiert werden, da die l/O-Vektoren vom Betriebssystem zurückgesetzt wurden.
Die einzelnen Druckmodi spricht man mit den üblichen Basicbefehlen an. Geöffnet wird der Ausgabekanal mit:
OPEN log. Dateinummer, Geräteadr. [.Sekundäradr.]
Die eckigen Klammern kennzeichnen optionale Angaben. So kann dann auf den geöffneten Kanal mit PRINT # log. Dateinummer ausgegeben werden. Ein Programmlisting (Bild 2) wird zum Beispiel erzeugt mit den Befehlen
OPEN17,17 [,Sekundäradr.]:CMD17:
LIST
PRINT#17:CLOSE17
Der PRINT-Befehl vor dem CLOSE ist notwendig, damit der CMD-Modus aufgehoben wird.
Umstellen auf beliebige Drucker mit Centronics-Schnittstelle
Das Programm wurde für einen Epson-Drucker geschrieben. Unverändert ist es für jeden anderen Drucker verwendbar, sofern auf die Ausgabe von Commodore-eigenen Grafikzeichen verzichtet wird. Für diese Funktion muß der Drucker vorübergehend in den Bitmustermodus zurückgeschaltet werden, was während einer normalen Textausgabe möglich sein muß. Diese Umschaltung erfolgt im Programm in der Schleife ab Adresse $CB10. Die Anzahl der auszugebenden Steuerzeichen ist unter Adresse $CB18 gespeichert und die Steuerzeichen selbst stehen ab Adresse $CBD2 am Ende des Programms. Für einen Epson-Drucker wird die Folge
ESC*480
ausgegeben, wobei mit4 der Bitmustermodus »CRT-Grafik« ausgewählt wird, 8 das niederwertige Byte und 0 das höherwertige Byte der Anzahl auszugebender Punktmatrixspalten darstellt. Der Epson-Drucker kehrt nach der Ausgabe der spezifizierten Anzahl Musterbytes wieder in den Textmodus zurück.
(H. Eyssele/hm)PROGRAMM : EYSSELE-SCHNITTS C900 CBD7 ----------------------------------- C900 : A9 5A A0 C9 8D 1A 03 8C 06 C908 : 1B 03 A9 91 A0 C9 8D 1C 08 C910 : 03 8C 1D 03 A9 AD A0 C9 1F C918 : 8D 1E 03 8C 1F 03 A9 C8 49 C920 : A0 C9 8D 20 03 8C 21 03 2B C928 : A9 E3 A0 C9 8D 26 03 8C 53 C930 : 27 03 A9 FF 8D 03 DD AD 07 C938 : 02 DD 09 04 8D 02 DD 60 0D C940 : 48 A9 10 2C 0D DD F0 FB 62 C948 : 68 8D 01 DD AD 00 DD 09 D7 C950 : 04 8D 00 DD 29 FB 8D 00 7F C958 : DD 60 A6 B8 F0 05 20 0F FC C960 : F3 D0 03 4C FE F6 A6 98 79 C968 : E0 0A 90 03 4C FB F6 E6 20 C970 : 98 A5 B8 9D 59 02 A5 B9 6C C978 : 09 60 9D 6D 02 A5 BA 9D 3A C980 : 63 02 C9 04 F0 04 C9 10 4E C988 : 90 02 18 60 C9 00 4C 77 E8 C990 : F3 20 14 F3 F0 02 18 60 57 C998 : 20 1F F3 8A 48 A5 BA C9 C6 C9A0 : 10 B0 07 C9 04 F0 03 4C 70 C9A8 : 9D F2 4C F1 F2 20 0F F3 64 C9B0 : F0 03 4C 01 F7 20 1F F3 3A C9B8 : A5 BA C9 04 F0 04 C9 10 24 C9C0 : 90 03 4C 0A F7 4C 19 F2 52 C9C8 : 20 0F F3 F0 03 4C 01 F7 11 C9D0 : 20 1F F3 A5 BA C9 04 F0 1D C9D8 : 04 C9 10 90 03 4C 75 F2 25 C9E0 : 4C 5B F2 48 85 9E A5 9A B9 C9E8 : C9 10 B0 07 C9 04 F0 03 4D C9F0 : 4C CD F1 98 48 8A 48 A5 F7 C9F8 : 9E A4 9A C0 10 D0 06 20 87 CA00 : 40 C9 18 90 1F C0 11 D0 1B CA08 : 06 20 5C CA 18 90 15 C0 6B CA10 : 04 F0 04 C0 12 D0 06 20 A5 CA18 : 2B CA 18 90 07 C0 13 D0 25 CA20 : 03 20 44 CA 68 AA 68 A8 6D CA28 : 68 18 60 C9 41 90 12 C9 62 CA30 : 5F B0 04 09 20 D0 0A C9 4E CA38 : C1 90 06 C9 DE B0 02 29 CA CA40 : 7F 4C 40 C9 C9 FF F0 18 BF CA48 : C9 60 B0 03 4C 40 C9 E9 90 CA50 : 40 10 02 E9 40 A0 D0 84 AB CA58 : 06 4C C4 CA C9 FF D0 06 FB CA60 : A2 5E A0 D0 D0 5B 48 A4 C6 CA68 : B9 C0 FF D0 02 E6 B9 29 2C CA70 : 7F C9 20 90 2C A8 A5 B9 00 CA78 : 29 01 F0 10 68 C9 A0 90 D8 CA80 : 04 C9 C0 90 03 4C 2B CA 80 CA88 : E9 40 D0 0E 68 C9 60 B0 3F CA90 : 03 4C 40 C9 E9 40 10 02 E7 CA98 : E9 40 A0 D0 84 06 4C C4 17 CAA0 : CA 68 24 0F 30 03 4C 40 56 CAA8 : C9 18 69 40 30 02 69 40 19 CAB0 : AA A5 B9 29 02 D0 71 A0 6E CAB8 : D0 A5 B9 29 01 F0 02 A0 CF CAC0 : D8 84 06 8A A8 A9 00 A2 CA CAC8 : 07 9D C0 02 CA 10 FA 98 58 CAD0 : 4A 4A 4A 4A 4A 18 65 06 22 CAD8 : 85 06 98 0A 0A 0A 85 05 D9 CAE0 : A9 01 85 03 78 A5 01 29 D7 CAE8 : FB 85 01 A0 07 B1 05 85 17 CAF0 : 02 A2 07 06 02 90 08 BD 06 CAF8 : C0 02 05 03 9D C0 02 CA D9 CB00 : 10 F1 06 03 88 10 E6 A5 DB CB08 : 01 09 04 85 01 58 A2 00 9D CB10 : BD D2 CB 20 40 C9 E8 E0 E5 CB18 : 05 D0 F5 A2 07 BD C0 02 BC CB20 : 20 40 C9 CA 10 F7 18 60 0E CB28 : E0 D5 90 01 CA 8A 29 7F DC CB30 : C9 50 90 02 E9 03 C9 45 EE CB38 : 90 02 E9 03 C9 41 90 02 91 CB40 : E9 21 C9 1C 90 02 E9 08 81 CB48 : C9 11 90 02 E9 0B 38 E9 AA CB50 : 04 AA A9 3C 20 40 C9 A0 08 CB58 : FF CA F0 08 C8 B9 7A CB D5 CB60 : 10 FA 30 F5 C8 B9 7A CB 94 CB68 : 30 06 20 40 C9 18 90 F4 35 CB70 : 29 7F 20 40 C9 A9 3E 4C E4 CB78 : 40 C9 57 48 D4 43 52 C4 B6 CB80 : 52 4F CE 48 4F CD 52 45 6E CB88 : C4 43 52 D2 47 52 CE 42 A3 CB90 : 4C D5 4F 52 C7 46 B1 46 E7 CB98 : B3 46 B5 46 B7 46 B2 46 A9 CBA0 : B4 46 B6 46 B8 42 4C CB 54 CBA8 : 43 52 D5 52 4F C6 43 4C A5 CBB0 : D2 42 52 CE 48 52 D4 47 0B CBB8 : 52 B1 47 52 B2 48 47 CE 27 CBC0 : 48 42 CC 47 52 B3 50 55 F4 CBC8 : D2 43 52 CC 59 45 CC 43 E3 CBD0 : 59 CE 1B 2A 04 08 00 0F
