JK's Gra-Ext Grafik-Erweiterung für BASIC
GRA-EXT 1.27 Fill-Routinen-Demonstration
Beispiel

Geschichtliches

Das Projekt hat seinen Ursprung im Jahr 1984, als die Enttäuschung breit machte, speziell wegen der bei etablierten BASIC-Erweiterungen zum Teil recht sehr gemächlichen Arbeitsweise der Grafikroutinen. Schon alleine das Zeichnen einer Linie, war enorm aufwendig und die Implementierungen waren weit davon entfernt, moderne Algorithmen, wie Bresenhams Line-Algorithmus, zu verwenden, geschweige denn effizient umzusetzen. Ein Listing, namens Spiralizer im Compute! Magazine (USA), brachte zwar Assembler-Routinen mit, die das Linienzeichnen übernahmen, allerdings implementiert mit aufwändiger Multiplikations- und Divisionsarithmetik.
Später kamen auch die Commodore Modelle C16 und Plus/4 auf den Markt, wo das BASIC 3.5 etlichen grafische Befehle integriert hatte. Auch hier folgte nach Analyse der Routinen eine Ernüchterung ob der miserablen Implementierung.

Der zu dieser Zeit bevorzugte Programmiersprache Forth zusammen mit aufkommenden Publikation zur effizienten Implementierung grafischer Routinen (etwa für Apple II) bei Zeitschriften und in Grafik-Büchern, waren der Auslöser, das wirklich effizient umzusetzen. Erst experimentell in Forth programmiert, dann mit dem Forth-Assembler auch in Maschinensprache implementiert, waren die ersten Grafikroutinen für Punktsetzen, Pixel abfragen und Linienzeichnen (mit Speziallfällen für vertikale und horizontale Linien) geschaffen. Dieser waren nicht nur unter Forth schnell (Programm laufen etwas 10x so schnell wie entsprechende BASIC-Varianten), sondern generell deutlich flotter.

Die kompakte und überschaubare Grafikroutinen waren aber mit Forth ziemlich isoliert in der Verwendung. Bei der IFABO '85 hatte eine Demo bei manchen doch Aufmerksamkeit erregt (ohne offiziellen Charakter). Um eine breitere Nutzung zu erlauben, mussten die Routinen als BASIC-Erweiterung realisiert werden. Der Maschinencode der bestehenden Routinen (ursprünglich aus Forth-Assembler-Source) wurde 1986 adaptiert und mit entsprechendem Glue-Code für die Integration in den BASIC-Interpreter des C64 ausgestattet (mit Hilfe eines Monitors).
Der erste praktische Einsatz waren diverse Programme für die Visualisierung von statistischen Daten für die Maturazeitung.
Zu dieser Zeit war die Erweiterung bei Version 1.17 angelangt und erfuhr dann einige Jahre später noch eine Schönheitskorrektur (Befehlssyntax) als Version 1.18, die auch in kleinem Kreis verbreitet wurde.

Eine Neuaufnahme des Projekt war dann im Zuge des LTC64 Beschleunigungboards, um dort von Haus aus eine Grafikerweiterung mitzubringen, die bereits im ROM/EEPROM vorliegen sollte. Etwaige Hardware-Spezialitäten sollen berücksichtigt werden, u.a. damit auch die Routinen möglichst mit der vollen CPU-Frequenz (4 MHz) arbeiten.
Interessant wäre zwar auch eine echte 16-Bit-Implementierung der Routinen für den Native-Mode der 65C816-CPU, was aber einen massiven Aufwand und faktisch komplettes Neuschreiben der Routinen bedeuten würde und deren Umsetzung noch ein weiterer Ferne liegt.
Der Source-Code wurde nun für den ACME-Makroassembler ataptiert und auf dieser Basis weiterentwicklt:

Pläne

Beispiel

Listing:
5 rem fill-test
6 rem 2016-08-12 johann # klasek at
9 i=rnd(-ti) : rem zufallszahlen initialisieren
10 &g 1,13,0 : rem hellgruen auf schwarz
20 for i=1 to 70 : rem 70 rechtecke
30 x=rnd(1)*270+10 : rem rechteckstartpunkt
35 y=rnd(1)*160+10 : rem links oben
40 gosub 100 : rem rechteck zeichnen
50 next
80 &f 0,0 : rem ausserhalb der rechtecke fuellen
90 goto 10 : rem endlos ...
99 rem rechteck zeichnen
100 &h x,y,30,20
101 &s 0
102 &h x+1,y+1,28,18
103 &s 1
104 return
Beispiel für Ausgaben als GIF-Animation:

Referenzen

  1. C64-Wiki.de: PAINT (Simons' BASIC)

 


Best viewed with any browser zurück zur Startseite