.OP
.PL72
                              - 1 -                   LPRINT3/01
                                                                
                         ** ZX LPRINT **                        
                                                                
                       Bedienungsanleitung                      
                                                                
================================================================
                                                                
Das ZXlprint-Interface dient zum  Anschlu~  eines  Druckers  mit
serieller  (RS  232)   oder    mit    paralleler    (Centronics)
Schnittstelle an den Sinclair ZX  Spectrum.  Der  Speicherausbau
ist f}r die Funktion des Interfaces unerheblich.  Das  Interface
ist voll Microdrive-kompatibel, d.h. das  Sinclair  INTERFACE  1
und das Microdrive k|nnen gleichzeitig  mit  ZXlprint  betrieben
werden.  Die    Software  im  Interface  unterst}tzt   s{mtliche
druckerbezogenen Befehle des ZX Spectrum  (LPRINT, LLIST, COPY).
Durch die  softwarem{~ige  Selektion  des  Druckertyps  ist  der
Au~druck von Grafiken (auch UDG's in LPRINT und LLIST) m|glich. 
                                                                
                                                                
                         Inbetriebnahme                         
                --------------------------------                
       Zum  Lieferumfang  des  Interfaces  geh|rt  neben  dieser
Anleitung auch ein Kabel zum Anschlu~ des Druckers  -  wahlweise
f}r  die  serielle oder parallele Schnittstelle. Bevor das Kabel
an das Interface  oder  den  Drucker  oder das Interface  an den
Computer gesteckt wird, ist unbedingt darauf zu achten, da~ alle
Ger{te ausgeschaltet sind, da sich andernfalls  unter  Umst{nden
einige oder auch alle Ger{te sehr unkommunikativ verhalten.  Das
Flachbandkabel f}r die parallele Schnittstelle  besitzt  an  dem
einen Ende einen 26-Pin Pfostenstecker sowie an dem anderen Ende
den Centronics-Standard 36-poligen  Amphenol-Stecker. Das  Kabel
f}r  die serielle Schnittstelle  ist ein 14-poliges Flachbandka-
bel, das zum Einen einen 14-Pin  Pfostenstecker zum Anschlu~ an 
das ZXlprint sowie einen  25-Pin Canon-Stecker tr{gt. Dieser 25-
Pin Canon-Stecker  ist  die  f}r RS 232 am weitesten verbreitete
Steckverbindung,  dennoch    ist    die    Pinbelegung    dieser
Schnittstelle nicht genormt - unter Umst{nden mu~ also das Kabel
umgel|tet werden. F}r Drucker  und  Schreibmaschinen  der  Marke
Brother (EP22, EP44, CE60 &  IF50,  ...)  kann  das  Kabel  ohne
[nderung  benutzt werden. Da jedoch f}r die  RS 232-Schnittstel-
lendefinition auch kein Standard-Protokoll (Handshaking-Signale,
Start-, Stop-, Parity-Bits, Baudrate) festgelegt ist, k|nnen  im
Weiteren noch mehr Probleme auftauchen, auf die an  entsprechen-
der Stelle noch eingegangen wird. Wie jedes der beiden Kabel an-
zustecken  ist, entnehmen  Sie bitte Abbildung 1. Sind alle Ver-
bindungen  korrekt  hergestellt, erscheint beim Einschalten  des
Computers die }bliche Sinclair-Copyright Meldung. Sollte  Ihr ZX
Spectrum  stattdessen "bunte M{nnchen" machen, schalten  Sie so-
fort die Spannungsversorgung aus und }berpr}fen noch einmal alle
Steckverbindungen. Wenn nach nochmaligem Anschalten der  gleiche
Effekt zu Tage tritt, fragen Sie bitte Ihren H{ndler um Rat.    
                                                                
                                                                
                         Initialisierung                        
                         ---------------                        
       Nach  dem  Einschalten  mu~  das    Interface    zun{chst
initialisiert  werden,  damit  die  integrierte  Software  aktiv
werden kann. Dazu mu~ ein Carriage-Return  (ASCII-Code  13)  auf


                              - 2 -                   LPRINT3/01
                                                                
den Drucker-Kanal gegeben werden, was am einfachsten mit  LPRINT
CHR$ 13 oder noch einfacher mit einem leeren LPRINT-Kommando  zu
erzielen ist.  Nach  der  Initialisierung  ist  eine  Reihe  von
{nderbaren Betriebsparametern voreingestellt:                   
     a) Das Interface befindet sich  im  Centronics-Modus,  gibt
        also seine Daten }ber die parallele Schnittstelle aus.  
     b) Es arbeitet mit einer Zeilenl{nge von 80 Zeichen.       
     c) Es gibt am Zeilenende  nur  Carriage-Return  (Wagenr}ck-
        lauf) ohne Line-Feed (Zeilenvorschub)  aus,  d.h.  der  
Drucker mu~ auf automatischen  Zeilenvorschub  geschaltet  sein,
damit nicht auf einer  Zeile  }bereinander  gedruckt  wird.  Wie
diese Einstellung des Druckers - bei den  meisten  Druckern  ist
dies durch das Setzen eines DIP-Schalters m|glich -  vorzunehmen
ist,  entnehmen  Sie  bitte   dem    Handbuch    des    Druckers
("Auto-Linefeed").                                              
     d) Der  COPY-Befehl erzeugt ein aus ASCII-Zeichen bestehen-
des reines Textimage.  Dieser Modus  eignet sich  also  nicht um
Grafiken zu reproduzieren, kann aber eingesetzt  werden, um  auf
nicht grafikf{higen Druckern eine  Hardcopy  eines  aus alphanu-
merischen- und Sonderzeichen bestehenden Bildschirms  zu machen.
Je nach Zeichensatz des Druckers k|nnen hier  Unterschiede  auf-
treten, da zum Beispiel die Codes f}r die eckigen und geschweif-
ten Klammern des englischen und  amerikanischen Zeichenatzes  im
deutschen  Zeichensatz den Umlauten entsprechen. Au~erdem ist in
diesem Modus kein Ausdruck  von Grafikzeichen  (Blockgrafik  auf
den Ziffertasten, User-defined-graphics) m|glich.               
                                                                
                 [nderung der Betriebsparameter                 
               ----------------------------------               
zu a) Umschaltung auf seriellen Betrieb                         
                                                                
       Durch LPRINT CHR$ 0; "S"; kann das ZXlprint auf seriellen
Betrieb umgeschaltet werden. Die serielle Schnittstelle arbeitet
unidirektional,  d.h.  sie  kann  nur  Daten  ausgeben,    nicht
empfangen. Die ]bertragung erfolgt nach RS 232 mit einem  Start-
und    zwei    Stopbits    und    ohne    Parity-check.      Die
]bertragungsgeschwindigkeit  (Baudrate)  wird  gem{~   folgendem
Schema ausgew{hlt:                                              
                                                                
            Baudrate      POKE 23549,    POKE 23548,            
                75              7             20                
               110              4            214                
               150              3            140                
               300              1            192                
               600              0            216                
              1200              0            109                
              2400              0             51                
              4800              0             23                
              9600              0             10                
                                                                
       Das Zur}ckschalten in den  Centronics-Modus  erfolgt  mit
LPRINT CHR$ o; "P";                                             
                                                                
Sollte das mitgelieferte Kabel f}r  die  serielle  Schnittstelle
nicht passen und ein Uml|ten erforderlich  sein,  entnehmen  Sie
die Belegung des 14-Pin Pfostenfeldverbinders des  ZXlprint  mit
den Handshake-Signalen bitte Abbildung 2.                       


                              - 3 -                   LPRINT3/01
                                                                
zu b) Begrenzung der Zeilenl{nge                                
                                                                
       F}r den Fall, da~ Sie die L{nge der Druckzeile  auf  eine
bestimmte Anzahl von Zeichen beschr{nken wollen, k|nnen Sie  den
mit  80  Zeichen  voreingestellten   Wert   durch   POKE 23679,X
ver{ndern, wobei X  f}r  die  neue  Anzahl  von  Zeichen  steht.
Beachten Sie bitte, da~ der Drucker in seinem  Betriebsmodus  in
der Lage sein mu~, diese Anzahl von  Zeichen  in  der  Zeile  zu
drucken. In diesem Zusammenhang taucht zuweilen ein Problem auf;
da  der  ZX  Spectrum    h{ufig    Schwierigkeiten    mit    der
Spannungsversorgung hat, kommt es in bestimmten Situationen vor,
da~ ein zu druckendes Zeichen unterschlagen wird. Es  kommt  auf
dem Weg durch  das  Interface  durch  St|rschwingungen  aus  der
Netzspannung abhanden (Irrtum ! siehe Anlage !). Dieses  Problem
(im Normalfall  etwa einmal auf etwa 4000 Zeichen) kann umgangen
werden, indem die zu druckenden Zeichen nicht alle zusammen  mit
einem LPRINT-Kommando, sondern einzeln oder in kleineren  Teilen
ausgegeben werden. Der Beweis, da~ das Problem auf diese Art und
Weise gel|st werden kann, ist  TASWORD  TWO,  welches  jedes  zu
druckende Zeichen einzeln ausgibt und ohne verschluckte  Zeichen
arbeitet. Die separate Ausgabe aller Zeichen hat }brigens keinen
Einflu~ auf die Druckgeschwindigkeit.                           
                                                                
                                                                
zu c) [nderung des Carriage-Return-Verhaltens                   
                                                                
       Sollte Ihr Drucker nicht auf  AUTO-Linefeed  zu  schalten
sein, oder  irgendein  Umstand  diesen  Eingriff  nicht  sinvoll
erscheinen lassen, kann das  ZXlprint  so  eingerichtet  werden,
nach jedem Carriage-Return  auch  den  Code  f}r  Line-Feed  mit
auszugeben.  Die  AUTO-Linefeed  Problematik  kann   sich    auf
dreierlei Art {u~ern: der einfachste Fall: es funktioniert alles
auf Anhieb  einwandfrei.  Dies  ist  nat}rlich  die  angenehmste
Variante. Fall zwei:  ZXlprint  ist  im  Einschaltzustand  (kein
Line-Feed nach  Carriage-Return),  der  Drucker  ist  nicht  auf
AUTO-Linefeed geschaltet und druckt alle auszugebenden Zeilen in
eine Druckzeile  }bereinander  -  die  L|sung  ist  wie  bereits
erw{hnt  auf  zwei  Arten  m|glich:  entweder  den  Drucker  auf
AUTO-Linefeed schalten, oder durch LPRINT CH$ 3;  das  Interface
dazu  veranlassen,  seinerseits  an  jedes  Carriage-Return  ein
Line-Feed  anzuh{ngen.  Fall  drei:  ZXlprint   sendet    sowohl
Carriage-Return  als  auch  Line-Feed,  der  Drucker  ist    auf
AUTO-Linefeed geschaltet und druckt jeweils zwischen zwei Zeilen
eine Leerzeile - die L|sung besteht darin, ZXlprint  mit  LPRINT
CHR$ 2; so umzustellen, da~ es eben  kein  Line-Feed  aussendet,
wie es nach dem Einschalten auch der Fall ist.                  
                                                                
zu d) Selektion des Druckers f}r die Grafikansteuerung          
                                                                
       Die im Interface enthaltene Software  ist  in  der  Lage,
eine  Vielzahl  verschiedener  Drucker    mit    "mundgerechten"
Grafikdaten zu versorgen. Dazu  ist  es  jedoch  notwendig,  dem
Interface den Typ des zu steuernden Druckers bekanntzumachen. Es
stehen hierf}r sieben M|glichkeiten zur Wahl:                   
                                                                
                                                                
                                                                


                              - 4 -                   LPRINT3/01
                                                                
Reine Textcopy,                                                 
kein Ausdruck von Grafiksymbolen: ------- LPRINT CHR$ 0; CHR$ 0 
SEIKOSHA GP 250X: ----------------------- LPRINT CHR$ 0; CHR$ 1 
SEIKOSHA GP 100A: ----------------------- LPRINT CHR$ 0; CHR$ 2 
EPSON (und EPSON- kompatible Drucker): -- LPRINT CHR$ 0; CHR$ 3 
SHINWA CP80, SPEEDY 100-80,                                     
MANNESMANN MT 80, etc.: ----------------- LPRINT CHR$ 0; CHR$ 4 
SEIKOSHA GP 700A (COPY in voller Farbe):- LPRINT CHR$ 0; CHR$ 5 
andere Drucker                                                  
(Treibersoftware auf Kassette):---------- LPRINT CHR$ 0; CHR$ 6 
                                                                
       Nach Absetzen eines dieser  Kommandos  erscheint  in  der
untersten Bildschirmzeile ein Minimalmen}:                      
SPACE-NEXT/ENTER-ACCEPT: XXXXXXXX . An Stelle der X'e  wird  der
dem Kommando entsprechende Drucker angeboten. Mit  SPACE  kommen
Sie zur  n{chsten  Alternative,  dr}cken  Sie  ENTER,  wird  der
angezeigte Drucker selektiert. Der Betiebsmodus f}r  den  SHINWA
CP80 und der Betriebsmodus f}r den  SEIKOSHA  GP  700A  erzeugen
eine  Hardcopy  in  vierfacher  Gr|~e;  dabei  wird  aus   jedem
Bildschirmpunkt ein  Block  von  zwei  mal  zwei  Punkten,  also
doppelt hoch und doppelt breit, auf dem Drucker. Der SHINWA CP80
kann jedoch auch im EPSON-Modus  mit  normalgro~er  Eins-zu-Eins
COPY betrieben werden. Die Anwahl des Druckers ist auch f}r  den
Ausdruck  von  Blockgrafik-  oder  User-defined-graphics-Zeichen
erforderlich. Anschlie~end k|nnen auch diese Zeichen mit  LPRINT
oder LLIST ausgedruckt werden.                                  
                                                                
                          Steuerzeichen                         
                   --------------------------                   
       Viele  Drucker  erlauben  vielf{ltige  Variationen    der
Schriftart wie zum Beispiel Fettdruck, Breitdruck,  Schmaldruck,
Unterstreichung oder [hnliches. Diese  Steuerkommandos  f}r  den
Drucker werden im Allgemeinen als "Escape-Sequenzen" bezeichnet,
da  sie  durch  das  Zeichen mit  dem ASCII-Code 27, welches ESC
(Abk}rzung f}r Escape) hei~t, eingeleitet werden. Diese  Escape-
oder Steuersequenzen m}ssen direkt ohne  weitere  rechnerinterne
Umkodierung an den  Drucker  weitergegeben  werden.  Da  der  ZX
Spectrum  aber  einige  der  255  m|glichen  Charaktercodes  mit
eigenen Steuerzeichen (f}r BORDER, INK, PAPER, etc.  ...);  bzw.
den BASIC-Befehlsworten  belegt,  tauchen  hier  erfahrungsgem{~
Schwierigkeiten auf. Die Software im ZXlprint bietet jedoch auch
hier  verschiedene  M|glichkeiten,  diese  Schwierigkeiten    zu
umgehen. So gibt es drei Interface-Kommandos, die die Umwandlung
von  Charaktercodes  gr|~er  als  127  in  BASIC-TOKEN  und  die
Interpretation von Charaktercodes kleiner 32 als  Farbsteuerzei-
chen abschaltet.                                                
                                                                
       LPRINT CHR$ 1; "X" - X ist eine Zahl zwischen 1 und 8    
(mu~ in Anf}hrungszeichen stehen). Die n{chsten X Zeichen werden
ungefiltert an den Drucker weitergegeben. LPRINT  CHR$  1;  "1";
CHR$  255  w}rde  also  nicht  wie   dem    Spectrum-Zeichensatz
entsprechend COPY ausdrucken, sondern das  Zeichen,  welches  im
Zeichensatz des Druckers den Code 255 hat.                      
                                                                
       LPRINT CHR$ 4;    - Das n{chste direkt  folgende  Zeichen
(nur eines) wird ungefiltert ausgegeben. LPRINT CHR$ 4; CHR$ 255
siehe oben.                                                     


                              - 5 -                   LPRINT3/01
                                                                
Die bisher  aufgef}hrten  Alternativen  schalten  die  Spectrum-
interne Interpretation nur f}r eine bestimmte  Zahl von  Zeichen
ab.                                                             
                                                                
       LPRINT CHR$ 5;    - Nach Absetzen dieses Befehls wird die
Spectrum-interne Interpretation  der  genannten  Codes  generell
abgeschaltet. Diese Betriebsart eignet sich  nicht  um  Listings
auszudrucken,  da  anstelle der  BASIC-Befehlsw|rter nur irgend-
welche  einzelnen  Zeichen   ausgedruckt   w}rden  (bei  neueren
EPSON-Druckern zum Beispiel  Kursivschrift).  Dieser  Modus  ist
jedoch  immer  dann  sinnvoll,  wenn  eine  gr|~ere  Zahl    von
Steuersequenzen  an  den  Drucker  auszugeben  sind  (z.B.   bei
Textverarbeitungsprogrammen. In  den  Normalmodus  (LLIST-Modus)
gelangt man wieder durch Absetzen  eines  COPY-Befehls,  der  in
diesem  Moment  allerdings  sinnvollerweise    keine    Hardcopy
ausdruckt.                                                      
                                                                
            Textverarbeitung am Beispiel TASWORD TWO            
          --------------------------------------------          
       Das Textprogramm TASWORD TWO erm|glicht eine  komfortable
Textverarbeitung auf  dem  ZX  Spectrum  -  es  stellt  auf  dem
Bildschirm 64 Zeichen pro Zeile dar und bringt den Text  in  der
gleichen Form wie er auf dem Bildschirm zu sehen  ist,  auch  zu
Papier. Mit dem ZX Printer der  Firma  Sinclair  geschieht  dies
ebenso wie mit dem Alphacom 32 oder SEIKOSHA GP 50S auch mit dem
gleichen Zeichensatz wie auf dem Bildschirm, was angesichts  der
Gr|~e der  einzelnen  Zeichen  doch  recht  unbefriedigend  ist.
Gleichzeitig bietet TASWORD aber auch Unterst}tzung  f}r  andere
Drucker, da es mit Druckerinterfaces arbeiten kann. Dann hat man
sogar  die  M|glichkeit,    verschiedene    Schriftarten    }ber
Steuerzeichen anzuw{hlen. TASWORD bietet zu diesem Zweck die  16
Blockgrafikzeichen an, die in den Text eingebettet und  auf  den
Drucker ausgegeben eine  Vielzahl  von  Gestaltungsm|glichkeiten
des Textes gestatten. Diese  Zeichen  k|nnen  mit  verschiedenen
Escape-Sequenzen belegt werden - sie sind zun{chst auf den EPSON
FX80  abgestimmt,  k|nnen  jedoch  nahezu  beliebig  umdefiniert
werden. Au~erdem mu~ TASWORD  mitgeteilt  werden,  mit  was  f}r
einem Drucker bzw. Interface  es  arbeiten  soll.  Dazu  ist  im
I/O-Men} (aus dem Textmodus zu erreichen durch  SYMBOL  SHIFT/A)
ein Men}punkt "define graphics/printer" vorgesehen. Hier  k|nnen
die Blockgrafikzeichen mit Steuerzeichensequenzen belegt werden.
Anschlie~end wird gefragt "reset interface codes?" -  bevor  Sie
mit TASWORD arbeiten k|nnen, m}ssen Sie hier die  Frage  mit  Ja
("Y") beantworten und folgende Codes angeben: Interface code  1:
0, code 2: 0, code 3: 0, code 4: 57855. Diese letzte  Zahl  gibt
an, an welcher Stelle die Routine steht,  die  TASWORD  aufrufen
mu~, um Zeichen an den Drucker zu geben. Auf die darauf folgende
Frage nach "Carriage-return code" m}ssen Sie mit  13  antworten.
Der  Linefeed  code  ist  abh{ngig  davon,  wie   Ihr    Drucker
eingestellt  ist  (AUTO-Linefeed?).  Ist   der    Drucker    auf
AUTO-Linefeed geschaltet, geben Sie hier 0 an,  andernfalls  10.
Au~erdem mu~ ZXlprint initialisiert und so  eingestellt  werden,
da~ es alle Zeichen ungefiltert an den  Drucker  weitergibt.  Da
dies bei jeder TASWORD-Sitzung n|tig ist, scheint es  zweckm{~ig
zu  sein,  diese    Initialisierung    und    Abschaltung    der
TOKEN-Umsetzung in den Programmtext von TASWORD  einzubauen.  Zu
diesem Zweck ist TASWORD zu laden  und im I/O-Men} B  f}r  Enter


                              - 6 -                   LPRINT3/02
                                                                
BASIC zu dr}cken. Nun editieren Sie Zeile 15 (LIST 15,  auf  die
Frage "scroll?" mit "n" antworten und anschlie~end CAPS  SHIFT/1
dr}cken). F}gen Sie  direkt  hinter  der  Zeilennummer  folgende
Befehle ein: LPRINT CHR$ 13; CHR$ 5;. Starten  Sie  TASWORD  nun
wieder mit RUN und w{hlen  Sie  im  I/O-Men}  die  Option  "Save
TASWORD", um die neu installierte Version f}r folgende Sitzungen
immer zur Hand zu haben.                                        
                                                                
       Das ist nur eine  der  vielf{ltigen  Einsatzm|glichkeiten
f}r ZXlprint, ganz abgesehen davon, wie vielseitig  es  bei  der
Programmentwicklung einsetzbar ist. Viel Spa~ also!             
                                                                
                                                                
             ]bersicht }ber die Interface-Kommandos             
          ********************************************          
                                                                
LPRINT CHR$ 0; CHR$ 0 bis 6; - Selektion eines Druckertyps f}r  
                               die Grafikansteuerung            
LPRINT CHR$ 0; "S"; ---------- Selektion des seriellen Betriebs 
                               (RS 232-Modus)                   
LPRINT CHR$ 0; "P"; ---------- Selektion des parallelen Betriebs
                               (Centronics-Modus)               
LPRINT CHR$ 1; "X"; ---------- Abschalten des Token- oder LLIST-
                               Modus f}r X Zeichen              
LPRINT CHR$ 2;      ---------- Kein Line-Feed nach Carriage-    
                               Return                           
LPRINT CHR$ 3;      ---------- Ausgabe von Line-Feed nach       
                               Carriage-Return                  
LPRINT CHR$ 4;      ---------- Abschalten des Token- oder LLIST-
                               Modus f}r ein Zeichen            
LPRINT CHR$ 5;      ---------- Generelles Abschalten des Token- 
                               oder LLIST-Modus                 
POKE 23679,X        ---------- Beschr{nkung der Zeilenl{nge     
                               auf X Zeichen                    
POKE 23548,X: POKE 23549,Y --- Selektion der Baudrate f}r die   
                               serielle Schnittstelle           
   Abbildung 1:                                                 
                                                                
                  ^^^^^^^^        ^^^^^^^^^^^                   
                  ^^^^^^^^        ^^^^^^^^^^^ <- rote Leitung   
                  ^^^^^^^^        ^^^^^^^^^^^                   
                *E*C^^^^^^^^*C*C*C*C*C*C*C*C^^^^^^^^^^^*C
                 
                *E ^^^^^^^^        ^^^^^^^^^^^ 
                 
                *E(RS 232  )      (Centronics )
                 
                *E()      ()
                 
                *E                             
                 
                *E                             
                 
                *E_____________________________
                 
                *E               ZXlprint '''  
                *E_____________________________
                *E                             
                 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%                  
                                                                
                          - 7 -                       LPRINT3/02
                                                                
                                                                
                    Beide  Kabel  m}ssen  nach                  
                hinten vom Interface wegf}hren.                 
                Das Centronics-Kabel tr{gt eine                 
                rot  markierte Leitung,  welche                 
                auf der  rechten  Seite  liegen                 
                mu~.                                            
                                                                
                                                                
                                                                
   Abbildung 2:                                                 
                                                                
                                                                
   Serielle Schnittstelle:                                      
                                                                
   7  6  5  4  3  2  1                                          
   .  .  .  .  .  .  .      Pin 1,7 .......... Ground (0V)      
   .  .  .  .  .  .  .      Pin 2,5,6,14-17 .. Nicht verbunden  
  20 19 18 17 16 15 14      Pin 3 ............ Transmit Data    
                                              (Output) - TTL    
                            Pin 4 & 19 ....... Clear To Send,   
                                               BUSY             
                            Pin 20 ........... Data Terminal    
                                               Ready            
                                                                
                                                                
   Parallele Schnittstelle:                                     
                                                                
        13 12 11 10  9  8  7  6  5  4  3  2  1                  
         .  .  .  .  .  .  .  .  .  .  .  .  .                  
         .  .  .  .  .  .  .  .  .  .  .  .  .                  
        31 30 29 28 27 26 25 24 23 22 21 20 19                  
                                                                
        Pin 1 ......... STROBE (negative Logik)                 
        Pin 2-9 ....... Datenbits 1-8                           
        Pin 10-13,31 .. Nicht verbunden                         
        Pin 11 ........ BUSY                                    
        Pin 19-30 ..... Ground (0V)                             
                                                                
                                                                
              * *  =========================== * *              
                                                                
                                                                
Anlage:                                                         
-------                                                         
   Information aus:     "Happy Computer"                        
                         Sonderheft  Spectrum 1/85              
                         S. 104-105                             
1.)                                                             
   Das "Zeichenverschlucken" geschieht infolge  eines  Software-
fehlers im EPROM des ZXlprint, der darin besteht, da~ die  BUSY-
Leitung des Druckers nach der ]bergabe eines Zeichens wieder  zu
fr}h abgefragt wird (noch bevor der Drucker sein  Busy=1  setzen
konnte). Also wird daraufhin ein Zeichen ausgegeben, obwohl  der
Drucker zu diesem Zeitpunkt noch nicht empfangen kann. Hier  ist
eine Umprogrammierung des EPROMs notwendig, bei der die  Ausgabe
eines Zeichens um ein paar Taktzyklen verz|gert wird.           

                             - 8 -                    LPRINT3/02
                                                                
                Original             [nderung                   
           dez.                                                 
           194  CALL 1F54H      194  CALL 05BFH                 
           197  JP NC,0D00H     197  NOP                        
           200  IN A,(7BH)      198  LD A,0                     
                                200  IN A,(7BH)                 
                                                                
Nach dieser [nderung wird der etwas l{ngere BREAK-Test der LOAD-
Routine aufgerufen.                                             
Schaltungsbedingt mu~ ein EPROM 2716-1 (350ns) verwendet  werden
(auf keinen Fall eines mit 450ns).                              
                                                                
2.)                                                             
Der "abgeschliffene" IC ist ein Buffer vom Typ 74125 bzw. 74425 
                                                                
3.)                                                             
Das Interface wird mit einem LPRINT-Kommando initialisiert.Dabei
geschieht nun folgendes:                                        
   Der Rechner l{uft in die normale ZX-Printer-Routine  bis  zum
Befehl IN A,(FB) bei Adresse 0F0CH. Mit diesem Befehl  wird  das
im LPrint III- Interface befindliche EPROM  selektiert  und  das
Spectrum-ROM ganz abgeschaltet. Der Einsprung  ins  ROM  erfolgt
bei Adresse  0712H=1804D.  Dies  ist  durch  die  unvollst{ndige
Adre~codierung des EPROMs(0F0CH - 800H =  0712H)  m|glich.  Dann
wird zuerst nachgesehen, ob schon eine Initialisierung  stattge-
funden hat, indem  die  Kanalinformation  f}r  die  Druckroutine
untersucht wird. Kritisch sind deshalb auch alle I/O-Einleseope-
rationen mit gestztem A7 und zur}ckgestztem A2, also alle IN-Be-
fehle, die gr|~er als 127 und nicht durch 4  teilbar  sind.  Bei
all diesen Adressen besteht akute Absturzgefahr, weil immer  das
EPROM eingeschaltet wird.  Man  sollte  dies  beim  Bau  eigener
Erweiterungen    ber}cksichtigen.    Nur    eine    vollst{ndige
Adre~decodierung kann hier Abhilfe schaffen.                    
   Die Adresse der Kanalinformation f}r die Druckroutine  findet
man }ber die Systemvariable CHANS. Dort steht eine  Adresse,  zu
der noch ein Offset von 15 addiert werden mu~, um an die Adresse
f}r die Druckroutine zu kommen.                                 
   In Basic:PRINT265*PEEK23632+PEEk23631+15                     
   War das Interface noch nicht initialisiert, wird dorthin  die
Adresse 0EFDH geschrieben und dient als Aufrufadresse  f}r  alle
folgenden LPrint-Befehle, wodurch das EPROM in  der  vorher  be-
schriebenen Weise immer angesprochen wird.                      
   Mit jedem Aufruf werden nun bestimmte  Maschinenprogrammteile
aus dem EPROM in den Printer-Buffer kopiert.  Dieser  Kniff  ist
notwendig, um das EPROM wieder abschalten zu k|nnen und  Zugriff
auf verschiedene ROM-Routinen zu haben.                         
   Um es nochmal zu betonen: Es wird kein einziges zu druckendes
Zeichen im Printer-Buffer  abgelegt,  sondern  ein  Mashinenpro-
gramm, das die eigentliche Aufgabe des Druckens  }bernimmt.  Das
Ausschalten des EPROMs erfolgt immer vom Printer-Buffer aus  mit
dem Befehl IN A,(7B).                                           
   Da das mc-Programm mit jedem LPINT-Befehl  neu  kopiert wird,
spielt ein ]berschreiben desselben eigentlich keine Rolle.  Doch
Vorsicht! Ein paar Speicherzellen im Printer-Buffer von  Adresse
23543 bis 23548  werden  als  Zwischenspeicher  benutzt.  Werden
diese }berschrieben, so kann das unerwartete Folgen haben.      
                                                                


                              - 9 -                   LPRINT3/02
                                                                
   Dies ist einer der Gr}nde daf}r, da~  mit  manchen  gekauften
Programmen ein Drucken nicht m|glich ist,  da  sie  genau  diese
Speicherzellen ebenfalls ben}tzen.  Auch  TASWORD  II  macht  da
keine Ausnahme, wie die Befehle MOVE  oder  COPY  BLOCK  zeigen.
(Deshalb auch manch unerkl{rliche Abst}rze, wenn man  irgendwann
danach versucht, etwas zu drucken.)  Erschwerend  kommt  hierbei
noch dazu, da~ zudem die Kanalinformation nach  23296  verzweigt
wird, da von der  Bedienungsanleitung  ein  "LPRINT CHR$ 5" beim
Programmstart emphohlen wird.  Damit wird  das im Printer-Buffer
stehende mc-Programm immer  direkt  aufgerufen  und  nicht  mehr
st{ndig durch erneutes Einkopieren vom EPROM regeneriert.       
   Solange man nicht die Grafikzeichen als Druckersteuercode  im
Text verwendet, ist deshalb  eine  Initialisierung  mit  "LPRINT
CHR$ 3" vorzuziehen.                                            
   Eine andere M|glichkeit, warum das Interface nicht mit  einem
gekauften Programm zusammenarbeitet, ist folgende:              
   Manche  Programme  (z.B.  Atric-Assembler)  pr}fen  mit   der
Kombination IN A,(FB), BIT 6,A oder CP FF oder  {hnliches  nach,
ob der ZX-Printer ansprechbar ist. Verl{uft der Test negativ, so
wird im normalen Programm ohne zu drucken fortgefahren bzw. wird
ein "BUSY" des Printers angenommen.                             
   Durch  die  Hardware  der  Interface  bedingt   ergibt    ein
derartiger Test immer (wegen der seriellen RS 232-Schnittstelle)
da~ vermeintlich kein Drucker angeschlossen  bzw.  dieser  nicht
bereit ist. Gleichzeitig wird das ROM aus- und das EPROM  einge-
schaltet.                                                       
   Abhilfe: Man durchsuche in Basic das mc-Programm nach  dieser
Bitkombination und ersetzte sie durch die Kombination           
                           IN A,(7BH)                           
                             BIT 7,A                            
   Beim Atric-Assembler wird damit die  Druckroutine  lauff{hig,
indem nun "BUSY" an der richtigen Stelle  (D7)  abgefragt  wird.
   F}r andere mc-Programme kann eine [nderung normalerweise er- 
folgreich vorgenommen werden, wenn irgendwo in der N[he der  f}r
IN A,(FB)  genannten Adresse ein Aufruf mit:                    
   LD A,2                                                       
   CALL 1601     ;Kanal Printer \ffnen                          
   LD A,0D                                                      
   RST 10        ;Printroutine                                  
zu finden ist.  Der  Befehl  >>IN  A,(FB)<<  ist  unbedingt  auf
>>IN A,(7B)<< abzu{ndern.                                       
   Unter Umst{nden mu~ man auch }berpr}fen,  ob  vielleicht  die
Adressen 23543 bis 23548 von dem  Programm  benutzt  werden  und
diese ab{ndern.                                                 
   Ist das Interface einmal initialisiert, also die neue  Kanal-
info eingeschrieben und der Printer-Buffer  ver{ndert,  so  l{~t
sich das Interface  vollkommen  neu  initialisieren,  indem  man
wieder die urspr}ngliche Kannalinformation des ZX-Printers  ein-
gibt.                                                           
   Vorteil: das Interface kann  ohne  Ausschalten  des  Rechners
abgeschaltet und neu initialisiert werden.                      
POKE (256*PEEK 23632+PEEK 23631+15),244                         
POKE (256*PEEK 23632+PEEK 23631+16),9                           
                                                                
                                                                
                                                                
                                                                


                             - 10 -                   LPRINT3/02
                                                                
Programm zum Auslesen des EPROM:                                
                                                                
         LD DE,9C40        ;Startadresse RAM                    
         LD HL,0           ;STartadresse EPROM                  
         LD BC,800         ;2048 Speicherzellen kopieren        
         DI                ;Interrupt sperren                   
         IN A,(FB)         ;EPROM einschalten                   
         LDIR              ;Inhalt nach 40000 kopieren          
         IN A,(7B)         ;EPROM auschalten                    
         EI                ;Interrupt freigeben                 
         RET                                                    
                                                                
Programm  zur  Benutzung  des  Interfaces  ohne  die  eingebaute
Steuersoftware (ohne LPrint-Befehl):                            
                                                                
         10 INPUT a$                                            
         20 IF IN 123 >= 128 THEN GO TO 20: REM BUSY?           
         30 FOR n=1 TO LEN a$                                   
         40 OUT 251,CODE a$(n):OUT 123,CODE  a$(n):OUT  251,CODE
            a$(n)                                               
         50 NEXT n                                              
         60 OUT 251,10: OUT 123,10: OUT 251,10: REM Vorschub    
         70 GO TO 10                                            
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                             E N D E                            
                                                                
                                                                
                     ***********************                    
                                                                
.PA                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                
                                                                

