Erschienen in 64'er Magazin, Ausgabe unbekannt · Originaldatei: BCS.TXT
Hinweis: Dies ist das an die Redaktion eingereichte Manuskript, nicht der gedruckte Endtext. Layout, Bildunterschriften, Korrekturen und Kürzungen der Redaktion können in der veröffentlichten Fassung abweichen.
BCS: Das Basic-Construction-Set
Wer programmiert denn heute noch im Commodore-Basic von der Stange? Der feine Mensch hat seinen eigenen Basic-Dialekt. Ob deutsche oder spanische Befehle, oder nur kleinere Änderungen wie WRITE statt PRINT gewünscht werden, mit dem komfortablen BCS sind eigene Befehlswörter und Fehlermeldungstexte kein Wunschtraum mehr. Auch zum Verschlüsseln von Programmen ist dieses Utility zu verwenden.
Nikolaus M. Heusler
Eine der faszinierendsten Eigenschaften des C 64 war schon immer seine »offene Bauweise«. An allen wesentlichen Stellen im System kann der Programmierer eingreifen und Änderungen vornehmen. Nicht ganz so einfach, aber möglich ist es, die Schreibweise der 76 Basic-Befehlswörter (Token) und die der 30 Fehlermeldungen ganz oder nur teilweise nach Belieben abzuändern. Diese Texte wie PRINT, INPUT, aber auch zum Beispiel der SYNTAX ERROR stehen normalerweise fest gespeichert in einem ROM-Chip im System des Computers, der Programmierer kann hier keine Änderungen vornehmen. Dennoch ist es mit einigen Tricks und Umleitungen möglich, Abwandlungen einzubauen.
Das »Basic Construction Set« (BCS) ermöglicht auch dem Einsteiger, die Schlüsselwörter ganz oder teilweise durch neue auszutauschen. Es würde sich beispielsweise anbieten, endlich einmal eine deutsche Basic-Version zu implementieren. Da ich selbst gewöhnlich in Maschinensprache programmiere, habe ich beispielsweise folgende Umbenennungen vorgenommen: PEEK heißt jetzt LDA, POKE wurde zu STA, GOSUB und RETURN nennen sich JSR und RTS, und aus GOTO wurde JMP. Dadurch wird das Übertragen in Assembler erleichtert. Sie können das BCS natürlich auch nur zum Experimentieren und Spielen verwenden. Es kann ja mal ganz abwechslungsreich sein, statt PRINT A,B,C einmal WRITE A,B,C zu sehen. Neben den Token werden außerdem auf Wunsch die Fehlermeldungen sowie der Eingabe-Prompt (»READY.«) neu belegt.
Das BCS ist aus Gründen der Geschwindigkeit und des Komforts vollständig in Maschinensprache geschrieben. Dennoch brauchen Sie keine Assemblerkenntnisse, um damit arbeiten zu können. Das Programm läßt sich wie normales Basic laden, starten und ggf. kopieren. Um einen neuen Dialekt zu generieren, geben Sie folgenden Befehl ein:
LOAD "BCS",8
Der Start erfolgt dann mit RUN. Dieses Programm, das später zum Betrieb der neuen Token nicht mehr benötigt wird, nennt sich »Customizer«. Auf dem Bildschirm erscheint das Titelbild. Bitte beachten Sie während der Eingaben die auf dem Schirm befindlichen Hinweise! Sie werden jetzt nach dem Namen der neuen Sprache gefragt. Geben Sie irgend einen beliebigen Text ein. Diese Kennung zeigt der Computer dann immer an, wenn Sie später Ihren neuen Dialekt in Betrieb nehmen. Der Name wird außerdem später als Filename verwendet, sollte also möglichst nicht länger als 16 Zeichen sein. Leereingaben weist das Programm zurück. Durch eine geänderte Tastaturabfrage ist es nicht möglich, mit den Tasten CRSR UP/DOWN, HOME, CLR oder SHIFT RETURN die Bildschirmzeile zu verlassen. Dennoch sollten Sie bei allen Eingaben darauf achten, daß die Länge der Bildschirmzeile nicht überschritten wird.
Der Computer gibt bei allen Eingaben schon einen Vorschlag vor (in weißer Farbe, meistens die Original-Belegung z.B. eines Schlüsselworts oder einer Fehlermeldung). Diesen Text können Sie mit Ihrer Eingabe, die dunkelgrau erfolgt, überschreiben, oder durch Druck auf RETURN ohne etwas einzugeben übernehmen. Bei der Frage nach dem Namen lautet die Vorgabe »CBMBASIC«. Geben Sie den Namen ein und betätigen RETURN.
Jetzt soll der neue Eingabe-Prompt eingegeben werden. Damit ist die Meldung nach jedem Befehl gemeint, die normalerweise »READY.« lautet (das ist auch die Vorgabe). Geben Sie, falls erwünscht, einen beliebigen neuen Text ein, den Sie mit der RETURN-Taste bestätigen. Auch hier sind leere Eingaben ausgeschlossen. Typische Beispiele wären »FERTIG.«, »-OK-«, »ICH HAB'S!« oder »HALLO xxx!«, wobei xxx für Ihren Vornamen steht.
Jetzt wird der neue Kommandosatz eingegeben. Dabei erscheinen die ursprünglichen im ROM gespeicherten Token nach und nach auf dem Bildschirm. Überschreiben Sie die Befehlswörter, wenn Änderungen erwünscht sind. Jede Zeile wird mit RETURN abgeschlossen. Die Token dürfen keine Leerzeichen oder Doppelpunkte enthalten, die weist das BCS zurück. Soll der normale Basic-Satz verwendet werden, drücken Sie einfach nur die RETURN-Taste. Das neue Schlüsselwort kann von beliebiger Länge sein, insgesamt dürfen alle Token aber nicht länger als 255 Zeichen sein. Da 76 Schlüsselwörter verändert werden müssen, wird ein Token eine durchschnittliche Länge von drei bis vier Zeichen haben. Das klingt nicht viel, aber bedenken Sie, daß zum Beispiel auch die Rechenzeichen +, -, *, /, Pfeil nach oben sowie die Größer-/Kleinerzeichen und das Istgleich-Zeichen solche Token sind und nur je ein Zeichen belegen. Es ist also genügend Platz vorhanden (ggf. sinnvoll abkürzen!). Behalten Sie die oberste Zeile am Bildschirm im Auge, hier können Sie die Anzahl der noch freien Bytes sowie die Anzahl der Zeichen ablesen, die über oder unter dem Original-Satz liegen. Diese rechte Zahl sollten Sie bei der Eingabe immer auf Null oder größer halten. Ein Minuszeichen bedeutet, daß Sie »Schulden« gemacht haben, daß also Ihr neues Basic bisher längere Befehlswörter hat als das Original. Bei einem Pluszeichen hingegen liegen Sie unter dem ursprünglichen Platzbedarf. Ändern Sie beispielsweise das Wort GOTO um in das ein Zeichen längere GEHZU, so springt der Differenzzähler auf minus eins. Dieses eine Byte müssen Sie dann später wieder »gutmachen«, indem Sie beispielsweise aus dem Wort VERIFY ein um ein Zeichen kürzeres VERGL machen. Wird der zur Verfügung stehende Platz von 255 Bytes für alle Token überschritten, erscheint eine Fehlermeldung, und Sie müssen durch einen Tastendruck den Customizer neustarten.
Falls ein vorgegebenes Schlüsselwort mit einem Sonderzeichen endet, beispielsweise ein Dollarzeichen bei RIGHT$, das Doppelkreuz hinter INPUT# oder die Klammer auf bei TAB(, so ist es zu empfehlen, dieses Sonderzeichen auch an das Ende des neuen Befehls zu stellen, da sich sonst später bei der Anwendung der neuen Schlüsselwörter unnötige Schwierigkeiten ergeben können. Die ein Zeichen langen Symbole »+-*/^<>=« können Sie zwar auch verändern, sogar verlängern (aus »+« wird etwa »Plus«, was allerdings, besonders, wenn es mit allen Rechenzeichen gemacht wird, Speicherplatzprobleme bereiten dürfte), allerdings ist auch davon abzuraten.
Zu beachten wäre noch, daß Befehle mit gleichem Anfang nach Größe sortiert werden müssen, die längeren zuerst. Kommt also ein Token vor, zum Beispiel INPUT, dessen Anfang der Anfang eines anderen Tokens, etwa INPUT# ist, so muß das längere Token (INPUT#) zuerst vorkommen, da es sonst später bei der Anwendung nicht erkannt wird. Im Original-Basic kommt diese Eigenart in der richtigen Reihenfolge dreimal vor: Einmal bei INPUT# und INPUT, zum anderen bei PRINT# und PRINT und bei GO, das erst nach GOTO und GOSUB steht.
Leereingaben werden auch hier abgelehnt.
Nach dem letzen zu ändernden Schlüsselwort, »GO«, erfolgt die Aufforderung, die Basic-Fehlermeldungen einzugeben. Nacheinander werden alle 30 Fehlermeldungen, die Basic kennt, in weiß aufgelistet. Wie bei den Token haben Sie die Möglichkeit, die Vorgabe mit RETURN zu übernehmen, den Text zu ändern oder vollständig neu einzugeben. Bei den Meldungen sind Sie an keine Platzbegrenzung gebunden, diese sollten allerdings nicht länger als die Bildschirmzeile sein. Bedenken Sie außerdem, daß das später erzeugte File länger wird und mehr Diskettenspeicherplatz belegt, wenn Sie längere Meldungen eingeben. Das Wort ERROR, das hinter allen Original-Meldungen steht, ist normalerweise im System nur an einer Stelle gespeichert und wird automatisch hinter die Fehlertexte (z.B. »SYNTAX«) gedruckt. Ebenso hängt es das BCS hinter alle Texte. Sie können es übernehmen, wenn Sie möchten, aber auch weglassen und Fehlermeldungen einführen wie »DAS HABE ICH NICHT VERSTANDEN«. Allerdings hängt der Interpreter später vor alle Fehlermeldungen ein Fragezeichen und bei Fehlern im Programmlauf dahinter IN xxx an.
Alle Eingaben werden wiederum mit RETURN beendet, Leereingaben sind nicht möglich.
Nach der Behandlung der letzen Fehlermeldung, dem BREAK ERROR, werden Sie aufgefordert, eine Diskette einzulegen und die RETURN-Taste zu drücken. Verwenden Sie eine Floppy, auf der noch sieben oder mehr Blocks frei sind, denn je nach Länge der Fehlermeldungstexte werden die erzeugten Files typisch etwa sieben Blocks lang. Nach Druck auf RETURN erscheint »-WIRD GESPEICHERT-«, und das Programm speichert Ihren neuen Dialekt auf Diskette. Dieses File enthält ein kurzes Maschinenprogramm und ist daher später ohne den Customizer lauffähig. Es kann einfach absolut geladen und mit einem SYS-Befehl (siehe unten) gestartet werden.
Nach dem Speichervorgang beendet der Computer das BCS. Sollte beim Speichern ein Fehler aufgetreten sein (die rote Floppy-LED blinkt), beseitigen Sie diesen. Jetzt kann mit dem Befehl SYS 2064 das Speichern noch einmal wiederholt werden.
Wollen Sie Ihren neuen Dialekt mit Basic verwenden, laden Sie die Datei einfach mit
LOAD "NAME",8,1
wobei für NAME der eingegebene Name zu setzen ist. Danach geben Sie erst NEW, dann SYS 49152 ein. Der SYS-Befehl darf wirklich erst nach dem Laden der erzeugten Datei eingeben werden, nicht schon nach dem Verlassen des Erzeugerprogramms. Eine Einschaltmeldung, die wieder den Namen enthält, erscheint, dann sind die neuen Schlüsselwörter und Meldungen aktiviert (erkennbar an dem neuen Prompt, der jetzt ggf. anstelle von READY. erscheint). Laden Sie jetzt unter Verwendung des Tokens, das Sie für LOAD gesetzt haben, ein Basicprogramm und sehen es sich an. Achtung: Falls Sie den LIST-Befehl verändert haben, vergessen Sie nicht, dazu das neue Befehlswort einzugeben, zum Beispiel ZEIGE. In dem Basicprogramm sehen Sie jetzt Ihre neuen Schlüsselwörter. BCS ist also in der Lage, alte Programm nachträglich zu verändern. Dies liegt daran, daß auf Diskette in Basicprogrammen die Befehle gar nicht Zeichen für Zeichen gespeichert werden, sondern nur eine Codenummer, die dann beim Listen durch das entsprechende Schlüsselwort ersetzt wird. Durch Verwendung eines BCS-Files wird übrigens auch der bekannte List-Fehler REM SHIFT L ausgeschaltet.
Jetzt können Sie die neuen Kommandos ganz normal verwenden. Auch die Fehlermeldungen erscheinen geändert. Geben Sie etwa ein: ?1/0 (das Fragezeichen als Abkürzung für den Print-Befehl bleibt erhalten). Jetzt sollte ein ?DIVISION BY ZERO ERROR erscheinen, oder der Text, den Sie dafür vorgesehen haben.
Die neuen Schlüsselwörter lassen sich auch wie gewohnt abkürzen. Haben Sie etwa NEXT durch WEITER ersetzt, können Sie am Ende einer Schleife W SHIFT E für WEITER schreiben. Bitte geben Sie während die neuen Befehle aktiv sind beim Eingeben von Basicprogrammen keine alten Basicbefehle ein, und ebenso keine neuen, wenn die Änderungen nicht aktiviert sind. Ansonsten kann es passieren, daß das so behandelte Programm später in keinem Dialekt lauffähig ist, da der Interpreter die Wandlung in den bereits erwähnten Code nicht vornehmen konnte. Eine weitere Einschränkung: Verschiedene Systemmeldungen können ohne großen Aufwand nicht geändert werden und bleiben daher auch hier erhalten. Es handelt sich insbesondere um die Ein/Ausgabemeldungen wie SEARCHING, LOADING, SAVING, sowie um das BREAK und anschließende READY. nach dem Abbruch eines Befehles mit RUN STOP. Ebenso wird nach dem Laden eines Programms mit dem LOAD-Befehl nach wie vor READY. erscheinen.
Die Syntax der Basicbefehle bleibt indes voll erhalten. Wurde also zum Beispiel der LIST-Befehl in ZEIGE umdefiniert, ist es nach wie vor möglich, mit ZEIGE 400-500 die Programmzeilen 400 bis 500 zu listen, pardon, zu zeigen.
Noch ein kurzer Blick hinter die Kulissen des erzeugten Files: Ab 49152 befindet sich ein Maschinenprogramm, das die Vektoren für den Warmstart, Basiczeile codieren und Basiczeile listen verändert. Dadurch werden bei der Eingabe einer Zeile und beim LIST-Befehl die Befehlswörter nicht mehr in der ROM-Tabelle gesucht, sondern in einer eigenen Liste. Über den geänderten Warmstartvektor fängt der C 64 die Fehlermeldungen ab und ersetzt sie durch die neuen Texte. Durch diese Technik bleibt bei der Anwendung der neuen Befehle der RAM-Speicher unter den ROMs etwa für Grafikbilder frei. Vom Customizer indes wird dieser Bereich übrigens genutzt, um mit Hilfe eines veränderten Betriebssystems das Wegscrollen der Titelzeilen und die Betätigung der Cursortasten zu verhindern.
Wenn Sie für die Schlüsselwörter völlig unsinnige Buchstabenfolgen eingeben (Längenbegrenzung beachten!), diesen neuen »Dialekt« speichern, dann wie beschrieben aktivieren und ein Programm Listen (merken Sie sich dazu die neue Belegung des List-Befehles!), so bekommen Sie nur Unsinn zu sehen, das Programm wird aber dennoch laufen. Auf diese Weise lassen sich Basicprogramm vor neugierigen Blicken schützen.
Um die neue Belegung von Fehlermeldungen, Prompt und Token abzuschalten, geben Sie SYS 58451 ein. Mit SYS 49152 wird dann wieder eingeschaltet.
Ein wichtiges zusätzliches Hilfsprogramm ist der Befehlsdrucker, der nach dem Laden eines Dialekt-Files mit
LOAD "BEFEHLSDRUCKER",8
geladen und mit RUN gestartet wird. Das in Basic geschriebene Programm gibt wahlweise auf dem Drucker oder Bildschirm eine vollständige Liste aller neuen Fehlermeldungen und Schlüsselwörter aus. Konsultieren Sie diese Liste, wenn Sie die Schreibweise eines neuen Kommandos vergessen haben sollten.
Nach dem Laden des erzeugten Files gilt folgende Speicherbelegung:
$C000-C1FF Maschinenprogramm
$C200-C23F Eingabeprompt
$C240-C27E Name
$C27F Länge des Namens
$C280-C2FF Zeiger auf neue Fehlermeldungen
$C300-C3FF Tokentabelle
$C400-Ende Fehlermeldungstexte