C 64/C 128
Drucker-Kurs

Lernen Sie Ihren Drucker kennen!

Drucker gibt es inzwischen wie Sand am Meer, große, kleine, laute, leise, schnelle, langsame, teure und billige. Doch in der Vielzahl liegt der Haken, denn kaum ein Drucker ist wie der andere. Wie Sie einen Epson-, Star- oder Commodore-Drucker bedienen, beziehungsweise Programme für diese Drucker umschreiben, wird das Thema dieser Einführung sein.

Viele Firmen sehen in dieser Computer-Peripherie-Sparte ihr eigenes Produkt als »das Beste« auf dem Markt an. Entsprechend euphorisch fällt deshalb die Werbung für diese Produkte aus. Das ist verständlich, denn ein Drucker-Hersteller steht natürlich voll und ganz hinter seinem Produkt. Gleichzeitig wird der am Kauf eines Druckers Interessierte aber völlig verwirrt und von seinem Ziel, nämlich den richtigen Drucker für seine Ansprüche zu finden, weggeführt. So kommt es, daß manch einer sich einen Typenraddrucker zulegt, aber erst viel später erfährt, daß ein korrekter Listing-Ausdruck beziehungsweise die Darstellung von Grafik damit beinahe unmöglich ist. So schlimm dieser Irrtum für den einzelnen auch wiegen mag — es gibt noch einen wesentlich ärgerlicheren Grund, weshalb man sich beim Druckerkauf falsch entschließt. Ausgehend vom Datenblatt beherrschen fast alle Drucker, die nach dem Matrix-Prinzip arbeiten, durchaus befriedigende Schrift-, Steuer- und Grafikfunktionen. Doch leider werden diese Funktionen bei vielen Geräten sehr unterschiedlich aufgerufen. Das ist eigentlich kein Hindernis, wenn man ausschließlich selbstgeschriebene Programme verwendet — doch wer macht das schon? Bei den vielen fertigen Programmen kommt es immer wieder vor, daß ausgerechnet der Druckertyp, den man selbst besitzt, nicht berücksichtigt wurde. Das hat dann meistens enttäuschte Gesichter der Anwender und wirre Zeichen auf dem Papier des Druckers zur Folge. Dieses Problem kann man nicht generell lösen, solange sich die Druckerhersteller nicht auf einen einzigen Standard geeinigt haben und weiterhin ihr eigenes Steuerzeichen-Süppchen kochen.

Es gibt einen Standard

Etwas Abhilfe kann man aber zumindest für die Fälle schaffen, in denen man, beispielsweise in einem Basic-Programm, noch etwas an der Druckersteuerung verändern kann. Dafür muß man aber wissen, wie der ursprünglich vorgesehene Drucker arbeitet. Dazu wollen wir zunächst einmal auf einen der am weitest verbreiteten Drucker-Befehlssatz eingehen.

Es ist schon einige Zeit vergangen, seitdem es eine Firma in ähnlicher Weise geschafft hat, ihr Produkt in das Rampenlicht des Computer-Peripherie-Marktes zu setzen. Es waren die Drucker der MX/RX/FX-80-Serie von Epson, deren Befehlsstruktur inzwischen einen eigenen Industriestandard in bezug auf Druckeransteuerung gründeten (Epson Standard Code for Printers (kurz ESC/P)). Seither haben sich viele andere Hersteller dieser Norm angeschlossen, sie gegebenenfalls noch erweitert oder geringfügig abgeändert, um so den bestmöglichsten Ausgangspunkt für die Markteinführung ihres Druckermodells zu erlangen. Zu diesen Firmen, die teilweise 100 Prozent Kompatibilität zum Epson-Standard garantieren, gehören sicherlich Namen wie Star, Citizen, Panasonic, Mannesmann, Fujitsu, Riteman, Brother, C.Itoh, und viele andere. Demgegenüber stehen aber auch Hersteller, die einen eigenen Weg der Druckersteuerung gehen. Sie stellen einen Drucker passend zu einem bestehenden Computer-System her; so auch Commodore oder Seikosha, die mit ihren Druckern MPS 801/802/803 und GP 500 VC eine Palette speziell für den C 64/C 128 maßgeschneiderter Drucker auf den Markt brachte. Dieses hatte einige Vorzüge, vor allem wurde der Druck der Commodore-spezifischen Sonder- und Grafikzeichen ermöglicht. Dennoch erwies sich das auch zum Nachteil, denn bestehende Programme, sei es Textverarbeitung oder Grafik-Programme, mußten erst an diese veränderten Bedingungen angepaßt werden. So zum Beispiel bei Grafikprogrammen; zum großen Teil liefen bestehende Programme bereits auf einem Epson oder kompatiblen Modell; jetzt mußten erst die Programmierer in Aktion treten und ihre Künste zeigen, um zum Beispiel ein Epson-Grafik-Programm, dasmit 8-Nadel-Grafik-Ansteuerung arbeitet, auf einen Commodore-Drucker Typ MPS 801/803 mit 7-Nadel-Druck umzuschreiben.

Grafik ist nicht gleich Grafik

Dieser erste Teil des Kurses soll Ihnen zeigen, wie Sie auf verschiedenen Druckern Grafik programmieren können, und wie Sie Grafik-Programme von anderen Druckern auf Ihren Typ übertragen. Daß das nicht so einfach ist, hat das Beispiel Epson—Commodore gezeigt. Leider können wir nicht auf jeden Druckertyp jedes Herstellers eingehen, deshalb wurde eine Vorauswahl auf Epson FX-80, Star SG-10, Commodore MPS 801/803 und MPS 802 getroffen. Zunächst lassen wir aber die Commodore-Drucker außer acht und widmen uns dem Epson- und dem Star-Drucker, weil sie fast durch gleiche Grafik-Befehle angesteuert werden. Als allererstes müssen wir uns aber klarmachen, wie überhaupt »Grafik« auf einem Drucker erzeugt wird. Um Grafik auf dem Drucker zu realisieren, wird jeder einzelnen Druckkopfnadel (die Epson- und Star-Drucker besitzen neun Nadeln, wovon uns aber zunächst nur acht interessieren) ein Wert zugeordnet. Die oberste Nadel bekommt den Wert »128«, die zweite Nadel von oben den Wert »64« und so weiter, bis zur untersten Nadel, die den Wert »1« hat. Will man nun diese Nadeln gleichzeitig ansprechen, so addiert man einfach die Werte der einzelnen Nadeln. Diese acht Nadeln entsprechen also acht Bit an Informationen. Dabei ist das entsprechende Bit für die anzusteuernde Druck-Nadel »1« für drucken oder »0« für nicht drucken zu setzen. Dann übergibt man den so gewonnenen Wert einfach dem Drucker. So einfach ist das. Diese Übergabe erfolgt durch eine spezielle Befehlsfolge. Diese Befehle sind sogenannte ESC-Befehle, die dem Drucker zur Steuerung von Format-Anweisungen, Schriftartenumschaltung und der Ausführung sonstiger Funktionen dienen. Sie unterscheiden sich von den »normalen« Befehlen wie CHR$(13) (Carriage Return) oder CHR$ (10) (Linefeed) dadurch, daß sie sich nicht nur auf die Länge eines Bytes beschränken und kein Zeichen ausgeben, sondern vielmehr einen Steuer-Modus anwählen. Sie bestehen aus zahlreichen Teilen, über die dem Drucker entsprechende Anweisungen gegeben werden. Dieser Befehl zur Druckersteuerung wird mit dem ESC-Wert (entspricht CHR$(27)) eingeleitet; danach folgt, als erstes Byte nach dem ESC-Wert, der sogenannte Steuerbefehl. Die darauffolgenden Zeichen liefern dem Drucker mehr detaillierte Informationen, zum Beispiel über Länge der nachfolgenden Daten oder über einen speziell angewählten Unterpunkt in diesem Steuermenü, oder stellen schließlich Daten (für den Grafik-Druck-Modus) dar (Listing 1). Das bedeutet also, daß jeder Drucker zwei verschiedene Funktionsmodi besitzt. Im Normalmodus werden alle vom Computer ankommenden Daten an Hand der im ROM des Druckers gespeicherten Zeichensätzen decodiert und in direkt druckbare Zeichen umgesetzt. Dabei weiß der Drucker selbständig, wann er welche Nadel gegen das Papier schleudern muß, damit ein Buchstabe entsteht. Den zweiten Modus, auch Befehlsmodus genannt, erreicht man wie beschrieben durch das Senden des Wertes ESC (entspricht CHR$(27)). Wenn Sie nach diesem Wert einen beliebigen Text senden würden, wäre das ziemlich sinnlos, denn der Drucker könnte ihn nicht mehr korrekt interpretieren — er erwartet eine sinnvolle Befehlskombination. Eine dieser Befehlskombinationen kann die zum Einschalten der Grafik sein. Für den Epson und den Star (nur im IBM-Modus; softwaremäßig oder mit DIP-Schalter umschaltbar) sieht der Standard-Code (nach ESC/P) für eine Grafikansteuerung folgendermaßen aus:
CHR$(27);"*";
CHR$(ml);CHR$(nl);CHR$(n2);

Hierbei bezeichnet CHR$(27) den ESC-Wert, »*« die Wahl des Master-Grafikmodus (über diesen Befehl kann auf die gesamten Punkt-Grafik-Auflösungen des Druckers zugegriffen werden), mit »ml« entweder Normaldichte (480 Punkte/8 Zoll), doppelte Dichte (960 Punkte/8 Zoll), vierfache Dichte (1920 Punkte/8 Zoll), Plotmodus (576 Punkte/8 Zoll) oder den beiden Bildschirmgrafiken (640/720 Punkte/8 Zoll)); je nach Modus mit normaler oder halbierter Geschwindigkeit. Die nachfolgenden Daten »nl« + »n2« instruieren den Drucker, wieviele Grafik-Daten nachfolgen, das heißt wie lang der Grafik-Ausdruck (horizontal) wird. Hierbei wird der Wert der Länge in einen unteren- (nl) und oberen Wert (n2) zerlegt und an den Drucker übergeben. Dabei gilt: nl = (dz)-int(dz/256)*256 und n2 = int(dz/ 256), wobei »dz« die Anzahl der zu übertragenen Grafik-Daten ist. Die jetzt über die Schnittstelle geschickten Daten werden vom Drucker nur als Grafik-Daten erkannt und als solche gedruckt. Allerdings nur so lange, bis die maximale Datenzahl, die durch »nl« und »n2« übergeben worden ist, erreicht ist, oder die Druckzeile zu Ende ist. Dann wird der Drucker wieder auf den Normalzustand (Textdruck) zurückgestellt. Man sieht hier

10 rem --- druck einer sinuskurve ---
20 rem -- im grafikmodus des epson --
30 open1,4
40 print#1,chr$(27);"*";chr$(0);chr$(100);chr$(0);
50 fori=1to100
60 a=2^int((1+sin(i*~/20))*3.5+.5)
70 print#1,chr$(a);
80 nexti
Listing 1. Einfacher Grafikausdruck mit dem Epson FX-80

Ein Befehl für Grafik

deutlich, daß man durch diese einfache ESC + »*«-Sequenz auf die gesamten Möglichkeiten des Grafikdrucks mit acht Nadeln zugreifen kann, ohne für jeden erwünschten Grafikmodus einen eigenen speziellen Befehl benutzen zu müssen. Aber selbstverständlich gibt es auch diese Befehle. Wie sie im einzelnen lauten, entnehmen Sie bitte der Tabelle. Nur wenig anders sehen die entsprechenden Befehle für den »normalen« Star-Modus (im Gegensatz zum IBM-Modus) aus. Hier entspricht zum Beispiel der ESC + »g«-Befehl dem ESC + »*« im IBM-Modus. In den allermeisten Fällen reicht für eine Grafik-Darstellung der 8-Nadeldruck aus, dennoch gibt es beim Epson die Möglichkeit alle neun Nadeln anzusprechen. Dieser Befehl lautet:
CHR$(27)"↑"CHR$(m);CHR$(n1);CHR$(n2); CHR$(unterer Wert);CHR$(oberer Wert)

Diesen Befehl kann man nur in zwei Grafik-Auflösungen verwenden, nämlich in 480 Punkte/8 Zoll und 960 Punkte/8 Zoll. Ebenfalls wird hier durch »m« der Grafik-Modus gewählt und durch »nl« und »n2« die Länge der nachfolgenden Datenkette angegeben. Anschließend findet die Übertragung der Grafik-Daten statt. Die ersten acht Nadeln (von oben an) werden entsprechend wie oben besprochen angesteuert. Diese ersten Daten über die zu druckenden Punkte werden an den Drucker geschickt. Jetzt geht es darum, wie man die noch fehlende neunte Nadel ansteuert. Hierfür wird einfach noch ein weiteres Byte mit Informationen an den Drucker gesandt. Das Byte enthält entweder den Wert »0« für nicht drucken oder den Wert »128« für drucken. Danach kann mit der Übergabe der Daten für die nächste Pixelreihe begonnen werden. Damit haben wir also die grundlegenden Erkenntnisse für die Grafik-Programmierung auf einem Epson gefestigt. Die Grafik-Befehle des Star »Normal«-Modus sehen ähnlich aus wie die des Epson (siehe Tabelle). Das Schöne an dieser Programmierung ist, daß man zum Beispiel beliebige Grafik-Modi in einer Druckzeile verwenden kann oder Text und Grafik sehr einfach mischen kann (Listing 2).

10 rem --- druck einer sinuskurve ---
20 rem ---       und text         ---
30 open1,4
40 print#1,"das ist ";
50 print#1,chr$(27);"*";chr$(0);chr$(8);chr$(0);
60 a$=chr$(255):fori=1to6:a$=a$+chr$(129):nexti:a$=a$+chr$(255)
70 print#1,a$;
80 print#1," ein beispiel"
Listing 2. Mischen von Text und Grafik mit dem FX-80

Übersicht über die möglichen Grafik-Modi:

Epson Star
»IBM«-Modus »Star«-Modus
Acht Nadeln:
Normale Dichte
480 Punkte/8 Zoll
ESC+"k"n1 n2
oder ESC+"*"CHR$(0)n1 n2
ESC+"K"n1 n2 ESC+"K"n1 n2
ESC+"g"CHR$(0)n1 n2
Doppelte Dichte
960 Punkte/8 Zoll
ESC+"l"n1 n2
oder ESC+"*"CHR$(1)n1 n2
ESC+"L"n1 n2 ESC+"L"n1 n2
ESC+"g"CHR$(1)n1 n2
Doppelte Dichte
doppelte Geschwind.
960 Punkte/8 Zoll
ESC+"y"n1 n2
oder ESC+"*"CHR$(2)n1 n2
ESC+"Y"n1 n2 ESC+"y"n1 n2
ESC+"g"CHR$(2)n1 n2
Vierfache Dichte
1920 Punkte/8 Zoll
ESC+"z"n1 n2
oder ESC+"*"CHR$(3)n1 n2
ESC+"Z"n1 n2 ESC+"z"n1 n2
ESC+"g"CHR$(3)n1 n2
Bildschirmgrafik I
640 Punkte/8 Zoll
ESC+"*"CHR$(4)n1 n2 ESC+"g"CHR$(4)n1 n2
Plotmodus
576 Punkte/8 Zoll
ESC+"*"CHR$(5)n1 n2 ESC+"g"CHR$(5)n1 n2
Bildschirmgrafik II
720 Punkte/8 Zoll
ESC+"*"CHR$(6)n1 n2 ESC+"g"CHR$(6)n1 n2
Neun Nadeln:
Normale Dichte
480 Punkte/8 Zoll
ESC+"↑"CHR$(0)n1 n2
Doppelte Dichte
960 Punkte/8 Zoll
ESC+"↑"CHR$(1)n1 n2
Grafikmodus für MPS 801/803 Sonderzeichendefinition des MPS 802
Normale Grafik
  CHR$(8)
400 Punkte/8 Zoll
Sekundäradresse 5 Sonderzeichendaten senden
Druck des Sonderzeichens CHR$(254)
Textmodus   CHR$(15)
Zusammenhang zwischen Daten und Matrixpunkt
Epson/Star: MPS 801/803
Wert Bit Wert Bit
1. Nadel 128 0 1 0
64 1 2 1
32 1 4 1
16 0 8 0
8 1 16 1
4 1 32 1
2 1 64 1
1 0
9. Nadel 128 0

Beispiel: 64+32+8+4+2 = 110
Beispiel: 2+4+16+32+64 = 118
118+128 = 246
(+128, weil bei allen Grafik-Daten das Bit 7 auf 1 gesetzt wird)

Tabelle. Übersicht über die möglichen Grafik-Modi bei Epson-, Star- und MPS-Druckern

Grafik auf Commodore-Druckern

Nach diesem Abschnitt über die Grafik des Epson und Star wollen wir uns dem Kapitel Commodore-Drucker zuwenden. Bei ihnen werden alle Funktionen ohne ESC-Befehle gesteuert, da aufgrund der wenigen Drucker-Sonderbefehle ein Byte zur Übertragung genügt. Zusätzlich werden noch einige Sonderfunktionen über Sekundäradressen gesteuert. So auch beim Commodore MPS 801/803 (und Seikosha GP 500 VC), deren Grafik-Modus sehr leicht zu programmieren ist. Jeder vorhandenen Drucknadel, beim MPS 801 sind es leider nur sieben, wird wie beim Epson ein Wert zugeordnet, jedoch in umgekehrter Bit-Struktur. Im Klartext: die oberste Nadel bekommt den Wert »1« die zweite Nadel von oben den Wert »2« und so weiter, der untersten Nadel wird der Wert »64« zugeordnet. Aus dieser Bitmusterkombination ergibt sich ein Wert zwischen 0 und 127. Zu diesem Wert wird nochmals 128 addiert, damit der Drucker diese Daten als Grafik-Daten identifizieren kann. Der Grafik-Einschalt-Befehl CHR$(8) ist sehr einfach (nur ein Byte) und deshalb nicht an die Länge der Grafik-Daten gebunden (Listing 3). Er kann ebenso leicht mit CHR$(15) (Befehl für Normaltextmodus) unterbrochen werden. Auch hier läßt sich Text und Grafik sehr leicht mischen (Listing 4).

10 rem --- druck von grafik ---
20 rem    - auf dem mps801 -
30 open1,4
40 print#1,chr$(8):rem grafik ein
50 fori=1to128
60 print#1,chr$(i+127);
70 nexti
80 print#1,chr$(15):rem normaltext
Listing 3. Fast noch einfacher als beim Epson — Grafik auf dem MPS 801/803
10 rem - druck von text und grafik -
20 open1,4
30 print#1," test";
40 print#1,chr$(8): rem grafik ein
50 fori=1to128
60 print#1,chr$(i+127);
70 nexti
80 print#1,chr$(15):rem normaltext
Listing 4. Drucken von Text und Grafik mit dem MPS 801/803

Nun kommen wir zu einem, na sagen wir einmal heiklen Thema, dem Thema MPS 802. Oft wird über diesen Drucker geschrieben, daß er keinen Grafik-Modus besitzt. Das stimmt leider und stellt gleichzeitig die Frage, was man in solch einem Fall machen kann? Wegwerfen auf keinen Fall! Das manchmal aufgetauchte Gerücht, daß man diesen Drucker durch Verbinden eines Pins des Betriebssystem-EPROMs mit Masse grafikfähig machen könnte, ist leider auch nicht zutreffend. Es gibt aber inzwischen zwei Lösungen für dieses Problem. Die erste ist die über die Sonderzeichenposition. Hierbei wird ein Sonderzeichen definiert (es ist leider nur eins möglich), ausgedruckt, die Druckposition gemerkt, ein Shift-Return CHR$(141) zum Drucker geschickt, dann werden so viele Leerzeichen gedruckt, bis die alte Druckposition wieder erreicht ist, und schließlich beginnt der Vorgang von neuem. Die Zuck-Bewegungen, die der Druckkopf bei diesem Manöver ausführt, sehen recht seltsam aus und tragen sicherlich nicht zur Verlängerung seiner Lebenszeit bei. Die zweite konkrete Lösung ist die Hardware-Lösung; man besorgt sich einfach ein neues Betriebssystem-ROM für seinen Drucker. Mit diesem ROM ist der MPS 802 dann in der Lagef Grafiken wie der MPS 801 zu verarbeiten. Es sind weiterhin sogar zwei Grafik-Punktdichten des Epson-Drucker möglich (siehe Info am Ende des Artikels). Doch wer sich selbst eine solche Hardcopy-Routine programmieren will, dem soll jetzt gezeigt werden wie man diese Grafik-Sonderzeichen-Definition durchführt. Die Programmierung des MPS 802 unterscheidet sich wesentlich von der des Epson FX-80 oder des MPS 801/803; die Daten für das neu definierte Zeichen werden in einer 8 x 8 Punkte-Matrix definiert (Wert der Spalte wie beim Epson, oberste Nadel hat den Wert »128«, die unterste Nadel den Wert »1«), und dann nicht mit vorangestelltem ESC-Befehl übersandt, sondern sie müssen über eine spezielle Sekundäradresse (sa = 5, zum Beispiel OPEN 5,4,5) dem Drucker mitgeteilt werden.

Grafik auf dem MPS 802

Jetzt werden die 8 Byte-Daten übertragen und schon ist ein Sonderzeichen definiert. Das hört sich alles recht kompliziert an, ist es aber nicht (Listing 5). Damit wäre der erste Schritt für eine Hardcopy-Programmierung gemacht. Das so definierte Zeichen kann man jetzt mit CHR$(254) aufrufen und ausdrucken. Da man aber bei der Grafik nicht mit nur einer immer gleichen 8 x 8-Matrix drucken kann, muß dieses Zeichen dann mehrere Male pro Zeile neu definiert werden. Hierbei ist noch zu beachten, daß man nur ein Zeichen pro Zeile definieren kann, das heißt um das nächste Zeichen definieren zu können, muß erst ein provisorisches Shift-Return (CHR$(141)) durchgeführt werden. Der Druckkopf muß dann wieder an die alte Position zurückgeführt werden, um das neue Zeichen zu drucken. Soviel zur Grafik des MPS 802 — sicherlich kein erschöpfendes Thema, aber dennoch nicht ganz ohne Reiz.

10 rem --- druck von grafik ---
20 rem    - auf dem mps802 -
30 open5,4,5
40 fori=1to8:reada:a$=a$+chr$(a):next
50 print#5,a$
60 close5
70 open4,4
80 print#4,chr$(254);" 1986 by 64'er"
90 close4
100 rem daten des sonderzeichens
110 data 60,66,153,165,165,129,66,60
Listing 5. Der Trick mit dem Sonderzeichendruck

Der nächste Teil unseres Kurses wird ganz im Zeichen der Star-Drucker stehen. Angefangen beim SG-10 über den SR-10 bis hin zum brandneuen NL-10 wollen wir einmal zeigen, was man mit diesen Druckern so alles machen kann. Besonderes Augenmerk liegt dabei darauf, die Unterschiede zu den Druckern nach ESC/P-Norm herauszustellen. Außerdem gibt es einige Tips zum Zusammenspiel dieser Drucker mit verschiedenen Programmen. Beachten Sie bitte das 64'er Extra in dieser Ausgabe, es steht ganz unter dem Motto »Druckersteuerung«.

(Ralph Horstmann/aw)

Grafik-ROM für MPS 802, H. Haarmann, Kosterstr. 92, 4630 Bochum 1, Tel. 02 34/79 3212

PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →