Erstellt: 31. Dezember 2016 (zuletzt geändert: 6. Januar 2018)

Programmierung

Programmierung

Amiga Programmierung

Willkommen, zur Amiga Programmierung für Anfänger und Einsteiger.
Wer kennt es nicht? Man zockt ein Spiel oder schaut sich eine Demo an und hat dabei plötzlich eine eigene Idee, die man gerne umsetzen möchte. Aber wie geht man dies an? Man kann natürlich zu Tools wie Game- oder Demo-Makern greifen, um sein Vorhaben zu ralisieren. Allerdings sind diese Programme doch sehr beschränkt und ermöglichen einem nicht immer das gesetzte Ziel zu erreichen.

Hier kommt jetzt die Programmierung zum Zuge. Wer einem Computer beibringen möchte, dass dieser exakt das macht, was man sich so vorstellt, kommt an der Programmierung nicht vorbei. Es ist dabei unerheblich, ob ihr eine Demo, ein Spiel, ein Anwendungsprogramm oder gar ein Betriebssystem erstellen wollt.

Die Sprache der Maschine

Aber wie sagt man dem Computer jetzt, was man möchte?
Ihr habt vielleicht schon mal einen Blick auf Zeilen wie

10 PRINT "Hallo":GOTO 10

oder

while (1==1)
{
    printf("Hallo");
}

oder auch

Start:  MOVEA.L Infotext,A0
        JSR TextOut
        JMP Start

Infotext:
        DC.B 'Hallo',0

geworfen.

Diese „merkwürdigen“ Zeilen nennt man Sourcecode (engl. Source = Quelle, es ist quasi der Ursprung, des später – hoffentlicht 😉 – lauffähigen Programms) oder auch Quellcode. Man könnte nun glauben, der Computer verstünde diese Texte direkt. Dem ist aber nicht so! Computer sind dumm!! Ja, das klingt jetzt hart, ist aber so 😉 . Ein Computer kann nämlich nur erkennen, ob Strom fließt oder nicht fließt. Da „Strom fließt“ und „Strom fließt nicht“ doch etwas zu sperrig ist, hat man sich eine kürzere Schreibweise einfallen lassen. Wenn „Strom fließt“, wird dies mit einer Eins 1 gekennzeichnet und „Strom fließt nicht“ wird mit einer Null angezeigt. Diese oder 1 ist die kleinste Informationseinheit, die ein Computer verarbeiten kann. Man nennt diese ein BIT (aus dem Englischen von BInary digiT = binäre [da es nur zwei Zustände 0 oder 1 gibt] Stelle / Ziffer).

Glückwunsch! Damit habt ihr schon direkt den ersten Schritt zum Programmierer hinter euch gebracht. Programmieren bedeutet nämlich nichts anderes, als diese Bits so zu setzen, dass sie für den Computer einen „Sinn“ ergeben. Nur die richtige Kombination aus Nullen und Einsen sorgt dafür, dass wir überhaupt Texte und Bilder auf dem Monitor sehen, sowie Musik und Soundeffekte hören können.

Für den Computer ist also alles nur eine unglaublich lange Reihe von Nullen und Einsen, etwas anderes kann er nicht verstehen! Ich schreibe hier übrigens bewußt immer vom Computer und nicht nur vom Prozessor! Denn nicht nur die CPU (Central Processing Unit engl. für Prozessor) kann Befehle verarbeiten, auch andere Chips sind dazu manchmal in der Lage. Beim Amiga kann z. B. der Copper eigene kleine Programme verarbeiten.

Ein Programm in Maschinensprache, sieht demnach also so aus:

‭00100000011110010000000011000001‬01000110111100100100111010111001
00000000110000010100011011111000‬‭01001110111110010000000011000001‬
‭0100011011100000010010000110000101101100011011000110111100000000‬

So wurde in der Anfangszeit der Computertechnik tatsächlich programmiert! Da dies natürlich zeitaufwendig und fehleranfällig war, hat man sich andere Wege gesucht, um einen Computer zu programmieren und verschiedene sog. Programmiersprachen entwickelt.

Dabei unterscheidet man grob drei Kategorien von Programmiersprachen:

  • Interpreter: Diese Sprachen (z. B. BASIC) werden während der Ausführung zeichenweise untersucht und live in die Maschinensprache „übersetzt“. Dies ist äußerst langsam, da jedes Mal aufs Neue eine Zeile analysiert und übersetzt werden muss. Die Sprachen bestehen meistens (muss aber nicht sein!) aus flüssig lesbaren Begriffen, wie z. B. 10 PRINT „HALLO“:GOTO 10. Auch ohne Programmierkenntnisse kann man sich evtl. mit etwas Schulenglisch zusammenreimen, dass hier wohl immer wieder „Hallo“ gedruckt bzw. ausgegeben wird. Damit diese Programme überhaupt verarbeitet werden können, benötigt man immer den passenden Interpreter, auf dem jeweiligen Rechner! Sie sind nicht selbstständig lauffähig, da sie als Sourcecode weitergegeben werden!
     
  • Compiler: Compiler-Sprachen (z. B. C) verwenden in der Regel auch gut lesebaren Text, um Programme zu erstellen. Im Gegensatz zu den Interpretern, wird hier aber das Programm nur einmalig in Maschinensprache umgewandelt. Dies hat den Vorteil, dass die Programme später erheblich schneller laufen, als die per Interpreter ausgeführten und dass diese Programme direkt ausführbar sind. Da ein Compiler aber allgemeingültige Funktionen bereitstellen muss, um alle Möglichkeiten abzudecken, sind die Programme nicht ganz so flott, wie die per Assembler erstellten und benötigen normalerweise auch mehr Platz. OK, es hängt natürlich auch vom Programmierer ab. Ein schlechtes Assemblerprogramm kann durchaus viel langsamer, als ein kompiliertes Programm sein. Der Vollständigkeit halber sei noch angemerkt, dass es durchaus auch BASIC-Compiler gibt, es handelt sich bei BASIC also nicht immer um eine Interpretersprache!
     
  • Assembler: Häufig fälschlich als Maschinensprache bezeichnet (weshalb dies falsch ist, habt ihr ja etwas weiter oben erfahren), erlaubt einem, durch mehr oder weniger einfach zu merkende Kürzel (z. B. MOVEA.L), direkt die vom Computer verstandenen Kombinationen aus und 1 zu verwenden. Da ihr hier unmittelbar auf die Befehle des Computers zugreifen könnt, ermöglicht es euch Assembler, die schnellsten und platzsparensten Programme, für das jeweilige System, zu schreiben. Auch diese Programme müssen einmalig übersetzt werden. Es heißt dann aber nicht kompilieren, wie z. B. bei C, sondern assemblieren! Es wird hin und wieder auch beim Assembler fälschlich von kompilieren gesprochen. Dies ist zwar nicht wirklich ein Problem, man sollte sich aber an die korrekten Begriffe gewöhnen. Beim Assemblieren wird nahezu jedes Kürzel und jeder Wert 1 zu 1 in die jeweilige Bit-Kombination übertragen, die der Computer versteht. Assemblersourcecodes sind ohne Kenntnis des jeweiligen Computersystems kaum verständlich. Sie sind auch schwerer zu pflegen und zeitaufwendiger bei der Erstellung. Dafür wird man aber mit der vollen Kontrolle, über das Rechnersystem, belohnt.

Mini-Exkurs: Es gibt noch weitere Kategorien. Spätestens seit Java sind JIT (Just In Time) Compiler ein bekanntes Beispiel. Dabei wird der Sourcecode in einen einheitlichen, optimierten Zwischen-Code kompiliert, der dann wiederum von einem Interpreter zur Laufzeit verarbeitet wird. Hier haben wir also eine Kombination aus Compiler und Interpreter. Auch das .NET-Framework von Microsoft arbeitet so.

BASIC, C, Modula-2, Pascal usw. werden übrigens als Hochsprachen bezeichnet. Dies hat nichts mit dem Schwierigkeitsgrad zu tun, ganz im Gegenteil. In einer Hochsprache programmiert es sich eigentlich leichter. Vorteile von Hochsprachen sind in der Regel, dass sich Programme in kürzerer Zeit erstellen lassen, leichter zu pflegen und zu lesen sind und dass die auf einem Rechner erstellten Programme, relativ einfach auf ein komplett anderes System übertragen werden können. Systemnahe Hochsprachen (so bezeichnet man Hochsprachen, die durchaus direkte Zugriffe auf die Hardware erlauben bzw. dichter an der Hardware sind – wie z. B. C) sind zwar häufig schwerer zu portieren, dies ist aber immer noch um ein Vielfaches leichter, als bei einem Assemblersourcecode. Ein Assemblerprogramm von einem System auf ein anderes zu übertragen, kann man fast vergessen! Da ist dann doch eher ein komplettes Neuschreiben angesagt. Eventuell macht es noch Sinn, wenn beide Systeme den gleichen Prozessor verwenden (wie z. B. beim Amiga und Atari ST), aber in der Regel kann man es vergessen.

Welche Sprache soll es sein?

Da der Amiga, wie schon die 8-Bit Vorgänger C64 & Co., auch ein BASIC mitbringt, hat man häufig darüber den ersten Kontakt zu einer Programmiersprache hergestellt. Damit kann man zwar schon mal etwas experimentieren und die Grundzüge des Programmierens erlernen, man stößt aber sehr schnell an die Grenzen dieser Sprache. Um die Maschine bis ans Limit auszureizen und all die tollen Effekte zu realisieren, die man so über die Jahre gesehen hat, braucht man mächtigere Programmiersprachen. Auf dem Amiga waren u. a. ARexx, Modula-2 und vor allem C sehr beliebt. Aber auch mit C konnte man nicht das letzte Quäntchen Leistung aus dem Amiga herausholen. Dies war nur mit Assembler möglich. Damit hat man, wie eben gesehen, wirklich die volle Kontrolle und kann seine Programme bis zum letzten Bit auf Platz und Geschwindigkeit hin optimieren.

Die Wahl der Programmiersprache hängt auch immer von der Aufgabenstellung ab! Eine Anwendung schreibt sich leichter mit C. Man kann sie dann auch einfacher auf andere Computersystem übertragen. Eine Demo oder ein Spiel, bei denen es primär darauf ankommt, dass diese flüssig laufen und mit tollen Effekten aufwarten, die normalerweise direkte Hardwarezugriffe benötigen, wird man in Assembler schreiben.
Es gibt auch andere Voraussetzung, die die Wahl der Sprache beeinflussen. So ist Fortran z. B. besonders auf den Umgang mit numerischen Werten ausgelegt und findet in Rechenintensiven-Bereichen häufiger Anwendung.[poll id=“6″]

Assembler, soll es sein!

In diesem Bereich wird es also um die Programmierung gehen. Ich möchte mich hauptsächlich mit Assembler beschäftigen. Daher wird es zunächst ein 68000er Assembler-Tutorial geben, schließlich steckt im Amiga ein Motorola MC68000 Prozessor. Dieses Tutorial ist vom Prinzip her auch für Fans von anderen Rechnern mit dieser 68000er CPU (z. B. Apple Macintosh, Atari ST oder das Sega Mega Drive) geeignet. Die reine Programmierung der CPU unterscheidet sich nämlich nicht! Erst wenn man auf die speziellen Fähigkeiten (z. B. den Grafik- oder Soundchip) der jeweiligen Rechner zugreift, ergeben sich Unterschiede.

Assembler ist nicht nur für eigenständige Programme zu gebrauchen! Ihr könnt z. B. ein C-Programm, durch Assembler-Routinen ergänzen. Dies hat den Vorteil, dass ihr die zeitunkritischen Teile bequem in einer Hochsprache schreiben könnt und nur dort, wo es wirklich auf Geschwindigkeit ankommt, greift ihr auf Assembler zurück. Diese Kombination findet man übrigens in der Praxis durchaus häufiger. Einige Entwicklungsumgebungen für Hochsprachen bieten sogar einen sog. Inline-Assembler an. Dort könnt ihr dann, z. B. neben dem C-Quellcode auch direkt Assemblerblöcke einfügen. Bei großen Projekten werden die Komponenten aber häufig getrennt entwickelt und erst später zusammengeführt.

Auf geht‘s…

Genug geschwafelt! Laßt uns nun mit der Programmierung beginnen (oder fortfahren, den ersten Schritt habt ihr ja oben bereits unternommen) und zunächst mal die Voraussetzungen für unsere Programmentwicklung klären / schaffen.

 


Beachtet bitte, dass sich der Amiga-Bereich erst im Aufbau befindet. Neue Beiträge werden daher nur langsam hinzukommen. Bervor ich etwas hinzufüge, muss ich es mir ja erstmal selbst beibringen.



Schrott!!Naja...Geht so...Ganz gut...SUPER! (17 Bewertungen | Ø 4,76 von 5 | 95,29%)

Loading...


⇐ zurück | weiter ⇒

5 Gedanken zu „Programmierung“

  1. Ein neues Jahr beginnt. Immer wieder schaue ich mal auf Deiner Seite rein und habe die Hoffnung, dass es etwas Neues von Dir gibt. Am liebsten im Amigabereich, der ja noch sehr wenig gefüllt ist.
    Wäre ein neues Jahr nicht ein schöner Grund hier noch mal im Amigabereich was zu machen?

  2. Deine Seite ist super! Schön, lesenswert und informativ! Ich selbst hab mich vor einiger Zeit mit C64 6502 Assembler befasst, dann Amiga 68k Assembler und mittlerweile mit Amiblitz, welches sehr empfehlenswert ist.

  3. Vielen Dank.
    Ich bin zwar mit der ersten Generation der 500er aufgewachsen, vom einfachen Basic und C – Programmieren ist aber so gut wie gar nichts übrig geblieben. Nach den hardwaretechnischen Reparaturen (Elkos austauschen, Betterien durch Cr2032 ersetzen, etc. ) kann jetzt wieder eingestiegen werden.

    Dafür ist das Tutorial sehr sehr schön.
    Bitte mach weiter mit der Arbeit

    1. Hi,
      wenn das doch nur so einfach wäre.
      Ich möchte selbst gerne mehr mit dem Amiga machen, finde aber einfach keine Zeit mehr für die Seite.
      Ganz gebe ich das Unterfangen aber nicht auf!

  4. Ich habe erst 2018 von meinem Neffen den Traumcomputer der 80er bzw. frühen Jahre 1990er geschenkt bekommen, da ich damals nur einen C-64 besaß und ich immer auf die Amiga-500 Besitzer eiversüchtig war…Jetzt kann ich das nachholen.

    Dieser Bericht wurde wunderbar leicht erklärt, wirklich für wahrscheinlich fast jeden verständlich….Wenn alles so super weiter erklärt wird, denke ich, dass jeder sehr viel daraus mitnehmen kann……

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Protected by WP Anti Spam