# BASICODE

BASICODE war ein in den 1980er- und 1990er-Jahren aktives Computerprojekt mit dem Ziel, einen einheitlichen Sprachstandard für die Programmiersprache BASIC festzulegen. BASIC war zwar auf vielen in dieser Zeit populären Heimcomputern verbreitet, jedoch in unzähligen zueinander inkompatiblen Varianten. Das Projekt wurde 1980 von der niederländischen Rundfunkvereinigung Nederlandse Omroep Stichting (NOS) in der Rundfunkserie Hobbyscoop ins Leben gerufen und später auch vom WDR Computerclub, vom Rundfunk der DDR und von der British Broadcasting Corporation (kurz: BBC) unterstützt.
Grundlage des Systems waren rechnerspezifische Zusatzprogramme, welche die Aufrufe der durch den BASICODE-Sprachstandard definierten Subroutinen für die Ein- und Ausgabe von Text, Grafik und Sound entsprechend den technischen Möglichkeiten des jeweiligen Rechners ausführten. Diese als Bascoder bezeichneten Programme ermöglichten darüber hinaus durch Definition eines einheitlichen Datenformats für die damals als Datenträger üblichen Compact Cassetten den Programm- und Datenaustausch zwischen verschiedenen Heimcomputerplattformen sowie über die Ausstrahlung im Rundfunk.


## Entwicklung
### Die Ausgangssituation
Vom Ende der 1970er- bis zum Ende der 1980er-Jahre waren Heimcomputer auf der Basis von 8-Bit-Prozessoren unter Privatanwendern sehr populär. Zu den bekanntesten gehörten dabei der TRS-80 von Tandy, der PET 2001, VC20, C64 bzw. C128 sowie Plus/4 von Commodore, die Modelle von Atari (400, 800, XL, XE), die verschiedenen Ausführungen des Apple II, die Modelle der Schneider-CPC-Reihe, die Computer des Herstellers Sinclair Research (ZX80, ZX81, ZX Spectrum) und in der DDR die Rechner der Baureihen Z1013, Z9001, KC85/1 und KC87 sowie KC85/2 bis KC85/4 von Robotron. Gemeinsam war diesen Rechnern, dass sie mit einem 8-Bit-Prozessor der Typen MOS Technologies 6502, Intel 8080 oder Zilog Z80, zwischen 16 und 64 KByte RAM-Speicher, einer Anschlussmöglichkeit für Kassettenrekorder oder einem eingebauten Kassettenlaufwerk zur Datenspeicherung auf Compact Cassette (der TRS-80 hatte bereits Slots für 5 1/4 – Zoll – Disketten) sowie einem oft im ROM-Speicher fest eingebautem Interpreter für die damals weit verbreitete Programmiersprache BASIC ausgestattet waren. Die leichte Erlernbarkeit der für Einsteiger konzipierten Sprache BASIC sowie ihre unmittelbare Verfügbarkeit auf all diesen Rechnern führte dazu, dass viele Besitzer von Heimcomputern selbst programmierten und ihre Programme untereinander austauschten.
Problematisch für den Austausch von Programmen und Daten zwischen Computern verschiedener Hersteller war jedoch zum einen, dass die verwendeten BASIC-Varianten untereinander in vielen Bereichen völlig inkompatibel waren. Sie verwendeten also für die gleiche Aktion (wie zum Beispiel das Löschen des Bildschirms, das Zeichnen eines Punktes auf den Bildschirm oder die Ausgabe eines Tones) verschiedene BASIC-Befehle, so dass beispielsweise ein auf einem C64 geschriebenes BASIC-Programm ohne manuelle Anpassung in der Regel nicht auf einem Atari XL funktionierte und umgekehrt. Zum zweiten unterschieden sich die Computer in ihrer technischen Ausstattung, also zum Beispiel der Bildschirmauflösung, der Anzahl der möglichen Farben oder den für die Soundausgabe verfügbaren Möglichkeiten. Drittens waren die auf den verschiedenen Rechnern verwendeten Datenformate zum Abspeichern von Daten und Programmen auf Compact Cassette ebenfalls inkompatibel zueinander.


### Der erste Standard
Um 1980 begann die niederländische Rundfunkvereinigung NOS mit der Ausstrahlung von Computerprogrammen im Radio. Da Programme und Daten auf den Compact Cassetten als Töne gespeichert wurden, war es möglich, solche Radiosendungen auf einem Kassettenrekorder aufzuzeichnen und die gesendeten Programme dann anschließend mit dem Computer einzulesen. Aus den eingangs dargestellten Problemen ergab sich jedoch, dass ein Programm fast immer für alle populären Computertypen speziell angepasst werden musste und dann in entsprechenden Versionen auch mehrfach im Radio gesendet wurde. Die bei der Speicherung auf Compact Cassetten sehr geringe Datendichte im Vergleich zu heutigen Datenträgern bedeutete, dass die Ausstrahlung im Radio und damit auch die Aufzeichnung entsprechend lange dauerte, und somit in einer Sendung nur eine sehr begrenzte Anzahl an Programmen gesendet werden konnte. Die Ausstrahlung des gleichen Programms in mehreren verschiedenen Versionen war also ein großer Nachteil.
Im Jahr 1982 kamen dann die Verantwortlichen bei NOS auf die Idee, ein einheitliches Datenformat zu entwickeln. Ein für jeden Computertyp spezifisches Programm, der sogenannte Bascoder, übernahm dabei das Einlesen dieses Formats von der Kassette beziehungsweise das Abspeichern von Programmen und Daten in diesem einheitlichen Format auf die Kassette. Auch diese Programme wurden von NOS über Rundfunk verbreitet. Sie konnten darüber hinaus auf Compact Cassetten von NOS erworben werden und wurden auch zwischen Computerbenutzern im privaten Kreis weitergegeben. Das hinsichtlich Störungen bei der Übertragung sehr robuste Format konnte von allen damals verbreiteten Homecomputern am jeweiligen Datenein- und -ausgang gelesen und geschrieben werden. Die Robustheit dieses Standards ermöglichte auch die Ausstrahlung auf Mittelwelle-Frequenzen, was wiederum die Reichweite und damit die Zahl der möglichen Empfänger vergrößerte. Die im niederländischen Rundfunk durch die NOS von Hilversum gesendeten Programme konnten zum Beispiel auch in weiten Teilen der Deutschen Demokratischen Republik (DDR) empfangen werden. Im Westen Deutschlands konnten bei guten Empfang die Sendungen der BBC aus Großbritannien genutzt werden, die ebenfalls BASICODE-Programme ausstrahlte. Größte Bekanntheit dürfte BASICODE in der Bundesrepublik Deutschland durch den WDR Computerclub erlangt haben, der an Sonntagen unter der Bezeichnung „Hard-Bit-Rock“ BASICODE-Programme über das TV-Tonsignal sendete. Da während der Ausstrahlung der Programme keine weitere Moderation in der Sendung möglich war, wurden später BASICODE-Programme mittels Videodat übertragen. Dieses System nutzte die sogenannte Austastlücke im Videosignal des Fernsehbildes zur lautlosen Datenübertragung.


### BASICODE 2
Der mit BASICODE geschaffene Standard löste zwar eines der eingangs dargestellten Probleme, nämlich das der zueinander inkompatiblen Datenformate. Programme mussten jedoch weiterhin auf jedem einzelnen Rechnertyp an den jeweiligen BASIC-Dialekt und die spezifischen technischen Gegebenheiten angepasst werden. Eine mögliche Beschränkung auf diejenigen Elemente der Sprache BASIC, die allen Dialekten gemeinsam war, bedeutete unbefriedigende Einschränkungen hinsichtlich der Funktionalität der Programme, zum Beispiel den Verzicht auf Grafik und Sound und nur unkomfortable Möglichkeiten zur Dateneingabe über die Tastatur und zur Steuerung der Datenausgabe auf dem Bildschirm. Aus diesem Grund wurde 1984 der Standard BASICODE 2 geschaffen. Die auf diesem Standard basierenden Bascoder enthielten nicht nur die Routinen zur Ein- und Ausgabe von Programmen und Daten auf Compact Cassetten. Zusätzlich zu einem Satz von ca. 50 BASIC-Befehlen, -funktionen und -operatoren, die in allen BASIC-Dialekten identisch waren, definierte der Sprachstandard von BASICODE 2 darüber hinaus erstmals auch eine Bibliothek an Subroutinen, deren Aufruf auf allen Computern die gleiche Funktionalität bereitstellte.
Dazu wurde festgelegt, dass der Bereich der Programmzeilen unterhalb der Zeilennummer 1000 für den Bascoder reserviert war und in BASICODE geschriebene Programme somit erst ab der Zeilennummer 1000 beginnen durften. Die Subroutinen des Bascoders in den Zeilennummern unter 1000 wurden dann durch die GOSUB-Anweisung aufgerufen. Dabei notwendige Argumente wurden übergeben, indem vor dem Aufruf bestimmten, für den Bascoder reservierten Variablen die entsprechenden Werte zugewiesen wurden. Der BASICODE-Sprachstandard enthielt darüber hinaus noch einige weitere Festlegungen, die sich aus den Einschränkungen einiger Rechnertypen ergaben. So durfte beispielsweise, im Gegensatz zu den BASIC-Dialekten fast aller anderen Computer, auf dem ZX81 eine Programmzeile nur einen einzigen BASIC-Befehl enthalten, oder eine Programmzeile im BASIC-Dialekt der KC-Reihe durfte nicht länger als 60 Zeichen sein. Solche Einschränkungen mussten, da der Bascoder zusammen mit dem BASICODE-Programm vom jeweils rechnerspezifischen BASIC-Interpreter abgearbeitet wurde, für alle BASICODE-Programme gelten, um volle Plattformunabhängigkeit zu erreichen.
Die Bascoder wurden also auf ihren jeweiligen Rechnern als normale Programme geladen und stellten anschließend die zusätzlichen Routinen für den gemeinsamen Sprachstandard und für die Ein- und Ausgabe auf Kassetten zur Verfügung. Die in BASICODE geschriebenen Programme waren somit erst nach dem Laden und Starten des Bascoders nutzbar. Auf einigen Rechnern konnten jedoch die BASICODE-Programme zusammen mit dem Sprachteil des Bascoders im typspezifischen Datenformat gespeichert werden. Dadurch war es dann zwar nicht mehr möglich, diese Aufzeichnung auf anderen Rechnertypen zu verwenden. Allerdings hatten die typspezifischen Datenformate fast immer eine deutlich höhere Datendichte, so dass das gleiche Programm deutlich schneller als im BASICODE-Format geladen werden konnte. Darüber hinaus stand ohne die Notwendigkeit, vor der Ausführung des BASICODE-Programms den kompletten Bascoder laden zu müssen, deutlich mehr Arbeitsspeicher zur Programmlaufzeit zur Verfügung.
Bascoder für den BASICODE-2-Standard existierten unter anderem für die Computertypen Exidy Sorcerer, DAI, Colour Genie, Commodore PET, VIC-20, C64, Amiga, Sinclair ZX81, Sinclair ZX Spectrum, Sinclair QL, Philips P2000T, Acorn Atom, BBC, Electron, Tandy TRS-80, MSX, Oric Atmos, Grundy NewBrain, Amstrad CPC 464, IBM PC, Apple II, Texas Instruments TI-99/4A, Mattel Aquarius und andere. Erfahrene Computerbesitzer waren darüber hinaus auch in der Lage, einen eigenen Bascoder für ihr spezielles System zu entwickeln, da der Sprachstandard und das Datenformat offengelegt und gut dokumentiert waren. Der durch BASICODE 2 definierte Sprachstandard ermöglichte bereits die Entwicklung von systemunabhängigen Programmen mit für die damalige Zeit relativ fortgeschrittenen Möglichkeiten. BASICODE wurde darüber hinaus auch genutzt, um in Form sogenannter Journale Informationen wie zum Beispiel Neuigkeiten aus der Computerszene im Radio zu senden und zwischen Computernutzern weiterzugeben. Auch ein umfangreicher Kurs zur Programmierung in BASICODE und andere Dokumentationen wurden auf diesem Weg verbreitet.


### BASICODE 3/3C
1986 wurde der neue Standard BASICODE 3 entwickelt. Dieser enthielt als wesentliche Neuerungen Routinen für einfache monochrome Grafikausgabe, das Lesen und Speichern von Daten aus Programmen heraus sowie für die Ausgabe von Sound. Mit BASICODE 3 wurde BASICODE insbesondere auch in der Computerszene der DDR bekannt, und BASICODE-Programme wurden ab 1989 auch im Rundfunk der DDR gesendet. Auch der niederländische Sender TROS (Televisie en Radio Omroep Stichting) sendete BASICODE-3-Programme. In der DDR erschien darüber hinaus ein Buch, dem eine kleine Schallplatte mit den Bascodern für alle in der DDR verbreiteten Computertypen beilag. Die letzte überarbeitete BASICODE-Version, die insbesondere die Bildschirmausgabe in Farbe als Neuerung enthielt, wurde 1991 als BASICODE 3C veröffentlicht.


### Das Ende der Popularität von BASICODE
Mit dem Beginn der 1990er-Jahre nahm die Popularität von BASICODE aufgrund der immer weiteren Verbreitung von 16- und 32-Bit-Computern und insbesondere neuer Varianten des IBM-PCs sowie dazu kompatibler Geräte sehr schnell ab. Auch wenn für diese Computer meistens noch Bascoder entwickelt wurden, war BASICODE zu limitiert, um die technischen Möglichkeiten dieser Rechnergeneration angemessen auszunutzen. Darüber hinaus entfiel durch die weitestgehende Konzentration auf wenige Rechnerarchitekturen im 16- und 32-Bit-Bereich der Hauptgrund für die Entstehung und Nutzung von BASICODE. Viele Menschen waren aufgrund der zunehmenden Komplexität der Hard- und Software der neuen Systeme nicht mehr daran interessiert oder in der Lage, selbst zu programmieren. Auch die zunehmende Popularität von grafischen Benutzeroberflächen trug zum raschen Rückgang der Verbreitung von 8-Bit-Computern und damit auch von BASICODE bei.
Der aus dem DDR-Rundfunk hervorgegangene Deutschlandsender Kultur, der später mit anderen Sendern zum Deutschlandradio fusionierte, strahlte noch bis etwa 1992 BASICODE-Programme aus. Ein noch geplanter Standard BASICODE 4 wurde nie offiziell realisiert, da die NOS kurz nach der Veröffentlichung von BASICODE 3C ihre Unterstützung des Projektes aufgab. BASICODE wird heute noch von einigen Enthusiasten, insbesondere 8-Bit-Computer-Fans, vorwiegend aus nostalgischem Interesse weiterhin verwendet, besitzt jedoch keine praktische Relevanz mehr.


## Historische Bedeutung
BASICODE war im Heimanwenderbereich einer der frühen Versuche, auf verschiedenen zueinander inkompatiblen Rechnerarchitekturen einen gemeinsamen Standard zum Austausch von Programmen und Daten zu schaffen. Es entstand etwa zur gleichen Zeit wie das von Microsoft entwickelte MSX-System, dessen Standardisierung neben einem einheitlichen BASIC-Sprachstandard auch eine definierte Hardware-Spezifikation umfasste. Entsprechende Computer wurden von verschiedenen Unternehmen verkauft und standen dabei in Konkurrenz zu anderen populären Heimcomputern. In größerem Maß erfolgreich war MSX nahezu ausschließlich in den Heimatmärkten der Hersteller, wie beispielsweise in Japan und Südkorea, in den Niederlanden und in Brasilien. Im Gegensatz zu MSX definierte BASICODE keine Hardware-Spezifikation, sondern einen Sprachstandard für die auf Heimcomputern nahezu universell verfügbare Programmiersprache BASIC sowie ein Datenformat für Compact Cassetten, das auf allen mit BASICODE ausgestatteten Computern gelesen und geschrieben werden konnte. Die Umsetzung von BASICODE erfolgte damit ausschließlich durch Zusatzsoftware und war deshalb nicht auf Rechner bestimmter Hardwarehersteller beschränkt. Die Verbreitung von BASICODE lässt sich schwer einschätzen, da sowohl die Bascoder als auch die in BASICODE entwickelten Programme frei verfügbar waren und weitergegeben wurden. Bascoder waren jedoch für nahezu jeden jemals verkauften Heimcomputer dieser Computer-Ära erhältlich. Kommerziell war BASICODE aufgrund seiner freien Verbreitung nicht von Relevanz.
Konzeptbedingt war es mit BASICODE allerdings nicht möglich, die jeweils spezifischen technischen Möglichkeiten eines bestimmten Rechnertyps voll auszunutzen. Der durch BASICODE definierte Sprachstandard beschränkte sich nahezu vollständig auf den kleinsten gemeinsamen Nenner aller relevanten Computersysteme. Dieses Konzept wurde erst mit BASICODE 3/3C teilweise aufgegeben, da einige Rechnertypen beziehungsweise Varianten wie beispielsweise die ZX80/ZX81-Rechner und der KC87 keine echte Grafikausgabe und keine Farbausgabe ermöglichten und somit die entsprechenden neu eingeführten Funktionen von BASICODE 3/3C auf diesen Rechnern nicht mehr nutzbar waren. Insbesondere bei zeitkritischen Anwendungen und im Bereich der Grafik- und Soundausgabe, also zum Beispiel bei der Entwicklung von Computerspielen, war BASICODE einer Programmierung im jeweils systemspezifischen BASIC-Dialekt oder direkt im Maschinencode klar unterlegen. Die Stärken von BASICODE lagen somit eher in den Bereichen Anwendungsentwicklung, Software für den Bildungsbereich und Datenaustausch. Das BASICODE-Datenformat wurde darüber hinaus auch zur Weitergabe von Programmen in der Programmiersprache Pascal genutzt, die hinsichtlich ihrer Sprachdefinition deutlich besser standardisiert war als BASIC. Pascal-Compiler waren allerdings nur auf einigen Heimcomputer-Typen verfügbar.
Das grundlegende Konzept von BASICODE, nämlich die Definition eines Sprachstandards zur plattformunabhängigen Softwareentwicklung und die Realisierung dieses Standards durch systemspezifische Programme (Bascoder), ist später bei der Programmiersprache Java ebenfalls realisiert worden, und zwar in Form der betriebssystemspezifischen Java Virtual Machines zur Ausführung der Java-Programme. Die Weitergabe von Daten und Informationen im BASICODE-Datenformat als Journale erinnert darüber hinaus an heute genutzte plattformunabhängige Dokumentformate wie zum Beispiel das Portable Document Format (PDF) und die dafür notwendigen systemspezifischen PDF-Reader-Programme.


## Das BASICODE-Datenformat
Im BASICODE-Format erfolgt die Aufzeichnung von Programmen analog zur Aufzeichnung von Daten. Bei der Aufzeichnung von Programmen werden also die einzelnen BASIC-Befehle nicht wie meistens üblich in Form von 1-Byte-Einheiten (Token), sondern Zeichen für Zeichen abgespeichert und eingelesen.
Jedes Byte wird in der Form „1 Startbit – 8 Datenbits – 2 Stoppbits“ übertragen. Die sich daraus ergebende Redundanz dient vor allem der Sicherheit bei der Übertragung. Bit 7 wird immer negiert übertragen, was insbesondere bei der Übertragung von ASCII-Zeichen von Nutzen ist. Diese enthalten an Bit 7 stets ein 0-Bit, so dass sich bei ASCII-Zeichen durch die negierte Übertragung drei Stoppbits ergeben. Der Beginn einer Übertragung wird durch das Zeichen 02 (STX, Start of Text) markiert, das Ende durch das Zeichen 03 (ETX, End of Text). Nach ETX wird noch ein Checkbyte gesendet, das aus den vorherigen Bytes einschließlich STX und ETX durch bitweise Binäraddition (XOR) berechnet wird. Das Zeichen 0DH bzw. 13D kennzeichnet bei der Übertragung das Ende einer Zeile. Von Programmen erzeugte Datenfiles können alle Zeichen als Daten verwenden, so dass sie keine Steuerzeichen enthalten. Sie werden vielmehr in 1.024-Byte-Blöcken gelesen und geschrieben.
Als Tonsignale werden Rechteckschwingungen in Form einer 1200-Hz-Schwingung für ein 0-Bit und zwei 2.400-Hz-Schwingungen für ein 1-Bit mit einer Länge von jeweils 1/1200 Sekunden für jedes Bitsignal verwendet. Eine Pause von mehr als 1/1800 Sekunden zwischen zwei Flanken markiert den Beginn der Übertragung eines Bytes, die darauf folgende Schwingung stellt also ein Startbit dar. Nach dem Startbit und vor der Übertragung der acht Datenbits folgt erneut eine Pause von mindestens 1/1800 Sekunden. Ein 2400-Hz-Signal von fünf Sekunden Dauer markiert den Beginn einer Übertragung und dient zur Synchronisation des Leseprogramms. Am Ende einer Übertragung wird ein 2400-Hz-Signal von einer Sekunde Dauer gesendet.
Die theoretische Datenrate dieses Formats beträgt 1200 Bits pro Sekunde (bit/s). Aufgrund der Übertragung von drei zusätzlichen Bits pro Datenbyte sowie der Pausen vor und nach einem Startbit ergibt sich daraus eine reale Datenrate von etwa 102 Bytes pro Sekunde, also etwa sechs KBytes pro Minute.


## Der BASICODE-Sprachstandard
### BASICODE 2
In BASICODE 2 erlaubte BASIC-Befehle, -funktionen und -operatoren
Die im Folgenden genannten Elemente der Programmiersprache BASIC sind in den BASIC-Dialekten aller unterstützten Computertypen mit identischer Funktionalität verfügbar. Sie sind somit auch Teil des BASICODE-Sprachstandards.

Befehle:
DATA    DIM     END     FOR     GOSUB   GOTO    IF      INPUT   NEXT    ON
PRINT   READ    REM     RESTORE RETURN  RUN     STEP    STOP    THEN    TAB
TO

Funktionen:
ABS     ASC     ATN     COS     EXP     INT     LEN     LOG     SGN     SIN
SQR     TAN     VAL

CHR$    LEFT$   MID$    RIGHT$

AND     OR      NOT

Rechenoperatoren:
^ Potenzieren
* Multiplikation
/ Division
+ Addition und Verkettung von Stringvariablen
- Subtraktion

Vergleichsoperatoren:
=       <>      <       >       <=      >= 

In BASICODE 2 durch den Bascoder bereitgestellte Routinen
Die folgenden im Bascoder enthaltenen Routinen sind in den einzelnen BASIC-Dialekten durch verschiedene, in ihrer Syntax zueinander inkompatible Befehle oder Funktionen realisiert. Durch die GOSUB-Aufrufe wird also gewährleistet, dass diese Möglichkeiten als Teil des BASICODE-Sprachstandards einheitlich auf allen entsprechenden Rechnern verfügbar sind.

GOSUB 100 Löschen des Bildschirms
GOSUB 110 Setzen des Cursors an eine bestimmte Position
          Übergabe der Position in den Variablen HO und VE
GOSUB 120 Ermittlung der Position des Cursors
          Rückgabe der Position in den Variablen HO und VE

GOSUB 200 Auslesen eines Tastendrucks
          Rückgabe des Zeichens in der Variablen IN$
          Rückgabe einer leeren Variablen IN$, wenn keine Taste gedrückt wurde
GOSUB 210 Warten auf einen Tastendruck
          Rückgabe des Zeichens in der Variablen IN$
GOSUB 250 Ausgabe eines einfachen kurzen Tons ("Beep")
GOSUB 260 Ermittlung einer Zufallszahl zwischen 0 und 1
          Rückgabe der Zahl in der Variablen RV
GOSUB 270 Ermittlung der Größe des freien Speichers
          Rückgabe des Wertes in der Variablen FR

GOSUB 300 Umwandlung eines numerischen Wertes in einen String
          Übergabe des numerischen Wertes in der Variablen SR
          Rückgabe des Strings in der Variablen SR$
GOSUB 310 Analog zu GOSUB 300, zusätzliche Angaben:
          Übergabe einer festen Stringlänge in der Variablen CT
          Übergabe der Position des Dezimalpunkts in der Variablen CN
GOSUB 350 Ausgabe eines Strings auf dem Drucker
          Übergabe des Strings in der Variablen SR$
GOSUB 360 Ausgabe eines Zeilenumbruchs auf dem Drucker

Weitere allgemeine Festlegungen
Eine Zeile eines BASICODE-Programms darf, einschließlich Zeilennummer und Leerzeichen, maximal 60 Zeichen lang sein und sollte nur eine Anweisung enthalten. Das Argument für die Winkelfunktionen ist im Bogenmaß anzugeben. Die logischen Operatoren AND und OR dürfen in BASICODE nicht zur bitweisen Verknüpfung von Zahlen verwendet werden. Bei der Verwendung von Stringfunktionen sollte auf eventuelle Unterschiede im Zeichensatz zwischen verschiedenen Computertypen geachtet werden. Variablennamen dürfen maximal zwei Zeichen (ein oder zwei Großbuchstaben oder ein Großbuchstabe und eine Ziffer) lang sein. Jeder Variable muss vor ihrer erstmaligen Verwendung in Befehlen oder Funktionen ein Wert zugewiesen werden, da eine implizite Initialisierung nicht auf allen Rechnertypen funktioniert. Numerische Variablen sind von einfacher Genauigkeit (sechs gültige Ziffern). Stringvariablen können maximal 255 Zeichen lang sein. Jedes BASICODE-Programm beginnt in Zeile 1000. Ab der Zeilennummer 30000 stehen Kommentare zum Programm, ab Zeile 32000 formale Fakten wie Name des Autors oder Versionsinformationen.


### BASICODE 3/3C
In BASICODE 3 / 3C erlaubte BASIC-Befehle, -funktionen und -operatoren
Hinsichtlich der in BASICODE erlaubten Elemente der Sprache BASIC unterscheidet sich BASICODE 3/3C nur geringfügig von BASICODE 2. Der wichtigste Unterschied ist die Neuaufnahme von DEF FN zum Definieren von eigenen Funktionen.

Befehle:
DATA    DEF FN  DIM     FOR     GOSUB   GOTO    IF      INPUT   LET     NEXT
ON      PRINT   READ    REM     RESTORE RETURN  STEP    TAB     THEN    TO

Unterschiede zu BASICODE 2:

Neu hinzugekommen     : DEF FN  LET

Entfernt              : END     RUN     STOP

Funktionen:
ABS     ASC     ATN     COS     EXP     INT     LEN     LOG     SGN     SIN
SQR     TAN     VAL

CHR$    LEFT$   MID$    RIGHT$

AND     OR      NOT

Rechenoperatoren:
^ Potenzieren
* Multiplikation
/ Division
+ Addition und Verkettung von Stringvariablen
- Subtraktion

Vergleichsoperatoren:
=       <>      <       >       <=      >= 

In BASICODE 3/3C durch den Bascoder bereitgestellte Routinen
Der Umfang der Bascoder-Subroutinen wurde mit BASICODE 3/3C deutlich ausgeweitet im Vergleich zum Vorgänger. Insbesondere die neu hinzugekommenen Möglichkeiten zur Tonausgabe (400), zur Arbeit mit externen Dateien (500–580) und zur Grafikdarstellung (600–650) erweiterten die Möglichkeiten von BASICODE erheblich.

GOTO   20 Programmstart, System-Reset, Löschen aller Variablen

GOSUB 100 Initialisieren des Textmodus, Löschen des Bildschirms
GOSUB 110 Setzen des Cursors an eine bestimmte Position
          Übergabe der Position in den Variablen HO und VE
GOSUB 120 Ermittlung der Position des Cursors
          Rückgabe der Position in den Variablen HO und VE
GOSUB 150 Auffälliges Anzeigen eines Strings auf dem Bildschirm
          (links und rechts drei Leerzeichen)
          Übergabe des Strings in der Variablen SR$

GOSUB 200 Auslesen eines Tastendrucks
          Rückgabe des Zeichens in der Variablen IN$
          Rückgabe einer leeren Variable IN$, wenn keine Taste gedrückt wurde
GOSUB 210 Warten auf einen Tastendruck
          Rückgabe des Zeichens in der Variablen IN$
GOSUB 220 Auslesen eines Zeichens vom Bildschirm
          Übergeben der Bildschirmposition in den Variablen HO und VE
          Rückgeben des Zeichens als numerischer Wert in der Variablen IN
GOSUB 250 Ausgabe eines einfachen kurzen Tons ("Beep")
GOSUB 260 Ermittlung einer Zufallszahl zwischen 0 und 1
          Rückgabe der Zahl in der Variablen RV
GOSUB 270 Ermittlung der Größe des freien Speichers
          Rückgabe des Wertes in der Variablen FR
GOSUB 280 Aus- bzw. Einschalten der STOP/BREAK-Taste
          Übergabe des gewünschten Status in der Variablen FR (FR=0 bzw. FR=1)

GOSUB 300 Umwandlung eines numerischen Wertes in einen String
          Übergabe des numerischen Wertes in der Variablen SR
          Rückgabe des Strings in der Variablen SR$
GOSUB 310 Analog zu GOSUB 300, zusätzliche Angaben:
          Übergabe einer festen Stringlänge in der Variablen CT
          Übergabe der Position des Dezimalpunkts in der Variablen CN
GOSUB 330 Umwandlung alle Kleinbuchstaben in einem String in Großbuchstaben
          Übergabe und Rückgabe des Strings in der Variablen SR$
GOSUB 350 Ausgabe eines Strings auf dem Drucker
          Übergabe des Strings in der Variablen SR$
GOSUB 360 Ausgabe eines Zeilenumbruchs auf dem Drucker

GOSUB 400 Ausgabe eines Tons
          Übergabe der Lautstärke, Dauer und Tonhöhe in den Variablen SV, SD und SP
GOSUB 450 Warten einer bestimmten Zeit auf einen Tastendruck
          Übergabe der Dauer in der Variablen SD (in 100-Millisekunden-Einheiten)

GOSUB 500 Öffnen einer Datei
          Übergabe des Namens in der Variablen NF$
          Festlegung eines Datei-Identifiers in der Variablen NF
GOSUB 540 Lesen eines Strings aus einer Datei
          Übergabe des Identifiers in der Variablen NF
          Rückgabe des Strings in der Variablen IN$
GOSUB 560 Schreiben eines Strings in eine Datei
          Übergabe des Identifiers in der Variablen NF
          Übergabe des Strings in der Variablen SR$
GOSUB 580 Schließen einer Datei
          Übergabe des Identifiers in der Variablen NF

GOSUB 600 Initialisieren des Grafikmodus, Löschen des Bildschirms
GOSUB 620 Setzen eines Punktes
          Übergabe der Position in den Variablen HO und VE
          Übergabe der Farbe in der Variablen CN
GOSUB 630 Zeichnen einer Linie ausgehend von der aktuellen Grafikposition
          Übergabe des Endpunktes in den Variablen HO und VE
          Übergabe der Farbe in der Variablen CN
          Festlegen der Grafikposition gegebenenfalls vorher durch das Setzen eines Punktes
GOSUB 650 Ausgabe eines Strings im Grafikmodus
          Übergabe der Position in den Variablen HO und VE
          Übergabe des Strings in der Variablen SR$

GOTO  950 Beenden des BASICODE-Programms

Unterschiede zu BASICODE 2:

Neu hinzugekommen : 20, 150, 220, 280, 330, 400-450, 500-580, 600-650, 950

Abweichend        : 100

Die Übergabe und Rückgabe von Positionsangaben im Textmodus erfolgt in absoluten Werten. Im Grafikmodus werden die Variablen HO und VE hingegen mit relativen Werten belegt. Das bedeutet, dass für das Setzen eines Punktes in der Mitte des Bildschirms die Koordinaten HO=0,5 und VE=0,5 übergeben werden müssen, für die linke obere Ecke HO=0 und VE=0 und für die rechte untere Ecke HO=1 und VE=1. Damit soll unabhängig von der konkret verfügbaren Bildschirmauflösung eine vergleichbare Ausgabe erreicht werden.
Weitere allgemeine Festlegungen (zusätzlich zum BASICODE-2-Standard)
Die Namen von selbst definierten Funktionen dürfen ebenso wie Variablennamen maximal zwei Zeichen lang sein. Die Definition von eigenen Stringfunktionen ist in BASICODE nicht möglich. Das Programm endet mit „GOTO 950“, da die Befehle RUN, END und STOP verboten sind.
Folgende Variablennamen stehen in BASICODE nicht zur Verwendung im Programm zur Verfügung:

- alle Variablen, die mit dem Buchstaben O beginnen
- AS, AT, DI, DI$, DS, DS$, EI, EI$, EL, ER, FN, GO, GR, IF, LN, SQ, SQ$, ST, TI, TI$, TO
- PI

Folgende Variablen werden vom Bascoder genutzt, zum Beispiel bei der Übergabe von Argumenten an die Bascoder-Subroutinen beziehungsweise der Rückgabe von Werten:

- A, CN, CT, FR, HG, HO, IN, IN$, NF, NF$, RV, SD, SP, SR, SR$, SV, VE, VG


## Literatur
Michael Wiegand, Manfred Fillinger: BASICODE. Mit Programmkassette. Ravensburger Buchverlag, Ravensburg 1986, ISBN 3-473-44010-8.
Hermine Bakker, Jacques Haubrich (Autoren), Stichting BASICODE (Hrsg.): Het BASICODE-3 boek. 3. Auflage. Kluwer Technische Boeken B.V., Deventer / Antwerpen 1988, ISBN 90-201-2111-1.
Horst Völz: Basicode mit Programmen auf Schallplatte für Heimcomputer. Verlag Technik, Berlin 1990, ISBN 3-341-00895-0.


## Weblinks
BasiCode – Software für alle Informationen zur Geschichte und zur Programmierung
BASICODE: an example of Dutch computer folklore historische Informationen (englisch)
Victor Reijs: Overview of BASICODE-3. 10. September 2005, archiviert vom Original am 5. Dezember 2017; abgerufen am 25. Mai 2022 (englisch). 
A collection of BASICODE programs by various authors Verschiedene BASICODE-Programme (englisch)


## Einzelnachweise