Apple Integer Basic

Das Apple Integer BASIC ist der BASIC-Interpreter des Apple I – dort von Cassette einzuladen – und des ursprünglichen Apple-II-Modells – dort im ROM fest eingebaut und mit dem Computer ab Werk ausgeliefert. Die Integer-BASIC-Sprache beruht in Syntax und Semantik auf HP-BASIC, dem vom Unternehmen Hewlett-Packard entwickelten BASIC-Dialekt der 1970er Jahre; der Integer-BASIC-Interpreter selbst ist allerdings eine ganz eigenständige Neuschöpfung.

Entstehungsgeschichte

Als Apple-Mitgründer und Entwickler Steve Wozniak den Apple I konstruierte, hatten Kleincomputer weder Monitor noch Benutzeroberfläche; Konkurrenzgeräte wie der Altair 8800 brachten von Haus aus bestenfalls rudimentäre Ein- und Ausgaberoutinen mit, sie wurden in der Regel über Kippschalter Byte für Byte in Maschinensprache programmiert. Wozniak erfuhr im Homebrew Computer Club von dem BASIC-Interpreter, den Bill Gates für den Altair geschrieben hatte; dieser war aber für den Apple I nicht brauchbar, da das Altair-BASIC nur auf einem 8080-Prozessor lief und nicht auf dem 6502-Prozessor des Apple I. Woz wollte es Gates nun gleichtun und unbedingt der Erste sein, der ein BASIC für den 6502-Prozessor vorlegen konnte, obwohl er eigentlich eher in der Programmiersprache Fortran zuhause war. Als weiteren Anstoß gibt er das Buch "101 BASIC Computer Games" von David H. Ahl an.

Da Wozniak eigentlich Hardware-Entwickler war und kaum Kenntnisse in Software-Entwicklung hatte, ging er intuitiv an das Projekt heran: er analysierte Handbücher für HP-BASIC und leitete darauf eine Syntax für seinen BASIC-Interpreter ab. Er entschied sich, die Sprache einfach zu halten: Integer BASIC konnte nur mit 16-Bit-Ganzzahlen umgehen, Gleitkomma-Arithmetik sparte er aus. Er benötigte etwa vier Monate Entwicklungszeit und kodierte den Interpreter zunächst in einem Notizbuch, um ihn dann Byte für Byte einzugeben. Bestandteil des Codes war auch ein kleines Monitorprogramm für Maschinensprache. Als Teil des Integer BASIC implementierte Wozniak außerdem eine kleine, aber vielseitige virtuelle Maschine namens "Sweet 16", die in wenigen hundert Bytes Maschinencode einen fiktiven 16-Bit-Prozessor mit 16 Registern emulierte. Viele Operationen des Interpreters ließen sich in diesem 16-bit-Pseudocode wesentlich kompakter formulieren als in nativem 6502-Code, so dass der Speicherbedarf insgesamt deutlich sank.

Wozniak bezeichnete die Entwicklung des Integer BASIC später als größte technische Herausforderung seines ganzen Berufslebens. Der gesamte Code passte mitsamt den ROM-Routinen für Bildschirmdarstellung, Tastaturansteuerung etc. in 8 kB Speicher.

Integer BASIC war nicht kompatibel zum BASIC-Dialekt von Microsoft, der auf dem BASIC des Computerherstellers DEC beruhte. Wozniak entdeckte dies eigenen Aussagen zufolge erst, als er die Programme aus "101 BASIC Computer Games" auf den Apple übertragen wollte und scheiterte. Als erstes Programm passte er das Spiel Star Trek an seinen Computer an.

Weiterentwicklung

Für den 1977 erschienenen Apple II erweiterte Wozniak das Integer-BASIC um einige Grafikbefehle zur Ansteuerung des neuen LoRes-Grafikmodus und der Paddles; dabei ging er wieder eher praktisch vor, er implementierte genau die Befehle, die er benötigte, um einen brauchbaren Breakout-Clone in BASIC schreiben zu können. Damals herrschte bei Apple noch die Meinung vor, der hochauflösende HiRes-Grafikmodus werde besser den Maschinensprache-Programmierern überlassen, da ein interpretiertes BASIC auf einem 1-MHz-Rechner prinzipiell zu langsam sei, um damit ansprechende HiRes-Programme zu schreiben. Erst allmählich setzte sich die Erkenntnis durch, dass viele Anwender eher Interesse an einer einfachen als an einer schnellen Grafikprogrammierung hatten.

Als Ergänzung zu Integer BASIC für den Apple II bot Apple bald noch eine "Programmer's Aid #1" (Programmierhilfe Nr. 1) genannte Erweiterung an, die aus einem weiteren ROM-Chip bestand. Diese bot Unterstützung für Sound und Musik, für hochauflösende Graphik einschließlich einer simplen Vektorgraphik, und eine Reihe von Tools z. B. zum Testen der Speicherchips des Rechners, zum Zusammenfügen zweier Programme, zum nachträglichen Neunumerieren von Programmzeilen und so weiter. Allerdings waren alle diese Möglichkeiten über Maschinensprache-Subroutinen umgesetzt, konnten also nur über kryptische CALL-Befehle aufgerufen werden und integrierten sich somit nicht sehr gut in das bestehende BASIC. Weitere Chips dieser Art, mit anderen Schwerpunkten wie z. B. Business oder Wissenschaft, waren angedacht, erschienen aber nicht mehr.

Bereits Ende 1977 bot Apple zusätzlich zum eingebauten Integer-BASIC einen von Microsoft zugekauften BASIC-Interpreter an, weil eigene Versuche der weiteren Fortentwicklung nicht gefruchtet hatten: Wozniak war der einzige, der den Code des Integer-BASIC wirklich verstand, aber er wurde bei der Entwicklung des neuen Diskettenlaufwerks für den Apple noch dringender gebraucht. Das aus dem Microsoft BASIC abgeleitete und um einige Apple-spezifische Befehle ergänzte Applesoft BASIC war deutlich langsamer und weniger sparsam im Speicherverbrauch, bot aber die schmerzlich vermisste Gleitkomma-Arithmetik und Befehle zur Darstellung des hochauflösenden "HiRes"-Grafikmodus des Apple II mit 280 x 192 Pixeln – Integer-BASIC war ohne Umwege über Maschinensprache nur zur Ansteuerung des "LoRes"-Grafikmodus mit 40 x 48 Pixeln in der Lage.

Zunächst war Applesoft BASIC als Programmkassette zu erhalten, bald dann auch auf Diskette sowie als ROM-Steckkarte, wodurch kein kostbarer RAM-Speicher mehr dafür benötigt wurde. Viele Anwender gingen bald dazu über, die ROM-Chips aus dieser Steckkarte herauszunehmen und direkt in die Hauptplatine einzusetzen, anstelle der Integer-BASIC-Chips. Die größere Beliebtheit des Applesoft BASIC wurde schließlich von Apple anerkannt: Mit Applesoft BASIC auf der Hauptplatine (und größerem Speicher) verkaufte Apple den Rechner ab 1979 als Apple II+. Bei diesem und allen späteren Modellen der Apple-II-Serie kann jedoch Integer BASIC, inklusive der "Programmierhilfe Nr. 1", weiterhin bei Bedarf von Diskette nachgeladen werden.