★ APPLICATIONS ★ DIVERS ★ VON CP/M NACH BASIC UND ZURÜCK ★![]() |
Convert v2 (CPC Amstrad International) | Applications Divers |
Sicher kennt jeder das Problem: Man hat eine Datei unter CP/M, die man mit dem eingebauten BASIC bearbeiten möchte (z.B. will man ein kleines Assemblerprogramm für BASIC schreiben und will den ASM.COM benutzen, weil man keinen Assembler extra kaufen möchte). Sofern die Datei keine reine Textdatei ist, wird der Versuch jedoch mit der Meldung »EOF met« abgebrochen. So geht's also nicht! Woran mag das liegen ? Die Lösung ist ziemlich einfach: BASIC unterscheidet zwischen Programm- und ASCII-Dateien. Programmdateien (also die ».BAS« und ».BIN« Dateien) erhalten einen Programmkopf vor der eigentlichen Datei. In diesem Kopf steht der Filetyp (BASIC, Binär, geschütztes BASIC), die Länge der Datei, der Dateiname und bei Binärdateien auch die Lade- und Startadresse. ASCII-Dateien dagegen haben ebenso wenig einen Programmkopf wie die Dateien unter CP/M. Nun könnte man ja meinen, da BASIC auch Dateien ohne Header (Programmkopf) verwalten kann, müßte man doch ganz einfach die CP/M Dateien wie ASCII-Dateien unter BASIC einladen können. Dies geht auch wie oben schon erwähnt bei reinen Textdateien. Diese können ohne Probleme mit OPENIN und OPENOUT behandelt werden. Allerdings können auf diesem Wege keine ».COM«, ».OVR« und andere Programmdateien von CP/M unter BASIC eingeladen werden. Der Grund liegt einmal darin, daß BASIC am ASCII-Code & 1A das Dateiende (EOF) erkennt und dieser Code recht häufig in den Programmdateien vorkommt (sei es als Z80 Opcode oder als Teil einer Adresse), zum anderen auch andere Steuercodes vom BASIC erkannt und interpretiert werden (z.B. wird das Zeichen &0D (carriage retum) als Zeilenende interpretiert, aber nicht im String aufgenommen; wird nach der Da- Die Lösung ist ein Utility mit dem Namen CONVERT. Dieses komplett in Assembler geschriebene Utility ist in der Lage den ASCII-Dateien einen Programmheader mitzugeben und in Binärdateien diesen Header zu entfernen. Zur allgemeinen Freude ist dieses Utility äußerst einfach handzuhaben. CONVERT läuft unter CP/M und ist ein »reines« CP/M Programm, d.h. es läuft unter CP/M 2.2, CP/M Plus und dem 62k RAM Card CP/M von Vortex, sowie auch auf allen anderen CP/M Rechnern. Das Utility erwartet alle Parameter in der Eingabezeile durch SPACES getrennt (wie z.B. auch das AMSTRAD FILECOPY): CONVERT < parameter1 > < parameter2 > Wenn Sie den BASIC-Lader für das Utility schon abgetippt haben (Besitzer der DATABOX werden nun müde lächeln ...) können Sie ruhig nach dem Lesen der folgenden Beschreibung ein paar Beispiele ausprobieren. Wenn wir das Utility ohne Parameter aufrufen, wird ein kleiner Hilfstext ausgegeben, der die Aufrufmöglichkeiten beschreibt: A> CONVERT (es erscheint die Programmeldung, gefolgt von dem Hilfstext...) A> CONVERT < filename.ext > Um nun oben genannte Probleme zu lösen müssen wir dem Utility zwei Dateinamen angeben; einmal den Namen der Datei, die wir konvertieren wollen, zum anderen den Dateinamen der neuen Datei. A> CONVERT < filename1 > < filename2 > CONVERT lädt sich nun die erste Datei in den Arbeitsspeicher (falls die Datei nicht existiert, erfolgt natürlich eine entsprechende Fehlermeldung...) und gibt den Dateityp und die Dateilänge aus. Wenn die geladene Datei eine Binärdatei ist, wird der Header entfernt, ansonsten wird nach der Lade- und der Startadresse gefragt und der entsprechende Header erzeugt (die Eingaben erfolgen HEXADEZIMAL). Anschließend wird die Datei auf die Diskette zurückgeschrieben. Sofern bereits eine Datei mit dem Namen der zweiten Datei existiert, erfolgt die Abfrage, ob die alte Datei überschrieben werden soll (wenn die alte Datei das Attribut Read Only besitzt erfolgt eine zweite Sicherheitsabfrage). Wenn in dem ersten Dateinamen Wildcards »*« oder »?« angegeben werden, wird die erste Datei geladen, die die Bedingung erfüllt. Beim zweiten Dateinamen sind Wildcards verboten. Ein Beispiel: A> CONVERT CONVERT.COM CONVERT.BIN Wenn man nun als Ladeadresse &2000 eingibt (Startadresse ist egal), kann man sich das Utility unter BASIC in jedem Monitor ab Adresse &2000 ansehen. Die Angabe der Startadresse ermöglicht es auch, daß man bei Programmen, die mit einem CP/M Assembler für BASIC geschrieben wurden, direkt ausführbare Dateien erhält.
|