BASIC

Aus C64-Wiki

Wechseln zu: Navigation, Suche

Die Abkürzung BASIC (Beginner’s All-purpose Symbolic Instruction Code) steht für eine beliebte und bekannte interpretierte Programmiersprache der 70er bis 90er Jahre, die im Jahre 1964 von John George Kemeny und Thomas Eugene Kurtz entwickelt wurde. Hieraus sind eine Reihe von weiteren BASIC-Dialekten wie z.B. Visual-BASIC entstanden. Dieser Artikel behandelt die Programmiersprache BASIC für Commodore-Computersysteme, bei denen BASIC meist sowohl als Programmiersprache als auch als allgemeine Benutzeroberfläche (Direktmodus) benutzt wird.

Inhaltsverzeichnis

[bearbeiten] Das BASIC V2 des C64

Einschaltbild eines Commodore 64

Der Commodore 64 hat ein eingebautes Betriebssystem, das auf CBM-BASIC Version 2 basiert und für 38911 einzugebende Zeichen (Bytes) in seinem Arbeitsspeicher (Hauptspeicher oder kurz RAM) Platz hat. Somit sind alle Befehle, die der C64 "versteht", eigentlich BASIC-Befehle.

Der BASIC-Interpreter zeigt durch die Meldung READY. und dem blinkenden Cursor dem Computernutzer an, dass er seine Eingaben entgegennehmen kann (sogenannter Direktmodus). Wird ein BASIC-Befehl syntaktisch ordnungsgemäß verwendet, wird dieser ausgeführt, ansonsten wird eine Fehlermeldung ausgegeben, immer gefolgt von der Bereitschaftsmeldung READY.

[bearbeiten] Eingabe eines Programms

Wird ein BASIC-Befehl mit vorangestellter Zeilennummer eingegeben, fasst der BASIC-Interpreter diesen Befehl als Zeile eines Programms auf und fügt die Zeile dem im RAM-Speicher abgelegten Programm hinzu bzw. ersetzt die jeweilige Programmzeile durch die gerade eingegebene. Programme lassen sich mit dem Befehl LIST wieder anzeigen.

Der Interpreter arbeitet ein BASIC-Programm immer von oben (erste Zeilennummer) bis unten (letzte Zeilennummer) ab, solange kein Programmierfehler auftritt, die Taste <RUN/STOP> nicht gedrückt wurde oder nicht die Befehle END, STOP, LIST oder NEW ausgeführt werden.

Da BASIC-Programme im RAM-Speicher editiert und ausgeführt werden, müssen sie mit dem Befehl SAVE auf einen Datenträger (Diskette, Datasette) abgespeichert werden, will man sie nicht beim Ausschalten des Rechners verlieren. Der Befehl LOAD lädt entsprechende Programme von Datenträgern zurück in den Speicher.

[bearbeiten] Beispielprogramm

10 PRINT "Hallo ich bin der Commodore 64 - Wie heisst Du ";:INPUT A$
20 PRINT "Hallo " A$
30 END

[bearbeiten] Hinweise

  • Eine Zeile darf maximal 80 Zeichen bei der Eingabe lang sein. Überzählige Zeichen werden ignoriert.
  • Die Eingabe eines BASIC-Befehls oder einer Programmzeile muss immer mit der <RETURN>-Taste bestätigt werden.
  • Es können mehrere Befehle in einer Zeile stehen, wenn diese mit dem Doppelpunkt ":" abgetrennt werden.
  • Die Variablennamen dürfen nicht aus BASIC-Schlüsselwörtern (siehe unten) bestehen oder diese in irgendeiner Form enthalten.
  • Zahlenwerte und Zeichen können entsprechenden Variablen vom richtigen Typ zugeordnet werden.
  • Es werden nur Zeilennummern von 0 bis 63999 unterstützt.
  • Sogenannte überlange Zeilen mit mehr als 80 Zeichen können erzeugt werden, wenn bei der Eingabe die BASIC-Befehle abgekürzt werden. Problematisch sind diese überlangen BASIC-Zeilen bei der späteren Bearbeitung. Beispiel:
1?:?:?:?:?:?:?:?:?:?:?:?:?:?:?:?:?:?:?:?
:?:?:?:?:?:?:?:?:?:?:?:?:?:?:?:?:?:?:?:?

Erklärung: In diesem Beispiel wird der fünfbuchstabige PRINT-Befehl (abgekürzt mit dem Fragezeichen "?") über zwei Zeilen mit insgesamt 80 Zeichen eingegeben, der im Programmlisting dann fast sieben Ausgabezeilen beansprucht (rund 241 Zeichen). Solche Programmzeilen können nur mithilfe der genannten Abkürzungen bearbeitet werden.

[bearbeiten] Befehle und Variablentypen

Es werden drei Variablentypen (Integer, Fließkommazahlen, Zeichenketten) sowie Felder unterstützt.

[bearbeiten] Technische Realisierung

Das BASIC bzw. der BASIC-Interpreter befindet sich auf einem ROM-Chip und ist normalerweise im Speicherbereich $A000-$BFFF sichtbar (Speicherbelegungsplan). Die interne Struktur des ROMs findet sich unter BASIC-ROM.

[bearbeiten] Die Geschichte von CBM-BASIC

Angefangen von der PET/CBM 2001 bzw. -Serie bishin zu den Heimcomputern C64/128/D/DCR, sowie VC10/20, C16/116 und Plus/4 bzw. den nie erschienen C65 benutzte Commodore eine eigene entwickelte BASIC-Version, die CBM-BASIC genannt wird. Diese gab es in verschiedene Versionen, die bekannteste davon ist eigentlich die Version 2.0.

Commodore lizensierte im Jahre 1977 den BASIC-Dialekt von Microsoft und passte ihn den entsprechenden Computersystemen für seine Zwecke an. BASIC wird nicht nur als Programmiersprache eingesetzt, sondern auch als Betriebssystem und ist im ROM des Computers untergebracht.

Folgende Versionen von CBM-BASIC existieren:

  • Version 1.0 (1977): Noch recht fehlerbehaftet, erste Versionen im PET 2001
  • Version 2.0 (August 1977): Fehlerkorrekturen, eingebaut in weitere Versionen des PET
  • Version 3.0 (Juli 1978): Leichte Fehlerkorrekturen für CBM 3000 Serie (Standard) und PET 2001, VC10, VC20, C64, C128 (C64-Modus), SX64, PET 64 (angezeigte Versionsnummer dort ist allerdings noch 2)
  • Version 3.5 (1983): Neue Befehle für die Heimcomputer C16/116 und Plus/4
  • Version 4.0 (Oktober 1979): Neue Befehle für leichtere Handhabung für Diskettenlaufwerke für CBM 4000. Auch durch ROM-Austausch für CBM 3000 Serie und PET 2001 verfügbar.
  • Version 4.1 (1980): Fehlerkorregierte Fassung der Version 4.0 mit erweiterter Bildschirmeditor für CBM 8000. Auch durch ROM-Austausch für CBM 3000/4000 Serie verfügbar.
  • Version 4.2 (1981): Geänderte und ergänzte Befehle für den CBM 8096. Zusätzlich gibt es ein Eingabe- und Hilfswerkzeug für die Programmierung namens LOS-96, das von Diskette in RAM geladen werden kann.
  • Version 4.5 (1982): Neue Befehle für CBM-II-Serie (CBM 500, 6x0, 7x0).
  • Version 7.0 (1986): Neue Befehle für den C128/D/DCR
  • Version 10 (1989): Neue Befehle für C65, beinhaltet sehr viele Fehler, kam aus dem Entwicklungsstadium nicht heraus

Anmerkung: Sogesehen paßt die chronologische Entwicklungsreihe nicht hundertprozentig mit den Versionsdaten überein, insbesondere wurde Anfang der 80'iger Jahre begonnen das entwickelte BASIC zusätzlich für die Heimcomputer zu nutzen. Das CBM-BASIC war bei den PET/CBM-Computer schon recht weit entwickelt, dadurch bedingt das der Arbeitsspeicher schnell über 64 KByte lag. Wegen den wenigen Arbeitsspeicher von VC20 und C64 nahm man das optimierte BASIC 2.0, was in der o.g. Versionstabelle unter BASIC 3.0 steht. Oftmals wurden für die Fehlerbehebung der alten BASIC-Versionen nicht die Versionsnummer angepaßt bzw. erhöht.

Hinweis: Bis auf das in den Heimcomputer VC10, VC20, C64, C128 (C64-Modus), SX64, PET 64 genutzte BASIC 2.0 kann durch Eingabe von SYS 1024 oder SYS 54386 der eingebaute Maschinensprachemonitor TIM aufgerufen werden.

[bearbeiten] BASIC-Schlüsselwörter in Version 2.0

BASIC V2 kommt im C64/VC20 und C128/D/DCR im C64-Modus zum Einsatz und unterstützt 71 BASIC-Schlüsselwörter (siehe oben).

[bearbeiten] Zusätzliche Schlüsselwörter in Version 3.5

BASIC 3.5 baut auf dem Commodore BASIC der Version 2.0 auf und kommt in den Heimcomputern C16/116 und Plus/4 zum Einsatz.
Auf dem C64 kann man es mit "C64 Basic V3.5" aus dem 64'er-Magazin 6/90 ausprobieren.

AUTO, BACKUP, BOX, CHAR, CIRCLE, COLLECT, COLOR, COPY, DEC, DELETE, DIRECTORY, DLOAD, DO, DRAW, DS, DS$, DSAVE, EL, ELSE, ER, ERR$, EXIT, GETKEY, GRAPHIC, GSHAPE, HEADER, HELP, HEX$, INSTR, JOY, KEY, LOCATE, LOOP, MONITOR, PAINT, PRINTUSING, PUDEF, RCLR, RDOT, RENAME, RENUMBER, RESUME, RGR, RLUM, SCALE, SCNCLR, SCRATCH, SOUND, SSHAPE, TRAP, TROFF, TRON, UNTIL, VOL(BASIC3.5), WHILE

[bearbeiten] Zusätzliche Schlüsselwörter in Version 4.0

Aufbauend auf Commodore BASIC Version 2.0, wurde BASIC V 4.0 (Einsatz in PET- und CBM-Computern/Standard der CBM 4000/8000 Serie) um folgende Befehle erweitert.

APPEND, BACKUP, CATALOG, COLLECT, CONCAT, COPY, DIRECTORY, DLOAD, DOPEN, DCLOSE, DSAVE, DS, DS$, GO, HEADER, RECORD, RENAME, SCRATCH

[bearbeiten] Zusätzliche Schlüsselwörter in Version 4.2

Für den CBM 8096/8296 wurde wegen der Arbeitsspeicherüberschreitung von 64 KByte auf 96 KByte bzw. auf 128 KByte die BASIC-Befehle des BASIC 4.0 angepaßt:

  • LOAD, SAVE, VERIFY Voreinstellung für 8 Geräte, sowie Entfernung der Rekorderverwaltung (Geräteadresse 1 entfällt und wurde durch Standard-Geräteadresse 8 ersetzt). Weiterhin lassen sich durch Angabe von Speicherbereiche beliebige Speicherdaten abspeichern oder gezielt an gewünschter Speicheradresse laden.
  • LIST Durch Angabe von LIST, wird jeder Befehl in einer neuen Zeile daregstellt.
  • DELETE Löscht mehrere BASIC-Zeilen. Nur verwendbar im Direktmodus.
  • FRE mit FRE(0) anzeige des freien BASIC-Programmspeichers; mit FRE(1) anzeige des freien Variablenspeichers.
  • CLR durch hinzufügen eines Variablennamens können einzelne Variablen gezielt aus dem Speicher (z.B. CLR x, i%, a$ ) gelöscht werden.
  • REDIM verlängert oder verkürzt (löscht) diminosierte Variablen-Felder
  • RESTORE [Zeile], [Element] durch Angabe von Zeile und Element, kann der DATA-Zeiger gezielt zurückgesetzt werden.
  • POKE, PEEK, SYS, WAIT Umschalten auf jeweils 32 KByte Bereiche (0-32 KByte Betriebssystem u.a. Zeropage und Stack, 32-64 KByte ROM, 64-96 KByte RAM, BASIC-Programmspeicher, 96-128 KByte RAM, Variablenspeicher
  • GET$[logische Adresse], [Variable$], [maximale Zeichenanzahl], [Endzeichen], [Ignorierte Zeichen] es werden maximal 255 Zeichen aus einer Datei in einen String hineingelesen. Es ist gegenüber INPUT# bei einigen Zwecken vorzuziehen.
  • INSTR(Zeichenkette,Variable$,Startzeichen,Suchart) dient in Zeichenketten, nach bestimmten Zeichenfolgen durch Übereinstimmung oder Abweichung zu suchen. Es gibt folgende Sucharten: Von links nach rechts auf Übereinstimmung (0) oder auf Abweichung (1) bzw. von rechts nach links auf Übereinstimmung (2) oder Abweichung (3)
  • MIDSTR(Startvaribale$, Startzeichen)="Ersatzzeichenkette" Ersetzen bzw. Einfügen von Zeichenfolge in vorhandene Strings.
  • ASC(String,Spalte,Länge), CHR$(Zahl,Länge) Spalte mit 1 bis 255 und Länge mit 1 bis 5, kann entfallen. Durch die Länge kann die Anzahl der maximal genutzten Bits bzw. Zeichen verändert werden.
1 | 0 - 255        (2 hoch 7)
2 | 0 - 65535      (2 hoch 15) 
3 | 0 - 16777215   (2 hoch 23)
4 | 0 - 4294967275 (2 hoch 31)
5 | Gleitkommazahl 
  • CATALOG$ [String], Gerätenummer, Laufwerk(0|1), Muster, Modus(0|1|2) Das Directory einer Diskette wird in einem Stringfeld mit Anfangsindex. hineingeladen. Bis auf den String (im Format: Dateiname, Dateityp, belegte Blöcke) , können die restlichen Parameter entfallen. Über den Modus kann der Informationsgehalt des Directorys gesteuert werden.
  • IF ... THEN ... wurde mit ELSE erweitert
  • ON ERROR GOTO ... Hiermit kann bei Auftreten von BASIC-Fehlermeldungen ein Programmabbruch vermieden werden und eine eigene Fehlerbehandlungsroutine aufgerufen werden. In den Systemvriablen EL (Error Line, fehlerhafte Zeilennummer), EC (Error Code, Fehlernummer, wobei BASIC-Interpreter-Fehler positive Vorzeichen haben und Betriebssystem-Fehler negative Vorzeichen haben), EO (Error Offset, Wert von 0 bis 255), ERROR (String mit Fehlermeldung ohne dem Fragezeichen ?) befinden sich nach aufgetretenen Fehler weitere Informationen
  • RESUME <NEXT|Zeilennummer|ERROR> Paramter können entfallen. Dient dem Wiederholen eines Fehlers oder dem Fortsetzen bzw. Abbrechen eines fehlerhaften BASIC-Programms.
  • DISPOSE <NEXT|RETURN|Stackebene als Zahl> Parameter können auch durch Kommas , kombiniert werden. Dient der Manipulation des BASIC-Stacks. Mit DISPOSE 1 wird der Stack komplett geleert.
  • INPUT / PRINT @(Zeile, Spalte) dient der gezielten Zeichenkettenpositierung mit Zeile 0-24 und Spalte 0-79
  • USING(format, variable-liste) Formatformatierung für INPUT und PRINT, nicht verwendbar im Direktmodus. Aufruf mit PRINT USING oder INPUT USING
  • BASIC-Stack für mehr geöffnete FOR-NEXT-Schleifen, sowie Unterporgramme (mehr als 26). Durch die Auslagerungs des Stacks aus den ROM in das BASIC-RAM (Variablenspeicher) hat dieser mehr Platz für geöffnete FOR-NEXT- oder nicht beendete Unterprogramme. Da jedoch der Stack im BASIC-RAM rückwärts beginnend den Speicher belegt und das BASIC-Programm vorwärtebeginnend, kann praktisch der Stack nicht endlos groß werden.
  • Programmänderungen ohne Variablenverlust. Dies erleichtert u.a. auch die Fehlersuche
  • Automatische Zeilennummerierung bei der BASIC-Programmierung
  • BASIC-Zeilen bis zu 250 Byte Länge (undekodierter Zustand). Die logische Bildschirmzeile ist weiterhin 80 Zeichen lang.
  • ROM abschalten des BASIC-RAM und umschalten auf LOS-96, daß sich im RAM befinden muss. Zurück mit SYS 0 über einen Warmstart.
  • FUNC und CALL werden mit Hilfe des LOS-96 zum Aufruf von Maschinenspracheprogramm genutzt.

[bearbeiten] Zusätzliche Schlüsselwörter in Version 4.5

Aufbauend auf das Commodore BASIC der Version 4.0, die Befehlsergänzungen, die im CBM-Computern der Serie CBM500/600/700 benutzt werden:

BANK, BLOAD, BSAVE, DCLEAR, DELETE, DISPOSE, EL, ELSE, ERR$, ESC , INSTR, KEY, USING/PRINT(Using), PUDEF, RESUME, TRAP

[bearbeiten] Zusätzliche Schlüsselwörter in Version 7.0

Aufbauend auf Commodore BASIC Version 3.5, die im C128/D/DCR zum Einsatz kommt, wurden folgende Befehle ergänzt:

APPEND, BANK, BEGIN, BEND, BLOAD, BOOT, BSAVE, BUMP, CATALOG, CHAR, CIRCLE, COLLISION, CONCAT, DCLEAR, DCLOSE, DOPEN, DVERIFY, ENVELOPE, FAST, FETCH, FILTER, GO64, MOVSPR, PEN, PLAY, POINTER, POT, RECORD, RREG, RSPCOLOR, RSPPOS, RSRPITE, RWINDOW, SLEEP, SLOW, SPRCOLOR, SPRDEF, SPRITE, SPRSAV, STASH, SWAP, TEMPO, TRAP, WIDTH, WINDOW, XOR

[bearbeiten] Literatur

von Joachim Hänsel
Westermann Verlag, ISBN 3-14-508810-6
ein ausführliches Nachschlagewerk

[bearbeiten] Links

Wikipedia: BASIC

Programmiersprachen-Portalseite
C64-BASIC: BASIC V2 · BASIC-Befehle · Variable

C64-Assembler: Assembler · Assembler-Befehle · KERNAL-ROM · BASIC-ROM · Speicherbelegungsplan
Persönliche Werkzeuge
Andere Sprachen