BasiCode - Übertragung von BASIC-Programmen auf fremde Computer

von Henning Räder, Peter Liebert-Adelt und Thomas Rademacher

Was reizt uns an der Beschäftigung mit Computer-Oldies aus der 8-Bit-Ära? Es genügt uns nicht, Icons anzuklicken und ständig Updates oder die neuesten Programme zu erwerben, damit wir uns für die souveränen Beherrscher modernster High-Tech halten können. Wir sind auch nicht spätestens aller zwei Jahre der Meinung, die Hardware müßte entscheidend aufgerüstet oder noch besser komplett neu angeschafft werden.

Stattdessen bleiben wir unseren alten Heimcomputern treu, die auf Flohmärkten zu Preisen angeboten werden, die einst gerade für ein Zehnerpack Disketten reichten. Warum, aus Geiz? Nein, es stellt uns nicht zufrieden, die Bildchen anzuklicken, die uns Bill Gates' Leute vorsetzen, wir wollen auch nachvollziehen, was sich im Inneren des Computers tut. Wir wollen uns nicht von fertigen Programmen beschäftigen lassen, sondern eigene Zielstellungen so formulieren, daß sie der Computer für uns lösen kann. So stehen wir als Sonderlinge da, doch stört uns das? Nein, uns stört etwas anderes: wir Sonderlinge sind trotz eigentlich gleicher Interessen noch einmal in Dutzende Grüppchen aufgespalten. Ein C64-Programm nützt mir am Atari nichts, mit einem ZX-Programm kann ich am Schneider nichts anfangen. Oder doch?

Bei den attraktivsten Programmen wird das zutreffen, sie nutzen die Hardware-Eigenheiten und Systemroutinen des jeweiligen Computers und können höchstens mit viel Arbeit auf einen andersartigen Computer übertragen werden, wenn man sich mit beiden Geräten perfekt auskennt.

Doch arbeitet nicht fast jeder Heimcomputer mit BASIC? Können sich BASIC-Programme übertragen lassen? Jein! BASIC ist nicht genormt - jeder Hersteller hat einen anderen Dialekt auf dem Markt geworfen und verwendet vor allem andere Token. Trotzdem, hier läßt sich etwas machen, Programme können schließlich auch in Textform abgespeichert werden, und wenigstens ASCII konnte sich als Standard etablieren.

Viele Heimcomputer sind CP/M-fähig, günstige Voraussetzungen für einen Austausch. Übrigens ist sogar so etwas wie ein Kassetten-CP/M erfunden worden. Dieses Konzept heißt BasiCode, es stellt für unterschiedliche Heimcomputer eine einheitliche Bedienoberfläche und ein einheitliches Kassettenaufzeichnungsverfahren bereit und umschifft auch manche Klippe der Dialektunterschiede. BasiCode-Programme (die Freeware sind) gibt es für unterschiedlichste Anwendungsgebiete, obwohl man sich zunächst Beschränkungen auferlegen mußte, damit die Übertragbarkeit gewährleistet werden konnte. Ein BasiCode-Programm, das am C64 geschrieben und auf Kassette abgespeichert wurde, kann tatsächlich von dieser Kassette in den Atari, in den ZX und in den Schneider eingelesen und dort genauso benutzt werden!

Doch sind wir nicht alle bequem geworden, seit wir mit Disketten arbeiten? Wollen wir uns noch das Gefiepse anhören? Und wie lange das dauert! Die Übertragung von Computer zu Computer kann auch per Diskette geschehen, BasiCode ist dann nur noch für die Sprachvereinheitlichung zuständig. Ebenso können wir uns auch ganz von BasiCode lösen, aber dann müssen wir uns um die Sprachanpassung kümmern. Dafür bieten sich Textverarbeitungen an, WordStar unter CP/M oder der DOS-Editor reichen aus.

Ein idealer Weg zur Programmübertragung ist natürlich auch die serielle Kopplung, doch mancher traut sich hier nicht ran, weil es ihm zu kompliziert ist oder er fürchtet, die Hardware könnte Schaden nehmen, weil irgendetwas nicht klappt.

Fassen wir zusammen: BASIC-Programme (oder überhaupt Texte) können wir mit Disketten von einem Heimcomputer zu einem andersartigen übertragen, doch müssen wir die Eigenheiten der jeweiligen Geräte noch berücksichtigen. Zum Beispiel kann jede ZX81-Zeile nur einen BASIC-Befehl aufnehmen, eine KC85-Zeile darf nicht länger als 60 Zeichen sein. Ähnlich unterschiedlich reagieren diese beiden Computer auf die Dimensionierung einer schon dimensionierten Variablen: der ZX81 dimensioniert sie eben neu, doch der KC85 meldet einen Fehler DD (,,Doubly defined array``) usw.

Natürlich gibt es noch Unmengen an unterschiedlichen Diskettenformaten, doch hier zeigt sich, das sogar ein PC zu etwas zu gebrauchen ist. SYDEX vertreibt beispielsweise das Programm 22DISK, das ziemlich alle denkbaren CP/M-Formate verarbeiten kann. Vielleicht reicht schon die Shareware-Version. Ein File wird aus einem CP/M-Format in DOS kopiert und aus diesem wieder in ein anderes CP/M-Format übertragen.

Ein Problem bleiben die Disketten von Commodore-Laufwerken, hier ist das Aufzeichnungsprinzip völlig anders, doch es gibt drei Wege zur Lösung. Der erste ist die schon erwähnte serielle Kopplung. Zweitens soll auf einem C128 die Übertragung machbar sein, da dieser im selben Laufwerk beide Aufzeichnungsverfahren anwenden kann. Drittens, hier sind wir wieder bei dem Punkt, daß auch PCs nützlich sein können, besteht die Möglichkeit, mit Emulatorprogrammen, die es für viele ,,historische`` Computertypen gibt, Programme PC-lesbar zu bekommen oder umgekehrt.

Wichtig ist, daß das BASIC-Programm in ASCII-Form und nicht in Token abgespeichert wird. Bei manchem Computer genügt es, dafür die Option A für den SAVE-Befehl anzugeben, bei anderen gerät es weniger handlich. Zum Beispiel ist beim C64 folgende Sequenz erforderlich:

OPEN 1,8,1,"0:programmname,S,W":CMD 1:LIST:CLOSE 1:CLOSE 1

Der entscheidende Punkt ist CMD 1, ab hier gehen die Ausgaben nicht mehr auf den Monitor, sondern auf das Floppy-Drive. Deswegen müssen auch die Befehle in einem Zug angegeben werden, sonst würde jede Ausgabe ,,READY.`` auch auf der Diskette landen. Geht es um BasiCode, muß übrigens statt LIST angegeben werden LIST 1000-. Die BASIC-Zeilen unter 1000 sind beim BasiCode-Konzept computerspezifisch, nur die Zeilen ab 1000 sind auf fremden Computern nutzbar. Wenn der C64 Programme erhalten soll, muß ein Diskettenmonitorprogramm benutzt werden, um aus Text- in Tokenform umzuwandeln, von vornherein ist er nicht für diese Möglichkeit eingerichtet.

Auch beim KC85 ist das ein wenig umständlich. Das Lesen geht noch, egal, ob von Tape oder Disc, das Programm wird mit LOAD#1``filename`` geladen. Allerdings kann der KC es nur als Programm in ASCII-Form erkennen, wenn es die Namenserweiterung .UUU hat. In irgendeiner Phase muß man also für eine solche Umbenennung sorgen. Der Computer liest es ein und schreibt es dabei auf den Monitor, während er es in interne Darstellungsweise umwandelt. Hierbei hält das Scrolling zusätzlich auf. Man kann Zeit sparen, indem man vor dem Laden PRINT CHR$(17) ausführen läßt, dann wird nicht mehr gescrollt, sondern wieder von oben überschrieben, wenn die letzte Zeile gefüllt ist. Zwar sieht das dann eigenartig aus, doch beeinträchtigt es nicht die Funktion. Mit PRINT CHR$(18) kann man hinterher das Scrolling wieder zulassen.

Das ASCII-Speichern auf dem KC ist noch aufwendiger:

NULL 0:OPENO #1"filename":LIST #1"filename":CLOSEO #1

Diese Befehle können aber auch einzeln eingegeben werden, bei BasiCode ist wieder, das gilt für alle Computer, darauf zu achten, nur ab Zeile 1000 abzuspeichern.

Zuletzt ein Überblick über schon erreichte Erfolge und in Bearbeitung befindliche Vorhaben: ein am ZX-Spectrum gesavetes BasiCode-Programm ließ sich unproblematisch in den KC 85/4 einladen und war, einschließlich Teilen der HRG-Graphik, nutzbar. ASCII-Listings von BASIC-Programmen für den KC85, die uns auf 3 1/2``-Diskette vorlagen, benannten wir in *.UUU um, brachten sie via 22DISK auf eine 5 1/4``-Diskette im MicroDOS-Format (in 22DISK hat das Format die Abkürzung HCL1) und konnten sie mit dem LOAD#1-Befehl am KC85/4 einlesen und benutzen. Zwei BasiCode-Programme vom C+4, die zunächst wie oben beschrieben in ASCII-Form gespeichert worden waren, wurden unter Nutzung eines C64-Emulators in den PC geladen und ebenfalls auf dem DISK22-Weg auf KC-Diskette gespeichert. Der umgekehrte Weg ,,funktioniert mittlerweile astrein, und zwar mit Hilfe eines von James Hehl entwickelten 'Seq to Prg'-Konverters, der nicht allein den Directory-Eintrag von Seq zu Prg ändert, sondern das File wirklich Zeile für Zeile umschreibt`` - Zitat vom C+4-Club-Info-Redakteur Erich Laber. Anhand des umfangreichen ZX81-BASIC-Programms TECSTAT, das Peter Liebert-Adelt am PC mittels des ZX81-Emulators in ASCII-Form umwandelt, wollen wir auch die Übertragung von ZX81-Programmen auf den KC85 wagen. Anschließend nehmen wir den umgekehrten Weg in Angriff, wobei den größten Anteil der Arbeit vermutlich der ZX81-Emulator leisten muß. Gut so, denn auf dem BasiCode-Weg hätten wir einiges zu tun: als erstes RENUMBER, damit alle Zeilennummern über 999 liegen, evtl. Aufspalten zu langer Zeilen und ,,Tarnen`` von Befehlen, die als nicht vereinbart bemängelt werden, durch Davorsetzen von REM, und das alles nach der Übertragung wieder rückgängig machen... Mit solchen Kunstgriffen gelang die Übertragung von SWING.SSS vom KC85 auf einen CPC-Computer. Dieses Programm spielt zweikanalig den Glenn-Miller-Titel ,,In The Mood``, hier kam noch hinzu, daß die Parameter des SOUND-Befehls umgerechnet und umsortiert werden mußten. Trotzdem ging die Übertragung durch BasiCode schneller als Abtippen des Programms und der vielen DATAs und war außerdem weniger fehlerträchtig. Ein Problem wäre hier vor allem noch, daß wir zwar die BasiCode-Load-Routine für den ZX81, aber noch nicht die für dessen Arbeit erforderliche Hardware-Erweiterung haben.

Anmerkung der Redaktion:

Der vorliegende Beitrag stammt von den Disketten mit BasiCode-Material, die Thomas Rademacher dem KC-Club zur Veröffentlichung zur Verfügung gestellt hat (siehe dazu auch die Rubrik ,,Mailbox`` in dieser Ausgabe). Insgesamt handelt es sich dabei um drei jeweils volle 1,44-MB-Disketten im MS-DOS-Format. Um die darauf enthaltene Directory-Struktur zu erhalten, habe ich den Inhalt der Disketten unter MS-DOS jeweils in ein ZIP-Archiv gepackt. Die ZIP-Datei mit den Inhalt der ersten Diskette befindet sich auf der Beilagendiskette der heutigen Ausgabe. Die zwei weiteren Disketten werden in gleicher Weise in den folgenden KC-News-Ausgaben nachgereicht. Ich hoffe, jeder Interessent kann diese ZIP-Dateien auf einen MS-DOS-PC übertragen (z.B. mittels TRANSFER.COM) und dort wieder entpacken.