C64 Basic lernen – das erste Programm
Im zweiten Teil der C64 Basic lernen Artikelserie schreibst du das erste Programm. Mit dem Erfolg folgt etwas Theorie und ein spannendes praktisches Beispiel.
C64 Basic lernen – das erste Programm
Keine Einführung in eine Programmiersprache ohne das obligatorische „Hello World“. So zeige ich dir auch die 2 Zeilen Code, welche den Text endlos am Bildschirm ausgeben. Keine Angst, auf dem Basislevel werde ich nicht bleiben. Trotzdem kurz zur Demonstration:
Programmiert wird direkt vom Startbildschirm weg. Bei Basic braucht jede Zeile Programmcode eine Nummerierung. Am besten lässt man zwischen den Zeilen Platz (zwischen 10 und 20 könnte ich noch 9 Zeilen einfügen). Folgende Befehle sind wichtig:
- RUN
führt das aktuell im Speicher stehende Basic Programm aus - LIST
gibt das aktuell im Speicher stehende Basic Programm aus
Jede Zeile mit einer Nummer gefolgt von Programmcode wird mit Bestätigung der Eingabetaste im Speicher abgelegt. Das heißt es ist völlig egal in welcher Reihenfolge man Programmzeilen eintippt. Das Programm in umgekehrter Reihenfolge (aber mit gleicher Zeilennummer) steht genau wie zuvor eingegeben korrekt im Speicher (siehe dazu die Ausgabe von List):
Führt man das Programm mit RUN aus wird endlos Text ausgegeben.
Variablen
Eine Variable ist wie eine Schublade. In diese kann man etwas hinein legen, das man später vielleicht einmal benötigen wird. Jeder Computer hat nur begrenzt Speicher, also nicht unendlich Schubladen. Eine Variable in Basic ist ein Text dem man einen Wert zuweist. Sobald der Buchstabe zum ersten Mal im Programm vorkommt existiert er im Speicher. Bei der nächsten Verwendung hat er den zuletzt zugewiesenen Wert. Im folgenden wird der Wert 5 im mit A benannten Speicher abgelegt und in der nächsten Zeile gleich wieder verwendet. Dort geben wir das Ergebnis der Rechnung A+5 aus. In meinem Fall 10, weil A den Wert 5 hat:
Fügt man ein „;“ ans Ende einer PRINT Anweisung, dann gibt es kein Zeilenende und das nächste PRINT wird daran angehängt. Zu Variablen gibt es noch ein paar Details zu wissen. Ein wichtiges Detail ist, dass Basic nur Variablennamen mit maximal 2 Buchstaben unterscheiden kann. Man kann zwar Problemlos längere Namen definieren, relevant sind aber nur die ersten beiden Buchstaben. Das folgende Beispiel zeigt, dass ABC, ABD und ABE nicht 3, sondern nur eine Variable AB ist.
Texte
In einer Variablen kann man nicht nur numerische Werte speichern. Will man einen Text merken, dann fügt man ein $ dem Variablennamen hinzu. In eine solche Zeichenkette passen beliebig viele Zeichen:
In Zeile 40 habe ich noch etwas neues verwendet. Mit „:“ kann man mehrere einzelne Befehle in einer Zeile zusammenfassen.
Felder
Zuletzt kann man in einem Array oder Feld eine ganze Reihe von Variablen ob numerisch oder Text zusammenfügen. Das geht mit dem Schlüsselwort DIM.
DIM A(2) definiert ein eindimensionales Feld in dem man 2 Werte abspeichern kann. Das Beispiel demonstriert wie das geht. Mit DIM A(2,2) legt man beispielsweise eine 2×2 Matrix mit 4 Werten an.
Daten
Konstante Daten kann man in einem Basic Programm nach dem Befehl DATA mit Komma getrennt ablegen. Data kommt immer in Kombination mit dem Befehl READ vor, mit diesem liest man die Daten in Variablen ein. Jedes mal, wenn ein Wert gelesen wurde rutscht der Zeiger auf die Daten um eins weiter. Deshalb liest ein neuerlicher READ Aufruf das nächste Element. Gelesen wird von links nach rechts.
Das Beispiel zeigt, dass man numerische und Textinformationen gemeinsam definieren kann. Man muss jedoch beim Einlesen auf den Typ aufpassen, falls man sich da irrt bekommt man eine SYNTAX ERROR Fehlermeldung.
Abfragen (IF)
Mit der IF … THEN abfrage können im Programmcode Abfragen gemacht werden. Das folgende Beispiel gibt abhängig von dem Inhalt der Variable A und B einen Text aus. Je nachdem welcher der beiden Werte kleiner ist. Man beachte, dass die Abfrage mit dem „<“ und „>“ Zeichen möglich ist, mit einem NOT kann man diese negieren:
Mit konstanten Werten macht diese Abfrage natürlich wenig Sinn, denn der aktuelle Code gibt immer den selben Text aus. 16 wird immer größer als 15 sein! Deshalb wird die IF / THEN Abfrage oft in Verbindung mit INPUT verwendet, über diesen kann man Werte zur Laufzeit des Programms vom Benutzer abfragen:
In diesem Programm wird die Eingabe in der Variable A gespeichert und anschließend in 2 IF Abfragen geprüft ob diese kleiner oder größer 20 ist. Je nach Fall wird der passende Text ausgegeben. Dieses Beispiel zeigt auch gleich eine der wichtigsten Regel beim Programmieren: traue keiner Benutzereingabe! Gibt man keine Zahl ein passiert folgendes:
Deshalb muss man nach einem Input die Eingabe mit einer IF Abfrage immer validieren und im Fehlerfall um eine neue Eingabe bitten!
Schleifen
Die letzte wesentliche Mechanik jeder Programmiersprache sind Schleifen. Damit lassen sich wiederholbare Vorgänge abbilden. Jedes Spiel hat beispielsweise eine Game Loop. In dieser wird der Bildschirm jedes Frame neu gezeichnet und das Spiel geschehen, der Input vom Benutzer und die Reaktion der KI Gegner errechnet. Diese Schleife läuft so lange das Spiel läuft. Im einfachsten Fall benötigt man eine Schleife zur Absicherung einer Benutzereingabe wie in der zuvor gezeigten IF Abfrage beim Input. Basic hat im Gegensatz zu anderen Programmiersprache keine Schlüsselwörter um Schleifen abzubilden (wie sonst oft for, do, while, usw…). Basic bedient sich dem GOTO Schlüsselwort, welches auch im Assembler Code verwendet wird. Das GOTO funktioniert immer in Kombination mit einer Zeilennummer, deshalb müssen alle Zeilen in Basic nummeriert sein. Ein einfaches Beispiel:
Das Beispiel zeigt anschaulich wie man eine Eingabe absichert. Es wird eine Eingabe entgegen genommen und in einer Abfrage geprüft. Sollte der Wert in der Variable A nicht zwischen 1 und 10 liegen wiederholen wir die Eingabe. Dazu springt das GOTO in die Programmzeile 10. Technisch gesehen wir durch diesen Befehl der Programmcounter auf die Zeile mit der Nummer 10 gesetzt. In diesem Speicher steht immer die Position des nächsten auszuführenden Befehls.
Vielleicht fällt dir gleich auf, dass man mit GOTOs so manch einen Unsinn treiben kann. Der Befehl erlaubt es dem Benutzer zu einer beliebigen Stelle im Programm zu springen. Da nur Zeilennummern möglich sind wird das Programm bei vielen GOTOs und hunderten Zeilen schnell undurchsichtig. Aus diesen Gründen ist es einem Programmierer heute quasi verboten GOTOs einzusetzen.
Fazit
Im zweiten Teil der C64 Basic lernen Artikelserie habe ich die Sprachsyntax vorgestellt und gezeigt wie man den Code erstellt, ausgibt und ausführt. Das versprochene spannende Beispiel war nun noch nicht dabei, dran bleiben! Im nächsten Teil zeige ich noch wie man spezifische Funktionen der Hardware nutzt.
3 Antworten
[…] letzten Artikel gab es eine kompakte Einführung in die Programmierung in Basic am Commodore 64. Damit ist es jetzt […]
[…] 1 | Teil 2 | Teil […]
[…] gibt es eine ganze Reihe an Anweisungen, welche den Ablauf eines BASIC-Programms beeinflussen und so nur indirekte Auswirkung auf die Hardware haben. Populäre Beispiele sind z.B. […]