JK's Gra-Ext Grafik-Erweiterung für BASIC |
2020-05-03 Version 1.32: Fill-Befehl (&F) korrigiert und Stack-Verbrauch platzoptimiert.
Das Projekt hat seinen Ursprung im Jahr 1984, als sich die Enttäuschung wegen der bei den etablierten BASIC-Erweiterungen zum Teil recht sehr gemächlichen Arbeitsweise der Grafikroutinen breit machte.
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 hinsichtlich der bescheidenen, eigentlich miserablen Implementierung.
Die zu dieser Zeit von mir bevorzugte Programmiersprache Forth zusammen mit aufkommenden Publikation zur effizienten Implementierung grafischer Routinen (etwa für Apple II) in 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 mit Hilfe eines Monitors adaptiert (Relokation in einen neuen Adressbereich und andere Zeropage-Verwendung) und mit entsprechendem Glue-Code für die Integration in den BASIC-Interpreter des C64 ausgestattet.
Der erste praktische Einsatz waren diverse Programme für die Visualisierung von statistischen Daten für die Maturazeitung (1986).
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:
Aktuelle Version: 1.32
LOAD "DEMO1",8 RUNLädt die Erweiterng (Datei "GE") und startet diese mit SYS49152 automatisch!
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 returnBeispiel für Ausgaben als GIF-Animation:
![]() |
zurück zur Startseite |