Auf eine Anfrage hin und weil es mir selbst nicht alles so 100% offensichtlich war, gibt es hier nun Informationen zum Anschluss eines Druckers an den Z9001.
(v.l.n.r: Modul 690006.8, Modul 690021.1, K6304)
Tip: Die komischen Rillen auf dem Gehäuse (erstes Bild) stammen von den Weichmachern im Kabel. Deshalb sollten die Original-Kabel ersetzt werden oder in der Sammlung immer in eine extra Plastetüte gesteckt werden.
Von Robotron gibt es 3 Druckermodule, die eigentlich alle 3 identisch aufgebaut sind und sich nur in der Software und in der Steckerbelegung unterscheiden. Hier ist eine reiche Vielfalt vorhanden: Es gibt alte Module mit alter Leiterplatte wie obiges Drucker-Modul 690006.8, gefolgt vom Schreibmaschinen-Modul für S6005 690021.1 und dem Drucker-Modul 690025.2 (f. K6311/12). Die beiden letzten Module erschienen ab 3. Quartal 1987 mit neuer Software (BM116, Software V24Ax), ausgeliefert ab Modulnummer 710970.
Alle Druckermodule von Robotron sind gleich aufgebaut und arbeiten mit einer SIO und einer CTC. Der anzuschliessende Drucker muss also über eine V24 (RS 232) serielle Schnittstelle verfügen. Drucker mit Parallel-Schnittstelle wie CENTRONICS können nicht mit diesen Modulen angeschlossen werden; ein Selbstbau eines Adapters ist aber recht einfach (s.u.).
Alle Module sind mit einem PROM/EPROM ausgerüstet (Adressbereich 0B800h-0BFFFh). Allerdings steht bei Aktivierung des ROMs gleich der ganze Adressbereich von 8000-0BFFFh nicht mehr für RAM etc. zur Verfügung. Es ist deshalb ratsam, den ROM abzuschalten und stattdessen die Software von Kassette zu laden. Je nach Modulart (Schreibmaschinenmodul, Druckermodul alt oder neu) gibt es verschiedene EPROM-Inhalte. Die Hardware ist in jedem Falle gleich.
Übersicht über die einzelnen Modultypen nebst ROM:
Übersicht der Modultypen und Drucker (Quelle MP 4/1987, S. 126):
Modul | Technische Hauptparameter | anschließbare Drucker bzw. Schreibmaschinen |
---|---|---|
Druckermodul 690006.8 | Übertragungsrate: 1200 Baud,1 Startbit, 7 Datenbit,1 Paritätsbit (gerade) 1 Stopbit; Diodenstecker | Thermodrucker |
Druckermodul 690025.2 | Übertragungsrate: 9600 Baud, 1 Startbit, 8 Datenbit, kein Paritätsbit, 1 Stopbit, Buchsenleiste 222-26, TGL 29331/04 | Nadeldrucker: K6311 (1), 12(1), 13(3), 14(3), 16(1) Thermodrucker K6304(3), Seriendrucker 1152, 1157, Schreibmaschine: S6005,10(3), 6006(3), 6010(2), 6120(3), 6130(3) |
Schreibmaschinenmodul 690021.1 | Übertragungsrate: 9600 Baud, 1 Startbit, 8 Datenbit, kein Paritätsbit, 1 Stopbit, Steckerleiste Cannon DB-255 | Nadeldrucker: K6311(1), 12, 13, 14(1), 16(1) Thermodrucker K 6304 Seriendrucker SD 1152(3), 1157(3) Schreibmaschine: S6005.10(1), 6006(3), 6010(3), 6120(2), 6130 |
(1) mit entsprechendem Steckverbinder
(2) mit Änderung dar Steckverbinderbelegung
(3) mit Austausch des Steckverbinders
Das erste gebaute Druckermodul 690006.8 ist für den 40-Zeichen-Thermostreifendrucker K6303 (TD40) gedacht. Von diesen Druckern gelangten allerdings kaum Geräte in den Markt, heute sind nur noch ganz wenige Geräte bekannt (s. auf http://www.robotrontechnik.de/index.htm?/html/drucker/thermo.htm). Dieses Modul hat auch eine andere Leiterplatte als die beiden Nachfolgemodule. Im Modul steckt der EPROM M506 mit einem Treiber für den TD40. Dieser Treiber enthält einen (diagonal gespiegelten) 6×8-Pixel-Zeichensatz für die Zeichen 32-255 und ist damit vollgrafikfähig! Leider ist dieser Treiber nur für den K6303 direkt nutzbar. Um andere grafikfähige Drucker zu betreiben, sind die neuen Druckertreiber der Kassette R0115 zu nutzen.
Im Druckermodul 690021.1 steckt im ROM M012 bis 3. Quartal 1987 der Druckertreiber S6005 (nicht vollgrafikfähig). Im Druckermodul 690025.2 steckt im ROM M013 bis 3. Quartal 1987 der Druckertreiber K6311/12 (nicht vollgrafikfähig).
Ab 3. Quartal 1987 enthalten Druckermodul 690025.2 und Schreibmaschinen-Modul für S6005 690021.1 dem PROM BM112 == BM116 mit V24A1..3-Treibern. Außerdem wird die Treiberkassette R0115 mitgeliefert.
Von Robotron gibt es folgende Treiber als Kassettenversion:
Treiber | Drucker | Hinweis |
---|---|---|
V24A1.COM | Schreibmaschinen, allgemein alle „dummen“ Drucker mit seriellem Anschluss | restriktives Druckprogramm, organisiert Seitenlayout selbst, interpretiert Steuerzeichen selbst, Grafikzeichen werden als '*' gedruckt. |
V24A2.COM | wie V24A1, aber Codes > 80H werden an Drucker weitergegeben | |
V24A3.COM | einfachste Druckroutine, alle Zeichen werden an Drucker durchgereicht, der Quelltext steht für Eigenentwicklungen zur Verfügung. | |
IFSSA1.COM | Drucker mit IFSS-Interface | Modul muss auf IFSS umgerüstet werden; sonst genau wie V24A1 |
K6311G1.COM | K6311, K6312 | vollgrafikfähiger Druckertreiber; Drucker mit Befehlssatz ISO-G: Einzelpunktmodus: „ESC K …“ und Halbzeilenvorschub: „ESC [ 1 e“ |
K6313G1.COM | K6313, K6314, K6327, K6328, LX 86, FX 1000) | vollgrafikfähiger Druckertreiber; Drucker mit EPSON-Befehlssatz: Einzelpunktmodus: „ESC K …“ und Halbzeilenvorschub: „ESC J …“ |
Besonders der Treiber K6313G1 ist für fast alle Nadeldrucker gut nutzbar.
Ich habe sämtliche mir vorliegenden Druckertreiber disassembliert und aufbereitet (Paket):
Es ist interessant zu sehen, wie sich die Druckertreiber weiterentwickelt haben. Der erste Druckertreiber für den TD40 übernahm die komplette Seiten- und Zeilenaufbereitung selbst. Diesen Code haben alle nachfolgenden Treiber geerbt, obwohl (damals moderne) übliche 9-Nadel-Drucker das alles selbst übernehmen können. Die meisten der obigen Treiber können keine Steuercodes an den Drucker durchreichen; und die Grafikfähigkeit beschränkt sich auf das Ausdrucken einer Bildschirmkopie mit den Pseudografikzeichen im 6×8-Zeichensatz (also nicht ganz original wie der Z9001).
Allen Treibern gemein ist die spartanische Unterstützung von Steuercodes. Es werden nur die Steuerzeichen 08h, 09h, 0Ah, 0Dh wie auf Bildschirm ausgewertet, die Systemfunktionen 0Eh (CTRL/N, Bildschirmkopie) und 10h (CTRL/P, Hardcopy-Modus) sowie 0Ch (!!) und 17h als Zeilenschaltung (CR+LF).
Der S6005-Treiber druckt einige Zeichen, die auf der Schreibmaschine S6005 nicht vorhanden sind, als Alternativ-Zeichen oder als Kombination aus zwei Zeichen. (Das betrifft [,],{,},>,<,~,`,\,|,^,0).
Beim alphanumerischen Druck werden Grafikzeichen generell als „*“ gedruckt.Die Verwendung von Systemressourcen und die Anbindung an das OS ist ebenfalls je nach Treiber leicht verschieden. Gemeinsam ist die Nutzung von max. 182 Byte am Speicherende für die Seitenformat-Einstellungen und den Zeilenpuffer (EOR wird entsprechend herabgesetzt). Die älteren Treiber halten sich noch nicht einmal an die Vorschriften für System-Treiber (s. OS-Handbuch Z9001), und implementieren nur die Treiberfunktion 0 (Statusabfrage). Alle anderen Funktionen werden nicht ausgewertet, es wird immer davon ausgegangen, dass nur noch die Zeichenausgabe genutzt wird!
Robotron hat den Quelltext zu V24A3 veröffentlicht, so dass man die SIO-Ansteuerung und Geräteeinbindung nicht neu erfinden muss. Ich habe mir die Mühe gemacht und alle Treiber disassembliert und aufbereitet. Alle mir bekannten Druckertreiber, Sourcen etc. finden sich im Zip-Archiv.
u.a.
td40 (690006.8).rom = m506-td40.bin | ROM 506 des Druckermoduls 690006.8 |
k6311_12 (690025.2).rom = M013.rom | ROM M013 des Druckermoduls 690025.2 (alt) |
S6005 (650021.2).rom = M012.ROM | ROM M012 des Druckermoduls 690021.1 (alt) |
BM116.rom | ROM BM116 des Druckermoduls 690025.2 (neu) |
lprinter.rom | ROM vermutlich für SD11xx, von Uni Halle |
BM116.asm | BM116.rom mit V24A1,V24A2,V24A3, basierend auf original-Quellcode von robotron |
k6311_12.asm | Druckermodul 690025.2 f. K6311/12 (bis 3. Quartal 1987), ROM M013 B8 |
S6005.asm | Druckermodul 690021.1 f. S6005 (bis 3. Quartal 1987), ROM M012 |
K6311G1.asm | Druckergrundkassette R0115, Programm K6311g1_com.tap |
K6313G1.asm | Druckergrundkassette R0115, Programm K6313g1_com.tap |
lprinter.asm | vermutlich für SD11xx, von Uni Halle |
td40.asm | Druckermodul 690006.8 f. Thermodrucker TD40 |
V24A3Q.asm | Teiber fuer V24-Drucker (V24A3, Quelle) orig. Robotron |
zsatz_td40.inc | der 6×8-Pixel Zeichensatz für td40.asm, K6311G1.asm, K6313G1.asm |
Das OS des Z9001 ist basierend auf CP/M entwickelt worden und hat dessen Treiberkonzept übernommen. So gibt es 4 logische Geräte, die von den Anwendungsprogrammen genutzt werden können: CONST, READER, PUNCH, LIST. Diesen logischen Geräten werden nun physische Gerätetreiber zugeordnet. Das erfolgt mittels Kommando ASGN. Üblicherweise wird CONST der Tastatur und dem Bildschirm zugeordnet und LIST dem Drucker.
Damit ein physischer Gerätetreiber so zugeordnet werden kann, muss er einige Eigenschaften erfüllen:
Für einen Druckertreiber reichen folgende Systemkommandos aus:
Das Ganze ist in der Betriebssystembeschreibung ausführlicher erklärt. Ebenfalls gibt es in mp 10/87 S. 311 ff. Erläuterungen zum Gerätetreiber-Handling des Z9001.
Hinweis: Die Robotron-Treiber umgehen den Mechanismus von ASGN und tragen sich selbst in die internen Gerätetreiberlisten ein; ein Robotron-Druckertreiber wird also ganz normal im OS geladen; NICHT mit ASGN.
Der EPROM ist sinnvollerweise auf allen Modulen mittels DIL-Schalter abzuschalten (beide Schalter aus). Achtung: Die Schalter sind in den Modulen nicht immer gleich eingelötet. Aus ist die Seite ohne Punkt!.
Das Druckermodul sollte man so umbauen, dass es als vollwertiges V24-Modul genutzt werden kann (s. unten und Beschreibung 192K-Modul): Für eine vollständige V24-Schnittstelle sind lediglich alle vorhandenen Anschlüsse auch zu nutzen. Selbst im angebauten Kabel sind noch Adern frei!
Außerdem ist es besser, statt RTS das Signal DTR zu nutzen. Dazu muss auf der Leiterplatte der Leiterzug zur SIO Pin 17 getrennt werden und stattdessen mit Pin 16 verbunden werden! (s.u.)
Alle Module sind herstellerseitig nur für die Richtung Ausgabe zum Drucker vorbereitet. Eine bidirektionale Arbeitsweise (Ausgabe und Eingabe) ist erst nach einem kleinen Umbau und Auswechseln des Kabels möglich.
V.24 Definition der Schnittstellenleitungen
Am Druckermodul werden nur die folgenden Leitungen verwendet:
TxD - Transmitter Data (Sendedaten, Ausgang) CTS - Clear To Send (Senderfreigabe, Eingang) SG - Signal Ground (gemeinsame Masse)
nach dem Umbau werden folgende Empfängerleitungen ergänzt:
RxD - Receiver Data (Empfangsdaten, Eingang) DTR - Data Terminal Ready (Empfänger bereit, Ausgang)
am Modul sollte ein 25poliger oder ein 9poliger SUB-D-Stecker männl. angeschlossen werden.
An den DDR-Geräten haben die Drucker Buchsen (weibl.). In der originalen Beschaltung der Druckermodule sind die Signale gekreuzt angeschlossen: CTS (SIO, X4) geht an SUB-D-Stecker DTR, TxD (SIO, X5) geht an SUB-D-Stecker RxD. Damit kann der Stecker kann unmittelbar an einen DDR-Drucker angesteckt werden.
Folgendes ist die Standardbelegung der V24-Anschlüsse (ohne Kreuzung der Leitungen)
Abkürzung | Name | Beschreibung | Pin-Nr. 25-pol. | Pin-Nr. 9-pol. | Richtung beim DTE (Z9001) | Richtung beim DCE (z. B. Drucker) |
---|---|---|---|---|---|---|
TxD, TX, TD | Transmit Data | Leitung für ausgehende (von DTE gesendete) Daten (negative Logik). | 2 | 3 | Ausgang | Eingang |
RxD, RX, RD | Receive Data | Leitung für eingehende (von DTE zu empfangende) Daten (negative Logik). | 3 | 2 | Eingang | Ausgang |
GND | Ground | Signalmasse. Die Signalspannungen werden gegen diese Leitung gemessen. | 7 | 5 | — | — |
RTS | Request to Send | „Sendeanforderung“; Ein High-Pegel an diesem Ausgang signalisiert, dass DTE Daten senden möchte | 4 | 7 | Ausgang | Eingang |
CTS | Clear to Send | „Sendeerlaubnis“; Ein High-Pegel an diesem Eingang ist ein Signal der Gegenstelle, dass sie Daten von DTE entgegennehmen kann | 5 | 8 | Eingang | Ausgang |
DTR | Data Terminal Ready | Mit einem High-Pegel an diesem Ausgang signalisiert DTE seine Betriebsbereitschaft an die Gegenstelle. Damit kann die Gegenstelle, z. B. ein Modem, aktiviert oder auch zurückgesetzt werden. Üblicherweise antwortet die Gegenstelle mit einem High-Pegel auf DSR | 20 | 4 | Ausgang | Eingang |
Bei der Verbindung zweier Geräte sind die Leitungen über Kreuz, also TxD mit RxD und CTS mit DTR und umgekehrt zu verbinden. Die Abschirmung kann an SG angeschlossen werden.
Umbau des Druckermoduls auf bidirektionalen Betrieb
Alle handelsüblichen Druckermodule sind nur für Senden vorbereitet. Diese Betriebsart reicht aus, wenn man nur drucken will. Falls an die V24- Schnittstelle aber ein anderes Gerät - z.B. ein zweiter Rechner zur Datenübertragung - angeschlossen werden soll, muss mit dem Modul auch empfangen werden können. Folgender Umbau ist durchzuführen:
1. Auf der Rückseite der Leiterplatte am SIO (U 8560) den Leiterzug vom
Anschloss 17 (RTSA) trennen und mit einer kleinen Drahtbrücke an 16 (DTRA)
anlöten. (Dieses Signal wurde im Originalzustand nicht benutzt.)
2. Auswechseln des Kabels. Es wird vieradriges abgeschirmtes Kabel benötigt. Für kurze Entfernungen ist auch mindestens 5 adriges Kabel ohne Schirm verwendbar. Auf der Leiterplatte befinden sich links oben 4 Anschlußpunkte (X4- X7). Davon sind im Originalzustand aber nur die äußeren (X4, X5) benutzt. An die zwei dazwischenliegenden Lötpunkte (X6, X7) werden die zusätzlichen Leitungen angeschlossen. Die Masseleitung SG (Abschirmung) wird unterhalb der Zugentlastung an die Lötöse angeschlossen. Die Lötösen X3-X7 sind auf dem Druckermodul so angeordnet wie sie hier gezeichnet sind.
Druckermodul SIO D-SUB Stecker 25 polig männl. X4 (x4) CTS <--------------- 20 (DTR) X6 (x7) RxD <--------------- 2 (TxD) X7 (x8) RTS o. DTR ---------------> 5 (CTS) X5 (x5) TxD ---------------> 3 (RxD) X3 (x6) SG ---------------- 7 (S0)
(in Klammern: Anschlussnummern in den Unterlagen von U.Zander)
Die Anschlussbelegung der Signale CTS, TxD, SG entspricht der Originalbelegung mit 25 poligem Stecker. An der rechten Seite sind die Signalbezeichnungen angegeben, die für die Buchse an einem angeschlossenen Gerät gelten. Die Signale sind also bereits gekreuzt. Der Stecker kann unmittelbar an einen Drucker oder das EPROM- Programmiergerät angesteckt werden. Falls ein anderer Stecker erforderlich ist, kann anhand der Signalnamen die richtige Belegung ermittelt werden. Auf alle Falle müssen die drei Verbindungen CTS, TxD und SG wieder so angeschlossen werden, wie vor dem Auswechseln des Kabels.
Zum Kopplung mit einem PC wird ein Gender-Changer benötigt (Buchse 1:1 auf Buchse, kein Nullmodemkabel!)
RTS vs. DTR
http://www.robotrontechnik.de/html/forum/thwb/showtopic.php?threadid=11373, [415]
Holm:
Ich habe nun eine Weile mit den SIO Treibern gekämpft, genauer gesagt mit der Hardware Flusskontrolle.
Ich habe mehrmals gedacht ich habe eine Macke, aber das Problem scheint prinzipieller Natur bei der SIO zu sein. Üblicherweise verdrahtet man RTS und CTS gekreuzt zu Flusskontrolle, aber bei der SIO hat die Sache einen Haken, nämlich den hier:
„Sobald das RTS-BIT eines Kanals gesetzt ist, geht die zugehörige RTS-Leitung in den Low-Zustand über. Wird das RTS-BIT in der asynchronen Betriebsart rückgesetzt, geht die zugehörige RTS-Leitung in den High-Zustand, sobald das Senderegister leer ist. In der synchronen Betriebsart…“
D.h. RTS macht nicht so recht was ich mit ihm machen will sondern geht eigene Wege, was daran liegt das RTS ursprünglich einen anderen Zweck hatte und wohl deshalb dieses Verhalten zeigt weil z.B. die ACIA des 6800 Systems da einen fetten Bug hat, die bricht nämlich die Übertragung nicht nach einem gesendeten Byte ab, sondern mitten drin :-~ was zwangsläufig zu Kauderwelsch auf im Empfänger führt.
Bei RTS/CTS Handshake dient der RTS Ausgang aber nicht der Bitte Senden zu dürfen sondern als Signal an den gegenüberliegenden Sender ggf. das Senden einzustellen weil der Empfangspuffer voll ist, das bedeutet das RTS hier ein ziemlich suboptimaler Ausgang der SIO zu diesem Zweck ist. Ich habe ne Weile gesucht, andere Leute haben das damit gelöst das sie nicht den RTS Ausgang genutzt haben sondern den frei programmierbaren DTR.
11.2.16:
DCD der SIO ist jeweils auf Masse zu legen da der Kanal sonst gesperrt wird. Wer CTS auch nach Masse brückt gibt den Sender der SIO ständig frei so dass dieser Sendet ohne auf HW Flußkontrolle Rücksicht zu nehmen, DTR (RTS) bleibt dann einfach frei.
Für Drucker mit Parallelschnittstelle bietet sich das E/A-Modul an oder es wird der User-Port des Z9001 genutzt. Die Hardware für eine solche Erweiterung hält sich in minimalen Grenzen. Einen umfangreichen Beitrag dazu gab in der mikroprozessortechnik (Dr. Frank Schwarzenberg, „Standard-Interfaces über den User-Port des KC85/1“)
vgl. a. practic 2/89 bit-centronic-schnittstelle
Hier ist meine Lösung: An einem normalen Centronics-Kabel wird der Sub-D-Stecker abgebaut und ein 3×5-DDR-Steckverbinder angeschlossen. Für das Ready-Signal ist ein D121 zusätzlich im Relaisgehäuse platziert. Dazu gehört mein Vollgrafikdruckertreiber LX86NR, → EPSON-Treiber im Mega-Modul. Beim Einlesen im OS des Computers stellt sich der Treiber automatisch ans logische RAM-Ende und initialisiert seinen Z9001-Modus. Soll im BASIC gedruckt werden, so ist unbedingt das 'memory end' unter den Beginn von LX86NR zu stellen. Es gibt 3 Modi: Z9001-Modus, Vollgraphik-Modus (Es werden alle Grafikzeichen und ein Hardcopy korrekt gedruckt!), Intern-Modus.
Z9001 User Port Drucker (K6325) D0..D7 >----------------------------> D0..D7 /STRB <----------------------------< /ACK 5+---------------+ /ARDY >--| EB | I--I | Q | | | | | 3| | | |1 +-| EA1| |/Q o---------> /STROBE | | | | | +-| EA2| | | |4| | D121 | | | +---------------+ | 11| |10 GND +-||-+ | C R R=4,7K | C=10n +5V ---------+
Aufbauend auf mp 10/87 S. 311 ff. gibt es einen vollgrafikfähigen Druckertreiber V24G für Drucker mit EPSON-Befehlssatz undt V24-Schnittstelle. Im Gegensatz zu den Treibern von robotron wird hier (wie auch in meinem Treiber) der originale Z9001-8×8-Pixel-Zeichensatz genutzt.
Das Megamodul enthält diverse Druckertreiber.
EPSON ist mein universeller Vollgrafik-Druckertreiber f. Centronics oder seriell über ein Druckermodul (V24) für diverse Drucker wie LX86, K6313, TD80 (K6304) und 24-Nadel-Drucker wie den LQ400.
Beim Start werden Anschluß, Modus, Druckertyp abgefragt:
1-V24, 2-Centronics: 1-Grafik, 2-ASCII, 3-IBM: 1-LX86, 2-LQ400, 3-K6313, 4-K6304:
Anschluss: 1- V24-Modul (9600Baud, 8N1), 2 - UserPort (8 Bit, mein Interface)
Arbeitsmodi: 1-Grafik, 2-ASCII, 3-IBM 1-Vollgrafik, 2-nur '*' bei Grafik, 3-Direktmodus
unterstützte Drucker: LX86, LQ400, K6313, K6304 (TS80)
Tipp: Im Megamodul gibt es das Programm „Zwinger“, das sich für den Test eines Bildschirmgrafikausdrucks sehr gut geeignet!