BASIC
Aus C64-Wiki
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.
[Bearbeiten] Das BASIC V2 des C64
Einen weiteren Überblick zum BASIC des C64 gibt es unter C64-Befehle.
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 Speicher abgelegten Programm hinzu bzw. ersetzt die jeweilige Programmzeile durch die gerade eingegebene. Programme lassen sich mit dem Befehl LIST wieder anzeigen. Die Zeilennummern dienen auch als Sprungmarken für Befehle wie GOTO.
Der Befehl RUN veranlasst BASIC dazu, das gespeicherte Programm abzuarbeiten. Laufende BASIC-Programme können vom Benutzer über die Taste <RUN/STOP> unterbrochen werden, BASIC befindet sich dann wieder im Direktmodus.
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] Beispiel
In der Animation finden folgende Schritte statt:
- Rechnung im Direktmodus ausführen: PRINT
- Programm von Diskette laden: LOAD
- Programm starten: RUN
- Programm ausgeben: LIST
- Programm ändern (nur erste Zeile)
- Programm nochmals starten
- Soft-Reset per SYS
Das Programm zählt eine Integer-Variable von 1 bis 10 hoch und gibt dabei entsprechende Meldungen aus.
10 I = 1 20 PRINT "TEST NR.";I 30 I = I + 1 40 IF I<=10 GOTO 20
[Bearbeiten] Hinweise
- 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.
- Eine Zeile darf maximal 80 Zeichen bei der Eingabe lang sein. Überzählige Zeichen werden ignoriert. Zeilen, die mit abgekürzen Befehlen eingegeben wurden (z.B. ? statt PRINT), können in der Langfassung über 80 Zeichen lang werden und lassen sich dann nicht mehr richtig editieren.
- Variablen stehen im Direktmodus auch zur Verfügung, einige Befehle (z.B. INPUT) aber nicht.
- Wird ein Programm im Direktmodus editiert, gehen alle Variablen verloren (implizites CLR).
- Sofern keine BASIC-Erweiterung benutzt wird, die einen Befehl wie RENUMBER zur Verfügung stellt, sollten Zeilennummern mit Abstand gewählt werden, weil ansonsten Zeilen nur sehr umständlich nachträglich eingefügt werden können.
- Programme, bei denen
LISTnur eine BASIC-Zeile mit einem SYS-Befehl zutage fördert, sind keine BASIC-Programme, sondern in Assembler geschrieben. Die eine Zeile BASIC-Code dient nur zum (bequemeren) Aufruf des von BASIC aus "unsichtbaren" Assembler-Programms. - 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.
[Bearbeiten] Befehle und Variablentypen
ABS | AND | ASC | ATN | CHR$ | CLOSE | CLR | CMD | CONT | COS | DATA | DEF | DIM | END | EXP | FN | FOR | FRE | GET | GET# | GOSUB | GOTO | IF | INPUT | INPUT# | INT | LEFT$ | LEN | LET | LIST | LOAD | LOG | MID$ | NEW | NEXT | NOT | ON | OPEN | OR | PEEK | POKE | POS | PRINT | PRINT# | READ | REM | RESTORE | RETURN | RIGHT$ | RND | RUN | SAVE | SGN | SIN | SPC | SQR | STATUS/ST | STEP | STOP | STR$ | SYS | TAB | TAN | THEN | TIME/TI | TIME$/TI$ | TO | USR | VAL | VERIFY | WAIT
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 bis hin zu den Heimcomputern C64/128/D/DCR, sowie VC10/20, C16/116 und Plus/4 bzw. dem nie erschienen C65 benutzte Commodore eine eigene, aus dem lizensierten Microsoft BASIC entwickelte BASIC-Version, die CBM-BASIC genannt wird. Diese gab es in verschiedenen Versionen, die bekannteste davon ist vermutlich die Version V2, die in den hier bekannten Heimcomputern ihre Anwendung fand.
Commodore lizensierte im Herbst 1976 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:
- Jahr: | Version: | Beschreibung:
- 1977: Version 1.0: Noch recht fehlerbehaftet, erste Versionen im PET 2001
- 1977, August: Version 2.0: Fehlerkorrekturen, eingebaut in weitere Versionen des PET
- 1978; Juli: Version 3.0: Leichte Fehlerkorrekturen und Integration des Maschinensprachemonitors TIM. CBM 3000 Serie (Standard) und PET 2001 (angezeigte Versionsnummer dort ist allerdings noch 2).
- 1979, Oktober: Version 4.0: 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.
- 1980: Version 4.1: Fehlerkorrigierte Fassung der Version 4.0 mit erweiterter Bildschirmeditor für CBM 8000. Auch durch ROM-Austausch für CBM 3000/4000 Serie verfügbar.
- 1981: Version 4.2: 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.
- 1981, September: VIC BASIC V2: Baut auf einem vereinfachten BASIC 4.0 auf. Einsatz im VC20.
- 1982, August: C64 BASIC V2: Anpassung des VIC BASIC V2 für VC10, C64, C128 (C64-Modus), SX64, PET 64.
- 1982: Version 4.5: Neue Befehle für CBM-II-Serie (CBM 500, 6x0, 7x0). Weiterentwicklung der Version 4.2.
- 1983: Version 3.5: Neue Befehle für die Heimcomputer C16/116 und Plus/4. Weiterentwicklung des C64 BASIC V2.
- 1986: Version 7.0: Neue Befehle für den C128/D/DCR. Weiterentwicklung des C16/116 BASIC 3.5 .
- 1989: Version 10: Neue Befehle für C65, beinhaltet sehr viele Fehler, kam aus dem Entwicklungsstadium nicht heraus. Weiterentwicklung des BASIC 7.0.
Die nicht durchgehend steigenden Versionsnummern ergeben sich aufgrund der Abspaltung einer CBM-BASIC-Version für Heimcomputer ab 1981. Das CBM-BASIC war bei den PET/CBM-Computern 1981 bereits recht weit entwickelt. Wegen des hohen Platzbedarfs dieses BASICs verwendete man für VC20 und C64 aber nur eine vereinfachte Version des BASIC 4.0 und nannte es aufgrund des vergleichsweise eingeschränkten Funktionsumfangs V2. Außerdem wurde oftmals bei fehlerbereinigten BASIC-Versionen nicht die Versionsnummer angepasst bzw. erhöht.
Anmerkung: Die Aktualisierung (Update) des PET CBM-BASIC auf höhere Versionen erfolgt durch den zusätzlichen Einbau von Erweiterungs BASIC-ROMs oder den kompletten Austausch des Betriebssystems-ROMs.
Die BASIC-Erweiterung der Heimcomputermodelle erfolgt in der Regel extern über sogenannte Erweiterungskarten (Steckmodul) oder den internen Einbau von entsprechenden EPROMs.
[Bearbeiten] BASIC-Schlüsselwörter in Version V2
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 V2 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 oder das Business Basic Modul 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 | PRINT USING | PUDEF | RCLR | RDOT | RENAME | RENUMBER | RESUME | RGR | RLUM | SCALE | SCNCLR | SCRATCH | SOUND | SHAPE | TRAP | TROFF | TRON | UNTIL | VOL | WHILE
[Bearbeiten] Zusätzliche Schlüsselwörter in Version 4.0
Aufbauend auf Commodore BASIC Version 2.0, wurde BASIC 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 angepasst:
- 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 dargestellt.
- 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, dass 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
Kommt im C128/D/DCR zum Einsatz. Aufbauend auf Commodore BASIC Version 3.5 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, (OFF), PEN, PLAY, POINTER, POT, (QUIT), RECORD, RREG, RSPCOLOR, RSPPOS, RSRPITE, RWINDOW, SLEEP, SLOW, SPRCOLOR, SPRDEF, SPRITE, SPRSAV, STASH, SWAP, TEMPO, TRAP, WIDTH, WINDOW, XOR
[Bearbeiten] Zusätzliche Schlüsselwörter in Version 10.0
Kommt im C65 zum Einsatz. Aufbauend auf Commodore BASIC Version 7.0 wurden folgende Befehle ergänzt:
BACKGROUND, BORDER, BVERIFY, CHANGE, CUT, DIR, DISK, DMA, DMODE, DPAT, ELLIPSE, ERASE, FIND, FOREGROUND, GCOPY, GENLOCK, HIGHLIGHT, LINE, LPEN, MOUSE, OFF, PAINT, PALETTE, PASTE, PIC, POLYGON, RGR, RMOUSE, SCREEN, SET, TYPE, VIEWPORT
Da der C65 nur als Prototyp existiert, sind die BASIC-Befehle nicht 100%ig implementiert und somit fehlerbehaftet!
[Bearbeiten] Literatur
- von Joachim Hänsel
- Westermann Verlag, ISBN 3-14-508810-6
- ein ausführliches Nachschlagewerk
[Bearbeiten] Links
| Wikipedia: Commodore BASIC |
- Grundlagen Basic V2 bei homecomputermuseum.de
- Handbuch BASIC 4 (inkl. Versionen 1-3) bei commodore.ca
- BASIC 3.5 Übersicht von Janne Peräaho und Anders Persson
- Create your own Version of Microsoft BASIC for 6502
- Bill Gates’ Personal Easter Eggs in 8 Bit BASIC
Programmiersprachen-Portalseite
C64-BASIC: BASIC V2 · BASIC-Befehle · Variable
