Drucker-Anwendung

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
Tabelle 1. Die Bedeutung der Gerätenummern
Bild 1. Steuerzeichen werden von dieser Schnittstelle genauso bewältigt wie Grafikzeichen
Bild 2. Steuerzeichen können auch in Klartext übersetzt werden
Bild 3. Musterlisting, erstellt auf einem Epson FX-80

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
Tabelle 2. Der Verkabelungsplan

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
Listing 1. Der Softwareteil der Eyssele-Schnittstelle.
10 rem 5 x cursor down
20 print "{down}{down}{down}{down}{down}"
30 rem 5 x cursor left
40 print "{left}{left}{left}{left}{left}"
50 rem beides gemischt
60 print "{down}{left}{down}{left}{down}{left}{down}{left}{down}{left}"
70 rem rot schreiben
80 print "{red}"
90 print spc(10)"eyssele schnittstelle"
100 rem schwarz schreiben
110 print "{blk}"
120 print"geraet 16{$a0}  = direktmodus"
130 print"geraet 18,4 = text"
140 print"geraet 19   = grafik"
150 print"geraet 17   = list"
160 print"sek-adr. 0  = gross/grafik"
170 print"sek-adr. 1  = gross/klein"
180 rem mit erklaerten steuerzeichen:
190 print"sek-adr. 2  = gross/grafik"
200 print"sek-adr. 3  = gross/klein"
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →