Logo: Geos Online Print Archiv
G.O.P.A. - Geos Online Print Archiv
29.03.2024 Archiv  #  Recherche  #  Links  #  Kontakt  #  Gästebuch  #  Impressum

Index
Register
Login

Die Anzeige des Archivs erfolgt grafisch. Ändern

Kurs: Programmieren (Teil 1)

Autoren: H. J. Ciprina, R. Bonse

Endlich! Ein Assemblerkurs unter GEOS in der GUC!

 

Profi-Ecke Mit diesem Kurs wollen wir erreichen, daß der GEOS-Anwender seine Ideen in vernünftige GEOS-Programme umsetzen kann. Voraussetzung für diesen Kurs sind grundlegende Kenntnisse in Assembler, so daß nur noch in Ausnahmefällen spezielle Maschinensprachebefehle erklärt werden müssen. Sofern Sie noch keine Kenntnisse im Umgang mit Assemblern haben, können wir Ihnen aus dem Markt & Technik Verlag die Bücher

 

   (1) GEOS-Programmierung mit dem MegaAssembler
   (2) C64 Programmieren in Maschinensprache

empfehlen, wobei allerdings nur (1) speziell auf GEOS eingeht. Zudem ist (1) sowohl für den Neuling, den Fortgeschrittenen und den GEOS-Profi einsetztbar, da dieses auch die Assemblerprogrammierung und die Programmierung von GEOS-Programmen ausführlich erklärt. Weiterhin dient es als Nachschlagewerk, da alle GEOS-Routinen und Systemadressen darin beschrieben werden.

Als reines Nachschlagewerk kann auch
   (3) C64 GEOS1.3 deutsch
dienen, jedoch entsprechen die Routinennamen und Variablen nicht dem von Berkeley Softworks (BSW) gesetzten Standard.

Als Assembler für diesen Kurs werden wir ausschließlich den MegaAssembler benutzen, diesen erwerben Sie beim Kauf von (1) gleich mit. Sofern Sie den GeoProgrammer besitzen, können Sie diesen natürlich auch verwenden, jedoch müssen hier die Label etwas anders definiert werden. Mit großen Einschränkungen ist es auch möglich, mit dem Hypra-Ass aus (3) kleinere GEOS-Programme zu erstellen. Der Hypra-Ass läuft jedoch nur unter dem alten Betriebssystem, so daß zum Testen GEOS ständig neu gebootet werden muß!

Der GeoProgrammer hat den Nachteil, daß mit ihm nur Programmblöcke mit einer maximalen Länge von ca. 6 KByte erzeugt werden können. Zudem ist seine Handhabung sehr umständlich, jede mit dem Assembler erstellte Datei muß nochmals gelinkt werden, damit daraus ein fertiges Programm entsteht. Der GeoProgrammer hat aber den Vorteil, daß ihm ein Debugger beiliegt, mit dem man seine Programme schrittweise austesten kann. Die Debuggerdateien sind aber so umfangreich, daß man nur schwerlich mit nur einem Diskettenlaufwerk auskommen wird.

Der MegaAssembler kann theoretisch Programmblöcke von über 63 KByte erzeugen; für die Praxis bedeutet dies, daß der gesamte von GEOS zur Verfügung gestellte Bereich genutzt werden kann. Der MegaAssembler erstellt sofort lauffähige Programme, die vom MegaAssembler oder DeskTop aus direkt aufgerufen werden können. Den V-Link benötigen Sie nur, wenn Sie sogenannte Overlay-Programme (VLIR-Files) erstellen müssen, dazu in einem späteren Kursteil mehr.

Der MegaAssembler enthält keinen Debugger, jedoch wird es mit einem in der GUP vorgestellten Programm möglich sein, eine für den GeoDebugger des GeoProgrammers lesbare Datei zu erzeugen. Sofern ein Programm nicht läuft, gibt es auch andere Testmöglichkeiten, die wir Ihnen ebenfalls innerhalb dieses Kurses zeigen werden.

Jeder Kursteil wird nach Möglichkeit (Umfang) aus einem abgeschlossen Teilgebiet bestehen. Als Kursteile sind u.a. gedacht:

Programmierung von:
   Menüs
   Icons
   Dialogboxen
   DeskAccessories
   Druckausgabe
   VLIR-Programme
   VLIR-Dateien
   Unterverzeichnisse (bei Verwendung von TopDesk)
   Dateiformate

Daneben kommen einzelne andere Routinen zur Sprache, so daß Sie eigene GEOS-Programme schreiben können.

Sie sollten sich eine Arbeitsdiskette erstellen, die folgende Dateien bzw. Programme enthält:
   MegaAssembler
   GEOWRITE (beliebige Version)
   Druckertreiber (nicht unbedingt notwendig)
   TopSym (Symboltabelle)
   TopMac (Makros)
   CallMegaAss (DeskAccessory zum Starten des MegaAss aus einer Anwendung)
   DeskTop
   Konfigurieren (sofern benötigt, entfällt bei Verwendung von Top Desk)
   Commodore_GE (Font)
   V-Link (Linker für spätere VLIR-Programme)

Es empfiehlt sich von dieser Arbeitsdiskette mehrere Kopien zu erstellen.

Bevor wir mit der eigentlichen Programmierung beginnen, sollten wir kurz einmal darauf eingehen, warum GEOS so attraktiv ist. Aus Sicht eines Anwenders ist diese Frage leicht zu beantworten: Zum einen deckt die GEOS-Produktreihe eine Vielzahl von Anwendungen ab, die man für seine tägliche Arbeit benötigt, zum anderen sind sich alle Anwendungen von der Bedienung her ähnlich! Auf diese Ähnlichkeit sollten wir besonders bei unseren selbstentwickelten Programmen auch achten (vgl. entsprechende Artikel bzgt. einer GEOS-Norm in der GUP).

Der Großteil aller Anwendungen enthält z. B. ein Menü, in dem man sich fast immer ohne Anleitung zurechtfindet, da meist die ersten drei Menüpunkte gleiche Namen (geos, Datei, Edit) tragen und auch die Untermenüs alle ähnlich sind.
Unter dem Menüpunkt "geos" wird man in Anwendungen den Untermenüpunkt "Info" sowie einige auf der Diskette vorliegende DeskAccessories (Hilfsmittel) vorfinden. Entsprechendes gilt für die Menüpunkte "Datei" und "Edit". Ab dem vierten Obermenüpunkt stehen dann die für diese Applikation (Hauptprogramm) spezifischen Menüpunkte.

Wählt man einen Menüpunkt an, wird entweder ein Untermenü darstellt oder eine Aktion hervorgerufen. Was aber macht nun ein GEOS-Programm, wenn kein Menüpunkt angewählt wird? Nichts!! Besser gesagt wartet es darauf, daß der Anwender etwas macht, z.B. die Tastatur bedient, einen Menüpunkt anwählt, etc.

Diese Wartephilosophie sollten ebenfalls alle GEOS-Programme benutzen (Ausnahme: rechenintensive Programme wie z. B Assembler). Aus diesem Grund existiert im GEOS-Kernal die MainLoop. Im Normalfall sind alle Programme in die MainLoop (deutsch: Hauptschleife) eingebunden. Wird von DeskTop ein Programm gestartet, so sollte es so schnell wie möglich zur MainLoop zurückkehren und auf eine Anwenderaktion warten! In der MainLoop wird solange gewartet, bis der Anwender bspw. einen Menüpunkt anklickt. MainLoop ruft dann die zu diesem Menüpunkt entsprechende Routine direkt auf. Man braucht also keine Menüauswahlroutine zu schreiben, GEOS erledigt dies von alleine!
Bevor ein Programm zur MainLoop zurückkehrt, sollte es den Bildschirm löschen, Menüs und Icons installieren sowie soweit nötig sich selbst initialisieren.

Der erste Kursteil (in der folgenden GUP) wird Sie nun mit dem Starten eines Programms und dessen Rückkehr zur MainLoop vertraut machen.
Es hat sich bei unserer Programmierung als sinnvoll erwiesen, drei Tabulatormarkierungen auf die Positionen 2.3, 3 und 4.3 zu setzen. Falls Sie unter GEOS 128 arbeiten, lauten dann die Tabulatormarkierungen 2.5; 3.5; 5. Ebenso wählen wir aufgrund der besseren Lesbarkeit und des schnelleren Listingausdrucks meist die Schrift "Commodore_GE" an.

Im allgemeinen besteht ein Listing, wie wir es dann schreiben werden, aus:

  1. Label
  2. Assemblerbefehl oder Makro
  3. Kommentar

Label stehen immer am Anfang einer Zeile und beginnen in der Regel mit einem Doppelpunkt ':' (Ausnahmen vgl. Buch (1)). Label sind entweder

   - Sprungmarken, die mittels jmp, jsr bzw. Branchbefehlen angesprungen werden können. Der MegaAssembler weist diesen Labeln den korrekten Wert zu.
oder
   - Variable mit einer festen Wertzuweisung.

Label brauchen nicht gesetzt zu werden, sie können lokal, global oder extern definiert werden, näheres siehe Buch (1). "TopSym" sowie "MegaSym" sind komplette Dateien mit Label (Variablen mit festen Wertzuweisungen).

Durch ein Leerzeichen oder Tabulator (<ctrl> + <i>) vom Anfang einer Zeile bzw. Label getrennt, folgt dann die Assembleranweisung. Eine Assembleranweisung kann ein direkt in Maschinensprache zu übersetzender Befehl (z. B. lda) oder ein Makro sein. Ein Makro ist eine Folge eines oder mehrerer Assembleranweisungen, so können mit einer Anweisung gleich mehrere Befehle ausgeführt werden.

Beispielsweise benötigt man oft das Laden des Akkus mit einer Zahl und Abspeichern der Zahl in einer Adresse. Normalerweise müßte man dann jedesmal schreiben:
   lda #$20 ; Akku mit dem Wert 32 (=$20) laden
   sta $6000 ; speichern in die Adresse $6000

Diese Kombination (lda; sta) läßt sich durch ein in der "TopMac" bzw. "MegaMac" definiertes Makro ersetzen. Dieses Makro heißt "LoadB". Anstelle der oberen beiden Zeilen schreibt man nun einfach:

   LoadB $6000,$20 ; Adresse $6000 mit dem Wert $20 laden

Der MegaAssembler übersetzt dieses dann in die entsprechende lda-sta-Kombination. Die Verwendung von Makros machen den Quellcode einfacher lesbar und übersichtlicher.
Aus den obigen Beispielen können Sie auch die Verwendung von Kommentaren ersehen. Es empfiehlt sich zumindest an entscheidenden Stellen des Listings Kommentare einzufügen, damit man sich jederzeit in dem Listing zurechtfinden kann.
In der nächsten GUP geht es dann richtig los. Wir fangen an mit einem Listing zur Menü-Programmierung.

 

H. J. Ciprina / R. Bonse

 

 

 




Dieser Artikel ist Bestandteil von:

Ausgabe 15

! - - - - - M I C R O F I L M - - - - - ! | Editorial | Wie schreibe ich einen Textbeitrag für die GUP? | Der GUC auf der CeBIT! | Ein neuer Druckertreiber | Ein neuer Desktop | GEOS auf Eprom | Mitglieds-Beiträge | Clubtreffen | Tip zu GeoMerge | Laufwerke - Teil 2 | Kurs: Programmieren (Teil 1) | Druckertest | ReuPic | Fonts u. a. | Testberichte | GEOS in der DFÜ | Wettbewerb | LaserService: Geburtstagsfeier | RAM-Print | DTP 3 - Illustrationstechniken | Berichte aus den Regionalgruppen | Regionale Anfragen | Mitgliederlisten | Festplatte | Druckertreiber | PC GEOS | Die GeoThek, Info-Disk | Die GUC-Spezialisten


Kurs Programmieren

Kurs: Programmieren (Teil 1) | Kurs: Programmieren (Teil 2) | Kurs: Programmieren (Teil 3) | Kurs: Programmieren (Teil 4) | Kurs: Programmieren (Teil 5) | Kurs: Programmieren (Teil 6) | Kurs: Programmieren (Teil 7) | Kurs: Programmieren (Teil 8)


Kurzlink hierhin: http://geos-printarchiv.de/1109


Letzte Änderung am 01.11.2019