english-banner English version of this page
 
deutsche Flagge
Portait-Photo
über mich

Startseite
Links/BookmarksLinks
Programmieren
   - CodeOptimierung
   - CodeConventionen
   - GFA-Basic

Atari
Hardware-
Basteleien

Witze
Zitate
Sprüche
Braille
Kunst
Buch-Tip
E-Mail an Folke_R@gmx.de
historisches
Impressum

GFA-Basic

Übersicht:


GFA-Basic und ich [^]

Eine der ersten Programmiersprachen, die ich gelernt habe, war GFA-Basic.

Das war noch zu meiner Schulzeit und ist schon lange her. Ich selber programmiere schon lange nicht mehr in GFA-Basic. Da es da draußen noch GFA-Basic-Programmierer/-Interessierte gibt, stelle ich hier einige meiner alten Quellcodes zur freien Verfügung.

Die Quellcode sind oft nicht besonders vorbildlich und würden sicherlich heute von mir so nicht mehr geschrieben werden. Damals aber wußte ich es nicht besser oder hatte irgendwelche Gründe so vorzugehen.

Ich hoffe, daß mein Quellcodes für irgendjemanden von Nutzen sind.



Erzeugung der HTML-Seiten Listings [^]

Für die Veröffentlichung im WWW habe ich ein einfaches Java-Programm geschrieben, welches GFA-Basic-Listings zu farbigen HTML-Seite umwandelt. Das Programm ist bei weitem nicht komplett. Näheres zu Schwächen und Verbesserungsideen, siehe im Java-Quellcode.



GFA-Basic-Optimierungen [^]

Wenn du schon mal ein GFA-BASIC Programm geschrieben hast, dann ist es dir, wie jedem Programmierer, bestimmt schon passiert, daß dein Programm nicht mit der gewünschten Geschwindigkeit abläuft.

Mir ist das selbe auch immer wieder passiert (vor allem, weil der ATARI-ST ja eh nicht der schnellste ist). Als ich die erste lauffähige Version eines GIF-Kompressors/Dekompressors vollendet hatte, fing ich an systematisch nach Optimierungen zu suchen. Bei meiner Suche stieß ich auf einen Artikel der Computerzeitschrift c't über Optimierungen beim schreiben von GFA-BASIC 2.0 Programmen.

Ich habe die dort angegebenen Hinweise getestet und die Hinweise über die Speicherersparnis und den Vorteil globaler Variablen übernommen. Bei den anderen Optimierungen handelt es sich um, durch Tests, festgestellte eigene Erfahrungen (siehe Test-Programm).

Meine Untersuchungen beziehen sich alle auf GFA-BASIC 3.0 (bei mir 3.07 D) und den entsprechenden Compiler.(bei mir 3.03 D)


Optimierungen:
auswirdBemerkungErgebnis
7-x7 XOR x für 0 <= x <= 7 ist das Ergebnis gleich (bei Ganzzahlvariablen) 16-18% schneller
15-x15 XOR x für 0 <= x <= 15 ist das Ergebnis gleich (bei Ganzzahlvariablen) 16-18% schneller
31-x31 XOR x für 0 <= x <= 31 ist das Ergebnis gleich (bei Ganzzahlvariablen) 16-18% schneller
entsprechend für 1, 3, 63, 127, 255, 511, 1023, 2047, ...
x MOD 8x AND 7 für 0 <= x ist das Ergebnis gleich (bei Ganzzahlvariablen) 85-87% schneller
x MOD 16x AND 15 für 0 <= x ist das Ergebnis gleich (bei Ganzzahlvariablen) 85-87% schneller
x MOD 32x AND 31 für 0 <= x ist das Ergebnis gleich (bei Ganzzahlvariablen) 85-88% schneller
entsprechend für 2, 4, 64, 128, 256, 512, 1024, 2048, ...
x DIV 8SHR(x,3) für 0 <= x ist das Ergebnis gleich (bei Ganzzahlvariablen) 19-21% schneller
x DIV 16SHR(x,4) für 0 <= x ist das Ergebnis gleich (bei Ganzzahlvariablen) 20-21% schneller
x DIV 32SHR(x,5) für 0 <= x ist das Ergebnis gleich (bei Ganzzahlvariablen) 18-20% schneller
entsprechend für 2, 4, 64, 128, 256, 512, 1024, 2048, ...
Beim Verwendung von globalen Variablen (auch wenn das kein besonders guter Programmierstil ist) sind Auslesen und Zuweisungen wesentlich schneller, als bei lokalen Variablen (globale variablen sind 45-54% schneller).
Schleifen sind Rekursionen vorzuziehen (wie in allen mir bekannten imperativen Programmiersprachen).

Die Beschleunigungswerte sind auf einem MEGA-ST2 im Compilat, mit dem weiter unten verlinkten Programm, ermittelt worden.


Weitere Optimierungen:

MEHR SPEICHER ZUR LAUFZEIT
Wenn Du während der Entwicklung deines Programms oft Variablen verwendet hast, die in der endgültigen Version nicht mehr vorkommen, dann solltest du wissen, das diese trotzdem zur Laufzeit des compilierten Programms auch weiterhin Arbeitsspeicher verbrauchen.
(obwohl sie nirgends im Programm auftauchen!!!)

Lösung:
Speichere dein Programm einmal mit Save,A als Listing ab und lade das Programm dann wieder mit Merge. Nun kannst du es wieder mit Save speichern (Programmlänge ist ca. wie vor der ganzen Aktion) Nun steht dir zur Laufzeit mehr Speicher zur Verfügung!
Hinweis: Inlines müssen mach dem Merge neu geladen werden!

Download des Testprogramms:
datei-Iconals LST PRG-Iconals PRG
Das Programm schreibt deine Testergebnisse in eine Datei namens "opti_erg.txt", die du mir, wenn deine Werte extrem abweichen sollten bitte mit Beschreibung deiner Hardware und die verwendete Compilerversion zusenden solltest.
Meine "opti_erg.txt" hier als Referenz.

Besuchen sie doch meine Seite zu Quellcode Optimierungs-Tips. Dort finden sie allgemeine Tips, die nicht speziell für GFA-Basic sind.

Solltest du weiter Optimierungen kennen, schicke sie mir!


Fehlende Dateien [^]

Einige der Listings benötigen zur Ausführung weitere Dateien. Diese werde ich aber hier nicht veröffentlichen, da sie nicht GFA-Basic-Quellcode sind und ich hier nicht Programme verbreiten will, sonder nur Beispiele für GFA-Basic Quellcodes andern Programmierern zur Verfügung stellen will.



Quellcode-Liste [^]

DateinameBeschreibung
TURING03.LST Einfache Simulation einer deterministischen Turingmaschine (DTM).
BRISK1_1.LST Brisk-Fruit ein Run&Jump-Spiel das ich 1991 fertiggestellt habe. Download des Spiels auf der Brisk-Fruit-Seite.
GIF3_076.LST GIF-Encoder/-Decoder. Einsatzfähig (siehe Quellcode-Kommentare).
OPTI.LST Testprogramm für meine Optimierungs-Tips.


Buchempfehlungen [^]

TitelBeschreibung
Das Große GFA-BASIC-Buch
Verlag: Data Becker
ISBN: 3-89011-363-X
Komplette Beschreibung aller GFA-Basic-Befehle mit vielen Beispielen. Perfekt als Nachschlagewerk.
ATARI Profibuch: ST-STE-TT
Verlag: Sybex
ISBN: 3-88745-888-5
Umfassende Beschreibung der Hardware und Systembibliotheken
ATARI ST: Tips und Tricks
Verlag: Data Becker
ISBN: 3-89011-118-1
Programmier- und Optimiertricks

zurück zur Programmier-Seite des Folkes
zurück zur Startseite des Folkes
Lage dieser Seite:"http://www.Rinneberg.de/programming/gfa.htm"
"http://www.Folke-Rinneberg.de/programming/gfa.htm"

Stand: 19.05.2008 (Inhaltlich: 19.05.2008)         Brief an Folke:(Folke_R@gmx.de)
Link zu dieser Seite:

Sie haben eine Internetseite und finden meine Seite gut? Dann wäre es nett, wenn Sie einen Link zu meiner hinzufügen.
(währe schön wenn der Linktext 'Folke' 'Rinneberg' und das Thema der Seite beinhalten würden. z.B. 'GFA-Basic-Seite von Folke Rinneberg')

Haben Sie eine Seite zum gleichen Thema? Schicken Sie mir eine E-Mail mit der URL (Betreff: 'HOMEPAGE: Link (hier Ihre URL einfügen)'). Vielleicht setze ich einen Link.

Benachrichtigung über Änderungen dieser Seite:

Wollen sie informiert werden, wenn sich der Inhalt dieser Seite ändert? Schicken Sie mir eine E-Mail mit dem Betreff: 'HOMEPAGE: informiere mich (www.rinneberg.de/programming/gfa.htm)'.
(Ihre E-Mail-Adresse wird nicht weitergegeben und ich versende auch keinerlei Werbung)


Ende des deutschsprachigen Abschnitts
german-line

 
english-line
Start of the English translated part
english banner
Portait-Photo
about myself

Home
Links/Bookmarkslinks
programming
   - CodeOptimisation
   - CodeConventions
   - GFA-basic

Atari
hardware-
modifications

jokes
quotations
patter
braille
art
book-tip
E-Mail an Folke_R@gmx.de
history
imprint

GFA-Basic

Content:


GFA-Basic and Me [^]

GFA-Basic was one of the first programming languages I learned.

I was still at school and that is long time ago. I myself did not program in GFA-Basic any more for quite a long time. Out there in the WWW there are still GFA-Basic programmers or interested people, therefore I put some of my old source codes on my web site.

The source codes are not of high quality and I would quite sure write them different today. When I wrote them I had few experiences with programming or I had other reasons for my programming style.

I hope my source codes are of interest for someone out there.



Generation of the Source Code HTML-Sites [^]

To publish the source code on the WWW I wrote a simple Java program to generate a syntax highlighted web site out of a GFA-Basic listing. This program is far away from being complete. More informations about weaknesses and improvement ideas for this program can be read in the Java source code.



GFA-Basic-Optimisations [^]

If you ever programmed a GFA-basic program, you surely had sometimes the problem that your program runs not fast enough.
I myself had several times this problem (especially because the Atari ST was never a very fast computer). When I wrote the first beta-version of my gif-compressor, I started to search for optimisation-possibilities. While searching I found an article in the German c't magazine about optimising GFA-basic 2.0 programs.
I used a 3.x version, so I tested which hints were still useful for GFA-basic 3.x . The hint how to save used RAM and the speed advantage of global variables in opposite to local one were still valid. The other optimisation hints were found by myself by comparing different implementations (see test-program for speed measurements of this different implementations). All my test refer to GFA-BASIC 3.0 (I use 3.07 D) and the corresponding compiler.(I used 3.03 D)

Optimisations:
oldnewremarkresult
7-x7 XOR x for 0 <= x <= 7 the result is the same (only for integer variables) 16-18% faster
15-x15 XOR x for 0 <= x <= 15 the result is the same (only for integer variables) 16-18% faster
31-x31 XOR x for 0 <= x <= 31 the result is the same (only for integer variables) 16-18% faster
also for 1, 3, 63, 127, 255, 511, 1023, 2047, ...
x MOD 8x AND 7 for 0 <= x the result is the same (only for integer variables) 85-87% faster
x MOD 16x AND 15 for 0 <= x the result is the same (only for integer variables) 85-87% faster
x MOD 32x AND 31 for 0 <= x the result is the same (only for integer variables) 85-88% faster
also for 2, 4, 64, 128, 256, 512, 1024, 2048, ...
x DIV 8SHR(x,3) for 0 <= x the result is the same (only for integer variables) 19-21% faster
x DIV 16SHR(x,4) for 0 <= x the result is the same (only for integer variables) 20-21% faster
x DIV 32SHR(x,5) for 0 <= x the result is the same (only for integer variables) 18-20% faster
also for 2, 4, 64, 128, 256, 512, 1024, 2048, ...
If you use global variables (even if his is bad programming style) the reading an writing get a lot faster than by using locale variables (global variables are 45-54% faster).
Using loops is 'better' than recursions (I think this is true in all imperative programming languages)
The speed improvement are measured with compiled code on a MEGA-ST2 using the program linked below.

Other optimisations:

MORE RAM WHILE THE PROGRAM RUNS
If you used variables while the development stages which no longer exist in the final version, you should know that this variables still consume RAM even in the compiled version of your program (seams to be a bug of GFA-basic).

Solution:
Save your final program with the menu Save,As as a listing and load the program again after restarting the GFA-basic editor with Merge. This way all variables no longer existing in your program are totally removed. Now you can again save the program by using Save.
Remark: If you use inlines the content of these got lost while using Save,As. Therefore inlines must be reloaded after the hole procedure.

Download of the speed-test-program I used:
file-Iconas LST PRG-Iconas PRG
The program writes its output in the file "opti_erg.txt". If your values differ a lot from mine, send me your file by e-mail together with a description of your system (computer type (hardware), compiler version).
My "opti_erg.txt" can be downloaded for comparing here.

Visit my page Source Code Optimisation Tips were you find more tips, which are not specially for GFA-Basic.

If you know about other optimisations, write me an e-mail.


Missing Files [^]

Some of the source codes need extra files to be executed. This extra files are not published on this web site because I did not want to publish applications on this site. Only examples for GFA-Basic source codes as examples for other programmers.



List Of Source Codes [^]

File nameDescription
TURING03.LST A simple simulator of a deterministic Turing machine (DTM).
BRISK1_1.LST Brisk-Fruit A Run&Jump-game which I completed in the year 1991. You can download the game on my Brisk-Fruit web site.
GIF3_076.LST GIF-encoder/-decoder. ready to use (see comments in the source code).
OPTI.LST The test program I used for my optimisations tips.


Book Tips [^]

I have no tips for books written in English. The following list contains only books written in German.

TitleDescription
Das Große GFA-BASIC-Buch
Verlag: Data Becker
ISBN: 3-89011-363-X
A complete description of all GFA-Basic commands with a lot of examples. A perfect reference book.
ATARI Profibuch: ST-STE-TT
Verlag: Sybex
ISBN: 3-88745-888-5
Complete description of the hardware of the ST/STE/TT and system library functions.
ATARI ST: Tips und Tricks
Verlag: Data Becker
ISBN: 3-89011-118-1
Programming and optimisation tips and tricks

back to Folke's programming page
back to Folke's homepage
Location of this page: "http://www.Rinneberg.de/programming/gfa.htm"
"http://www.Folke-Rinneberg.de/programming/gfa.htm"

last updated: 19.05.2008 (content: 19.05.2008)         e-mail to Folke:(Folke_R@gmx.de)
Link this web site:

You have your own web site and like mine? It would be nice to add a link to mine.
(would be nice, if the link-text would contain the words 'Folke' 'Rinneberg' and something about the content of the page. e.g. 'GFA-basic web site of Folke Rinneberg')

If you have similar content on your web page, write me an e-mail with the URL (subject: 'HOMEPAGE: link (insert your URL here)'). I possibly add a link to it on this site.

Be informed of content changes:

You want to be informed, if the content of this page has changed? Then write me an e-mail with the subject: 'HOMEPAGE: remind me (www.rinneberg.de/programming/gfa.htm)'
(Your e-mail address will not be given to anyone else than me and I will also not send any ads)

Help to improve this web page:

Because I am no native English speaker, it is likely that there can be made a lot of improvements to my translation. I am very interested in every proposal how to improve the English part of this web page.