BSAVE

Aus C64-Wiki
Zur Navigation springenZur Suche springen
BSAVE
Syntax: BSAVE <Dateiname> [,D<Laufwerk>] [,U<Geräteadresse>] [,B<Bank>] [,P<Startadresse> TO P<Endadresse+1>]
Parameter
<Dateiname> : Zeichenkettenausdruck
<Laufwerk> : numerischer Ausdruck mit Wert 0 oder 1
<Geräteadresse>: numerischer Ausdruck im Wertebereich von 4 bis 30
<Bank>: numerischer Ausdruck im Wertebereich von 0 bis 15
<Startadresse>: numerischer Ausdruck im Wertebereich von 0 bis 65534
<Endadresse+1>: numerischer Ausdruck im Wertebereich von 1 bis 65535
Einordnung
Typ: Anweisung
Kontext: Diskettenbefehl
Aufgabe: Speicherbereich auf Diskette sichern
Abkürzung: bS
Token: $fe $10 (254 16)
Verwandte Befehle
BLOAD, DSAVE, SAVE

Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl BSAVE ab Commodore BASIC V7.0 oder höher.


Die Anweisung BSAVE (Binary SAVE) sichert einen beliebigen Speicherbereich auf Diskette. Der Aufbau der erzeugten Datei entspricht dabei einer PRG-Datei, d.h. die ersten beiden Bytes enthalten die Startadresse des Speicherbereichs. Einsatzzweck ist u.a. das Speichern von Grafiken oder Spritedaten.

Die Parameter haben folgende Bedeutung:

  • <Dateiname>: Ein Zeichenkettenausdruck mit dem Dateinamen der zu erstellenden Datei. Handelt es sich nicht um eine Konstante sondern um einen Ausdruck (z.B. eine Variable), so muss dieser in Klammern gestellt werden, sonst wird ein ?SYNTAX ERROR ausgegeben. Ist der Ausdruck länger als 16 Zeichen wird ein ?STRING TO LONG ERROR ausgegeben, eine leere Zeichenkette führt dagegen zu einem ?MISSING FILENAME ERROR.
    Weitere Fehlerzustände sind mit Hilfe des Fehlerkanals abfragbar (Systemvariablen DS und DS$), der z.B. eine bereits existierende Datei mit "63,FILE EXISTS,00,00" anzeigt.
  • <Laufwerk>: Laufwerksnummer, wird bei einem Doppellaufwerk benötigt und kann die Werte 0 oder 1 annehmen, ansonsten wird ein ?ILLEGAL QUANTITY ERROR ausgegeben. Standardwert ist 0.
  • <Geräteadresse>: Gerätenummer des Diskettenlaufwerks, standardmäßig 8. Sie darf im Wertebereich von 4 bis 30 liegen, Werte von 0 bis 3 und von 31 bis 255 führen zu einem ?ILLEGAL DEVICE NUMBER ERROR, außer bei Werten kleiner 0 oder größer 255, die ein ?ILLEGAL QUANTITY ERROR auslösen. Ist das Gerät mit der angegebenen Nummer nicht verfügbar, wird ?DEVICE NOT PRESENT ERROR ausgegeben.
  • <Bank>: Nummer jener Speicherbank, in die die Daten geladen werden. Wird der Parameter nicht angegeben, wird die zuletzt durch den Befehl BANK bestimmte Konfiguration verwendet. Der Parameter darf im Wertebereich von 0 bis 15 liegen, ansonsten wird ?ILLEGAL QUANTITY ERROR ausgegeben. Für weitere Details siehe Befehl BANK.
  • <Startadresse>: Adresse, ab der gesichert wird. Der Parameter muss im Wertebereich von 0 bis 65534 liegen, sonst wird ein ?ILLEGAL QUANTITY ERROR ausgegeben.
  • <Endadresse+1>: Die Adresse, die um eins höher ist als die Adresse der letzten zu speichernden Speicherzelle. Der Parameter muss im Wertebereich von 1 bis 65535 liegen und mindestens um eins höher sein als die Startadresse, sonst wird ein ?ILLEGAL QUANTITY ERROR ausgegeben.

Besonderheiten bei Diskbefehlen[Quelltext bearbeiten]

  • Die Parameter mit einem führenden Buchstaben, die logische Dateinummer beginnend mit # und Dateinamensangaben sind positionsunabhängige Parameter und dürfen beliebig gereiht sein. Abweichend davon sind jene Befehle, die einen Quell- und Zielteil aufweisen, wie etwa COPY, wo dies nur für den jeweiligen Bereich vor bzw. nach dem trennenden TO gilt.
  • Der Buchstabe eines positionsunabhängigen Parameters steht für:
    • B: bank (Banknummer)
    • D: drive (Laufwerksnummer)
    • I: identification (ID-Kennung eines Mediums)
    • L: record length
    • P: position (Position bzw. Adresse)
    • R: read (lesende Operation)
    • W: write (schreibende Operation)
    • U: unit (Gerätenummer)
  • Variablen oder allgemeine Ausdrücke bei positionsunabhängigen Parametern sind möglich, müssen aber in Klammern gesetzt werden (außer bei "I<Id>", wo immer nur eine 2-Zeichen-Konstante erwartet wird).
  • Die Angabe der Geräteadresse oder Bank (bei BASIC 7.0) kann entweder mit "," oder mit "ON" oder kombiniert mit ",ON" eingeleitet werden, wobei im Falle eines Kommas bereits ein anderer Parameter voran gegangen sein muss.
  • Der optionale Parameter "I<Kennung>" für die Angabe der Identifikation wird immer akzeptiert. Dem "I" müssen 2 Zeichen folgen, wobei beliebige Leerzeichen dazwischen vorkommen dürfen. Der Wert kann nicht durch einen geklammerten Ausdruck ersetzt werden. Gewisse Werte, die BASIC-Befehle wie IF, ON, FN, TO oder BASIC-Abkürzungen wie jO, hE enthalten, werden fälschlicherweise als das entsprechende Schlüsselwort und nicht als der beabsichtigte Text interpretiert. Alle nichtkonformen Fälle führen dann zur Fehlermeldung ?SYNTAX ERROR.
  • Ein Parameter "R" (ohne weitere Wertangabe, bei DOPEN zur expliziten Angabe des vorgegebenen Read-only-Modus gedacht) wird bei allen Diskbefehlen immer akzeptiert, hat aber keinerlei zusätzliche Bedeutung. Im Falle von BASIC 3.5 wird hingegen ?SYNTAX ERROR gemeldet.


Beispiele[Bearbeiten | Quelltext bearbeiten]

10 SPRDEF
20 INPUT "SPRITES SICHERN ALS";N$
30 IF N$<>"" THEN BSAVE (N$),B0,P3584 TO P4096

Ruft zuerst mittels SPRDEF den internen Sprite-Editor auf und sichert dann die Sprites unter dem mit INPUT eingegebenen Namen.

10 GRAPHIC 3,1
20 REM DIVERSE GRAFIKBEFEHLE
...
1000 BSAVE "GRAFIK.BMP",B0,P(DEC("1C00")) TO P(DEC("4000")): REM BITMAP UND HINTERGRUND/VORDERGRUNDFARBE SPEICHERN
1010 POKE 1,PEEK(1) AND 254: REM CPU-ZUGRIFF AUF DAS FARBRAM FÜR GRAFIK UMSTELLEN
1020 BSAVE "GRAFIK.CLR",B15,P55296 TO P56297: REM FARBRAM SPEICHERN
1030 POKE 1,PEEK(1) OR 1: REM CPU-ZUGRIFF AUF DAS FARBRAM FÜR TEXT ZURUECKSTELLEN

Erzeugt eine Multicolor-Grafik und speichert diese anschließend auf Diskette. Die erste Datei enthält anschließend das Grafikvideo-RAM mit der Hintergrund- und Vordergrundfarbe sowie der eigentlichen Bitmap, in der zweiten Datei werden hingegen die Daten des Farb-RAMs abgelegt. Man beachte, dass vor dem Speichern das richtige Farb-RAM aktiviert wird!