JBASICODE Hilfe

JBASICODE ist ein in Java entwickeltes BASICODE-System, welches aus Editor, Interpreter sowie Debugger besteht und den Standard BASICODE-3C unterstützt.

Lesen Sie bitte die Lizenzbestimmungen, bevor Sie JBASICODE weiter verwenden!

Die Hilfe gliedert sich in folgende Rubriken:

1. Einführung

BASICODE ist ein in den 80er Jahren in den Niederlanden entwickelter Standard, der zum Ziel hatte, BASIC-Programme entwickeln zu können, die möglichst ohne Anpassungen auf vielen der damals üblichen 8-Bit-Heimcomputern ausgeführt werden konnten. Die Software JBASICODE soll es ermöglichen, BASICODE-Programme einfach und bequem auf heute üblichen Desktop-Computern ausführen zu können.

JBASICODE kommt mit einer deutschsprachigen und einer englischsprachigen Benutzeroberfläche daher. Möchten Sie die englischsprachige Version verwenden, dann starten Sie JBASICODE mit der Option -Duser.language=en (siehe Kommandozeile im nächsten Abschnitt).

2. Programmstart

2.1. Kommandozeile

Die Syntax der Kommandozeile sieht folgendermaßen aus:

java [-Duser.language=<Sprachcode>] -jar jbasicode.jar [-h] [-v] [[-r] <file>]

Ggf. müssen Pfad und Name des Kommandos java und der JAR-Datei angepasst werden. In eckigen Klammern stehende Elemente sind optional.

Die hinter der JAR-Datei möglichen Kommandozeilenargumente haben folgende Bedeutung:

ArgumentBedeutung
-h
-H
JBASICODE gibt eine kurze Hilfe über die Komandozeilenargumente in der Konsole aus und beendet sich anschließend.
-v
-V
JBASICODE gibt die Programmversion und das Copyright in der Konsole aus und beendet sich anschließend.
file JBASICODE startet als Fensterapplikation und lädt die angegebene Datei in den Editor.
-r file JBASICODE startet als Fensterapplikation, lädt die angegebene Datei in den Editor und startet anschließend das BASICODE-Programm im Präsentationsmodus.

2.2. BASICODE-Programm starten und beenden

Ein im Editor befindliches Programm startet Sie über das Menü Programm. Dort können Sie ein laufendes Programm auch beenden (abbrechen). Programmstart und -abbruch sind auch über das Start- (grün) und das Stoppsymbol (rot) in der Werkzeugleiste möglich.

Achtung! Im Debugger-Modus haben diese beiden Symbole eine etwas andere Bedeutung.

Das BASICODE-Programm kann auch mit der Escape-Taste abgebrochen werden (mit GOSUB 280 abschaltbar).

3. Umsetzung des BASICODE-Standards in JBASICODE

Sämtliche in BASICODE-3C spezifizierten Funktionalitäten sind in JBASICODE umgesetzt. Leider halten sich jedoch nicht alle BASICODE-Programme strikt an die Spezifikation. Damit auch diese Programme laufen, bietet JBASICODE eine gewisse Toleranz. Es wird jedoch eine Warnung ausgegeben, wenn ein Programm die Spezifikation verletzt. Diese Warnungen sind in den Einstellungen abschaltbar.

3.1. Programmdateien

Programmdateien sind laut BASICODE-Standard reine ASCII-Dateien, weshalb sie häufig auch die Dateinamenserweiterung *.asc tragen. Andere übliche Erweierungen sind *.bc, *.bc2 und *.bc3, geledentlich auch *.bas und *.txt. Zum Ausführen eines BASICODE-Programms muss dieses vorher im JBASICODE-Editor geöffnet werden. Beim Speichern wird die Datei mit der gleichen Kodierung bzw. mit dem gleichen Zeichensatz und den gleichen Zeilenendebytes gespeichert, wie sie geöffnet wurde. Ein in JBASICOE neu geschriebenes Programm wird mit der Kodierung UTF-8 ohne Byte-Order-Markierung und den Zeilenendebytes 0Dh, 0Ah gespeichert. Enthält das Programm ausschließlich ASCII-Zeichen, ergibt sich damit automatisch eine ASCII-Datei.

JBASICODE erlaubt Nicht-ASCII-Zeichen. Allerdings erscheint beim Ausführen eine Warnung, wenn in einer Zeichenkette ein Nicht-ASCII-Zeichen enthalten und das BASICODE-Programm damit nicht mehr uneingeschränkt portierbar ist. Diese Warnungen sind in den Einstellungen abschaltbar.

Für die Interoperabilität mit 8-Bit-Computern kann ein im JBASICODE-Editor befindliches Programm in eine Sound-Datei im WAV-Format exportiert werden. Zum Einlesen in solch einen Computer muss die WAV-Datei auf dem Desktop-Computer abgespielt und die Töne über eine geeignete Verbindung in die Kassettenschnittstelle des 8-Bit-Computers übertragen werden.

Für den umgekehrten Weg, d.h. zum Einlesen von BASICODE-Kassettenaufnahmen in einen Desktop-Computer, gibt es das Programm JKCLOAD vom gleichen Autor.

3.2. Datendateien

BASICODE-Programme können selbst auch Dateien lesen und schreiben. Diese Dateien enthalten üblicherweise Daten und werden deshalb hier Datendateien genannt. Beim Öffnen einer solchen Datei mit GOSUB 500 erscheint immer ein Dateiauswahldialog. Das Dateinamensfeld wird mit dem Inhalt der String-Variable NF$ vorbelegt. Die numerische Variable NF enthält die programminterne Dateinummer und wird in der Form ausgewertet, ob die Nummer gerade oder ungerade ist. Dementsprechend wird dann die Datei entweder zum Lesen oder zum Schreiben geöffnet.

Wenn Sie den Dateiauswahldialog abbrechen oder die ausgewählte Datei sich nicht öffnen lässt, wird das dem BASICODE-Programm in der Variable IN mit dem Wert -1 mitgeteilt. Anderenfalls hat IN den Wert 0, der für erfolgreich steht.

Beim Lesen, Schreiben und Schließen einer Datei mit GOSUB 540, GOSUB 560 und GOSUB 580 muss die Variable NF den gleichen Wert wie beim Öffnen der Datei haben. Das ist notwendig, da JBASICODE gleichzeitig mehrere geöffnete Datei erlaubt.

Bei jedem Aufruf von GOSUB 560 (Datei schreiben) wird nach dem Inhalt der Variable SR$ eine Satzendekennung geschrieben. Standardmäßig ist das das Byte 0Dh, was dem Verhalten vieler 8-Bit-Computer entspricht. In den Einstellungen können Sie aber auch 0Dh, 0Ah (typisch für DOS/Windows) und nur 0Ah (typisch für Linux/Unix) auswählen. Beim Lesen einer Datei erkennt JBASICODE automatisch alle drei Varianten als Satzende, so dass dafür nichts eingestellt werden muss. Bei jedem Aufruf von GOSUB 540 (aus Datei lesen) wird bis einschlßlich des Bytes 0Dh bzw. 0Ah gelesen und die gelesenen Bytes ohne die Satzendebytes in der Variable IN$ an das BASICODE-Programm zurückgegeben.

Datendateien können wie Programmdateien in eine WAV-Datei exportiert werden.

3.3. Bildschirmformat

Im Textmodus arbeitet JBASICODE mit einer Bildschirmauflösung von 40 x 25 Zeichen. Im Grafikmodus sind es 320 x 240 Pixel, was dem als Standard festgelegten Seitenverhältnis von 4:3 entspricht. Viele Heimcoputer der damaligen Zeit haben aber eine Bildschirmauflösung von etwa 320 x 200 Pixel, was dem Seitenverhältnis 16:10 entspricht. Dadurch gibt es auch grafische BASICODE-Programme, die auf 16:10 optimiert sind und bei einer Ausgabe auf 4:3 den Bildschirm vertikal nicht komplett füllen. Diese Programme hinterlassen dann eventuell horizontale Streifen auf dem Bildschirm. Damit auch solche Programme im JBASICODE eine ordentliche grafische Ausgabe erzeugen können, kann man in den Einstellungen das Seitenverhältnis auf 16:10 umstellen.

3.4. Cursor

Der Cursor wird mit einem ausgefüllten Rechteck dargestellt. Dieses ist aber standardmäßig nur während der Eingabe mit der INPUT-Anweisung sichtbar. Sie können in den Einstellungen angegeben, ob der Cursor immer sichtbar sein soll.

Für die Cursor-Steuerung gibt es vier spezielle Codes:

CodeBedeutung
8 Backspace:
Wenn der Cursor nicht in der linken oberen Rand steht, wird das Zeichen an der aktuellen Cursor-Position gelöscht und der Cursor um eine Position zurückgesetzt.
12 bzw. 0Ch Form Feed:
Die Bildschirmausgabe wird gelöscht und der Cursor in die linke obere Ecke gesetzt.
13 bzw. 0Dh Carriage Return:
Der Cursor wird an den Anfang der nächsten Zeile gesetzt.
Befindet er sich bereits in der letzten Zeile, wird die Bildschirmausgabe um eine Zeile nach oben gescrollt.
127 bzw. 7Fh Delete:
Wenn der Cursor nicht am linken Rand steht, wird er eine Position zurückgesetzt und das dort stehende Zeichen gelöscht.

3.5. Tastatureingabe

Für Tastatureingaben mit den Anweisungen GOSUB 200, GOSUB 210 und INPUT muss die Bildschirmausgabekomponente den Fokus haben. JBASICODE setzt beim Aufruf einer dieser drei Anweisungen den Fokus in diese Komponente. Wenn Sie nun aber woanders hinklicken, verliert die Komponente den Fokus und das BASICODE-Programm empfängt keine Tastaturereignisse mehr. Klicken Sie in dem Fall bitte auf die Bildschirmausgabekomponente, damit die Eingabe wieder funktioniert.

Die Tasten Backspace und Delete haben für das BASICODE-Programm die gleiche Bedeutuung und liefern den Code 127 zurück. Der Code 8, den die Backspace-Taste normalerweise zurückliefert, ist im BASICODE-Standard nicht definiert.

3.6. Farben

BASICODE-3C definiert 8 Farben mit den Nummern 0 bis 7. Da es einige Programme gibt, die mehr Farben verwenden, sind in JBASICODE mit den Nummern 8 bis 15 die 8 offiziellen Farben mit halber Helligkeit einstellbar, wobei die Farbe schwarz sich in dem Fall nicht unterscheidet.

Für die Farbauswahl wertet JBASICODE nur die unteren 4 Bit der Farbnummer aus. Der Block mit den 16 Farben wiederholt sich somit jeweils ab der Nummer 32, 48, 64 usw.. Unabhängig davon wird eine Warnung ausgegeben, wenn eine Farbe mit einer Nummer kleiner 0 oder größer 7 eingestellt wird.

3.7. Drucken

Der BASICODE-Standard definiert mit GOSUB 350 und GOSUB 360 Funktionalitäten zum Drucken. JBASICODE druckt aber die darüber ausgegebenen Zeichen nicht direkt aus, sondern sammelt sie in einem Druckdokument. Während der Laufzeit eines BASICODE-Programms gehen alle Druckerausgaben in ein und das selbe Dokument. Beim nächsten Programmlauf wird ggf. ein neues Druckdokument angelegt. Die Druckdokumente können Sie über das Menü ProgrammDruckerausgabe sehen, drucken, speichern und auch wieder löschen.

3.8. Tonausgabe

GOSUB 250 gibt einen Signaltons aus. Dazu ruft JBASICODE eine entsprechende Java-Funktion auf. Es liegt somit an der aktuell verwendeten Java-Laufzeitumgebung, wie die Ausgabe des Signaltons konkret erfolgt.

Die zweite Funktion zur Ausgabe eines Tones ist GOSUB 400. In der Variable SP wird die Tonhöhe in Form einer Notennummer übergeben. JBASICODE spielt die Note über einen im Java enthaltenen Synthesizer ab. Dieser Synthesizer bietet leider keine Möglichkeit zur Beeinflussung der Lautstärke. Aus diesem Grund hat die Variable SV, die die Lautstärke angibt, keine Wirkung, außer dass bei SV=0 kein Ton ausgegeben wird. Die in der Variable SD angegebene Tondauer wird aber trotzdem abgewartet.

Die Tonausgabe lässt sich über das entsprechende Symbol in der JBASICODE-Werkzeugleiste aus- und wieder einschalten. Wenn sie ausgeschaltet ist, wird in den Einstellungen die Option Tondauer auch bei ausgeschalteter Tonausgabe abwarten relevant.

3.9. Programmabbruch

Mit Betätigung der Escape-Taste wid ein laufendes Programm abgebrochen. Die Escape-Taste kann mit GOSUB 280 gesperrt und wieder aktiviert werden. Unabhängig davon ist ein Programmabbruch immer über das Menü Programm möglich.

Das Programm wird auch bei Auftreten eines Fehlers abgebrochen. Nur Fehler im Zusammenhang mit der Dateiarbeit (GOSUB 500, 540, 560 und 580) brechen das Programm nicht ab. Hier wird ein Fehler mit IN=-1 dem BASICODE-Programm mitgeteilt.

3.10. Freier Speicher

Als BASICODE entwickelt wurde, mussten sich die Software-Entwickler mehr als heute um den Speicherverbrauch ihrer Programme kümmern. Dazu wurde in BASICODE mit GOSUB 270 eine Möglichkeit geschaffen, den freien Speicherplatz zu ermitteln.

In JBASICODE wird der Speicher durch die Java-Laufzeitumgebung verwaltet. Eine Berechnung des freien Speicherplatzes ist deshalb gar nicht möglich. Um aber trotzdem eine adäquate Funktionsweise zu bieten, berechnet GOSUB 270 den Platzbedarf von allen in den BASICDOE-Variablen enthaltenen Strings (pro nicht leerem String Länge + 1) und gibt die Differenz zu 32767 (größte vorzeichenbehaftete 16-Bit-Integerzahl) in der Variable FR zurück.

4. Debugger

Der Debugger dient zur Fehlersuche. Mit ihm kann das BASICODE-Programm an beliebigen Stellen angehalten und schrittweise ausgeführt werden. Geöffnet wird der Debugger über das gleichnamige Menü. Dabei wird anstelle des Programmeditors der Debugger eingeblendet.

Der Debugger kann sowohl vor als auch nach dem Start des BASICODE-Programms geöffnet werden. Wird er vor Programmstart geöffnet, hält die Programmausführung vor der ersten Programmzeile an. Geschlossen wird der Debugger automatisch mit Beendigung des Programms.

Die Steuerung des Debuggers erfolgt mit den Aktionen im Menü Debugger sowie über die Werkzeugleiste. Haltepunkte auf den Anfang einer BASICODE-Zeile legt man am einfachsten über das Kontextmenü (rechte Maustaste) an.

Achtung! Das Start- (grün) und das Stoppsymbol (rot) in der Werkzeugleiste haben im Debugger-Modus eine etwas andere Bedeutung als beim normalen Ausführen eines Programm. Im Debugger bedeuten sie Ausführen bis zum nächsten Haltepunkt und Anhalten.

Achtung! Der Debugger hält immer vor Ausführung einer BASICODE-Anweisung an. Befindet sich die Programmausführung gerade in einer Anweisung, z.B. weil auf die Betätigung einer Taste gewartet wird, kann man zwar auf das Stopp-Symbol in der Werzeugleiste klicken, doch es wird erst einmal nichts passen. Erst wenn die BASICODE-Anweisung fertig ist, also z.B. bei GOSUB 210 eine Taste betätigt oder bei der INPUT-Anweisung die Enter-Taste gedrückt wurde (Die Bildschirmausgabekomponente muss dazu den Fokus haben!), hält der Debugger an.

5. Einstellungen

Die von Ihnen vorgenommenen oder geänderten Einstellungen können gespeichert werden. Dabei werden auch die Positionen und Größen der geöffneten Fenster sowie der Status der Tonausgabe (ein/aus) und die eingestellte Geschwindigkeit gespeichert.

Gespeicherte Einstellungen können auch wieder gelöscht werden. Dabei wird das von JBASICODE angelegte Verzeichnis gelöscht, in dem die Einstellungen gespeichert wurden. JBASICODE startet dann beim nächsten mal mit Standard-Einstellungen.