Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
z9001:grafik [2010/07/17 16:48] – Externe Bearbeitung 127.0.0.1 | z9001:grafik [2024/10/23 07:27] (aktuell) – [Grafikzusatz] volkerp | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== | + | ====== |
- | | {{../vplogo.gif?120x99}} ||| | | + | Der Z9001 ist im Standard-Zustand nicht vollgrafikfähig, |
+ | |||
+ | {{uhr_4tel_grafik.jpg?100 }} Solche Treiber gibt es | ||
+ | * von Robotron für [[z9001: | ||
+ | * für den Grafikzusatz http:// | ||
+ | * von mir einen **Viertel-Grafik**-Treiber für den unverbauten KC87 mit einer Auflösung von 80x48 Pixeln (, im Bild eine Analog-Uhr mit diesem Treiber). | ||
+ | * und einen Treiber für die [[z9001: | ||
+ | |||
+ | Der Grafiktreiber wird im OS zuerst geladen (GRAF, GRAF14, ...), dann BASIC gestartet. Bei Memory end ist 32700 (oder kleiner) anzugeben. Dann kann man die Grafik-Programme laden und starten. | ||
+ | |||
+ | Wird die Mega-Flash-Software genutzt, ist das analog, erst GRAF14 im OS laden, dann gleich das BASIC-Programm UHR14 laden. Die Mega-Flash-Software startet das Basic mit passendem memory end, lädt das Basic-Programm und startet es. | ||
+ | ===== Der Grafik-Zusatz von robotron ===== | ||
+ | |||
+ | Hinweis: der Nachbau dieser Vollgrafik ist nicht mehr empfehlenswert. Einfacher und vielseitiger ist die neu entwickelte [[z9001: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{z9001_vollgrafik_robotron.jpg? | ||
+ | |||
+ | Im aktuellen JKCEMU von J. Müller (ab Version 0.6) http:// | ||
+ | |||
+ | {{grafik_test.gif}} {{grafik_sinus.gif}}\\ Beispiel-Grafiken mit R+GRDEM2, meiner Adaption des Plotter-Demo-Programms. (Ein originales Testprogramm GRDEMO.SSS ist erst 2011 aufgetaucht) | ||
+ | |||
+ | Der Grafikzusatz enthält einen externen Pixelspeicher von 6144 Byte (0..17FFh) (= 256x192 Pixel / 8 Pixel/Byte ). | ||
+ | |||
+ | < | ||
+ | Spalte | ||
+ | Zeile ------------------------------------------------------ | ||
+ | 0 | 0000 0001 0002 | ||
+ | 1 | 0020 0021 0022 | ||
+ | | .. | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | 191 | 17E0 17E1 17E2 | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Dieser Speicher ist nicht direkt ansprechbar; | ||
+ | |||
+ | < | ||
+ | port 0B8h ; Farbe + Grafik ein/aus | ||
+ | ; 7 6 5 4 3 2 1 0 | ||
+ | ; | +-+-+ | +-+-+ | ||
+ | ; | | ||
+ | ; | | ||
+ | ; | | ||
+ | ; | INK (BGR) | ||
+ | ; RAND | ||
+ | port 0B9h ; Adresse für internen Speicher | ||
+ | ; die unteren Adressleitungen werden mit OUT (C) | ||
+ | ; direkt ausgegeben, die oberen Adressdaten liegen | ||
+ | ; über Register B auf dem Adressbus | ||
+ | port 0BAh ; Daten | ||
+ | </ | ||
+ | |||
+ | Der Zugriff nutzt dabei die Eigenheit des Z80 aus, bei IN/ | ||
+ | |||
+ | < | ||
+ | write: | ||
+ | ld a, c ; untere 8 Bit der Adresse | ||
+ | ld c, port_0BAh | ||
+ | out | ||
+ | ; liegt A, wird ignoriert | ||
+ | ld a, (curbyte) | ||
+ | ; in C steht der Port 0BAh | ||
+ | out (c), a ; out data and high address | ||
+ | ; jetzt steht B auf dem High-Teil des Adressbusses, | ||
+ | ; auf den Low-Adressen liegt der Port (wird ignoriert) | ||
+ | ; und auf dem Datenbus liegt A | ||
+ | </ | ||
+ | |||
+ | ===== Der Plotter ===== | ||
+ | |||
+ | {{a_XY4131b.jpg?100 }} Der Treiber unterstützt auch die alternative Grafikausgabe auf einen angeschlossenen Kleinplotter, | ||
+ | |||
+ | |||
+ | <WRAP clear></ | ||
+ | |||
+ | ===== Nutzung mit BASIC ===== | ||
+ | |||
+ | Man benötigt: 2 RAM-Module, das Plotter-BASIC bzw. BASIC 86 (also einen KC87.2x oder das Plottergrafikmodul) und den Gerätetreiber. Zuerst muss der Gerätetreiber GRAF.COM geladen werden. Beim Start von BASIC ist memory end? **32700** (oder kleiner) anzugeben. | ||
+ | |||
+ | Folgende Grafikbefehle gibt es im BASIC:\\ PSET, LINE, CIRCLE, PAINT, LABEL, SIZE, ZERO, HOME, GCLS, SCALE, SCREEN, POINT, XPOS, YPOS. | ||
+ | |||
+ | Im Erweiterung zur Plotter-Anleitung können auch XPOS, YPOS und (wenig sinnvoll) PAINT und POINT genutzt werden: | ||
+ | |||
+ | * **XPOS** liefert als Rückgabeparameter die x-Koordinate des letzten erreichten Punktes, | ||
+ | * **YPOS** die entsprechende y-Koordinate. | ||
+ | * **POINT(x, | ||
+ | * **PAINT (x, | ||
+ | * **LINE** akzeptiert neben dem Parameter B auch den Parameter BF (box filled). Das ist jedoch nicht implementiert. | ||
+ | |||
+ | Für die gemeinsame Programmierung von Vollgrafik und Plotter ist der **unterschiedlich große Zeichenbereich** zu beachten: | ||
+ | * Plotter: 2550x1800, | ||
+ | * Vollgrafik: 256x192. | ||
+ | Zur Initialisierung beider Geräte dient der Befehl **SCREEN**: | ||
+ | * SCREEN 0,0 - Standardbildschirm, | ||
+ | * SCREEN 0,1 - Plotter (am E/A-Port) aktivieren, | ||
+ | * SCREEN 1 - Vollgrafik. | ||
+ | Ein gleichzeitiger paralleler Betrieb von Vollgrafik und Plotter funktioniert nicht; es kann aber wechselweise auf beide Geräte (mit entsprechender Skalierung) derselbe Zeichenvorgang wiederholt werden. | ||
+ | |||
+ | Die BASIC-Befehle sind bezogen auf die Vollgrafik in z9_gbas.pdf ({{http:// | ||
+ | |||
+ | Mai 2009: Vermutlich stand das MSX-BASIC Vorlage für die Grafikbefehle. Auch die Auflösung von 256x192 Pixeln entspricht dem MSX-1-Standard. Die Befehle sind offenbar genauso wie im MSX-Standard definiert. (Quelle: MSX2 TECHNICAL HANDBOOK). In der Ergänzung zur Bedienungsanleitung des KC87.2x {{: | ||
+ | |||
+ | * **PSET %%{(%%X,Y) | STEP(X, | ||
+ | * **CIRCLE %%{(%%X,Y) | STEP(X, | ||
+ | * **LINE %%[{(%%X1, | ||
+ | * **PAINT %%{(%%X,Y) | STEP(X, | ||
+ | * **SCREEN <screen mode> | ||
+ | * **function POINT (X,Y)** Returns the colour of the dot specified by coordinate (X,Y). | ||
+ | * **LABEL, SIZE, ZERO, HOME, GCLS, SCALE und die Funktionen XPOS und YPOS** gibt es in MSX nicht | ||
+ | |||
+ | Randbemerkung: | ||
+ | |||
+ | {{gr3dfkt.gif}} {{n-eck.gif}}\\ 3D-Grafik (nach W.Hinze, Mikrocomputer, | ||
+ | |||
+ | {{globus87.gif}} {{uhr.gif}}\\ Globus (nach H.Völz); Uhr (V.Pohlers) | ||
+ | |||
+ | ===== Treiber-Interna ===== | ||
+ | |||
+ | Von Robotron gibt es zwei [[grafik|Treiber]] als Erweiterung zum BASIC86: Den Treiber GRPLOT.COM von der Kassette R0114 (Plotter-Kassette) und den Treiber GRAF.COM zum Grafik-Zusatz. Der Treiber GRAF.COM umfasst phys. Treiber sowohl für die Plotter XY4131 als auch für die Vollgrafik. Für die Textausgabe enthält der Vollgrafik-Treiber einen 6x8-Pixel-Zeichensatz (der gleiche wie bei den Druckertreibern). Der Treiber GRAF.COM ist somit universell nutzbar; belegt aber auch mehr Arbeitsspeicher. | ||
+ | |||
+ | Vor Arbeit mit BASIC muss man den Grafik-Treiber GRAF.COM laden. Anschließend das Plotter-BASIC zu starten (BASIC-86). Bei Memory end ist 32700 (oder kleiner) anzugeben.\\ \\ Die Basicbefehle zur Grafik-Erweiterung springen auf eine Befehlsliste außerhalb des BASIC-Bereiches: | ||
+ | |||
+ | prinzipieller Aufbau des Treibers GRAF.COM: | ||
+ | |||
+ | | Sprungverteiler physische Treiber | | ||
+ | | Treiber für Plotter, im Anschluss Zeichentabelle | | ||
+ | | Treiber für Vollgrafik BASIC-Erweiterung (logischer Treiber) | | ||
+ | | Zeichensatztabelle f. Treiber für Vollgrafik | | ||
+ | | Sprungverteiler BASIC-Erweiterung (Adresse 0A7D6h) | | ||
+ | |||
+ | Folgende Grafikbefehle gibt es im BASIC: PSET, LINE, CIRCLE, PAINT, LABEL, SIZE, ZERO, HOME, GCLS, SCALE, SCREEN, POINT, XPOS, YPOS. Alle diese Befehle werden vom logischen Treiber vollständig verarbeitet und führen deswegen nicht zu BASIC-Fehlern. Der BASIC-Treiber übernimmt die Analyse der Befehlszeile und die Skalierung der Koordinaten. Dann wird der Sprungverteiler für die physischen Treiber aufgerufen. | ||
+ | |||
+ | ^GRPLOT.BIN\\ Adr. 9800-A7FF ^ BASIC-Befehl ^ phys. Treiber Nr. ^ Bemerkung| | ||
+ | |0A7D6h|pset|1| | | ||
+ | |0A7D9h|line|2|LINE kennt den BOXED-Mode BF, dieser ist aber nicht implementiert| | ||
+ | |0A7DCh|circle|3| | | ||
+ | |0A7DFh|paint|4|PAINT (x, | ||
+ | |0A7E2h|label|5| | | ||
+ | |0A7E5h|size|6| | | ||
+ | |0A7E8h|zero|7| | | ||
+ | |0A7EBh|home|8| | | ||
+ | |0A7EEh|gcls|9| | | ||
+ | |0A7F1h|scale|-|ist komplett im log. BASIC-Treiber implementiert, | ||
+ | |0A7F4h|screen|-|ist komplett im log. BASIC-Treiber implementiert, | ||
+ | |0A7F7h|point|10|POINT liefert für Plotter immer 0| | ||
+ | |0A7FAh|xpos|11| | | ||
+ | |0A7FDh|ypos|12| | | ||
+ | |||
+ | Den reassemblierten und kommentieren Quellcode des Treibers GRAF.COM gibt es im Treiberpaket {{grafik.zip}}. | ||
+ | |||
+ | ===== Treiber für Pseudo-Grafik ===== | ||
+ | |||
+ | Im Zeichensatz des Z9001 befinden sich spezielle Grafikzeichen, | ||
+ | |||
+ | {{grafik11_uhr.gif}} {{graftest2.gif}}\\ Grafik-Treiber GRAF11 für Testauflösung 40x24 " | ||
+ | |||
+ | {{4tel_grafik_test1.gif}} {{globus14.gif}}\\ Grafik-Treiber GRAF14 für Auflösung 80x48 " | ||
+ | |||
+ | ===== Grafik ala Kleinstrechnertipps 11 ===== | ||
+ | |||
+ | Der Nachbau des robotron-Grafik-Zusatzes ist recht aufwändig. Günstiger erscheint mir eine Idee aus den Kleinstrechnertipps Nr. 11, die dort für den Z1013 vorgestellt wurde und mit nur 4 Schaltkreisen auskommt: | ||
+ | |||
+ | Der Bildwiederholspeicher der internen Grafik wird 8fach parallel ausgeführt, | ||
+ | |||
+ | Details s. [[z9001: | ||