Das Schneider CPC Systembuch

Die Abteilungen des Betriebssystems

Amsdos

Low Level Disc Driving

Nicht nur Die Abteilungen des Betriebssystems: Der Cassette Manager
Der Cassette Manager: Der Cassette Manager
der CASSETTE MANAGER
, auch Die Abteilungen des Betriebssystems: AmsdosAmsdos stellt Vektoren bereit, mit denen man auf einer niedrigeren Ebene Daten von und zur Diskette schicken kann. Dafür wurden von Amstrad noch weitere RSX-Kommandos eingerichtet, die aber wegen ihrer Namensgebung und der Art der Parameter: Parameter-ÜbergabeParameter-Übergabe (in Z80-Registern) nicht für einen Einsatz von Einleitung: BASIC
Anhang: Basic
Basic
aus in Frage kommen.

Die Namen dieser Routinen sind alle ein Datentypen: Bytes
Datenbreite: Bytes
Byte
lang und gehen von CHR_1 bis CHR_9. Da bei allen RSX-Namen das letzte Datentypen: Bytes
Datenbreite: Bytes
Byte
des Namens mit &80 geodert sein muss (gesetztes 7. Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
), ergeben sich die 'Datentypen: Realrealen' Namen als CHR_&81 bis CHR_&89.

Low Level Kommandos von Amsdos:
+------+-----------------------+-----------------------------------------------+
| Name | Die Fließkomma-Routinen: FunktionenFunktion              | Eingaben                                      |
+------+-----------------------+-----------------------------------------------+
| &81  | Low Level Disc Driving: &81 Message on/offMessage ON/OFF        | Operationen: BD5B / 349A / 349A:  FLO SUBA=0 => ON  Operationen: BD5B / 349A / 349A:  FLO SUBA<>0 => OFF                        |
| &82  | Low Level Disc Driving: &82 Drive ParameterDrive Parameter       | HL zeigt auf Tabelle mit div. Zeitkonstanten. |
| &83  | Low Level Disc Driving: &83 Disc Format ParameterDisc Format Parameter | Operationen: BD5B / 349A / 349A:  FLO SUBA=0 => IBM    Operationen: BD5B / 349A / 349A:  FLO SUBA=&40 => Einleitung: CP/MCP/M    Operationen: BD5B / 349A / 349A:  FLO SUBA=&Der Zeichensatz des Schneider CPC: &C0 = 192C0 => Daten |
| &84  | Low Level Disc Driving: &84 Read SektorRead Sektor           | LOW KERNEL JUMPBLOCK: 000E:  LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
=Drive D=Track C=Sektor HL=Adr.512Byte-Puffer| | &85 | Low Level Disc Driving: &85 Write SektorWrite Sektor | LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
=Drive D=Track C=Sektor HL=Adr.512Byte-Puffer| | &86 | Low Level Disc Driving: &86 Format TrackFormat Track | LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
=Drive D=Track HL=Adr. der Parameter-Tabelle | | &87 | Low Level Disc Driving: &87 Seek TrackSeek Track | LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
=Drive D=Track | | &88 | Erklärung der Anschlussbelegung: TestTest Drive | Operationen: BD5B / 349A / 349A: FLO SUBA=Drive | | &89 | Low Level Disc Driving: &89 Retry CountRetry Count | Operationen: BD5B / 349A / 349A: FLO SUBA=max. Anzahl für Leseversuche | +------+-----------------------+-----------------------------------------------+
&81 Message on/off

Mit &81 kann man alle Fehlermeldungen des Disc-Controllers unterdrücken. Insbesondere die Frage:

    Retry, ignore or cancel?

Wird in Operationen: BD5B / 349A / 349A: FLO SUBA ein Wert ungleich Real: NullNull übergeben, so fragen die verschiedenen Amsdos-Routinen nicht mehr, sondern kehren sofort mit einer entsprechenden Fehlermeldung zurück, so als habe der Anwender 'C' für 'cancel' eingegeben.

Garbage Collection: ... beim CPC 464Beim CPC 464 ist beim normalen Disketten-Betrieb von Einleitung: BASIC
Anhang: Basic
Basic
aus diese Möglichkeit meist nicht einsetzbar, weil dann beim geringsten Der Linien-Algorithmus: Fehler 3Fehler das Programm unwiderruflich stehen bleibt. Von dieser Einschränkung sind aber nur die High Level-Routinen betroffen (LOAD, SAVE, OENIN, OPENOUT etc.). Der Cassette Manager: KatalogKataloge und RSX-Kommandos veranlassen den Basic-Interpreter nicht zum Abbruch!

Man kann also auch Garbage Collection: ... beim CPC 464beim CPC 464 für die Dauer eines RSX-Kommandos wie |Operationen: BD5B / 349A / 349A: FLO SUBA oder |DIR die Fehlermeldungen abschalten!

Garbage Collection: ... beim CPC 664 und 6128Beim CPC 664 und 6128 hat man aber überhaupt keine Probleme. Hier kann man auch die Disc-Breaks abfangen und in der Systemvariablen DERR nachschauen, was vorliegt, um dann selbst entsprechend zu reagieren.

&82 Drive Parameter

Mit &82 kann man alle Wartezeiten, die beim Betrieb mit der Diskettenstation einzuhalten sind, neu festlegen. Normalerweise wird man davon nicht Gebrauch machen, weil die einzelnen Werte eigentlich optimal versorgt sind.

Wer aber Laufwerke eines anderen Anbieters anschließt, kann hiermit vielleicht eine andere Steprate einstellen (3 ms statt 12 sind heute eigentlich üblich).

Auch bei Programmen, die oft, aber immer mit kurzen Pausen auf ein Laufwerk zugreifen (Compiler o.AE.), kann man die Nachlaufzeit des Motors erhöhen, damit die Disketten nicht immer kurz vor dem nächsten Zugriff stehen bleiben. Dann muss der Motor nämlich immer wieder erst angeschmissen werden, was zu Verzögerungen führt. Die Standard-Einstellung ist:

 HL ---> DEFW 50     ; Wartezeit in 1/50 Sek. bis zum Hochlaufen des Motors.
         DEFW 250    ; Nachlaufzeit nach einem Zugriff in 1/50 Sekunden.
         DEFB &AF    ; Wartezeit nach dem Formatieren des letzten Sektors.
         DEFB &0F    ; Wartezeit beim Spurwechsel in ms. zusätzlich zu:
         DEFB &0C    ; Wartezeit beim Spurwechsel in ms. pro Spur.
         DEFB &01    ; Amsdos: HeaderHead Unload Time = 32 ms (Wert wie zum Prog. Die ICs im Überblick: Der FDC 765
Das Innenleben der CPC-Rechner: Der FDC 765
des FDC
) DEFB &03 ; Amsdos: HeaderHead Load Time = 16 ms (Wert wie zum Prog. Die ICs im Überblick: Der FDC 765
Das Innenleben der CPC-Rechner: Der FDC 765
des FDC
)
&83 Disc Format Parameter

Hat man, wie auch immer, eine Das Identifikationsfeld in jedem Sektor: 3. SektornummerSektornummer von der Diskette gelesen, so kann man damit gerüstet diesen Vektor aufrufen, um Die Abteilungen des Betriebssystems: AmsdosAmsdos auf das zugehörige Amsdos: FormateFormat einzustellen. Dieser Vektor kopiert dann den zugehörigen DISC Basic und Maschinencode: ParameterPARAMETER Die Speicherkonfiguration im Schneider CPC: BlockBLOCK aus dem Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM in den Systemspeicher von Die Abteilungen des Betriebssystems: AmsdosAmsdos.

Einleitung: BASIC
Anhang: Basic
Basic
nimmt dieses 'Loggin' einer Diskette automatisch vor, bevor es eine Disketten-Datei eröffnet. In Maschinencode-Programmen muss man das aber selbst machen!

&84 Read Sektor
&85 Write Sektor

Das sind wohl die interessantesen Vektoren überhaupt. Damit kann man beispielsweise einen Diskettenmonitor oder eine Dateiverwaltung mit wahlfreiem Zugriff auf einzelne Datensätze programmieren. Bei der Sektor-Nummer muss der Format-Offset immer mit angegeben werden! Diese Routinen liefern im CY-Flag ihren Fehler-Status zurück: CY=1 -> o.k., CY=0 -> Der Linien-Algorithmus: Fehler 3Fehler.

&86 Format Track

Über dieses Kommando kann man eine einzelne Spur komplett formatieren. Vorher sollte man aber mit &83 das gewünschte Amsdos: FormateFormat angewählt haben! Also: Akku mit &00, &40 oder &Der Zeichensatz des Schneider CPC: &C0 = 192C0 laden, und erst &83 aufrufen, weil die Formatierungs-Routine folgende Basic und Maschinencode: ParameterParameter aus dem DISC Basic und Maschinencode: ParameterPARAMETER Die Speicherkonfiguration im Schneider CPC: BlockBLOCK übernimmt:

Datentypen: Bytes
Datenbreite: Bytes
Bytes
/Sektor, • Sektoren/Track, • Länge der Lücke zwischen Sektor-ID und Daten, • Füllbyte für die leeren Sektoren.

Die Parameter-Tabelle, deren Adresse dem Kommando in HL übergeben wird, muss dabei für jeden Sektor 4 Datentypen: Bytes
Datenbreite: Bytes
Bytes
für die Sektor-ID enthalten:

 HL ---> DEFB Spurnummer    (0...39)                   für den
         DEFB Seitennummer  (0)                        ersten
         DEFB Das Identifikationsfeld in jedem Sektor: 3. SektornummerSektornummer  (&01, &41 oder &C1)        Sektor.
         DEFB Sektorgröße   (2)
         ...                                           ...
         DEFB Spurnummer    (0..39)                    für den
         DEFB Seitennummer  (0)                        letzten
         DEFB Das Identifikationsfeld in jedem Sektor: 3. SektornummerSektornummer  (&08, &49 oder &C9)        Sektor.
         DEFB Sektorgröße   (2)

Nach Abschluss des Kommandos ist das CY-Flag gesetzt, wenn alles ordnungsgemaess verlaufen ist.

&87 Seek Track

Mit dem Kommando &87 kann man bereits eine neue Spur anfahren, bevor man darauf Daten liest oder schreibt. Damit kann man bei geschickter Programmierung normalerweise ganz schön Zeit sparen, weil die Positionierung des Schreib/Lesekopfes vom Die ICs im Überblick: Der FDC 765FDC unabhängig von der Die ICs im Überblick: Die CPU Z80
Das Innenleben der CPC-Rechner: Die CPU Z80
Die Anschlussbelegungen der wichtigsten ICs im CPC: Die CPU Z80
CPU
vorgenommen wird.

Dieses Kommando ist aber unter diesem Aspekt ungünstig programmiert, weil die Die ICs im Überblick: Die CPU Z80
Das Innenleben der CPC-Rechner: Die CPU Z80
Die Anschlussbelegungen der wichtigsten ICs im CPC: Die CPU Z80
CPU
hier wartet, bis Die ICs im Überblick: Der FDC 765
Das Innenleben der CPC-Rechner: Der FDC 765
der FDC
fertig ist, um im CY-Flag eine Erfolgs- (CY=1) oder Misserfolgs-Meldung (CY=0) zurückzugeben. Das Kommando versucht es bei einem Misserfolg zunächst so oft, wie mit &89 angegeben wurde. Erst dann, oder wenn keine Diskette eingelegt ist, wird (evtl., je nach &81) der Anwender gefragt "Retry, ignore, cancel?". Und erst, wenn das alles nichts bringt, kehrt sie mit gelöschtem CY-Flag zurück.

&88 Test Drive (fehlerhaft)

Hiermit kann man den Laufwerk-Status (Statusregister 3 des FDC) eines Laufwerks abfragen. Dieses Kommando scheint aber einen dicken Der Linien-Algorithmus: Fehler 3Fehler zu enthalten, der die Auswertung der Erfolgs-Meldung im CY-Flag und des A-Registers erschwert:

Die meisten FDC-Befehle liefern in ihrer Auswertungs-Phase als erstes Datentypen: Bytes
Datenbreite: Bytes
Byte
Programmierung des FDC 765: Das Statusregister 0
Programmierung des FDC 765: Das Statusregister 1
Programmierung des FDC 765: Das Statusregister 2
Programmierung des FDC 765: Das Statusregister 3
Die Register des FDC: Das Statusregister 0
Die Register des FDC: Das Statusregister 1
Die Register des FDC: Das Statusregister 2
Die Register des FDC: Das Statusregister 3
das Statusregister
0. An dessen beiden obersten Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bits
kann man Erfolg oder Misserfolg einer Die Fließkomma-Routinen: OperationenOperation erkennen. Die Abteilungen des Betriebssystems: AmsdosAmsdos benutzt zur Amsdos: Auswertung der Result-PhaseAuswertung der Result-Phase eine Standard-Routine, die das CY-Flag nur dann setzt, wenn die beiden obersten Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bits
des ersten Ergebnis-Bytes Real: NullNull sind. Beim Statusregister 0 bedeutet das: Die Fließkomma-Routinen: OperationenOperation erfolgreich beendet.

Das Kommando &88 testet das Die Z80: Wirkung der Z80-Befehle auf die FlagsFlag und kehrt bei der Meldung 'Misserfolg' (CY=0) mit dem CY-Flag eben so gesetzt zurück. Ist aber CY=1, so wird das erste Ergebnis-Byte in den Akku geladen, und erst dann (mit CY=1) zurückgesprungen.

Nun liefert der FDC-Befehl &04 SENSE DRIVE STATUS als erstes Datentypen: Bytes
Datenbreite: Bytes
Byte
aber nicht Programmierung des FDC 765: Das Statusregister 0
Programmierung des FDC 765: Das Statusregister 1
Programmierung des FDC 765: Das Statusregister 2
Programmierung des FDC 765: Das Statusregister 3
Die Register des FDC: Das Statusregister 0
Die Register des FDC: Das Statusregister 1
Die Register des FDC: Das Statusregister 2
Die Register des FDC: Das Statusregister 3
das Statusregister
0, sondern bloß einen einzigen Wert: Das Status-Register 3.

Die Result-Phase-Routine setzt also ihr CY-Flag aufgrund der Port B - Input: &F5xx: Bits 1, 2 und 3:
Port C - Output: &F6xx: Bit 6 und 7:
Bits 6 und
7 des Statusregisters 3. Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
7 (Die Besonderheiten des FDC 765 im Schneider CPC: FAULTFault) ist bei der Beschaltung des Controllers nie gesetzt, Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
6 zeigt aber Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: RD und WR - read und write
Erklärung zu den Anschluss-Bezeichnungen: WR - Write
WRITE
PROTECT an.

Ist die eingelegte Diskette also schreibgeschützt, kehrt &88 immer mit 'Misserfolg' (CY=0) zurück. Ist sie das nicht, vermeldet das Kommando immer 'Erfolg', und nur dann enthält Operationen: BD5B / 349A / 349A: FLO SUBA Programmierung des FDC 765: Das Statusregister 0
Programmierung des FDC 765: Das Statusregister 1
Programmierung des FDC 765: Das Statusregister 2
Programmierung des FDC 765: Das Statusregister 3
Die Register des FDC: Das Statusregister 0
Die Register des FDC: Das Statusregister 1
Die Register des FDC: Das Statusregister 2
Die Register des FDC: Das Statusregister 3
das Statusregister
3.

Das beste ist, auf diese Rückmeldungen ganz zu verzichten, und direkt auf die Datentypen: Bytes
Datenbreite: Bytes
Bytes
der Result-Phase zuzugreifen, wie es nach dem noch folgenden, letzten Kommando beschrieben ist.

&89 Retry Count

Mit diesem Befehl wird festgelegt, wieviele Versuche Die Abteilungen des Betriebssystems: AmsdosAmsdos bei verschiedenen (vor allem Lese-) Befehlen machen soll, bevor es das Handtuch wirft, und den Anwender "Retry, ignore or cancel" fragt (bzw. je nach Programmierung mit &81, direkt zurückkehrt).

Der Standardwert ist 10. Altersschwachen Disketten kann man mitunter mit bis zu 256 Leseversuchen 'nachhelfen'.

Valid HTML   Valid CSS