Hauptsprungleiste💾 Cassette Manager / AMSDOSEintrag Nr. 125CPC 464/664/6128
CAS IN OPEN
&BC77
Eine Datei zum Lesen öffnen.
Original (SOFT 968): „Open a file for input.“
🔀Wie der Aufruf die Routine erreicht
Dein Programm RAM-Sprungleiste Low Kernel (RAM/ROM) unteres ROM
───────────── ──────────────── ──────────────────── ───────────
CALL &BC77 ───────▶ &BC77: RST 1 ─────────▶ &0008 LOW JUMP: CAS IN OPEN
DW Low Address ROM-Zustand merken, ───▶ (Routine)
(Bit 15 = oberes ROM aus) unteres ROM an │
◀────────────────────────────────────────── ROM-Zustand zurück ◀──── RET ──┘📖Beschreibung
⚙️ Wirkung
- Den Lesestream zum Lesen einer Datei einrichten und den ersten Block lesen.
🧮 Register auf einen Blick
EingabeBDEHL
AusgabeABCCarryDEHLZero
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 2K-Puffers, der verwendet werden soll.
⬅️ Rücksprungbedingungen
- Wenn die Datei erfolgreich geöffnet wurde:
- Carry gesetzt.
- Zero gelöscht.
- HL enthält die Adresse eines Puffers, der den Dateiheader enthält.
- DE enthält die Datenposition (aus dem Header).
- BC enthält die logische Dateilänge (aus dem Header).
- A enthält den Dateityp (aus dem Header).
- Wenn der Stream bereits verwendet wird:
- Carry gelöscht.
- Zero gelöscht.
- In V1.1: A enthält eine Fehlernummer (#0E).
- In V1.0: A verändert.
- BC, DE und HL verändert.
- 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.
- BC, DE und HL verändert.
- Immer:
- IX und andere Flags verändert.
- Alle anderen Register bleiben erhalten.
- Diese Routine kann zwei Fehlernummern zurückgeben:
- #00: Der Benutzer hat Escape gedrückt.
- #0E: Der Stream wird bereits verwendet.
📝 Hinweise aus dem Handbuch
- Der bereitgestellte 2K-Puffer (2048 Bytes) wird verwendet, um den Inhalt eines Blocks der Datei zu speichern, wenn er vom Band gelesen wird. Er bleibt in Verwendung, bis die Datei durch Aufruf von entweder CAS IN CLOSE oder CAS IN ABANDON geschlossen wird. Der Puffer kann sich an einer beliebigen Stelle im Speicher befinden, sogar unter einem ROM.
- Der übergebene Dateiname wird in den Lesestream-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 darf, sollten Nullen möglichst vermieden werden. ASCII-Kleinbuchstaben (Zeichen #61..#7A) werden in ihre Großbuchstaben-Äquivalente (Zeichen #41..#5A) umgewandelt. Der Dateiname kann sich an einer beliebigen Stelle im RAM befinden, sogar unter einem ROM.
- Der Dateiname ist normalerweise der Name der Datei, die gelesen werden soll. Ein Dateiname mit der Länge null (oder einer, der mit einem Nullzeichen beginnt) wird jedoch speziell behandelt. Er bedeutet, die nächste Datei auf dem Band zu lesen.
- Wenn die Datei zum Lesen geöffnet wird, wird der erste Block der Datei sofort gelesen. Die Adresse des Bereichs, in dem der Header aus diesem Block gespeichert ist, wird an den Benutzer zurückgegeben, damit Informationen daraus entnommen werden können. Dieser Bereich liegt in den zentralen 32K des RAM. Der Benutzer darf nicht in den Header schreiben, sondern nur daraus lesen. Der Cassette Manager verwendet Felder im Header für eigene Zwecke, sodass diese von denen abweichen können, die vom Band gelesen wurden. Der Dateityp, die logische Länge, der Einsprungpunkt und alle Benutzerfelder bleiben unverändert. (siehe Abschnitt 8 für eine Beschreibung des Headers).
💾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 Lesestrom zum Lesen einer Datei einrichten und den Header lesen, falls einer vorhanden ist, andernfalls einen gefälschten Header im Speicher erstellen.
🧮 Register auf einen Blick
EingabeBDEHL
AusgabeABCCarryDEHLZero
verändertBCDEFHLIX
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 eines Puffers, der den Datei-Header enthält.
- DE enthält die Datenposition (aus dem Header).
- BC enthält die logische Dateilänge (aus dem Header).
- A enthält den Dateityp (aus dem Header).
- Wenn der Strom bereits geöffnet ist:
- Carry gelöscht.
- Zero gelöscht.
- A enthält eine Fehlernummer (#0E).
- BC, DE und HL verändert.
- Wenn das Öffnen aus einem anderen Grund fehlgeschlagen ist:
- Carry gelöscht.
- Zero gesetzt.
- A enthält eine Fehlernummer.
- BC, DE und HL verändert.
- Immer:
- IX und andere Flags verändert.
- Alle anderen Register bleiben erhalten.
📝 Hinweise aus dem Handbuch
- Der bereitgestellte 2K-Puffer (2048 Bytes) wird verwendet, um den Inhalt eines Blocks der Datei zu speichern, wenn er von der Disc gelesen wird. Er bleibt in Verwendung, bis die Datei durch Aufruf von entweder CAS IN CLOSE oder CAS IN ABANDON geschlossen wird. Der Puffer kann sich irgendwo im Speicher befinden, sogar unter einem ROM.
- Der Dateiname muss den AMSDOS-Konventionen entsprechen, ohne Platzhalterzeichen. Der Dateiname kann sich irgendwo im RAM befinden, sogar unter einem ROM.
- Wenn der Typ-Teil des Dateinamens weggelassen wird, versucht AMSDOS nacheinander, eine Datei mit den folgenden Typ-Teilen zu öffnen: '.', '.BAS', '.BIN'. Wenn keine davon existiert, schlägt das Öffnen fehl.
- Wenn die Datei geöffnet wird, wird der erste Datensatz der Datei sofort gelesen. Wenn dieser Datensatz einen Header enthält, wird er in den Speicher kopiert, andernfalls wird ein gefälschter Header im Speicher erstellt. Die Adresse des Bereichs, in dem der Header gespeichert ist, wird an den Benutzer zurückgegeben, damit Informationen daraus entnommen werden können. Dieser Bereich liegt in den zentralen 32K des RAM. Der Benutzer darf nicht in den Header schreiben, sondern nur daraus lesen. AMSDOS verwendet Felder im Header für eigene Zwecke, sodass diese von denen abweichen können, die von der Disc gelesen wurden. Der Dateityp, die logische Länge, der Einsprungpunkt und alle Benutzerfelder bleiben unverändert.
🧪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.0
1
2
3
Rand
Modus 1 · Basis &C000 · Versatz &0000Tastenpuffer: 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)
0000ED FEHLE ▸ RESET ENTRY
0002C9RET
000300NOP
000400NOP
000500NOP
000600NOP
000700NOP
0008ED FEHLE ▸ LOW JUMP
Firmware
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)
| Datei | Typ | Länge | Laden |
|---|---|---|---|
| HALLO.TXT | ASCII | 33 | – |
| ZAHLEN.BIN | binär | 6 | &5000 |
| MUSTER.DAT | binär | 16 | &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.