Grafik in Forth programmieren
Sehr schöne Sache: U-Held hat einen ersten Schritt zur Anbindung der G0-Grafiklib an PropForth erstellt. Unter Spin habe ich ja schon mit G0Test und TriBorg mit den Funktionen experimentiert. Die Funktionen in der Forth-G0-Lib sind noch nicht vollständig, aber die grundlegenden Wörter um den G0-Treiber komfortabel zu starten und zu initialisieren sind realisiert. Die anderen Funktionen sind mehr oder weniger Fleißarbeit. Die Programmierung ist auch recht einfach, wie wir gleich sehen werden. Wer also gern in Forth Programme oder Games mit Grafik schreiben möchte, erfährt mehr nach dem Knick…
Wie man erkennen kann, werden die Bibliotheken ari.lib, bel.lib und g0.lib benötigt. Das eigentliche Testprogramm befindet sich in der Datei tpix.f. Dort wieder ist der Test in dem Wort „tpix“ versteckt:
: tpix
g0:load setscreen g0:static
g0:clear 14 g0:width 1 g0:color
g0:xtiles 0 do i 16 * 8 +
g0:ytiles 0 do i 16 * 8 + over g0:plot loop drop
loop
key g0:clear
2000 0 do
rnd 31 and g0:width rnd 3 and g0:color
rnd rnd g0:plot
loop
key g0:reboot
cr ." erledigt" cr
;
Ok, was passiert hier also genau?:
g0:load - startet den G0-Grafikcode von SD-Card in Bellatrix
setscreen - setzt Farbpuffer und Tilescreen des G0-Treibers
g0:static - konfiguriert G0 in den statischen Modus mit einem Zeichenscreen
g0:clear - klar, löscht den konfigurierten Zeichenpuffer
14 g0:widt - "Stiftbreite" setzen
1 g0:color - "Stiftfarbe" setzen
So, jetzt geht es erst richtig los:
g0:xtiles 0 do i 16 * 8 +
g0:ytiles 0 do i 16 * 8 + over g0:plot loop drop
loop
Diese Sequenz zeichnet einen Raster von Punkten, wie auf dem Screenshot zu sehen ist.
Zu beachten ist dabei, dass die Plotfunktion nicht einen pixel setzt, sondern einen
runden oder eckigen Punkt unterschiedlicher Größe zeichnet - also mehr oder weniger
Kreise oder Rechtecke einstellbarer Größe. Weiter im Programmcode:
key g0:clear
- wartet auf eine Taste und löscht den Screen
2000 0 do
rnd 31 and g0:width rnd 3 and g0:color
rnd rnd g0:plot
loop
Hier werden Punkte mit zufälliger Farbe, Größe und Position gezeichnet.
