Hallo Besucher, der Thread wurde 4,6k mal aufgerufen und enthält 4 Antworten

letzter Beitrag von Brueggi am

FAQ - Teil 1

  • Es wird mal Zeit für eine richtige FAQ zum CPC. Ich beziehe mich hier auf den CPC 6128 - alles Geschriebene sollte aber, sofern nicht anders vermerkt, auch auf den 464 und 664-Modellen laufen.


    Anregungen und Kritik, sowie Verbesserungsvorschläge bitte per PN oder gleich hier Posten (eventuell Doc nach Schreibrechten fragen).


    Dann mal los. Das erste was der "CPC-Neuling" benötigt ist das Laden/Speichern.
    Bis auf die Tatsache, das Tape-Dateinamen 16 Zeichen lang sein dürfen und auch Leer- und Sonderzeichen enthalten können, ist (fast) kein Unterschied zwischen Disk und Kassette vorhanden (dazu später mehr):


    LOAD"DATEINAME" oder
    LOAD"DATEINAME",ADRESSE


    Lädt ein Programm von Diskette/Tape ein. Das funktioniert aber nur bei BASIC-Programmen oder bei (vielen) Bildern. Bei allen anderen Dateien kommt es zu einem
    Memory full. Der Grund ist recht schnell erklärt: Maschinenprogramme werden, wenn keine Adresse angegeben wurde (siehe zweite Syntax), automatisch dahin geladen, wo sie gespeichert wurden.


    Bei Bildern z.B. fällt das meistens nicht auf, da diese in der Regel nach &C000 geladen werden. Erst, wenn die Lade-Adresse im BASIC-Bereich liegt, dann gibt der CPC den oben genannten "Memory full"-Fehler aus. Abhilfe schafft hier das herabsetzen des BASIC-Speichers. Hierfür existiert der BASIC-Befehl "MEMORY". Ein "herumpoken" ist also nicht notwendig.

  • Basic-Speicher herabsetzen:


    MEMORY LADEADRESSE-1:LOAD "PROGRAMM"


    Vorsicht: Man kann den BASIC-Speicher nicht kleiner als etwa 4600 (dezimal) setzen, da bei Dateioperationen automatisch ein 4K großer Puffer eingerichtet wird, welcher natürlich von BASIC abgezwackt wird. Aber auch für solche Fälle gibt es eine Abhilfe. Das aber später - sonst wird es zu kompliziert.


    Ein Programm kann aber auch nach dem Laden gestartet werden:


    RUN"DATEINAME"



    Kommen wir zum Speichern:


    BASIC-Programme werden normalerweise mit
    SAVE "DATEINAME"
    gespeichert. Es gibt jedoch noch drei weitere Optionen:


    SAVE "DATEINAME",A
    speichert das BASIC-Programm als ASCII-Datei ab. Man kann es so beispielsweise im Lieblingseditor bearbeiten oder auf andere Rechner transferieren.


    SAVE "DATEINAME",P
    speichert das BASIC-Programm geschützt ab. Es kann nur noch mit RUN"DATEINAME" gestartet werden. Wird es unterbrochen (2*ESC, oder durch Fehler) oder mit LOAD"DATEINAME" eingelesen, löscht BASIC es sofort aus dem Speicher. Also lieber immer mindestens einmal ungeschützt archivieren!


    SAVE "DATEINAME",B,START,LÄNGE oder
    SAVE "DATEINAME",B,START,LÄNGE,EINSPRUNG


    "zieht" einen Speicherbereich, der ab <START> beginnt und <LÄNGE> Bytes lang istauf Disk/Tape. Bei der zweiten Syntax kann eine Einsprung-Adresse angegeben werden (wichtig bei Assembler-Proggies), welche von RUN" angesprungen wird.

  • Um beispielsweise den Bildschirmspeicher abzuspeichern, kann man folgenden Befehl verwenden:


    SAVE "BILD",B,&C000,&4000
    (Speichern ab &C000, &4000 Bytes länge). Natürlich klappt das auch mit Dezimal-Zahlen:
    SAVE "BILD",B,49152,16384


    Speichert man auf Tape, sollte man VOR den Dateinamen ein "!" setzen, damit Kassettenmeldungen wie "Press REC and PLAY....." und "Saving XXX Block xx" nicht den Bildschirm zerstören. Schreibt also:
    SAVE "!BILD",B,&C000,&4000


    Der "Trick" mit dem Ausrufezeichen geht natürlich auch beim Laden. Stellt Euch vor, Ihr wollt ein Titelbild von Tape laden, und danach gleich Euer Programm.


    10 MODE 1:LOAD "TITEL"
    20 RUN"PROG"


    würde dazu führen, das Euch der CPC nicht nur zweimal dazu auffordert, das Ihr Play drücken müsst - er würde auch den Bildschirm mit "Loading xxx block x" vollschreiben. Deshalb bei sowas immer mit dem Ausrufezeichen arbeiten:


    10 MODE 1:LOAD "!TITEL"
    20 RUN"!PROG"


    Nochwas zu Dateinamen - gerade für Disk-Benutzer wichtig: Wenn Ihr keine Extension (.xxx) angebt, hängt der CPC immer automatisch .BAS oder .BIN an. Existiert bereits eine Datei, wird sie in xxx.BAK umbenannt und die neue Version gespeichert. Ihr habt also immer den letzten Stand als BAK-Datei auf Diskette. Übrigens kommt das DOS auch mit dem "!" am Anfang eines Dateinamens klar - nur wird es dann ignoriert. Disketten-Dateinamen entsprechen denen unter MS-DOS. Sie bestehen aus 8 Zeichen (keine Spaces usw.), einem Punkt und weiteren drei Buchstaben. Ein gültiger Name wäre also z. B. "GARTEN.DAT" - nicht aber " GARTEN . DAT", da er Leerschritte enthält. Weitere Ausnahmen für Disk-Dateinamen gleich.


    Jetzt können wir also laden und speichern - aber wissen nicht wirklich was für Dateien bereits auf Disk/Tape liegen. Bei beiden klappt


    CAT


    CAT listet den Inhalt einer Diskette bzw. der Kassette (abbruch mit 2*ESC!) ohne den Speicher zu löschen. Lediglich der 4K-Puffer wird während der Operation angelegt.


    So sieht CAT auf Diskette aus:

  • Ein Stern hinter dem DAteinamen deutet auf Schreib-/Löschschutz hin. Es gibt auch "System"-Dateien, welche von CAT nicht gelistet werden. Ohne Programmierkenntnisse lassen sich die Attribute jedoch nicht ändern (außer man nimmt ein anderes DOS, wie z. B. ParaDOS - ist bei mir im Einsatz und durchaus zu empfehlen).


    Jetzt, wie angekündigt, noch was zu Disketten-Dateinamen:


    Man kann mit dem Dateinamen auch Laufwerk und ggf. die User-Nummer angeben. Eine User-Nummer ist eine Art primitives Unterverzeichnis. Insgesamt gibt es (offiziell) 16 (User 0 bis 15), wobei das wohl soweit ich weiss eher was für CP/M war.


    Beispiel:


    LOAD "B:SPIEL" - lädt die Datei "SPIEL" von Laufwerk B: (das aktuelle Laufwerk bleibt jedoch erhalten und wird nicht dauerhaft geändert!).
    LOAD "3B:SPIEL" - lädt die Datei "SPIEL" von User-Ebene 3 auf Laufwerk B:.
    Mit SAVE klappt das natürlich auch:
    SAVE "A:LALALA" - speichert das BASIC-Programm auf Laufwerk A: unter "LALALA" ab.
    SAVE "15A:LALALA" - naja, Ihr könnt es Euch denken... ;-)


    Bevor ich jetzt zu den Spezial-Diskbefehlen komme (Tape-User können ab hier abschalten :D ), noch etwas zu den Universalzeichen, die wir bei den folgenden Befehlen verwenden können. Ihr werdet diese Jokerzeichen bestimmt schon vom PC her kennen.


    ? steht für ein beliebies Zeichen an genau dieser Position
    * (Stern): Steht für beliebig viele Fragezeichen "?"


    Zum besseren Verständnis ein paar Beispiele:


    *.BIN - steht für alle Files, die mit der Extension ".BIN" gespeichert wurden.
    B?LL? - steht für alle Files, die 5 Zeichen lang sind, mit "B" beginnen und bei denen Zeichen 3 und 4 jeweils ein "L" ist.
    *.?AS - steht für alle Dateien, deren Extension mit "AS" endet.
    *.* steht für ????????.??? und bezieht sich auf alle Dateien in der aktuellen User-Ebene.


    Nicht möglich ist ein Name wie
    *ULLE.BAS" - denn alles was nach dem Stern folgt wird intern als Fragezeichen behandelt. Dieses Beispiel würde also intern zu *.BAS werden.


    Ich führe hier lieber noch ein Beispiel auf:
    Nehmen wir an, auf der Diskette befinden sich folgende Files:
    HAUS.BAS
    BAUM.BIN
    NAMEN.DAT
    LIESMICH.TXT


    H*.* spricht an: HAUS.BAS
    *.?A? spricht an: HAUS.BAS, NAMEN.DAT
    *.* spricht alle Dateien an
    *.TXT spricht an: LIESMICH.TXT
    ?AM??.DAT spricht NAMEN.DAT an


    Ich denke, das die Universalzeichen klar sind, oder? ;)


    Jetzt aber zu den Spezial-Diskkommandos.

  • Die Disk-Kommandos:


    CPC 464-User haben es hier etwas schwerer, da die Parameter anders übergeben werden müssen:


    A$="PARAMETER"
    |BEFEHL,@A$


    während 664- und 6128 zusätzlich folgende Varianten nutzen können:
    |BEFEHL,"PARAMETER"
    |BEFEHL,PARAMETER$


    Nummerische Daten können bei allen drei Rechnern direkt übergeben werden:
    |BEFEHL,nummer% oder
    |BEFEHL,123


    Der Variablen-Pointer @ ist hier nicht nötig.


    Jetzt aber die Befehle:


    |USER,usernummer
    Legt die Userebene (0-15) fest.


    |DIR,"Dateimaske"
    Ähnlich wie CAT, listet aber auch andere Laufwerke/Userebenen auf. Es wird jedoch nicht wie unter CAT alphabetisch sortiert, sondern in der Reihenfolge, in der gespeichert wurde.


    Beispiele:
    |DIR,"B:" listet alle Files auf Laufwerk B: (aktueller User)
    |DIR,"15:" listet alle Files auf dem aktuellen Drive, User-Ebene 15.
    |DIR,"*.BAS" listet alle .BAS-Dateien.



    |ERA,"DATEINAME"
    löscht eine/mehrere Dateien. Beispiele:
    |ERA,"B:*.*" löscht alle Dateien auf B:
    |ERA,"10B:*.BIN" löscht alle .BIN-Files auf Laufwerk B:, Userebene 10.



    |REN,"NEUER NAME","ALTER NAME"
    Benennt eine Datei um - Universalzeichen sind hier nicht möglich. Beispiele:
    |REN,"HAUS","HUETTE.BAS" benennt die Datei "HUETTE.BAS" in "HAUS" um.
    |REN,"0:BULLE.BAS","15:BULLE.BAS" schiebt die Datei BULLE.BAS von User-Ebene 15 auf Ebene 0.



    |DRIVE,"LAUFWERK"
    Wechselt das Laufwerk. Bei ParaDOS geht ein Dateimanager auf.
    Beispiel:
    |DRIVE,"B" wechselt auf LW B:



    |CPM
    Bootet CP/M oder andere Software. Einige Games liefern z. B. bei CAT ein leeres Directory (169K free) - die werden in der Regel mit oben genannten Befehl gestartet.



    |DISC
    |DISC.IN
    |DISC.OUT
    Wechselt Auf Disk-ROM (|DISC) oder nur die Lese- (DISC.IN) bzw. Schreibbefehle (DISC.OUT)



    |TAPE
    |TAPE.IN
    |TAPE.OUT
    Wie |DISC.xxx, jedoch wird nicht auf Disketten- sondern auf Kassettenbetrieb gewechselt.


    Das wars erstmal.


    Wenn Ihr Probleme habt, das Übertragen von Soft usw. nicht klappt: PN oder E-Mail an mich. Ich werde versuchen Euch zu helfen. Keine Hemmungen (nicht wunder, wenn die Antwort ein paar Tage auf sich warten lässt - sie kommt bestimmt!)