GW-BASIC

Programmiersprache

GW-BASIC ist ein Interpreter für die Programmiersprache BASIC des Unternehmens Microsoft. Es wurde für die ersten IBM-kompatiblen, aber nicht direkt von IBM hergestellten PC entwickelt. Zwischen 1983 und 1991 wurde es als Bestandteil des Betriebssystems MS-DOS bis Version 4.02 vertrieben, danach von QBasic und dem aufwendigeren Programmpaket QuickBASIC ersetzt.

GW-BASIC
Basisdaten

Entwickler Microsoft Corporation
Erscheinungsjahr 1983
Aktuelle Version 3.23
(1988)
Betriebssystem MS-DOS
Kategorie BASIC-Interpreter und Entwicklungsumgebung
Lizenz proprietär (8088: MIT-Lizenz)[1][2]
deutschsprachig nein

Die Assembler-Quelltexte der 8088-Portierung für MS-DOS von 1983 wurden am 22. Mai 2020 unter der MIT-Lizenz veröffentlicht.[2] Gedacht ist der auf GitHub einsehbare Quelltext für Ausbildungszwecke und um historische Einsichten zu ermöglichen.[1]

GeschichteBearbeiten

BASIC war die erste Programmiersprache für den 1981 erschienenen IBM-PC. Dieser verfügte (wie viele Heimcomputer jener Zeit) über einen BASIC-Interpreter im ROM namens BASICA. Das BASIC wurde gestartet, wenn beim Booten des Rechners kein Betriebssystem gefunden wurde. Es war exklusiv für die Firma IBM lizenziert. Das Betriebssystem MS-DOS verfügte ursprünglich über den Befehl BASICA (für BASIC Advanced), mit dem dieses BASIC mit einigen Erweiterungen gestartet werden konnte, während MS-DOS bereits lief. BASICA war eine direkte Portierung von Microsofts MBASIC (auch bekannt als BASIC-80) mit IBM-PC-spezifischer Zusatzfunktionalität. (MBASIC war für 8080/Z80-Maschinen geschrieben worden und lag bereits den meisten Distributionen von CP/M bei.) Später kamen IBM-PC-kompatible Computer anderer Hersteller auf den Markt, die ebenfalls MS-DOS als Betriebssystem nutzten. Aus lizenzrechtlichen Gründen verfügten diese aber nicht über den eingebauten BASIC-Interpreter des IBM-PC. Daraufhin verkaufte Microsoft GW-BASIC, welches nicht auf dem BASIC-Interpreter im ROM basiert, auf Diskette. GW-BASIC ist eine wesentlich erweiterte, zu BASICA kompatible BASIC-Version.

Die Verfügbarkeit als Teil von MS-DOS ohne Zusatzkosten förderte in kleinen Unternehmen die Entstehung vielfältiger Programme in GW-BASIC – bis hin zu „ausgewachsenen“ Datenbanksystemen, ähnlich, wie heute kleinere Applikationen in Visual Basic for Applications geschrieben werden. Ab 1985 wurde es in seiner Bedeutung von Turbo Pascal der Firma Borland verdrängt.

Am 21. Mai 2020 hat Microsoft GW-BASIC als Open Source freigegeben. Es steht nun – wegen seiner historischen Relevanz und zu Bildungszwecken – unter der MIT-Lizenz frei zur Verfügung.[3]

NamensgebungBearbeiten

Der Ursprung des Namens „GW-BASIC“ ist unklar. Die Initialen „GW“ könnten nach Greg Whitten, einem frühen Microsoft-Angestellten, der auch für Standards bei Microsoft-BASIC-Compilern zuständig war, gewählt sein. Whitten schreibt die Namenswahl Microsoft-Gründer Bill Gates zu und gibt als Ursprung den englischen Ausruf gee whiz! (zu deutsch etwa „Potz Blitz!“) an. Diese Erläuterung taucht angeblich auch im Microsoft User Manual der Microsoft Press auf. Eine weitere verbreitete Erklärung geht davon aus, dass es sich bei den Initialen GW um Abkürzung für Graphics and Windows handelt, da GW-BASIC neue Befehle für Grafikroutinen und grundlegende Fensterunterstützung mitbrachte. Andere vermuten, dass der Name GW-Basic von den (vertauschten) Initialen von Bill Gates' vollständigem Namen William „Bill“ Gates stammen, der Microsofts ersten BASIC-Interpreter selbst programmiert hatte.

EntwicklungsumgebungBearbeiten

GW-BASIC hat wie das originale BASIC aus dem Dartmouth College eine kommandobasierte Entwicklungsumgebung. Programmzeilen müssen mit Zeilennummern beginnen. Eingaben ohne Zeilennummer werden direkt ausgeführt. Mittels LOAD und SAVE können BASIC-Programme geladen und gespeichert werden. Als Dateiformate können ein Bytecode- als auch das ASCII-Format verwendet werden. LIST zeigt das aktuelle Programm an, NEW löscht den aktuellen Programmspeicher. RENUM erlaubt die Neuzuweisung von Programmzeilen. Zur Fehlersuche kann man mittels STOP im Programm Haltepunkte setzen, wobei die Ausführung mit CONT fortgesetzt werden kann. Zur Ablaufverfolgung können die Befehle TRON und TROFF verwendet werden. SYSTEM beendet den Interpreter und kehrt zum Betriebssystem zurück. Viele dieser Anweisungen zur Programmerstellung und Fehlersuche können die Funktionstasten F1 bis F10 aufgerufen werden. Eine Neubelegung dieser Tasten ist mit der Anweisung KEY möglich.

Als Interpreter erzeugt GW-BASIC keine unabhängig ausführbaren Programmdateien. In dieser Sprache geschriebene Programme sind zusammen mit dem Interpreter zu starten. Von Microsoft wurde daher später der BASIC-Compiler BASCOM angeboten.

SprachaufbauBearbeiten

Der Datentyp von Variablen wird in GW-BASIC wie in vielen BASIC-Dialekten durch Typenzeichen festgelegt, die an den Variablennamen angehängt werden. A$ ist eine Zeichenkette, A% ist eine ganze Zahl, A! und A# sind Gleitkommazahlen mit einfacher bzw. doppelter Genauigkeit. Fehlt das Typenzeichen, so wird eine Gleitkommazahl einfacher Genauigkeit angenommen. Durch Anweisungen DEFINT, DEFSTR usw. kann festgelegt werden, dass alle Variablen, deren Name mit einem bestimmten Zeichen beginnt, einen bestimmten Variablentyp haben, so dass auf das Typenzeichen verzichtet werden kann.

GW-BASIC erzwingt keine Strukturierte Programmierung. Der Programmablauf kann mittels der Sprunganweisung GOTO bestimmt werden. Unterprogramme können mittels GOSUB/RETURN aufgerufen werden. Die bedingten Anweisungen IF/THEN/ELSE müssen in einer Zeile geschrieben werden. Die Anweisungen WHILE/WEND und FOR/NEXT können über mehrere Programmzeilen gehen. Funktionen können mit der Anweisung DEF FN definiert werden, wobei die Definition jeweils in eine einzige Zeile passen muss, z. B. DEF FNLOG(basis,nummer)=LOG(nummer)/LOG(basis).

MerkmaleBearbeiten

GW-BASIC kann Dateien, parallele Schnittstellen und serielle Schnittstellen lesen und schreiben. Als Eingabegeräte werden neben der Tastatur auch analoge Joysticks und Lichtgriffel unterstützt, nicht aber Mäuse, da diese zur Zeit der Entwicklung von GW-BASIC auf IBM-kompatiblen PCs noch wenig verbreitet waren und häufig zueinander inkompatible Treiber verwendeten. Zur maschinennahen Programmierung können in Maschinencode geschriebene Unterprogramme eingebunden werden, die durch CALL aufgerufen werden. Der gesamte unter MS-DOS verfügbare Adressraum kann sowohl gelesen als auch geschrieben werden; der Zugriff kann dabei sowohl byte-weise (mittels PEEK und POKE) als auch seitenweise (mittels BLOAD und BSAVE) erfolgen. Portzugriffe auf interne Schnittstellen erfolgen mittels INP und OUT.

Mittels der Konstruktion ON ... GOTO/GOSUB bietet GW-BASIC eine Möglichkeit zum Interrupt-gesteuerten Programmablauf. Unterbrechungen können hierbei z. B. durch einen Tastendruck, ein Signal der seriellen Schnittstelle oder den Ablauf einer festgelegten Zeitspanne ausgelöst werden.

Die Programmiersprache unterstützt CGA- als auch EGA-Grafik. Auch höhere Grafikanweisungen wie LINE, PAINT oder CIRCLE stehen zur Verfügung. Einzelne Punkte können mit PSET eingefärbt und der Farbwert mit POINT wieder ausgelesen werden. Bitmaps können mittels GET und PUT gelesen und geschrieben werden.

Mit der PLAY-Anweisung kann der PC-Lautsprecher einstimmige Melodien abspielen, wobei Noten als Zeichenkette angegeben werden (z. B. PLAY "edcdeee2dfedc4"). Ein Zugriff auf niedrigerer Ebene ist mit der SOUND-Anweisung möglich. Dabei wird die Frequenz in Hertz und die Länge in 'clock ticks' für den Systemlautsprecher angegeben.

GrenzenBearbeiten

Eine Hürde für die Verwendung von GW-BASIC für größere Anwendungen besteht darin, dass der verfügbare Speicher auf 64 KB begrenzt ist. In diesen Speicherraum müssen Daten als auch Programmcode untergebracht werden. Diese Einschränkung kann nur bedingt durch die Overlay-Technik ausgeglichen werden, die mittels der Anweisungen CHAIN und MERGE zur Verfügung gestellt wird. Auch die nur rudimentäre Unterstützung strukturierter Programmierung erschwert die Wartung größerer Programme, weswegen die Sprache für größere Anwendungen nur wenig geeignet ist. Da weder Mausunterstützung vorliegt noch moderne Grafik- oder Soundkarten unterstützt werden, ist die Programmierung optisch zeitgemäßer Anwendungen kaum möglich.

WeblinksBearbeiten

EinzelnachweiseBearbeiten

  1. a b Rich Turner: Microsoft Open-Sources GW-BASIC. In: Microsoft Developer Blogs - Windows Command Line. Microsoft, 21. Mai 2020, abgerufen am 22. Mai 2020 (englisch): „These sources, as clearly stated in the repo’s readme, are the 8088 assembly language sources from 10th Feb 1983, and are being open-sourced for historical reference and educational purposes. … Many have asked if we can also open-source implementations for processors other than the 808x. Alas, we’re unable to provide sources for these ports and/or customizations.“
  2. a b Alexander Neumann: Microsoft legt Sourcen für GW-BASIC-Interpreter offen. In: Heise online. 22. Mai 2020. Abgerufen am 22. Mai 2020.
  3. Meldung bei Heise zur Quellcode-Freigabe