Wer die grafischen Fähigkeiten des Joyce nutzen wollte, suchte bislang vergebens nach der Dokumentation und Anleitung für die mitgelieferte Grafikschnittstelle GSX.
Das hier vorgestellte Programm in Turbo-Pascal setzt diesem Mangel ein Ende.
Tragender Gedanke bei der Entwicklung von CP/M war es, ein geräteunabhängiges Betriebssystem zu schaffen, das Kompatibilität von Anwenderprogrammen systemübergreifend gewährleistet.
Eines konnte CP/M allerdings nicht: Grafik unterstützen.
So entwickelte Digital Research GSX, eine CP/M-Erweiterung, um auch Grafik systemunabhängig unterstützen zu können.
Philosophie von GSX ist es, Grafiken unabhängig von den Eigenschaften des gewählten Ausgabegerätes, wie Bildschirm, Drucker oder Plotter zu erstellen.
So muß man sich nicht um die Auflösung oder andere Parameter des jeweiligen Ausgabegerätes kümmern, sondern teilt dem Computer einfach mit, auf welche Ausgabeeinheit die Grafik ausgegeben werden soll, den Rest besorgt GSX.
GSX arbeitet deshalb mit einem relativen Koordinatensystem.
Mit Werten von 0 bis 32767 für die X-, wie auch Y-Achse.
Der Ursprung liegt mit 0,0 in der linken unteren Ecke des Bildschirms.
Diese relativen Koordinaten werden von GSX in gerätespezifische Koordinaten umgesetzt, für Joyce: Bildschirm 720 x 256, Drucker 480 x 672 (geringe Auflösung) sowie 960 x 1368 (hohe Auflösung), Plotter HP 7470A (spezifisch).
Die für GSX benötigten Geräteinformationen befinden sich in den Gerätetreiberdateien.
Diese sind in der Datei „ASSIGN .SYS" mit einer zugewiesenen Benutzernummer aufzuzählen (
Bild 1).
22 @:DDFXHR8
21 @:DDFXLR8
01 @:DDSCREEN
Für den CPC 6128 muß Assign.sys geändert werden. z.B.:
21 @:DDFXLR7
01 @:DDMODE2
Bild 1. ASSIGN.SYS
|
Um nun in den Genuß der Fähigkeiten von GSX-Grafiken zu kommen, bindet man das Listing (
Bild 2) als Include-Datei in eigene Programme ein.
Dann braucht man ein .COM File des Programmes.
Dies erreicht man durch die Compiler-Option COM.
Wichtiger Hinweis: Hier sollte die Endadresse auf $B600 festgelegt werden, um Platz für Gerätetreiber zu reservieren, da es ansonsten beim Einbinden von GSX unweigerlich die Fehlermeldung „Not enough memory for GSX" geben würde.
Schließlich muß man dem compilierten Programm noch GSX einbinden;
dies wird mit Hilfe von GENGRAF.COM vollzogen, indem man GENGRAF <Name des .COM Files> aufruft.
GSX ist danach in dieses .COM File für immer eingebunden.
GSX besitzt einen Parameterblock, in dem Steuercodes übergeben und dann von GSX interpretiert werden (z.B. Linie, Koordinatenpaare, usw.).
Die GSX-Routine wird mit dem BDOS-Aufruf 115 aktiviert, zugleich muß im DE-Register diejenige Adresse stehen, bei der der Parameterblock beginnt.
Erweiterte Grafikprozeduren
GRAFIC_ON (<Device>) | Mit diesem Befehl wird der Grafik-Modus eingeschaltet und das Ausgabegerät festgelegt. |
<Device>: | <Monitor> Bildschirm als Ausgabegerät
<Printer_LR> Drucker mit geringer Auflösung
<Printer_HR> Drucker mit hoher Auflösung
<Plotter> Plotter HP7470A |
GRAFIC_OFF: | Schaltet den Grafik-Modus ab. Sofern das Ausgabegerät ein Drucker ist, wird ein Ausdruck der Grafik erstellt. |
CLR_GRAFIC: | Löscht den Grafik-Bildschirm |
PLOT (<X>,<Y>): | Setzt einen Punkt |
<X>: | <0...32767> |
<Y>: | <0...32767> |
Line(X1,Y1,X2,Y2): | Zieht eine Linie von (X1, Y1) nach (X2, Y2) |
<X1,Y1,X2,Y2>: | <0...32767> |
BOX(X1,Y1,X2,Y2): | Zeichnet Rechteck mit linker unterer Ecke X1,Y1 und rechter oberer Ecke X2,Y2 |
<X1,Y1,X2,Y2>: | <0...32767> |
PRINT(X,Y,<TEXT>): | Schreibt Text an Stelle (X,Y) |
<X,Y>: | <0...32767> |
<Text>: | String mit max. Länge 10 |
COLOR (<Nummer>): | Farbe der Punkte, Linien, Boxen |
<Nummer>: | <0> Weiß |
<Nummer>: | <1> Schwarz |
LINE_TYPE (<Nummer>): | legt den Linientyp fest (s: JOYCE CP/M Benutzerhandbuch) |
SET_CHARHEIGHT (<Nummer>): | Gilt nur für Drucker/Plotter. Legt Schriftgröße fest. |
<Nummer>: | <1...12> klein...groß |
DIRECTION (<Nummer>): | Gilt nur für Drucker/Plotter. Legt Druckrichtung vom Text, entgegen dem Uhrzeigersinn, fest. |
<Nummer>: | <0...3> |
FILL_TYPE (<Sort>, <Option>): | Gilt nur für Drucker/Plotter. Legt inneres Muster der BOX fest |
<Sort>: | <0> weiß |
<Sort>: | <1> schwarz |
<Sort>: | <2> getönt <Option = 1...6> (s. JOYCE CP/M-Benutzerhandbuch) |
<Sort>: | <3> schraffiert <Option = 1...6> (s. JOYCE CP/M-Benutzerhandbuch) |
|
Unter Turbo-Pascal wurde dieser Parameterblock durch Arrays realisiert, was den Vorteil eines leichten Zugriffes mit sich bringt.
Auf die Steuercodes kann an dieser Stelle nicht eingegangen werden, da sie den Rahmen des Artikels überschreiten würden (s. Literaturhinweis).