Hauptsprungleiste💾 Cassette Manager / AMSDOSEintrag Nr. 132CPC 464/664/6128

CAS OUT OPEN

&BC8C

Eine Datei zur Ausgabe öffnen.

Original (SOFT 968): „Open a file for output.“

🔀Wie der Aufruf die Routine erreicht

Dein Programm            RAM-Sprungleiste            Low Kernel (RAM/ROM)        unteres ROM
─────────────            ────────────────            ────────────────────        ───────────
CALL &BC8C  ───────▶  &BC8C: RST 1 ─────────▶  &0008 LOW JUMP:           CAS OUT OPEN
                         DW Low Address            ROM-Zustand merken,  ───▶  (Routine)
                         (Bit 15 = oberes ROM aus)  unteres ROM an                  │
     ◀──────────────────────────────────────────  ROM-Zustand zurück  ◀──── RET ──┘

📖Beschreibung

⚙️ Wirkung

  • Den Schreibstream für die Ausgabe einrichten.

🧮 Register auf einen Blick

EingabeBDEHL
AusgabeCarryHLZero
verändertABCDEFHLIX

Automatisch aus den Bedingungen abgeleitet – bei Fallunterscheidungen („wenn … dann“) gilt der Volltext unten.

➡️ Einsprungbedingungen

  • B enthält die Länge des Dateinamens.
  • HL enthält die Adresse des Dateinamens.
  • DE enthält die Adresse eines zu verwendenden 2K-Puffers.

⬅️ Rücksprungbedingungen

  • Wenn der Benutzer Escape gedrückt hat:
  • Carry gelöscht.
  • Zero gesetzt.
  • In V1.1: A enthält eine Fehlernummer (#00).
  • In V1.0: A verändert.
  • HL verändert.
  • Wenn der Stream bereits in Verwendung ist:
  • Carry gelöscht.
  • Zero gelöscht.
  • In V1.1: A enthält eine Fehlernummer (#0E).
  • In V1.0: A verändert.
  • HL verändert.
  • Wenn die Datei erfolgreich geöffnet wurde:
  • Carry gesetzt.
  • Zero gelöscht.
  • HL enthält die Adresse eines Puffers, der den Header enthält, der in jeden Dateiblock geschrieben wird.
  • Immer:
  • BC, DE, IX und andere Flags verändert.
  • Alle anderen Register bleiben erhalten.

📝 Hinweise aus dem Handbuch

  • Diese Routine kann nur zwei Fehlernummern zurückgeben.
  • #00: Der Benutzer hat Escape gedrückt.
  • #0E: Der Stream ist bereits geöffnet.
  • Beim zeichenweisen Schreiben von Dateien wird der bereitgestellte 2K-Puffer (2048 Bytes) verwendet, um den Inhalt eines Blocks der Datei zu speichern, bevor er auf Band geschrieben wird. Er bleibt in Verwendung, bis die Datei durch Aufruf von entweder CAS OUT CLOSE oder CAS OUT ABANDON geschlossen wird. Der Puffer kann sich überall im Speicher befinden – sogar unter einem ROM.
  • Anfang jedes Blocks der Datei. Viele der Felder im Header werden durch Cassette Manager gesetzt, aber der Rest steht dem Benutzer zur Verfügung. Die Adresse dieses Headers wird an den Benutzer übergeben, damit Informationen darin gespeichert werden können. Der Benutzer darf in den Dateityp, die logische Länge, den Einstiegspunkt und alle Benutzerfelder schreiben. Der Benutzer darf in kein anderes Feld im Header schreiben. Die vom Benutzer setzbaren Felder werden anfänglich alle auf Null gesetzt, mit Ausnahme des Dateityps, der auf ungeschützte ASCII-Version gesetzt wird
  • 1. (Siehe Abschnitt 8.4 für eine Beschreibung des Headers).
  • Der übergebene Dateiname wird in den Schreib-Stream-Deskriptor kopiert. Wenn er länger als 16 Zeichen ist, wird er auf 16 Zeichen gekürzt. Wenn er kürzer als 16 Zeichen ist, wird er mit Nullen (#00) auf 16 Zeichen aufgefüllt. Obwohl der Dateiname beliebige Zeichen enthalten kann, ist es am besten, Nullen zu vermeiden. ASCII-Kleinbuchstaben (Zeichen #61..#7A) werden in ihre Großbuchstaben-Äquivalente (Zeichen #41..#5A) umgewandelt. Der Dateiname kann sich überall im RAM befinden, sogar unter einem ROM.

💾Variante mit AMSDOS (Diskette, CPC 664/6128)

Auf dem 664 und 6128 lenkt AMSDOS diesen Kassetten-Einsprung auf das Diskettenlaufwerk um (mit |TAPE zurück auf Kassette). Das Handbuch beschreibt die Diskettenfassung getrennt:

⚙️ Wirkung

  • Den Schreib-Stream für die Ausgabe einrichten.

🧮 Register auf einen Blick

EingabeBDEHL
AusgabeACarryHLZero
verändertABCDEFHLIX

Automatisch aus den Bedingungen abgeleitet – bei Fallunterscheidungen („wenn … dann“) gilt der Volltext unten.

➡️ Einsprungbedingungen

  • B enthält die Länge des Dateinamens.
  • HL enthält die Adresse des Dateinamens.
  • DE enthält die Adresse eines zu verwendenden 2K-Puffers.

⬅️ Rücksprungbedingungen

  • Wenn die Datei erfolgreich geöffnet wurde:
  • Carry gesetzt.
  • Zero gelöscht.
  • HL enthält die Adresse des Puffers, der den Header enthält.
  • A verändert.
  • Wenn der Stream bereits geöffnet ist:
  • Carry gelöscht.
  • Zero gelöscht.
  • A enthält eine Fehlernummer (#0E).
  • HL verändert.
  • Wenn das Öffnen aus einem anderen Grund fehlgeschlagen ist:
  • Carry gelöscht.
  • Zero gesetzt.
  • A enthält eine Fehlernummer.
  • HL verändert.
  • Immer:
  • BC, DE, IX und andere Flags verändert.
  • Alle anderen Register bleiben erhalten.

📝 Hinweise aus dem Handbuch

  • Wenn Zeichen mit CAS OUT CHAR in die Datei ausgegeben werden, wird der bereitgestellte 2K-Puffer von AMSDOS zum Puffern der Ausgabe verwendet. Er bleibt in Verwendung, bis die Datei durch Aufruf von entweder CAS OUT CLOSE oder CAS OUT ABANDON geschlossen wird. Der Puffer kann sich irgendwo im Speicher befinden – sogar unter einem ROM.
  • in den Schreibstrom-Header kopiert. Der Dateiname kann sich irgendwo im RAM befinden – sogar unter einem ROM.
  • Die Datei wird mit einem Typ-Teil von '.$$$' geöffnet, unabhängig vom angegebenen Typ-Teil. Eine vorhandene Datei mit demselben Namen und Typ-Teil '.$$$' wird gelöscht. Die Datei wird auf ihren angegebenen Namen umbenannt, wenn CAS OUT CLOSE aufgerufen wird.
  • Wenn der Strom geöffnet wird, wird ein Header eingerichtet. Viele der Felder im Header werden von AMSDOS gesetzt, aber der Rest steht dem Benutzer zur Verfügung. Die Adresse dieses Headers wird an den Benutzer übergeben, damit die Informationen darin gespeichert werden können. Der Benutzer darf in den Dateityp, die logische Länge, den Einstiegspunkt und alle anderen Felder schreiben. Der Benutzer darf nicht in andere Felder des Headers schreiben. Die vom Benutzer setzbaren Felder werden zunächst alle auf Null gesetzt, mit Ausnahme des Dateityps, der auf ungeschützte ASCII-Version gesetzt wird
  • 1.
  • Das Header-Typ-Feld muss beschrieben werden, bevor CAS OUT CHAR oder CAS OUT DIRECT aufgerufen wird. Das Typ-Feld darf nach dem Aufruf einer dieser Routinen nicht geändert werden. Wenn der Dateityp auf einen anderen Typ als ungeschütztes ASCII gesetzt wird, wird Platz für den Header reserviert, der beim Schließen der Datei geschrieben wird.

🧪Beispielprogramm – ausführen, ändern, Schritt für Schritt

Das Programm liegt bei &4000 und würde auf dem echten CPC mit CALL &4000 aus BASIC gestartet. Hier läuft es im Z80-Emulator; die Firmware ist nachgebildet.
bereit
🐞 Im großen Debugger öffnen
0
1
2
3
Rand
Modus 1 · Basis &C000 · Versatz &0000
Tastenpuffer: leer
Gedrückt gehaltene Tasten (für KM TEST KEY / KM GET JOYSTICK) per Klick umschalten; die Zahl ist die Tastennummer.
Register & Flags
AF
&FFFF
BC
&0000
DE
&0000
HL
&0000
IX
&FFFF
IY
&FFFF
SP
&C000
PC
&0000
S
1
Z
1
Y
1
H
1
X
1
P/V
1
N
1
C
1
Z80-Takte: 0 TCPC-Zeit: 0 µsROMs: unten aus, oben ausRAM-Konfig: &C0
Nächste Befehle (Disassembler)
0000HLE ▸ RESET ENTRY
0002RET
0003NOP
0004NOP
0005NOP
0006NOP
0007NOP
0008HLE ▸ LOW JUMP
Firmware
Firmware jetzt
▶ RESET ENTRY · Details
Letzte Falle: –
Letzte Firmware-Aufrufe
noch keine
Weitere Anzeigen: Speicher, Stapel, Ton, Dateien, Drucker, Kernel
Speicher
400000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
401000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
402000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
403000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
404000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
405000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
406000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
407000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ················
PCSP(HL)(DE)Leseansicht mit aktueller ROM-/Bank-Einblendung
Stapel
C0000000← SP
C0020000
C0040000
C0060000
C0080000
C00A0000
C00C0000
C00E0000
Ton (Sound Manager)
Kanal A
still
4 von 4 Plätzen frei
Kanal B
still
4 von 4 Plätzen frei
Kanal C
still
4 von 4 Plätzen frei
Dateien (simuliertes Laufwerk)
DateiTypLängeLaden
HALLO.TXTASCII33–
ZAHLEN.BINbinär6&5000
MUSTER.DATbinär16&6000
Eingabe: keine · Ausgabe: keine
Drucker
(noch nichts gedruckt)
Kernel: Zeit & Ereignisse
Zeit (KL TIME PLEASE): 0 × 1/300 s = 0.00 s · Interrupts: 0
keine Ereignisblöcke angemeldet

🔗Verwandte Einträge

💡 Quellen
Amstrad SOFT 968 „CPC 464/664/6128 Firmware“, Abschnitt 15 (Beschreibung, übersetzt); Adresse und Name abgeglichen mit Taylor/Defoe „The Amstrad CPC Firmware Guide“. Simulation: eigene Nachbildung (HLE) – Laufzeiten der Firmware selbst werden nicht nachgebildet.