CASSETTE MANAGERDie Kassetten (und Disketten) Routinen. Die von Die Abteilungen des Betriebssystems: AmsdosAMSDOS gepatchten Routinen sind entsprechend gekennzeichnet. Diese Top-Level-Routinen können, bis auf CASSETTE MANAGER: BC92: CAS OUT ABANDONCAS OUT ABANDON und CASSETTE MANAGER: BC7D: CAS IN ABANDONCAS IN ABANDON, einen Der Linien-Algorithmus: Fehler 3Fehler zurückmelden. Dabei gibt es jedoch zum Teil erhebliche Unterschiede zwischen CAS-464, CAS-664/6128 und Die Abteilungen des Betriebssystems: AmsdosAmsdos. Gemeinsam ist, dass bei erfolgreicher Beendigung einer Opertion das CY-Flag gesetzt wird: Die Abteilungen des Betriebssystems: AmsdosAmsdos, CAS-464, CAS-664/6128: CY=1 -> o.k.
Die Kassetten-Operationen können gebreakt werden. Das wird Garbage Collection: ... beim CPC 464beim CPC 464 laut Fimware-Manual mit CY=0 und Z=1 vermerkt, bei CPC 664 und 6128 mit dem Fehlercode 0 im A-Register. Trotzdem scheinen beide Datentypen: Realreal gleich zu arbeiten: CAS-464, CAS-664/6128: CY=0 und Z=1 und Operationen: BD5B / 349A / 349A: FLO SUBA=0 --> Break
Disketten-Operationen können nicht unterbrochen werden. Alle andern Der Linien-Algorithmus: Fehler 3Fehler werden bei den Kassetten-Routinen immer mit CY=0 und Z=0 angemerkt. Der CPC 664/6128 gibt in Operationen: BD5B / 349A / 349A: FLO SUBA aber immer noch einen Fehler-Code aus. Datei nicht eröffnet bzw. CPC 464: CY=0, Z=0 Operationen: BD5B / 349A / 349A: FLO SUBA zwischen 1 und 5 bereits eine Datei eröffnet: CPC 664/6128: CY=0, Z=0 Operationen: BD5B / 349A / 349A: FLO SUBA = 14 End of File: CPC 464: CY=0, Z=0 Operationen: BD5B / 349A / 349A: FLO SUBA zwischen 1 und 5 CPC 664/6128: CY=0, Z=0 Operationen: BD5B / 349A / 349A: FLO SUBA = 15 Die Abteilungen des Betriebssystems: AmsdosAmsdos kennt noch mehr Der Linien-Algorithmus: Fehler 3Fehler, die auch mit CY=0 gemeldet werden. Diese beiden Der Linien-Algorithmus: Fehler 3Fehler werden wie bei den Kassetten-Routinen mit Z=0 gemeldet, die anderen aber mit Z=1, was beim Kassettenbetrieb der Break-Meldung entspricht: Amsdos-FehlercodesDer Fehlercode wird im A-Register zurückgegeben. Logische Fehler:&0LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION FDC-Fehler:Datenbreite: Bits &01 1 - ID- oder Data-Adress-Marke fehlt (Diskette ist nicht formatiert) &02 2 - Diskette ist schreibgeschützt (Schreibschutzkerbe ist geöffnet) &04 4 - Sektor nicht auffindbar (falsches Disketten-Format eingeloggt) &08 8 - Laufwerk ist nicht bereit (Diskette nicht/nicht richtig drin) &10 16 - Puffer-Überlauf (dürfte nie vorkommen) &20 32 - Kontrollsummen-Fehler (Diskette möglicherweise beschaedigt) Außerdem ist immer Datenbreite: Bits Die Fehler-Rückmeldung bei MAIN FIRMWARE JUMPBLOCK: CASSETTE MANAGER BC65: CAS INITIALISEInitialisiere die Kassetten-Routinen. Eingaben: keine Ausgaben: keine Unverändert: IX und IY Komplette Initialisierung der Kassetten-Routinen. Die Eingabe- und Ausgabe-Datei wird als geschlossen markiert, Die Schreibgeschwindigkeit wird auf 1000 Baud eingestellt und die Meldungen der Kassetten-Routinen werden zugelassen. Nur CPC 664 und 6128: Der Kassettenmotor wird ausgeschaltet. BC68: CAS SET SPEEDLege die Schreib-Geschwindigkeit neu fest. Eingaben: HL = Halbe Der Sound Manager: PeriodenlängePeriodenlänge eines 0-Datenbreite: Bits Die einzelnen Datenbreite: Bits Da die analoge Aufzeichnungs-Elektronik dazu neigt, die Signalflanke zwischen einem 0- und einem 1-Datenbreite: Bits Folgende Werte werden standardmäßig benutzt: 1000 Baud: HL=333 und Operationen: BD5B / 349A / 349A: FLO SUBA=25 2000 Baud: HL=167 und Operationen: BD5B / 349A / 349A: FLO SUBA=50 BC6B: CAS NOISYLege fest, ob die Kassetten-Routinen ihre Meldungen unterdrücken sollen. Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Ein- oder Ausschalt-Flag
Ausgaben: keine
Unverändert: BC,DE,HL,IX,IY
Die Meldungen der Kassetten-Routinen werden unterdrückt, wenn in Operationen: BD5B / 349A / 349A: FLO SUBA ein Wert ungleich Real: NullNull übergeben wird. Betroffen sind: • Press PLAY then any key: Diese Fehlermeldungen werden nicht beeinflusst: • Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: RD und WR - read und write BC6E: CAS START MOTORStarte den Motor des Kassetten-Rekorders. Eingaben: keine
Ausgaben: Operationen: BD5B / 349A / 349A: FLO SUBA = alter Zustand des Motor-Relais
CY=1 => o.k. / CY=0 => [ESC]
Unverändert: BC,DE,HL,IX,IY
Diese Routine startet den Motor immer. Lief er vorher noch nicht, wird MAIN FIRMWARE JUMPBLOCK: CASSETTE MANAGER BC71: CAS STOP MOTORAlle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: HaltHalte den Motor des Kassetten-Rekorders an. Eingaben: keine
Ausgaben: Operationen: BD5B / 349A / 349A: FLO SUBA = alter Zustand des Motor-Relais
CY=1 => o.k. / CY=0 => [ESC]
Unverändert: BC,DE,HL,IX,IY
Diese Routine stoppt den Motor immer. BC74: CAS RESTORE MOTORStarte oder stoppe den Motor entsprechend einer früheren Einstellung. Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = alter Zustand des Motor-Relais
Ausgaben: CY=1 => o.k. / CY=0 => [ESC]
Unverändert: BC,DE,HL,IX,IY
Der Motor wird immer entsprechend Operationen: BD5B / 349A / 349A: FLO SUBA gestoppt oder gestartet. Wie bei &CASSETTE MANAGER: BC6E: CAS START MOTORBC6E CAS START MOTOR wird auf die Hochlaufzeit verzichtet, wenn [ESC] gedrückt wird. Das wird in beiden Fällen mit dem CY-Flag angezeigt. BC77: CAS IN OPENEröffne eine Datei zur Eingabe. Wird von Die Abteilungen des Betriebssystems: AmsdosAmsdos gepatcht. Eingaben: LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Der Dateinamen kann im gesamten RAM liegen. Kleinbuchstaben werden in Grossbuchstaben umgewandelt. Der Puffer kann ebenfalls im gesamten RAM liegen und wird so lange benutzt, bis die Datei mit CASSETTE MANAGER: BC7A: CAS IN CLOSECAS IN CLOSE oder CASSETTE MANAGER: BC7D: CAS IN ABANDONCAS IN ABANDON wieder geschlossen wird. Die ersten 2 kByte der Datei werden sofort gelesen, wodurch auch sofort der Fileheader zur Verfügung steht. ASCII-Dateien auf Diskette haben keinen Amsdos: HeaderHeader! BC7A: CAS IN CLOSESchließe eine Eingabe-Datei. Wird von Die Abteilungen des Betriebssystems: AmsdosAmsdos gepatcht. Eingaben: keine
Ausgaben: CY=0 => Der Linien-Algorithmus: Fehler 3Fehler. (Beschreibung am Anfang dieses Packs.)
CY=1 => o.k.
Unverändert: IX,IY
Nach Aufruf dieser Routine kann eine neue Eingabe-Datei eröffnet werden. Außerdem wird der Input-Puffer freigegeben. BC7D: CAS IN ABANDONVergesse, dass eine Datei zur Eingabe eröffnet ist. Wird von Die Abteilungen des Betriebssystems: AmsdosAmsdos gepatcht. Eingaben: keine Ausgaben: keine Unverändert: IX,IY Diese Routine wirkt wie &CASSETTE MANAGER: BC7A: CAS IN CLOSEBC7A CAS IN CLOSE, ist aber hauptsächlich für den Fehlerfall gedacht. BC80: CAS IN CHARLese ein Zeichen aus der Eingabe-Datei. Wird von Die Abteilungen des Betriebssystems: AmsdosAmsdos gepatcht. Eingaben: keine Ausgaben: CY=0 => Der Linien-Algorithmus: Fehler 3Fehler. (Beschreibung am Anfang dieses Packs.) CY=1 => o.k. Operationen: BD5B / 349A / 349A: FLO SUBA=Zeichen. Unverändert: BC,DE,HL,IY Dateien können nur ausschließlich zeichenweise oder nur en Die Speicherkonfiguration im Schneider CPC: Blockblock gelesen werden. Ein Mischen der beiden Lesarten ist nicht möglich. Nur Die Abteilungen des Betriebssystems: AmsdosAmsdos: Das Ende von ASCII-Dateien wird normalerweise mit dem Zeichen 26 gekennzeichnet (CTRL-Z = Soft End). Durch einen Der Linien-Algorithmus: Fehler 3Fehler im Die Abteilungen des Betriebssystems: AmsdosAmsdos signalisiert diese Routine auch bei Binär-Dateien ein EOF, wenn dieses Zeichen gelesen wird. Das ist in einem Maschinesprache- Programm leicht abfangbar. Ist CY=0, muss man nur Erklärung der Anschlussbelegung: Testtesten, ob Operationen: BD5B / 349A / 349A: FLO SUBA diesen Wert enthält. Dann muss man die Fehlermeldung einfach ignorieren. BC83: CAS IN DIRECTLese die Eingabe-Datei in einem Zug. Wird von Die Abteilungen des Betriebssystems: AmsdosAmsdos gepatcht. Eingaben: HL=Startadresse im RAM, ab der die Datei eingelesen werden soll.
Ausgaben: CY=0 => Der Linien-Algorithmus: Fehler 3Fehler. (Beschreibung am Anfang dieses Packs.)
CY=1 => o.k. und HL=Einsprungsadresse
Unverändert: IY
CASSETTE MANAGER: BC83: CAS IN DIRECTCAS IN DIRECT kann nur direkt nach &CASSETTE MANAGER: BC77: CAS IN OPENBC77 CAS IN OPEN aufgerufen werden. Es darf noch kein Zeichen mit &CASSETTE MANAGER: BC80: CAS IN CHARBC80 CAS IN CHAR gelesen Datenbreite: Wordsworden sein. Nur Die Abteilungen des Betriebssystems: AmsdosAmsdos: ASCII-Dateien von der Diskette können nicht en Die Speicherkonfiguration im Schneider CPC: Blockblock gelesen werden, da sie keinen Amsdos: HeaderHeader haben. BC86: CAS RETURNGebe das zuletzt gelesene Zeichen noch einmal zurück. Wird von Die Abteilungen des Betriebssystems: AmsdosAmsdos gepatcht. Eingaben: keine Ausgaben: keine Unverändert: AF,BC,DE,HL,IX,IY Mit diesem Vektor kann das zuletzt mit &CASSETTE MANAGER: BC80: CAS IN CHARBC80 CAS IN CHAR gelesene Zeichen zurückgegeben werden. Es kann nur ein Zeichen zurückgegeben werden und es muss auch bereits ein Zeichen gelesen Datenbreite: Wordsworden sein. Nach dem Erklärung der Anschlussbelegung: TestTest auf EOF kann das Zeichen 'Soft End' (Fehlercode 26) zurückgegeben werden, nicht aber 'Hard End' oder 'Datei nicht eröffnet' (Fehlercodes 14 und 15). BC89: CAS TEST EOFPrüfe, ob das Ende der Eingabe-Datei erreicht ist. Wird von Die Abteilungen des Betriebssystems: AmsdosAmsdos gepatcht. Eingaben: keine
Ausgaben: CY=0 => Der Linien-Algorithmus: Fehler 3Fehler. (Beschreibung am Anfang dieses Packs.)
CY=1 => alles o.k. (kein EOF)
Unverändert: BC,DE,HL,IY
Das File-Ende kann (sinnvollerweise) nur bei zeichenweise Eingabe getestet werden. Dies geschieht, indem ein Zeichen gelesen und, sofern kein 'hard end' erkannt wird, wieder zurückgestellt wird. BC8C: CAS OUT OPENEröffne eine Datei zur Ausgabe. Wird von Die Abteilungen des Betriebssystems: AmsdosAmsdos gepatcht. Eingaben: LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Der Output-Puffer wird nur benutzt, wenn die Datei zeichenweise geschrieben wird. Die Abteilungen des Betriebssystems: AmsdosAmsdos testet mit Aufruf dieser Routine sofort, ob im angesprochenen Laufwerk eine Diskette eingelegt ist. Im Fileheader können dann unter anderem folgende Felder beschrieben werden: • Dateityp (default: ASCII-Datei) ASCII-Dateien auf Diskette werden ohne Amsdos: HeaderHeader abgespeichert. BC8F: CAS OUT CLOSESchließe die Ausgabe-Datei. Wird von Die Abteilungen des Betriebssystems: AmsdosAmsdos gepatcht. Eingaben: keine
Ausgaben: CY=0 => Der Linien-Algorithmus: Fehler 3Fehler. (Beschreibung am Anfang dieses Packs.)
CY=1 => o.k.
Unverändert: IY
Jede Ausgabe-Datei muss mit CASSETTE MANAGER: BC8F: CAS OUT CLOSECAS OUT CLOSE geschlossen werden, auch wenn sie mit &&CASSETTE MANAGER: BC98: CAS OUT DIRECTBC98 CAS OUT DIRECT geschrieben wurde. Sonst wird der letzte Die Speicherkonfiguration im Schneider CPC: BlockBlock nicht auf Band gespeichert, bzw. die Datei nicht in's Inhaltsverzeichnis der Diskette eingetragen. Trat ein Der Linien-Algorithmus: Fehler 3Fehler auf (ESC), wird die Datei nicht korrekt geschlossen. Nachdem diese Routine aufgerufen wurde, kann der Output-Puffer wieder für andere Zwecke benutzt werden. BC92: CAS OUT ABANDONVergesse die Ausgabe-Datei. Hierbei gehen immer größere Datenmengen verloren. Wird von Die Abteilungen des Betriebssystems: AmsdosAmsdos gepatcht. Eingaben: keine Ausgaben: keine Unverändert: IX,IY Diese Routine ist für den Fehlerfall gedacht. Der letzte Datenblock wird nicht gespeichert und, bei Die Abteilungen des Betriebssystems: AmsdosAmsdos, die Datei nicht in's Inhaltsverzeichnis der Diskette eingetragen. Wie bei &CASSETTE MANAGER: BC8F: CAS OUT CLOSEBC8F CAS OUT CLOSE kann nachher der Output-Puffer wieder benutzt und eine neue Ausgabe-Datei eröffnet werden. BC95: CAS OUT CHARSchreibe ein Zeichen in die Ausgabe-Datei. Wird von Die Abteilungen des Betriebssystems: AmsdosAmsdos gepatcht. Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Zeichencode Ausgaben: CY=0 => Der Linien-Algorithmus: Fehler 3Fehler. (Beschreibung am Anfang dieses Packs.) CY=1 => o.k. Unverändert: BC,DE,HL,IY Diese Routine kann nicht gemischt mit &CASSETTE MANAGER: BC98: CAS OUT DIRECTBC98 CAS OUT DIRECT benutzt werden. BC98: CAS OUT DIRECTSchreibe die Ausgabe-Datei in einem Zug. Wird von Die Abteilungen des Betriebssystems: AmsdosAmsdos gepatcht. Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA =Dateity BC=Einsprungsadresse DE=Länge des abzuspeichernden Bereiches HL=Startadresse im RAM. Ausgaben: CY=0 => Der Linien-Algorithmus: Fehler 3Fehler. (Beschreibung am Anfang dieses Packs.) CY=1 => o.k. Unverändert: IY CASSETTE MANAGER: BC98: CAS OUT DIRECTCAS OUT DIRECT darf pro Datei nur einmal aufgerufen werden (man kann die Datei nicht in mehreren Abschnitten speichern). Außerdem kann dieser Vektor nicht mit &CASSETTE MANAGER: BC95: CAS OUT CHARBC95 CAS OUT CHAR gemishct benutzt werden. BC9B: CAS CATALOGErstelle ein Inhaltsverzeichnis. Wird von Die Abteilungen des Betriebssystems: AmsdosAmsdos gepatcht. Eingaben: DE=Adresse eines 2k-Puffers Ausgaben: CY, Z und Operationen: BD5B / 349A / 349A: FLO SUBA enthalten Informationen über Erfolg oder Der Linien-Algorithmus: Fehler 3Fehler. Unverändert: DE,IY CASSETTE MANAGER: BC9B: CAS CATALOGCAS CATALOG benutzt den Input-Strom, deshalb darf keine Eingabe-Datei eröffnet sein. Einleitung: BASIC Die Ausgabe-Bedingungen für die Katalog-Routinen unterscheiden sich unverständlicherweise stark von denen der anderen High- Level-Routinen. Erfolgreicher Katalog:Der Der Cassette Manager: KatalogKatalog von Kassette muss gebreakt werden, weil er sonst bis zum St-Nimmerleinstag andauert. Trotzdem wird das nicht als Der Linien-Algorithmus: Fehler 3Fehler mit CY=0 angemerkt. Im Gegensatz dazu muss ein Der Cassette Manager: KatalogKatalog von Diskette nicht gebreakt werden. Dafür merkt aber jetzt Die Abteilungen des Betriebssystems: AmsdosAmsdos einen Der Linien-Algorithmus: Fehler 3Fehler an! Möglicherweise wollte man damit zum Kassetten- Der Cassette Manager: KatalogKatalog kompatibel sein und nahm für dessen Return-Bedingung (fälschlicherweise) das Standard-Verhalten 'Break=Der Linien-Algorithmus: Fehler 3Fehler<->CY=0' an. MAIN FIRMWARE JUMPBLOCK: CASSETTE MANAGER
Fehler: Input-Stream in use:MAIN FIRMWARE JUMPBLOCK: CASSETTE MANAGER Hardware-Fehler:MAIN FIRMWARE JUMPBLOCK: CASSETTE MANAGER BC9E: CAS WRITESchreibe einen Speicherbereich auf die Kassette. Eingaben: HL=Startadresse des Datenblocks im RAM DE=Länge des Die Speicherkonfiguration im Schneider CPC: BlockBlocks Operationen: BD5B / 349A / 349A: FLO SUBA = Synchronisationszeichen Ausgaben: CY=1 => o.k. CY=0 => Der Linien-Algorithmus: Fehler 3Fehler. Operationen: BD5B / 349A / 349A: FLO SUBA enthält den Fehlercode Unverändert: IY Diese und die folgenden beiden Routinen sind die 'Low Level Routinen' des Cassette Managers. Mit dieser Routine können beliebig lange Die Speicherkonfiguration im Schneider CPC: BlockBlocks zusammenhängend auf Band gespeichert werden. Die Blocklänge 0 wird dabei als 65536 interpretiert. Die möglichen Fehlercodes sind: 0 - Break 1 - Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: RD und WR - read und write Das Synchronisationszeichen wird von den normalen Datei-Routinen benutzt, um hier mit verschiedenen Werten den Amsdos: HeaderHeader und den Datenblock unterscheiden zu können: Sync = &2C -> Amsdos: HeaderHeader
Sync = &16 -> Daten
Alle drei Routinen frieren für die Dauer ihrer Arbeit Anhang: Die Tonausgabedie Tonausgabe ein, verbieten in dieser Zeit Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupts, schalten das Motor-Relais automatisch ein und restaurieren dessen alten Zustand nachher wieder. Außerdem arbeiten sie generell nur im RAM. BCA1: CAS READLese einen Speicherbereich von Kassette ein. Eingaben: HL = Zieladresse für die Daten im RAM DE = maximale Anzahl Datentypen: Bytes Es ist nicht unbedingt nötig, einen kompletten Die Speicherkonfiguration im Schneider CPC: BlockBlock von Kassette zu lesen. Mit DE kann man die Maximal-Länge festlegen. Ist der Die Speicherkonfiguration im Schneider CPC: BlockBlock auf dem Band allerdings kürzer, wird im Allgemeinen Der Linien-Algorithmus: Fehler 3Fehler 1 erzeugt. Folgende Fehlercodes sind möglich: 0 - Break 1 - Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: RD und WR - read und write Ansonsten gilt das Selbe wie bei &CASSETTE MANAGER: BC9E: CAS WRITEBC9E CAS WRITE. BCA4: CAS CHECKVergleiche die Daten auf der Kassette mit einem Speicherbereich. Eingaben: HL = Startadresse der Vergleichsdaten im RAM DE = Länge des Die Speicherkonfiguration im Schneider CPC: BlockBlocks Operationen: BD5B / 349A / 349A: FLO SUBA = Synchronisationszeichen Ausgaben: CY=1 => o.k. CY=0 => Der Linien-Algorithmus: Fehler 3Fehler, Operationen: BD5B / 349A / 349A: FLO SUBA=Fehlercode Unverändert: IY Die möglichen Fehlercodes sind die selben, wie bei &CASSETTE MANAGER: BCA1: CAS READBCA1 CAS READ, zusätzlich noch der folgende: 3 - Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: RD und WR - read und write
Ansonsten gilt wieder das bei &CASSETTE MANAGER: BC98: CAS OUT DIRECTBC98 CASSETTE MANAGER: BC9E: CAS WRITECAS WRITE gesagte. |