# Atari BASIC

Atari-BASIC (selten auch Shepardson BASIC genannt) ist ein ROM-residenter BASIC-Interpreter für Atari-8-Bit-Heimcomputer. Die erste Version wurde mit den Systemen der Atari 400/800 als 8 KB-Einsteck-Cartridge mitgeliefert, in den Rechnern der Atari XL/XE-Reihe war es fest eingebaut und wurde automatisch gestartet, wenn der Cartridge-Schacht nicht belegt war und der Computer nicht mit gedrückter OPTION-Taste gebootet wurde. Der vollständige kommentierte Quelltext und Beschreibung der Architektur von Atari-BASIC wurde bereits sehr früh in Buchform veröffentlicht. Die grundlegende Beschreibung von Parser und Interpreter brachte eine ganze Familie von davon stark beeinflussten BASICs hervor.

## Geschichte des Atari-BASIC

Ursprünglich waren die Atari-400/800-Serie als Nachfolger der Spielekonsole Atari 2600 geplant, bevor man sich entschloss, in den wachsenden Markt für Heimcomputer einzusteigen. Dazu benötigte Atari aber dringend noch einen Basic-Interpreter, da dies zu der Zeit eine Grundanforderung an einen Heimcomputer war. Atari entschloss sich wie viele andere Computerhersteller auch, die 8-KB-Version von Microsoft BASIC zu verwenden, dem damals vorherrschenden BASIC-Dialekt und erwarb auch eine Lizenz von Microsoft. Allerdings wuchs der benötigte Speicherbedarf bei der Portierung vom 8080 auf den 6502-Prozessor von 8 kB auf 11 kB an, da der 6502 über einen kleineren Befehlssatz verfügt. Dies war zu viel für ein ROM-Modul dieser Zeit.
Als der angekündigte Veröffentlichungstermin für die Atari-Computer immer näher rückte, wandte man sich an Shepardson Microsystems, Inc., die bereits einige Programme für Apple-II-Rechner geschrieben hatten und die dabei waren, einen eigenen BASIC-Interpreter zu entwickeln. Shepardson schlug ein vollständiges Redesign vor, das Ergebnis war eine BASIC-Version, die sich stark von dem ursprünglich geplanten Microsoft-BASIC unterschied. Aufgrund einer Bonus-Regelung im Vertrag schritt die Entwicklung schnell voran und konnte noch rechtzeitig vor Veröffentlichung der Computer fertiggestellt werden. Insgesamt wurden drei Versionen des Atari-BASIC veröffentlicht:
* Revision A lag ausschließlich den Systemen der Atari 400/800er-Serie als Cartridge bei. Die Programmierer bei Shepardson entdeckten noch vor der Veröffentlichung einige Bugs, zu dem Zeitpunkt waren die Cartridges aber bereits in Produktion. Der schwerwiegendste Fehler dieser Version war, dass sich die Tastatur des Rechners beim Löschen von Programmcode gelegentlich vollständig aufhängte, einschließlich der Reset-Taste, so dass nur noch ein Kaltstart half.
* Revision B war in den Atari XL-Rechnern fest eingebaut. Den „Keyboard Hangup“ hatte man zwar beseitigt, aber dafür einen weit ernsteren Fehler eingebaut: Bei jedem Abspeichern wurden dem Programm 16 Byte hinzugefügt, so dass man in die Gefahr geraten konnte, dass einem vorzeitig der Speicher ausgeht. Auf dem 600 XL, der nur über 16 kB RAM für BASIC-Programme verfügte, war dies ein weitaus ernsteres Problem.
* Revision C wurde ab 1983 in geringen Stückzahlen als Cartridge verkauft, in den Computern wurde es jedoch nicht vor 1984 eingebaut. Es kam in den letzten Atari 800-XL-Rechnern sowie allen Systemen der Atari-XE-Serie zum Einsatz.

## Besonderheiten von Atari-BASIC
### Geschwindigkeit und Datentypen

Atari-BASIC ist deutlich langsamer als andere BASIC-Versionen dieser Zeit, obwohl der Prozessor der Atari-Computer mit 1,77 MHz (PAL) bzw. 1,79 (NTSC) damals sehr schnell getaktet war. Grund ist zum einen, dass bei Sprüngen und Rücksprüngen nicht die Speicheradresse direkt angesprungen, sondern immer die Zeilennummer referenziert wird, nach der jedes Mal das Programm abgesucht werden muss. Ein Beispiel dafür ist die in BASIC damals sehr beliebte Verzögerungsschleife:
Bei Aufruf der FOR-Schleife wird die Programmzeile „10000“ als Rücksprungadresse gespeichert. Gelangt das Programm an die passende NEXT-Anweisung, durchsucht der Interpreter das Programm nun von der ersten Programmzeile an, bis es auf die Zeile 10000 stößt und fährt dort mit der Abarbeitung fort. Dies bedeutet einen Performanceverlust insbesondere für Schleifen am Ende eines langen Programms.
Zudem kennt Atari-BASIC keine Ganzzahlarithmetik (Integers), alle Zahlen werden grundsätzlich als 7-Byte-BCD gespeichert. Bei der Arithmetik greift Atari-BASIC auf Routinen des Betriebssystems zurück, die auf Speicherplatz und nicht auf Geschwindigkeit optimiert wurden.
Der größte Unterschied zu anderen Basic-Dialekten liegt jedoch in der Behandlung von Arrays und Strings. Atari-BASIC kennt nur eindimensionale Arrays, String-Arrays sind überhaupt nicht möglich. Strings müssen zum Programmstart grundsätzlich dimensioniert werden, Befehle wie LEFT$, MID$, RIGHT$ zur Stringbehandlung existieren unter Atari-BASIC nicht, dafür hat man aber direkten Zugriff auf jedes String-Element. Mit A$(5,5) greift man auf das 5. Zeichen im String A$ zu, mit A$(4,6) auf die Zeichen 4 bis 6 und mit A$(6) auf das 6. bis letzte Zeichen. Darüber kann man auch gezielt einzelne String-Elemente manipulieren, was unter anderen BASIC-Dialekten i. d. R. nicht möglich ist.

### Grafik- und Soundanweisungen

Im Gegensatz zu anderen BASIC-Dialekten dieser Zeit verfügt Atari-BASIC schon über Befehle zur Grafik- und Soundprogrammierung. So lassen sich z. B. mit PLOT und DRAWTO Punkte und Linien zeichnen, mit SETCOLOR Farbregister verändern (aber nicht auslesen) und mit SOUND hat man Zugriff auf die vier getrennten Soundkanäle des POKEY-Chip. Auch zur Abfrage von Joystick und Paddle existieren Funktionen. Auf anderen Heimcomputern wie z. B. dem C-64 musste man dazu Betriebssystem-Routinen aufrufen oder kryptische POKE- und PEEK-Anweisungen verwenden.
Allerdings sind insbesondere die Grafik-Befehle beim Atari-BASIC nur als rudimentär zu bezeichnen. Es gibt z. B. keine Funktionen, um Kreise oder Ellipsen zu zeichnen oder Flächen zu füllen. Auch für die Programmierung von Player Missiles (der Atari-Entsprechung von Sprites), wird nicht unterstützt, hier ist man wiederum auf POKEs und z. T. Unterprogramme in Maschinensprache angewiesen.

### Die Ein- und Ausgabe über XIO

Für die Aus- und Eingabe auf/von Druckern, Plotter, Kassette, Diskette, Modem u. a. existiert die Universal-Anweisung: XIO (Abkürzung für extended input/output). Über XIO-Befehle kann man z. B. Dateien auf der Diskette umbenennen oder löschen, ohne dazu ins DOS-Menü gehen zu müssen. Für einige XIO-Befehle gibt es Basic-Aliasse, manche XIO-Funktionen sind exklusiv.

## Nachfolger von Atari-BASIC

1981 machten sich Programmierer von Shepardson Microsystems selbstständig, gründeten die Firma Optimized Software Systems (OSS), erwarben die Rechte an Shepardson BASIC und entwickelten dieses weiter zu BASIC A+. Dieser BASIC-Interpreter beseitigte die größten Schwächen von Atari-BASIC wie die mangelhafte Geschwindigkeit und fügte zahlreiche Befehle zur Grafik-Bearbeitung (einschließlich Player-Missile-Grafik). Mit BASIC XL und BASIC XE setze OSS diese Reihe fort. Atari veröffentlichte schließlich auch seine Portierung von Microsoft-BASIC. Alle diese Sprachen hatten den Nachteil, dass der Anwender den Interpreter zur Ausführung der Programme besitzen musste. Einen Compiler gab es nicht, für BASIC XL wurde immerhin eine frei verteilbare Runtime mitgeliefert.
Weitaus erfolgreicher war schließlich der inoffizielle Nachfolger von Atari-BASIC, Turbo-BASIC XL, der 1985 als Listing des Monats in der Zeitschrift Happy Computer veröffentlicht wurde, später kam auch ein Compiler hinzu. Als Programme zum Abtippen standen Interpreter und Compiler nahezu zum Nulltarif zur Verfügung, so dass sich dieser zu Atari-BASIC abwärtskompatible Dialekt schnell als Standard etablieren konnte.
Siehe auch Atari Microsoft BASIC.