GW-BASIC
GW-BASIC | |
---|---|
Basisdaten | |
Entwickler | Microsoft Corporation |
Erscheinungsjahr | 1983 |
Aktuelle Version | 3.23 (1988) |
Betriebssystem | MS-DOS |
Kategorie | BASIC-Interpreter undEntwicklungsumgebung |
Lizenz | proprietär (8088:MIT-Lizenz)[1][2] |
deutschsprachig | nein |
GW-BASIC ist einInterpreter für dieProgrammierspracheBASIC des UnternehmensMicrosoft. Es wurde für die erstenIBM-kompatiblen, aber nicht direkt von IBM hergestelltenPC entwickelt. Zwischen 1983 und 1991 wurde es als Bestandteil desBetriebssystemsMS-DOS bis Version 4.02 vertrieben, danach vonQBasic und dem aufwendigeren ProgrammpaketQuickBASIC ersetzt.
DieAssembler-Quelltexte der8088-Portierung für MS-DOS von 1983 wurden am 22. Mai 2020 unter derMIT-Lizenz veröffentlicht.[2] Gedacht ist der aufGitHub einsehbare Quelltext für Ausbildungszwecke und um historische Einsichten zu ermöglichen.[1]
Geschichte
[Bearbeiten |Quelltext bearbeiten]BASIC war die erste Programmiersprache für den 1981 erschienenenIBM PC. Dieser verfügte (wie vieleHeimcomputer jener Zeit) über einen BASIC-Interpreter imROM namensCassette BASIC. Dieses ROM-BASIC wurde gestartet, wenn beimBooten des Rechners kein Betriebssystem gefunden wurde. Es war jedoch nicht möglich, von einem auf dem PC gestarteten Betriebssystem aus auf das BASIC zuzugreifen. Daher entwickelte Microsoft mitBASICA (für „Advanded BASIC“) einen Interpreter fürDOS, der auf IBM PCs das BASIC im ROM nutzbar macht und um einige fehlende Funktionen für den Diskettenzugriff erweitert. IBM integrierte den BefehlBASICA
anschließend in PC DOS.Cassette BASIC war exklusiv für die Firma IBM lizenziert, sodassAdvanced BASIC aufIBM-PC-kompatiblen Computern, die kein ROM-BASIC besitzen, nicht funktioniert.
Im Laufe der 1980er Jahre kamen IBM-PC-kompatible Computer anderer Hersteller auf den Markt, die oftMS-DOS (großteils identisch mit PC DOS) als Betriebssystem nutzten. Für diese Klone lizenzierte Microsoft MS-DOS und verkaufte an interessierte Anwender direkt GW-BASIC, welches nicht auf dem ROM-BASIC-Interpreter angewiesen ist, auf Diskette. Bald darauf lizenzierten auch einigeErstausrüster von „IBM-PC-Kompatiblen“ GW-BASIC, sodass deren Systeme mit bereits vorinstalliertem zum IBM PC kompatiblem BASIC ausgeliefert werden konnten, denn BASICA und GW-BASIC sind vollständig kompatible BASIC-Dialekte, wobei GW-BASIC auf jedem PC-kompatiblen Rechner unter DOS läuft.[3] Dabei handelt es sich im Wesentlichen um eine direktePortierung von MicrosoftsMBASIC (auch bekannt als BASIC-80) auf denIBM PC – MBASIC war für8080/Z80-Rechner geschrieben worden und lag seinerseits bereits den meisten Erstausrüster-Systemen mitCP/M bei.
Die Verfügbarkeit als Teil von MS-DOS, die oft per Vorinstallation einer OEM-Version von DOS ohne Zusatzkosten gegeben war, förderte in kleinen Unternehmen die Entstehung vielfältiger Programme in GW-BASIC – bis hin zu „ausgewachsenen“ Datenbanksystemen, ähnlich wie später kleinere Applikationen inVisual Basic for Applications geschrieben wurden. Ab ca. 1985 wurde Microsoft BASIC (MBASIC, BASICA, GW-BASIC) in seiner Bedeutung vonTurbo Pascal der FirmaBorland verdrängt.
Am21. Mai2020 hat Microsoft GW-BASIC Version 1.0, wegen seiner historischen Relevanz und zu Bildungszwecken, alsOpen Source freigegeben, womit es nunmehr unter derMIT-Lizenz frei zur Verfügung steht.[2]
Namensgebung
[Bearbeiten |Quelltext bearbeiten]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ünderBill Gates zu und gibt als Ursprung den englischen Ausrufgee whiz! (zu deutsch etwa „Potz Blitz!“) an. Diese Erläuterung taucht angeblich auch imMicrosoft 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ürGraphics 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 NamenWilliam „Bill“ Gates stammen, der Microsofts ersten BASIC-Interpreter selbst programmiert hatte.
Entwicklungsumgebung
[Bearbeiten |Quelltext bearbeiten]GW-BASIC hat wie das originale BASIC aus demDartmouth College einekommandobasierteEntwicklungsumgebung. Programmzeilen müssen mit Zeilennummern beginnen. Eingaben ohne Zeilennummer werden direkt ausgeführt. MittelsLOAD
undSAVE
können BASIC-Programme geladen und gespeichert werden. Als Dateiformate können einBytecode- als auch dasASCII-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 mittelsSTOP
im ProgrammHaltepunkte setzen, wobei die Ausführung mitCONT
fortgesetzt werden kann. ZurAblaufverfolgung können die BefehleTRON
undTROFF
verwendet werden.SYSTEM
beendet den Interpreter und kehrt zum Betriebssystem zurück. Viele dieser Anweisungen zur Programmerstellung und Fehlersuche können über dieFunktionstastenF1 bisF10 aufgerufen werden. Eine Neubelegung dieser Tasten ist mit der AnweisungKEY
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-CompilerBASCOM angeboten.
Sprachaufbau
[Bearbeiten |Quelltext bearbeiten]DerDatentyp vonVariablen wird in GW-BASIC wie in vielen BASIC-Dialekten durch Typenzeichen festgelegt, die an den Variablennamen angehängt werden.A$
ist eineZeichenkette,A%
ist eineganze Zahl,A!
undA#
sindGleitkommazahlen mit einfacher bzw. doppelter Genauigkeit. Fehlt das Typenzeichen, so wird eine Gleitkommazahl einfacher Genauigkeit angenommen. Durch AnweisungenDEFINT
,DEFSTR
usw. kann festgelegt werden, dass alle Variablen, deren Name mit einem bestimmten Zeichen beginnt, einen bestimmtenVariablentyp haben, so dass auf das Typenzeichen verzichtet werden kann.
GW-BASIC erzwingt keineStrukturierte Programmierung. Der Programmablauf kann mittels derSprunganweisungGOTO
bestimmt werden.Unterprogramme können mittelsGOSUB/RETURN
aufgerufen werden. Diebedingten AnweisungenIF/THEN/ELSE
müssen in einer Zeile geschrieben werden. DieAnweisungenWHILE/WEND
undFOR/NEXT
können über mehrere Programmzeilen gehen.Funktionen können mit der AnweisungDEF FN
definiert werden, wobei die Definition jeweils in eine einzige Zeile passen muss, z. B.DEF FNLOG(basis,nummer)=LOG(nummer)/LOG(basis)
.
Merkmale
[Bearbeiten |Quelltext bearbeiten]GW-BASIC kann Dateien,parallele Schnittstellen undserielle Schnittstellen lesen und schreiben. Als Eingabegeräte werden neben der Tastatur auch analogeJoysticks undLichtgriffel unterstützt, nicht aberMä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 inMaschinencode geschriebene Unterprogramme eingebunden werden, die durchCALL
aufgerufen werden. Der gesamte unter MS-DOS verfügbareAdressraum kann sowohl gelesen als auch geschrieben werden; der Zugriff kann dabei sowohl byte-weise (mittelsPEEK
undPOKE
) als auch seitenweise (mittelsBLOAD
undBSAVE
) erfolgen. Portzugriffe auf interneSchnittstellen erfolgen mittelsINP
undOUT
.
Mittels der KonstruktionON ... GOTO/GOSUB
bietet GW-BASIC eine Möglichkeit zumInterrupt-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ütztCGA- als auchEGA-Grafik.VGA Grafikmodi werden in GW-Basic noch nicht unterstützt. Auch höhere Grafikanweisungen wieLINE
,PAINT
oderCIRCLE
stehen zur Verfügung. Einzelne Punkte können mitPSET
eingefärbt und der Farbwert mitPOINT
wieder ausgelesen werden.Bitmaps können mittelsGET
undPUT
gelesen und geschrieben werden.
Mit derPLAY
-Anweisung kann der PC-Lautsprecher einstimmige Melodien abspielen, wobei Noten alsZeichenkette angegeben werden (z. B.PLAY "edcdeee2dfedc4"
). Ein Zugriff auf niedrigerer Ebene ist mit derSOUND
-Anweisung möglich. Dabei wird die Frequenz inHertz und die Länge in 'clock ticks' für denSystemlautsprecher angegeben.
Grenzen
[Bearbeiten |Quelltext bearbeiten]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 dieOverlay-Technik ausgeglichen werden, die mittels der AnweisungenCHAIN
undMERGE
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.
Weblinks
[Bearbeiten |Quelltext bearbeiten]- GW-BASIC-Manual als E-Book
- GW-BASIC 3.23 (1988) in der Archive.org-Software-Bibliothek
- Microsofts veröffentlichte GW-BASIC-Quelltexte der 8088-Portierung in Assemblersprache; die Quelltexte stammen vom 10. Februar 1983 und laufen u. a. auf MS-DOS 1.25 und 2.00.
Einzelnachweise
[Bearbeiten |Quelltext bearbeiten]- ↑abRich 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.“
- ↑abcAlexander Neumann: Microsoft legt Sourcen für GW-BASIC-Interpreter offen. In:Heise online. 22. Mai 2020. Abgerufen am 22. Mai 2020.
- ↑Stuart R. Greenberg:Languages – BASIC, Yes; Feeble, No: GW-BASIC and BASICA. In:PC Magazine.Band 8,Nr. 18.Ziff Davis, 31. Oktober 1989,S. 202 (englisch,eingeschränkte Vorschau in der Google-Buchsuche):“Microsoft’s generic interpreter, GW-BASIC (included with most MS-DOS versions), and IBM’s version, BASICA (included with PC-DOS), are essentially the same program.”