Zuerst einmal möchte ich Sie herzlich zu dem Programm "Context" aus Heft 4/86 beglück wünschen. Es ist das erste Programm aus Programmzeitschriften, das auch das hält, was es verspricht und sogar ohne Fehler läuft Zur Anpassung an verschiedene Druckerversionen (ESC-Sequenzen) werden Sie sicherlich einige Zuschriften erhalten und daraus eine Tabelle erstellen können. Was aber, wenn man eine Druckerroutine benötigt, die keine dieser Sequenzen benötigt? Z.B. besitze ich eine Typenradschreibmaschine (Olympia-Carrera) mit Interface. Leider werden noch zwei ASCII-Zeichen anders als die Norm interpretiert (Zeichen "<" und ">"). Kurzentschlossen wird also eine Konvertierroutine geschrieben. Weil sie kurz und schnell sein soll, wird sie in Assembler angefertigt Das so erstellte Programm wird in DA TA-Zeilen abgelegt und in Context eingebaut. - Nur an welcher Speicheradresse darf sie abgelegt werden ? Der normale Weg ist einfach mit dem MEMORY-Befehl den Speicherbereichfestzulegen. Diese Methode endet aber früher oder später bei Context im Programmnirwana. Warum? - Der Druckertreiber arbeitet im Interrupt-Modus und schaltet Interrupts bei der Zeichenausgabe ab, und so kann ztfallig RAM oder ROM (Adressbereich &0000 -&3FFF) eingeschaltet sein. Wo dann die Konvertierroutine unterbringen? Nun, das Maschinenprogramm disas-semblieren und sehen, wo man es ändern kann, ist zu umständlich. Lediglich der CALL-Befehl zur Ausgabe eines Zeichens an den Centronic-Port erhält man so. (Adr.: &9C44). Eine andere Methode, den Textspeicher zu kürzen, gefallt mir nicht. Auf der Suche nach weiteren Lösungen fiel mir der SYMBOL AFTER-Befehl auf. Hierbei wird eine Zeichenmatrix im RAM untergebracht, auch im Programm Context. Es werden jedoch die Zeichen 127 bis 199 gar nicht zur Darstellung benötigt. Folglich ist es ohne Bedeutung, wie diese Zeichenmatrix aussieht. Ab Adresse&A 1D3 beginnt dieser Zeichensatz in Context. Acht Byte pro Zeichen ergeben die Adresse &A2F4 für das Zeichen 127. Hier kann also das Kon vertierprogramm beginnen. Außerdem gehört dieser Speicherbereich zum nicht überlappten RAM-Bereich. Dadurch ist ein Störung durch ROM/RAM-Schaltungen ausgeschlossen. Die Konverlierroutine fängt nun alle ESC-Sequenzen ab und kodiert die Zeichen "< " und ">" in die benötigten Zeichenfolgen um. Dabei hilft die Tatsache, dqß jede ESC-Sequenz aus drei Zeichen besteht. Unterstreichen ist mit einer Schreibmaschine durch Zurücksetzen des Schreibkopfes möglich. Eine einfache ESC-Sequenz reicht dazu nicht. Deshalb legt die MC-Routine noch einen eigenen Merkspeicher (3 Byte) an und unterstreicht jedes Zeichen, bis die Sequenz zum Abschalten (DB 27,45,0) erscheint. Um das Programm Context bedienerfreundlich zu halten, werden noch einige Schönheitsänderungen neben der Konvertierroutine ins Programm eingefügt. Die Änderungen sehen dann folgendermaßen aus: (siehe Listing Context/Typenrad) Reinhard Pekx, CPCAI 8607 |