APPLICATIONSPROGRAMMATION ★ Die Assemblerecke ★

Verschiedene Schiftarten erzeugen (CPC Amstrad International)Applications Programmation
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Zeichensatz mit Variationen

Wer seine Kenntnisse in Maschinensprache vertiefen möchte, sollte keine Gelegenheit auslassen, anhand gut kommentierter Listings die Anwendungsmöglichkeiten der Z80-Befchle zu studieren. Leider bieten Fachzeitschriften in dieser Hinsicht recht wenig. Da Assemblerlistings viel Platz beanspruchen, werden Maschinenprogramme meist nur in komprimierter Form als DATA-Wüsten veröffentlicht, deren Informationsgehalt für den lernbegierigen Newcomer gleich Null ist. Aus diesem Grund hat PC International mit der Assemblerecke ein Reservat eingerichtet, in dem Sie Maschinenprogramme noch in ihrer ursprünglichen Form besichtigen können, so wie sie der Programmierer eingegeben hat.
Bereits in den bisherigen Folgen wurde der Z80-Befehlssatz anhand kleiner Beispielprogramme erläutert. Bevor wir in dieser Folge zu einer etwas komplexeren Anwendung kommen, ein kleiner Ausflug in die Welt der Textverarbeitung: Schaut man sich die Textdarstellung der verschiedenen Programme an, so kann man grob zwei Typen unterscheiden.

Die erste Sorte, bekannt unter dem Namen 'WYSIWYG' (What You See Is What You Get), gibt sich redlich Mühe, den Text so auf den Bildschirm zu bringen, wie er nachher auf dem Papier erscheint, also bereits fertig formatiert und mit einer grafischen Darstellung der verschiedenen Schriftarten wie Fett, Kursiv, Unterstreichen usw. Die andere Sorte folgt dagegen dem YCAGWYW-Prinzip ('You Can't Always Get What You Want') und benutzt spezielle Steuerzeichen, um die Umschaltung zwischen den Schriftarten anzuzeigen. Das ist für den Anwender zwar unübersichtlich, hat aber auf Computern seine Berechtigung, die über einen speziellen Textmodus verfügen.

In diesem Modus reicht es, die ASCII-Nummer des Buchstabens nebst einer Farbinformation in den Bildschirmspeicher zu schreiben, und der Video-Chip kümmert sich dann um die Darstellung des dazugehörigen Punktmusters.

Durch die Hardware-Unterstützung wird die Textdarstellung sehr schnell und läßt sich einfach programmieren. Allerdings ist man damit auf den eingebauten Zeichensatz angewiesen, der nicht verändert werden kann.

Ein Blumentopf im Grafikmodus

Eine variable Textdarstellung im Grafikmodus erfordert wesentlich mehr Aufwand, da jeder Bildpunkt 'persönlich' angesprochen werden muß. Insbesondere ist es schwierig (wenn auch nicht unmöglich), eine für Textverarbeitung ausreichende Geschwindigkeit bei der Bildschirmausgabe zu erreichen. Ohne eine hardwarenahe Programmierung in Assembler ist in dieser Hinsicht kein Blumentopf zu gewinnen, was einerseits den Entwicklungsaufwand erhöht und andererseits die Übertragung des Programms auf andere Rechner erschwert.

Der CPC ist über solche Probleme jedoch erhaben, da er ohnehin alles im Grafikmodus darstellt. Die Textausgabe wird dadurch zwar nicht gerade weltrekordverdächtig schnell, aber dafür unterstützt bereits das Betriebssystem und das CPC-Basic die Gestaltung eigener Textzeichen. Im Prinzip ist es also kein Problem, verschiedene Schriftarten auf dem Bildschirm darzustellen. Wer für jeden Schrifttyp einen Spezialzeichensatz mit Hilfe unzähliger SYMBOL-Anweisungen definieren will, hat allerdings eine Menge zu tun.

Nach dem Motto “Wie sollte man bloß die ganze Arbeit, die ein Computer macht, ohne Computer schaffen" möchten wir deshalb eine elegante Lösung vorstellen. die es erlaubt, ohne großen Aufwand zwischen verschiedenen Schriftartenzu wechseln. Zunächst wird der Zeichensatz mit SYMBOL AFTER 32 ins RAM verlegt, und dann tritt ein kleines Maschinenprogramm in Aktion, um ihn nach einem ausgeklügelten System zu verunstalten. Falls Sie sich noch nicht mit einem Assembler angefreundet haben, können Sie auch den Basic-Lader abtippen, um Ihre Listings fortan in Fettschrift oder gar unterstrichen auf dem Bildschirm auszugeben.

Wie das Programm aufgerufen wird, ist den Kommentaren am Anfang des Assemblerlistings zu entnehmen. Zusätzlich besteht die Möglichkeit, beliebige Kombinationen der Schriftarten zu erzeugen, indem die entsprechenden Zahlen addiert werden. So ergibt z.B. 8 + 2 = 10 unterstrichene Fettschrift. Der eingestellte Schrifttyp wirkt auf sämtliche Textausgaben des CPC, bis Sie ihn durch einen erneuten Aufruf der Routine wieder ändern.

Das Listing unter der Lupe

Für alle, die sich für die Funktionsweise des Programms interessieren, hier noch einige ergänzende Erläuterungen: Zu Beginn (Zeile 200-210) steht eine Sicherheitsabfrage, die eigentl ich jedes Maschinenprogramm durchführen

sollte, das von Basic aus aufgerufen wird.

Die Anzahl der übergebenen Parameter stellt der Interpreter freundlicherweise im Akku zur Verfügung, so daß sich problemlos ein kleiner Syntax-Check durchführen läßt. Wird das geforderte Aufrufformat nicht eingehalten, so erfolgt ein sofortiger Rücksprung, um unkontrollierte Abläufe zu verhindern.

Die nächste Aktion (Zeile 220-240) besteht darin, die Matrixadresse des Leerzeichens (ASCII-Nr. 32) zu ermitteln. Hier der Steckbrief des benutzten Betriebssystem-Aufrufs:

TXT GET MATRIX &BBA5 Einsprung: A enthält die Nummer des Zeichens.

Aussprung: HL enthält die Adresse der Zeichenmatrix. Wenn sie sich im RAM befindet (d.h. verändert werden kann), ist das Carry-Flag gesetzt, ansonsten gelöscht. Die Register BC, DE, IX und IY bleiben erhalten.

Unser Programm kann natürlich nur arbeiten, wenn für den Zeichcnsatz durch SYMBOL AFTER 32 ein RAM-Bereich reserviert wurde. Ist das nicht
der Fall, so sorgt die Zeile 240 für einen sofortigen Rücksprung.

Die Zeilen 260-330 beschäftigen sich damit, vor der Manipulation des Zeichensatzes den Originalzustand herzustellen. Zu diesem Zweck werden die Matrizen aus dem Betriebssystem-ROM an die RAM-Adresse kopiert, die wir durch den Aufruf von TXT GET MATRIX erhalten haben. Da beim Aufruf eines Maschinenprogramms von Basic aus im gesamten Adreßbereich des Z80 der RAM-Speicher selektiert ist. muß jedoch erst das ROM zugänglich gemacht werden. Mit Hilfe weiterer Betriebssystem-Routinen ist das kein Problem:

KL LOWER ROM ENABLE &B906 aktiviert das untere ROM (Adreßbereich &000 - &3FFF), und KL LOWER ROM DISABLE &B909 schaltet es wieder aus. Der Akku und die Flags werden durch beide Routinen verändert, alle anderen Register bleiben erhalten.

Die Zeichenmatrizen sind im ROM ab Adresse &3800 zu finden. Da wir erst ab Zeichen Nr. 32 kopieren, ergibt sich die Startadresse &3800 + 8 x 32 = &3900. Interessant sind für unsere Zwecke vor allem die Textzeichen bis Nummer 126; die Grafikzeichen ab 127 lassen wir in Ruhe. Da jede Zeichenmatrix 8 Pixelreihen (d.h. 8 Bytes) umfaßt, müssen insgesamt (126-32 + 1) * 8 = 760 Byte kopiert werden, was der in der letzten Folge besprochene Blocktransferbefehl LDIR erledigt. Wird Normalschrift verlangt (das heißt das Textattribut ist Null), so gibt es nichts weiter zu tun. und die Zeile 370 sorgt für die Rückkehr ins Basic. Ansonsten wird jedoch das Attribut-Byte Stück für Stück ins Carry-Flag rotiert und für jedes gesetzte Bit die dazugehörige Umwandlungsroutine aufgerufen. An dieser Stelle wird klar, warum den Schriftarten die Zweierpotenzen 1.2.4 usw. zugeordnet sind: Jeder Zahl entspricht genau ein Bit. Man könnte auch von einer anderen Zuordnung ausgehen, aber so ist es sehr praktisch und ermöglich eine übersichtliche Programmierung.

Schräge Schrifttypen

Die Unterprogramme für die verschiedenen Schriftarten vergnügen sich im wesentlichen damit, alle Zeichenmatrizen abzuklappern und nach einem bestimmten System zu verändern. Fettschrift entsteht, indem man die Pixelreihen ein Bit nach rechts schiebt und dann mit dem ursprünglichen Byte OR verknüpft.

In der resultierenden Reihe sind dann alle Punkte gesetzt, die in der ursprünglichen oder in der verschobenen Reihe 'eingeschaltet' waren. Auf diese Weise werden vertikale Linien um einen Pixel breiter.

Die dünne Schrift entsteht auf ähnliche Weise: Das logische OR wird einfach durch ein AND ersetzt. Dadurch bleiben nur Punkte übrig, die im Original und in der verschobenen Matrix gesetzt waren. Alle vertikalen Linien werden dadurch einen Pixel dünner. Dieser Trick funktioniert allerdings nur, weil die vertikalen Linien der CPC-Zeichen von vornherein zwei Pixel breit sind.

Bei Kursivschrift wird ebenfalls kräftig geschoben, und zwar im oberen Teil des Zeichens nach rechts und im unteren Teil nach links, wodurch eine leichte Schräglage entsteht. Allerdings ist das Auflösungsvermögen der CPC-Grafik für eine saubere Darstellung schräger Linien leider nicht ganz ausreichend: die besten Ergebnisse erhält man noch in MODE 2.

Unterstreichen ist dagegen ohne Zweifel die leichteste Übung: Es müssen nur alle Bits in der letzten Punktreihe der Zeichen gesetzt werden, indem man in die entsprechende Speicherstelle den Wert &FF schreibt.

Das Assemblerprogramm ist so aufgebaut, daß es sich leicht um weitere Features erweitern läßt. Denken Sie sich einfach einen neuen Schrifttyp aus, schreiben Sie nach dem vorgegebenen Schema das dazugehörige Unterprogramm und integrieren Sie es durch eine weitere RRA und CALL-Kombination in den Zeilen 380 - 450. Wie wäre es zum Beispiel mit einer Routine, die den Zeichensatz um 90 Grad dreht? Diese Aufgabe ist nicht ganz ohne, da alle 64 Bit eines Zeichens umsortiert werden müssen.

Mit einer eleganten doppelten Schleife und einigen Rotierbefehlen sollte das allerdings für den angehenden Profi kein Problem darstellen.

Durch zweimaligen Aufruf der Routine könnte man die Schrift sogar auf den Kopf stellen, was einen ahnunglosen CPC-Benutzer, dem man das Programm heimlich unterschiebt, sicherlich etwas überraschen dürfte...

Matthias Uphoff/cd , CPCAI

★ PUBLISHER: CPC Amstrad International
★ YEARE: 1988 , 1989
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC AMSTRAD INTERNATIONAL 1989
★ AUTHOR: Matthias Uphoff
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listings:
» Verschiedene  Schiftarten  erzeugen    (CPC  Amstrad  International)    GERMANDATE: 2020-06-21
DL: 187
TYPE: ZIP
SiZE: 4Ko
NOTE: 40 Cyls
.HFE: Χ

» Verschiedene  Schiftarten  erzeugen    (CPC  Amstrad  International)    LISTING    GERMANDATE: 2020-06-21
DL: 197
TYPE: text
SiZE: 5Ko
NOTE:

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » DigitExtension v1.2
» Applications » Text Editor
» Applications » Scroll Text (Amstrad Computer User)
» Applications » Destext
» Applications » Traitext (CPC Revue)
» Applications » Sybex - Startext
Je participe au site:
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 476 millisecondes et consultée 732 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.