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: | ||