Vilnius BASIC auf BK-0010-01

Vilnius BASIC , auch bekannt als BK BASIC , ist ein Dialekt der Programmiersprache BASIC, der auf den Computern Elektronika BK-0010-01/BK-0011M und UKNC läuft. Es wurde an der Universität Vilnius in Litauen entwickelt, das damals eine Republik der Sowjetunion war.

Im Gegensatz zu den meisten Mikrocomputer- BASIC-Dialekten jener Zeit, die Interpreter waren , war Vilnius BASIC eine Compile-and-Go -Sprache, die den Quellcode erst beim Eingeben eines RUNBefehls kompilierte. Ansonsten ähnelte sie GW-BASIC und MSX BASIC in Stil und den meisten Funktionen, obwohl ihr einige der in MSX vorhandenen Multimedia-Befehle fehlten. Eine Besonderheit war, dass sie nicht mehr als eine Anweisung pro Zeile zuließ, was normalerweise durch einen Doppelpunkt realisiert wurde. Außerdem fehlte die Möglichkeit, mehrere Datendateien gleichzeitig zu öffnen.

Nur die UKNC-Version verfügte über einen Vollbildeditor ; die Versionen der Maschinen der 0010-Serie verwendeten einen Zeileneditor . Auch maschinenabhängige Merkmale wie Grafikoperatoren, Parameter und PEEK/POKEAdressen unterschieden sich zwischen den Maschinen.

Beschreibung

Programmbearbeitung

Im Gegensatz zu den meisten BASIC-Dialekten jener Zeit war Vilnius BASIC ein Compiler-and-Go -System und kein Interpreter . Beim Eingeben eines Befehls RUNlas der Compiler den Code und erzeugte eine ausführbare Datei mit Threads, die er anschließend ausführte. Dieser Aspekt blieb dem Benutzer jedoch weitgehend verborgen, da das System weiterhin die Eingabe von Befehlen ohne Zeilennummer im direkten Modus (immediate Mode) oder mit Zeilennummer im indirekten Modus erlaubte. Im indirekten Modus wurde die neue Zeile dem Programm hinzugefügt oder die gleichnamige Zeile ersetzt, falls diese bereits existierte.

Ende der 1970er-Jahre boten die meisten Mikrocomputer-Dialekte einen Vollbildeditor, in dem der Benutzer mit den Cursortasten durch das Programm navigieren und Änderungen in jede sichtbare Codezeile eingeben konnte. Die Electronica-Systeme emulierten einen PDP-11 , Rechner, die in einer Zeit gebaut wurden, bevor cursoradressierbare Computerterminals weit verbreitet waren und daher den älteren Zeileneditor- Stil beibehielten. In diesen Systemen wurde eine Eingabeaufforderung angezeigt, die es dem Benutzer ermöglichte, eine Codezeile einzugeben oder eine zuvor eingegebene Zeile aufzurufen und direkt zu bearbeiten.

Befehle und Anweisungen

Die in Vilnius unterstützten Schlüsselwörter lassen sich in zwei Gruppen unterteilen: solche, die nur im direkten Modus verwendet werden können, und solche, die sowohl direkt als auch indirekt verwendet werden können.

Zu den ersteren, den sogenannten Befehlen, gehörten die üblichen Funktionen CONT, LIST, NEW, RUNzum CLOAD and CSAVELaden und Speichern von Programmen auf Kassette . AUTOAußerdem wurde die automatische Zeilennummerneingabe aktiviert, RENUMdie Zeilen im aktuellen Programm neu nummeriert und DELETEZeilenbereiche mit dem gleichen "bis"-Format wie bei LIST gelöscht. Beispielsweise DELETE -200würde LIST alles vom Programmanfang bis einschließlich Zeile 200 löschen.

Die Primitiven von Vilnius ähnelten anderen BASIC-Varianten jener Zeit und unterstützten die meisten elementaren Anweisungen wie DATA, DEF FN, DIM, END, FOR..TO..STEP..NEXT , GOSUB , GOTO , IF..THEN mit optionalem ELSE, INPUT, (optionalem) LET, LIST, PRINT, ON...GOTO und ON...GOSUB, READ, REM , RESTORE, RETURN und STOP . Im Gegensatz zu den meisten Dialekten erlaubte Vilnius jedoch nur eine Anweisung pro Zeile.

Numerische Variablen, Operatoren und Funktionen

Wie in den meisten Dialekten mussten Variablennamen mit einem Buchstaben beginnen und konnten weitere Buchstaben oder Ziffern enthalten. Variablennamen konnten beliebig lang sein, aber nur die ersten beiden Zeichen wurden gespeichert oder abgeglichen. Das bedeutete, dass die Eingabe PRT001=1des Folgenden PR=5zu einer einzelnen Variable im Speicher führte, die als PR bekannt war und den Wert 5 hatte.

Vilnius BASIC kannte vier grundlegende Datentypen: Zeichenketten, Gleitkommazahlen einfacher und doppelter Genauigkeit sowie ganze Zahlen. Sofern nicht anders angegeben, wurden Variablen als doppelt genau angenommen, acht Byte groß gespeichert und boten eine Genauigkeit von etwa 17 Stellen. Zum Vergleich: Die meisten MS-Dialekte verwendeten ein 5-Byte-Format für Gleitkommazahlen. !Wurde dem Variablennamen ein Suffix angehängt, wurde der Wert einfach genau mit vier Byte und etwa 7 Stellen Genauigkeit gespeichert. Der Suffix `%` %spezifizierte eine ganze Zahl und verwendete ein einzelnes 16-Bit-Wort zur Speicherung von Werten zwischen -32768 und +32767. Wurde einer Variablen mit geringerer Genauigkeit ein Wert mit höherer Genauigkeit zugewiesen, wurde der Überschuss verworfen; A%=1.5beispielsweise führte `%` dazu, dass `A%` den Wert 1 erhielt.

Numerische Konstanten im Quellcode konnten mithilfe derselben Indikatoren einem bestimmten Datentyp zugeordnet werden; beispielsweise 50%wurde die Konstante als Integer gespeichert, der Wert 0,05 als einfachgenauer Wert und derselbe Wert im standardmäßigen doppeltgenauen Format. Vilnius bot außerdem die Möglichkeit, numerische Konstanten als Zeichenketten aus Binär-, Oktal- oder Hexadezimalzeichen einzugeben , indem der Zeichenkette ein & und ein Buchstabe (B, O, H) vorangestellt wurde, der den Datentyp angab. So wurde beispielsweise die Hexadezimalzeichenkette H9A8B in den entsprechenden Dezimalwert 39563 umgewandelt und in A gespeichert. 0.05!5E-020.055D-02A=&H9A8B

Operatoren für numerische Werte umfassten +, -, *, /, ^die Addition \für die Ganzzahldivision und MODdie Restberechnung. So ergibt beispielsweise 5\2die Addition 2, während 5 MOD 2die Addition 1 ergibt. Numerische Funktionen umfassten die Standardfunktion ABS, ATN, COS, EXP, INT, LOG, RND, SGN, SIN, SQR, TAN. Außerdem gab es den FIXOperator, der ähnlich wie die Addition funktioniert INT, aber immer auf Null abschneidet, sodass FIX(-1.5)-1 anstelle von -2 wie bei INT zurückgegeben wird.

Neben PEEK und POKE , die 16-Bit-Werte zurückgaben, bot das System auch OUT and INPähnliche Funktionen, die jedoch eine Bitmaske auf die Werte anwandten, um das Setzen oder Löschen einzelner Bits zu ermöglichen. [ 1 ]CLS löschte den Bildschirm. Zu den Systemfunktionen gehörten FRE, die den freien Speicher zurückgaben, und TAB, die zur angegebenen Spalte wechselten. AT (x,y)funktionierte ähnlich wie TAB, bewegte den Cursor aber an die angegebene X,Y-Position.

Saiten

Das Anhängen eines Suffixes an eine Variable $kennzeichnete diese als Zeichenkette. Zu den Zeichenkettenfunktionen gehört die gängige Funktion ` ASC, CHR$, LEN, STR$, VAL.`. Diese STRING$Funktion erstellt Kopien einer gegebenen Musterzeichenkette, sodass beispielsweise `.` A$=STRING$(17, "X")eine Zeichenkette aus 17 X erzeugt. [ 2 ] Es ist nur eine Manipulationsfunktion enthalten: `.` MID$, die wie in MS funktioniert, aber auch zum Ersetzen von Zeichen in einer bestehenden Zeichenkette verwendet werden kann. `.` MID$(A$,1,1)="Y"ersetzt beispielsweise den ersten Buchstaben von A$ durch Y. `.` INKEY$gibt die aktuell gedrückte Taste auf der Tastatur zurück, falls vorhanden. [ 3 ] wurde wie in den meisten Dialekten zur Zeichenkettenverkettung+ verwendet .

Die HEX$, OCT$ and BIN$Funktionen gaben eine Zeichenkette zurück, die den übergebenen Wert kodierte. Beispielsweise PRINT HEX$(255)ergibt FF, während PRINT BIN$(255)0000000011111111 ergibt.

Grafische Ergänzungen

Die Electronica-Systeme boten Unterstützung für Computergrafik , und Vilnius BASIC enthielt zahlreiche Anweisungen zur Grafikbearbeitung. Eine Besonderheit dieses Systems war, dass X- und Y-Koordinaten in Klammern geschrieben wurden. Das System merkte sich den zuletzt angegebenen Punkt, und neue Positionen konnten mit dem Befehl `x` angegeben werden @. Wenn beispielsweise der letzte Zeichenbefehl bei (100,100) ausgeführt wurde, konnte man das Pixel bei (105,105) mit `x` auf die Farbe 3 setzen PSET @(5,5),3. Es gab fünf Farbwerte von 0 bis 3.

Zusätzlich dazu PSETkonnte man Linien von - nach zeichnen, indem man ein Koordinatenpaar durch ein Minuszeichen trennte, ähnlich dem Befehl LIST, zum Beispiel LINE (100,100)-(120,120),3. In seiner einfachsten Form CIRCLEbenötigte die Funktion ein X,Y-Paar für den Mittelpunkt, einen Radius und eine Farbe CIRCLE (120,120),30,1. Sie konnte auch Kreisbögen mit gegebenen Start- und Endwinkeln im Bogenmaß zeichnen CIRCLE (120,120),30,1,0,1.5und die vertikale Achse „komprimieren“, um eine Ellipse zu erzeugen CIRCLE (100,100),20,1,,,0.4. Die Funktion PAINT (100,100),3,1führte eine Flächenfüllung durch , beginnend bei (100,100), wobei die Fläche mit Farbe 3 gefüllt und nach außen bis zur Farbe 1 gefüllt wurde.

Schließlich gab es noch den Mehrzweckbefehl DRAW. Dieser benötigte eine Zeichenkette, die eine Reihe von Zeichenschritten kodierte, mit denen sich komplexe Formen in einer einzigen Codezeile erzeugen ließen. Die vier Himmelsrichtungen wurden mit U, D, L und R (oben, unten, links, rechts) angegeben. Die 45-Grad-Winkel waren, im Uhrzeigersinn, E (oben rechts), F, G und H (oben links). Beispielsweise DRAW "R20D20L20U20"erzeugte der Befehl „M“ ein Quadrat mit einer Seitenlänge von 20 Pixeln, beginnend an der zuletzt gezeichneten Position. Zusätzlich zu den Richtungen konnten mit dem Befehl „M“ explizite Koordinaten angegeben werden, z. B. „M100,120“, die keine Klammern benötigten. C änderte die Farbe, B bewegte die Form, ohne eine Linie zu zeichnen, und N setzte die Koordinaten auf den Zustand vor dem Befehl „DRAW“ zurück.

Es gibt eine einzige Grafikfunktion, POINT(x,y)die die Nummer der Farbe an dieser Stelle auf dem Bildschirm zurückgibt.

Beispielprogramm

1 CLS 2 FÜR X%=30% BIS 1% SCHRITT -2% 3 ? AT(X%,1%);"*" 4 ? AT(X%,20%);"*" 5 NÄCHSTE X% 

Dieses Programm löscht den Bildschirm, erstellt eine Schleife basierend auf ganzzahligen Werten und ATbewegt den Cursor anschließend abwechselnd zwischen den Y-Werten 1 und 20. An beiden Positionen wird ein Sternchen ausgegeben (mittels der Kurzform für PRINT, ?). Das Ergebnis ist eine Reihe von 30 Sternchen in zwei horizontalen Zeilen.

Siehe auch

Referenzen

Zitate

  1. ^ Handbuch , S. 46.
  2. ^ Handbuch , S. 44.
  3. ^ Handbuch , S. 45.

Bibliographie