APPLICATIONSDIVERS ★ RSX OUTPUT (SCHNEIDER AKTIV SPECIAL) ★

RSX Output (Schneider Aktiv Special)Applications Divers
★ 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 ★ 

OUT PUT NEUE SCHRIFTEN BRAUCHT DER MENSCH!

So manch einer ärgert sich mit Textverarbeitungen 'rum. Ich auch. Besonders eines stört mich immer wieder: Die Druckersteuerzeichen, dargestellt durch inverse Buchstaben, sehen nicht nur häßlich und unübersichtlich aus, sie machen einen vernünftigen Blocksatz nahezu unmöglich. Warum kam eigentlich noch nie jemand auf die Idee, die verschiedenen Druckarten auf dem Bildschirm des grafikfähigen Schneiders darzustellen?

Nun, ich kam auf diese Idee. Doch der Idee folgte nicht gleich die Tat - im Gegenteil, sie schlummerte lange vor sich hin...bis ich kürzlich bemerkte, daß die Ausgaberoutine des Schneiders gar nicht so ROM-intensiv ist, wie ich immer dachte:

Die Bildschirmausgabe des Schneider CPC erfolgt grundsätzlich über zwei Firmwarejumps: TXT OUTPUT (#BB5A) und TXT WR CHAR (#BB5D). Die Standardausgaberoutine ist hierbei TXT OUTPUT, welche auf Steuerzeichen überprüft und diese auch ausgibt.

Ist das auszugebende Zeichen jedoch kein Steuerzeichen, so verzweigt TXT OUTPUT, inzwischen im ROM, seinerseits zu TXT WR CHAR, welches im ROM an der Adresse #1334 (CPC464) hegt. TXT WR CHAR nun erhöht die Cursorposition, überprüft, ob die VDU-Ausgabe zugelassen ist, und ruft dann zur Ausgabe die Routine TXT WRITE CHAR (#134A im 464-Rom).
Hier ist der entscheidende Punkt, denn der Aufruf erfolgt über ein RAM-patch, die Standard Sprungleiste also. In &BDD3, dem aufgerufenen RAM-patch, steht nun ein Jump an die Adresse &134A, wo die eigentliche Ausgabe stattfindet.

„Biegt“ man nun diesen RAM-patch auf eine eigene Ausgaberoutine, so könnte man mit den Zeichen Manipulationen durchführen, die völlig unabhängig von den vom Benutzer definierten Zeichenmatrixen wären.

Die Parameter zum Aufruf der TXT WRITE CHAR-Routine sind denkbar günstig: Im Akku das auszugebende Zeichen, in HL die Bildschirmkoordinaten. Betrachtet man nun die ersten vier Byte der Ausgaberoutine, schlägt einem fast das Herz höher:

134A PUSH HL Spalte/Zeile retten 134B CALL12D3 Zeichenmatrixadr. holen Man braucht also die Ausgaberoutine gar nicht neu zu schreiben, es reicht völlig aus, sie vier Byte später als gewöhnlich anzuspringen! Es wird also sozusagen zwischen obigen vier Byte und der nachfolgenden Ausgaberoutine eine eigene Manipulationsroutine „gesteckt“!!!

(Fast) völlig ungebunden kann man nun mit der Zeichenmatrix experimentieren. Dies setzt natürlich eine gewisse Kenntnis über den Aufbau dieser voraus, hier am Beispiel des großen „A“:

Byte/Bit01234567
1XX1 = 18
2XXXX2 = 3C
3XXXX3 = 66
4XXXX4 = 66
5XXXXXX5 = 7E
6XXXX6 = 66
7XXXX7 = 66
8XXXXXXXX9 = FF

Beim Unterstreichen eines Zeichens wird in der untersten Rasterzeile ein durchgezogener Strich markiert. Für die Matrix bedeutet das, daß alle acht Bit des achten, also letzten, Byte gesetzt sind. Indem wir also in das achte Byte der Matrix den Wert FF, oder 255 dezimal, schreiben, unterstreichen wir das Zeichen.

Ähnlich funktioniert die Schriftart „Italic“. Hier arbeitet man mit bitweisem Verschieben der einzelnen

Byte:

0123456701234567
XX2 ->XX
XXXX2 ->XXXX
XXXX1 ->XXXX
XXXX1 ->XXXX
XXXXXXXXXXXXX
XXXX1 <-XXXX
XXXX1 <-XX
0123456701234567

Schreibe ich nun also die Byte 06, 0F, 33, 33, 7C, 66, CC, 00 anstatt der vorherigen Matrix 18, 3C, 66, 66, 7C, 66, 66, 00, so erhalte ich ein „A“, das mehr oder weniger kursiv geschrieben wurde, d.h. in Italic erscheint.

Bei allen anderen OUTOUT-Schriftarten funktioniert das ähnlich: bei INVERS werden die Matrizen negiert, bei TURN an der Mittelachse (Byte 4/5) gespiegelt:

0123456701234567
XX!->
XXXX! -->XXXX
XXXX! --->XXXXXX
XXXX! ---->XXXXXX
XXXXXX- ! ! ! !XXXX
XXXX- - ! ! !XXXX
XXXX- - - ! !XX
XX- - - - !
0123456701234567

Komplizierter sind hingegen die übrigen Funktionen, da sie gedanklich etwas abstrakt sind und ausreichende Kentnisse der Maschinensprache verlangen. Deshalb verzichte ich hier auf eine genauere Darstellung dieser Funktionen.

LISTE DER OUTPUT-Befehle:

|CHAR.RESET löscht alle Schriftarten, Rückkehr zur Standardschrift !ITALIC kursive Schrift (Italic)
|BOLD Fett-Schrift
|ELITE Dünnschrift (Elite)
|UNDERLINE unterstrichene Zeichen
|TURN auf den Kopf gestellte gespiegelte Zeichen
|INVERS invertierte Zeichen
|INDEX,flag Indeschreibweise,
Flag 1=subscript
Flag 0=superscript
|COMPRESS,flag komprimierte Zeichendarstellung (160 Zeichen/Zeile),
Flag 1=links
Flag 2=rechts
|CHAR,cString, Zeichendarstellung in beliebiger
xv,yv Größe (siehe unten)

Alle Schriftarten verändern die Matrix an sich nicht (was auch schwierig ist, solange sie im ROM liegt!), sondern kopieren sich die jeweilige Matrix in einen eigenen Bearbeitungsbuffer.

Wichtig: Alle Schriftarten sind frei kombinierbar!,

d.h., man kann z.B. auch Zeichen Italic, unterstrichen und invertiert darstellen.

Nicht ganz in diese Liste paßt der Befehl !CHAR. Er ist ein eigentlich völlig eigenständiger Befehl, den ich nur in dieses Paket nahm, weil's vom Thema paßte. Das vollständige Befehlsformat lautet !CHAR,cString, x-Verzerrung,y-Verzerrung.

Die Zeichenkette String wird dann an der aktuellen Grafikposition mit der aktuellen Grafikfarbe in angegebener Verzerrung geplottet, wobei die aktuelle Position die obere linke Ecke angibt.

Zur Verzerrung: Definitionsgemäß nahm ich an, daß im Mode 2 alle Zeichen mit der Verzerrung (1,1) geschrieben werden. Gibt man also bei CHAR diese Verzerrungen an, werden die Zeichen in normaler Mode-2-Größe geschrieben. Hierbei ist es unwichtig, in welchem Mode der Rechner sich gerade befindet.

Man kann also auch im Mode 1 Mode-2-Zeichen ausgeben, doch leidet die Lesbarkeit darunter. Im Mode 1 hingegen gilt dann die Standardverzerrung (2,1), im Mode 0 (4,1). Zeichnet man also im Mode 2 Zeichen mit der Verzerrung ( 8,4), so erhält man Buchstaben, die 8mal so breit und 4mal so hoch sind wie normale Mode-2-Zeichen. Die Verzerrungen sollten nicht größer als (15,15) sein, da ansonsten unschöne Effekte auftreten könnten.

Um diese doch etwas abstrakte Beschreibung zu veranschaulichen, hegt Ihnen das Programm “OUTPUT. DEMO“ vor, welches einige der beschriebenen Befehle anschaulich vorfuhrt.

(Michael Folz) , SA

★ PUBLISHER: Schneider Aktiv
★ YEAR: 1987
★ CONFIG: AMSDOS + 64K
★ LiCENCE: LISTING
★ COLLECTION: SCHNEIDER AKTIV SPECIAL 1987
★ LANGUAGE:
★ AUTHOR: Michael Folz
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» RSX-Output    (Schneider  Aktiv  Special)    LISTING    GERMANDATE: 2022-08-10
DL: 116
TYPE: PDF
SiZE: 1812Ko
NOTE: Supplied by www.acpc.me ; 3 pages/PDFlib v1.6

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

Lien(s):
» Applications » RSX Mixmode (Happy Computer)
» Applications » Komfortable INPUT-Routine
» Applications » 16 RSX Befehle by Alexander Bloss (Compute Mit)
» Applications » RSX Cross-Reference (Happy Computer)
» Applications » RSX Sprite (Happy Computer)
» Applications » RSX Scroll
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» 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 259 millisecondes et consultée 405 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.