APPLICATIONSDISQUE ★ Disc-Utility ★

RSX Disk-Utility (Computer Partner)Applications Disque
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Dieses Programm wurde auf einem CPC 464 mit Diskettenlaufwerk DDI-1 geschrieben. Auch auf dem CPC 6128 läuft es fehlerfrei. Es benutzt direkt über OUT-Befehle die Kommandos des PD765 und ist somit vollkommen unabhängig vom Disketten-RAM und -ROM. Aus dem Betriebssystem werden nur die Routinen SCR SET MODE, TXT OUTPUT, KL LOG EXT sowie einige Befehle für die Interrupt-Behandlung benötigt. Die Namen der RSX-Kommandos ähneln denen der PD765-Anweisungen, sind also in Englisch gehalten. Die HELP-Page liegt dagegen in Deutsch vor. Zunächst sollen nun die Befehle dieser Erweiterung erklärt werden.

|HELP

Bringt alle zur Verfügung stehenden Befehle auf den Bildschirm. Deren Parameter sind durch Abkürzungen dargestellt, die auf der HELP-Page erklärt werden. Sie sind im folgenden aufgelistet.

  • T: zu bearbeitender Track
  • K: Kopfnummer des Laufwerks (normalerweise AMSDOS:0)
  • S: zu bearbeitender Sektor
  • G: Sektorgröße (0 = 128 Bytes, 1 = 256 Bytes usw.)
  • AUS: Dieser Punkt stellt eine Besonderheit dar. Jeder Befehl beginnt mit der Ausführung direkt nach dem Indexloch der Diskette, also am Track-Anfang. Befinden sich nun beispielsweise zwei Sektoren mit gleicher Nummer in einem Track, so würde das Programm immer nur den ersten der beiden lesen. Hier kommt der Parameter AUS ins Spiel. Wenn z.B. der erste und der fünfte Sektor die gleiche Nummer besitzen und der Anwender den fünften lesen möchte, muß der erste übersprungen werden. Das geschieht mit AUS = 1. Ist Aus = 0, so beginnt das Programm am Track-Anfang mit der Sektorsuche. AUS gibt also die auszulassenden Sektoren an.
  • B: Adresse für den Datenaustausch bei |READ.DATA, |WRITE.DATA und |WRITE.DEL.DATA (also der Daten-Buffer)
  • G3: Anzahl der Bytes des GAP#3
  • IDB: Dieser Buffer ist für den Befehl |READ.ID relevant. Ab dieser Adresse werden nacheinander die Informations-Bytes der einzelnen Sektoren abgelegt. Der Buffer beginnt mit einem Byte, das die aktuelle Track-Nummer enthält. Dann folgen für jeden Sektor acht Bytes, nämlich die sieben der Result-Phase des Befehls IREAD.ID sowie das Fill-Byte des Sektors, falls dieser durchgehend mit einem Byte gefüllt ist.
    adr: Dies ist eine normale Zwei-Byte-Adresse.
  • FB: Bevor eine Diskette formatiert werden kann, muß man dem Programm eine Tabelle übergeben, die sämtliche Sektor-IDs enthält. FB steht für Format-Buffer und zeigt auf diese Adresse. A: Anzahl der Sektoren/Track
  • F: Fill-Byte beim Formatieren (ID): Steht dies hinter einer Abkürzung, so bezieht sich diese auf die Daten des Sektor-IDs.
  • < ** >: Dieser Parameter ist wahlweise anzugeben (auf der HELP-Page erscheinen eckige Klammern).

Die HELP-Page dient zum kurzen Nachschlagen, wenn man die Syntax nicht im Kopf hat. Achtung: Der Befehl |HELP bewirkt immer ein Löschen des Bildschirms sowie einen Wechsel nach MODE 2. Der alte Bildschirminhalt geht somit verloren!

|MESSAGE.ON

Dieser Befehl bewirkt, daß sämtliche Fehlermeldungen, die von der Erweiterung erzeugt werden, auch auf dem Bildschirm zur Anzeige kommen.

|MESSAGE.OFF

Die Fehlermeldungen werden unterdrückt. Unabhängig vom Resultat der Bearbeitung des Befehls meldet sich die CPU mit dem unter Basic üblichen "Ready”.

|GET.STATUS,adr

Dieser Befehl gibt den derzeitigen Programmstatus an die Adresse adr aus. Der Status wird jeweils nach der Bearbeitung eines Kommandos beeinflußt und kann folgende Werte annehmen:

  • 00: Befehl erfolgreich abgeschlossen 01: Diskette fehlt
  • 02: Gewünschter Track ist nicht formatiert.
  • 03: Diskette ist schreibgeschützt.
  • 04: Schreibfehler
  • 05: Lesefehler

Dieser Befehl gibt dem Anwender also die Möglichkeit, den Status auch bei abgeschalteten Fehlermeldungen zu ermitteln. Über das Basic-Kommando PEEK kann man ihn somit aus der Adresse adr erhalten. Achtung: Der Status wird in der Adresse adr nicht aktualisiert!

|READ.DATA,T,T(ID),K(ID),S(ID),G(ID ),AUS,B,< G3 >

Dieser Befehl ermöglicht das Lesen eines Sektors von der Diskette in den Buffer, der an Adresse B beginnt. Die Übergabeparameter 2 bis 5 beziehen sich (wie bei |WRITE.DATA und |WRITE.DEL.DATA) auf die Informationen, die im ID-Feld des entsprechenden Sektors stehen. So muß beispielsweise die Track-Nummer des ID nicht unbedingt mit der des Tracks übereinstimmen, in dem sich der Sektor befindet. Die Ausführung sieht folgendermaßen aus. Das Programm sucht den Track, den man mit dem ersten Parameter angibt, und liest in diesem den ersten Sektor, dessen ID mit den Parametern 2 bis 5 übereinstimmt. Das G AP#3 ist beim Lesen nicht relevant. Eine Erklärung der Zeichen finden Sie beim Befehl |HELP.

Nun noch eine Anmerkung: Das Programm liest auch deleted Sektoren.

|WRITE. DATA,T,T(ID),K(ID),S(ID),G(ID),AUS,B,< G3 >

Dieser Befehl sorgt dafür, daß Daten ab Adresse B, also dem Daten-Buffer, im gewünschten Sektor gespeichert werden. Die Parameterübergabe ist identisch mit der bei |READ.DATA. Wenn man nicht das normale Format verwendet, spielt der Parameter G3 eine nicht unwichtige Rolle: Das GAP#3, eine Lücke zwischen zwei Sektoren, wird bei jedem Schreiben von Daten an den betreffenden Sektor angehängt. Nimmt man also ein größeres GAP#3 als beim Formatieren, kann es Vorkommen, daß die ID-Bytes des folgenden Sektors überschrieben werden. Fehlt die GAP#3-An-gabe, so benutzt das Programm eine GAP#3-Länge von &2A (42) Bytes, die auch bei AMSDOS zum Einsatz kommt.

|WRITE.DEL.DATA,T,T(ID),K(ID),S(ID),G(ID),AUS,B,< G3 >

Dieser Befehl ist in seiner Ausführung identisch mit |WRITE.DATA. Allerdings wird hier der geschriebene Sektor als deleted gekennzeichnet; er kann also von einfachen Sektorleseroutinen nicht mehr gelesen werden. |READ.DATA, |WRITE.DATA und |WRITE.DEL.DATA bilden den wichtigsten Teil dieser Erweiterung. Ich habe aber zusätzlich noch vier weitere Befehle zum Formatieren und Analysieren von Disketten eingebunden. Sie sollen die Arbeit mit dem Laufwerk vereinfachen.

|READ.ID,T,IDB

Dieser Befehl liest sämtliche IDs des Tracks T aus und trägt sie in der unter |HELP beschriebenen Art und Weise ab Adresse IDB in das RAM ein. Der Anwender kann diese Informationen beliebig weiterverarbeiten . Zusätzlich erhält er eine Auswertung der IDs auf dem Bildschirm, soweit die Ausgabe durch I MESSAGE. ON ermöglicht wurde. Die Aufzählung der angegebenen Sektoren erfolgt durchnumeriert, und zwar in der Reihenfolge, wie sie beim Formatieren im Track eingetragen wurden, ln der Klammer kommen sämtliche (4) ID-Bytes zur Darstellung, die man als Parameter 2 bis 5 bei den Schreib- und Lesebefehlen mitteilen muß. Ferner können folgende Abkürzungen hinter den einzelnen Sektoren auftauchen:

/DI: Data Error in ID (meist ein Fehler in der Prüfsumme, die über das ID gebildet wird)
/CM: Control Mark (Sektor wurde als deleted erkannt.)
/DD: Data Error in Data Field (Fehler in der Priif-summe des Datenfeldes)
/WC: Wrong Cylinder (Im ID wurde eine Track-Nummer gefunden, die nicht mit der des gewählten Tracks übereinstimmt.)
/MA: Missing Address Mark in Data Field (Address Mark des Datenfeldes (3 Bytes) nicht gefunden)
/FB: Format Byte (Sektor, der mit einem einheitlichen Byte gefüllt, also meistens leer ist)
/WH: Wrong Head (Die AMSDOS-Laufwerke haben nur einen Kopf mit der Nummer 0; alle anderen Nummern führen zu dieser Meldung.)

Diese Angaben sollen dem User helfen, die Eigenarten eines bestimmten Tracks zu analysieren.

|FORMAT.ID,IDB,FB.< G3 >

Der Befehl IRE AD. ID fertigt einen Datenblock im RAM an, der die Sektorinformationen enthält. Mit deren Hilfe kann der Anwender nun einen Track formatieren. Er muß lediglich die Adresse IDB mitteilen, an der die Daten von |READ.ID stehen, sowie die Adresse FB, ab welcher der Formatblock erstellt wird. Die Angabe von GAP#3 erfolgt wahlweise. Fehlt sie, so setzt das Programm den Wert &52 (82) ein.

Sollte der erstellte Track nicht mit dem Ausgangs-Track übereinstimmen, so war das gewählte GAP#3 zu groß oder zu klein.

|FORMAT.NORM,T,S,FB

Dieser Befehl formatiert einen Track T im normalen Format. Gibt man z.B. für S den Wert &C1 ein, so geschieht dies folgendermaßen:

C1 C6 C2 C7 C3 C8 C4 C9 C5

Es werden immer neun Sektoren formatiert, und zwar nach dem angegebenen Muster, beginnend mit Sektor S.

Mit einer einfachen Schleife lassen sich so Disketten schnell formatieren (&C1: Datenformat, &41: CP/M-Format, &00: IBM-Format).

|FORMAT.PARA,T,A,G,F,FB,< G3 >

Dies ist der leistungsstärkste Formatbefehl. Hierfür muß man den Formatblock selbst erstellen, und zwar für jeden Sektor die vier ID-Bytes. Wer sechs Sektoren möchte, benötigt also 6x4 Bytes, die Sektor für Sektor ab Adresse FB eingetragen werden müssen. A gibt die Anzahl der gewünschten Sektoren an, in diesem Fall also sechs. G steht für den Sektorabstand beim Formatieren; die Zahlenwerte für G sind unter |HELP erklärt. Wird GAP#3 nicht angegeben, nimmt das Programm &52 (82) als Ausgangswert.

Nun möchte ich noch vor einem falschen Einsatz dieser Erweiterung warnen. Sie akzeptiert sämtliche Eingaben. So ist es beispielsweise möglich, daß zu hohe Track-Nummern das Laufwerk beschädigen! Falsche Buffer-Adressen können das Programm oder das Betriebssystem überschreiben und somit den Rechner zum Absturz bringen. Wer sich mit dem Aufbau seines Computers nicht auskennt, sollte keine Buffer-Adressen benutzen, die außerhalb des Bereichs von &0040 bis &9BFF liegen. Natürlich läßt sich auch der Bildschirmspeicher als Daten-Buffer benutzen. Wer Maschinensprache beherrscht, wird keine großen Probleme haben, die Befehle von eigenen MC-Routinen aus anzuspringen.

Zum Schluß noch ein Hinweis. Der Laufwerkmotor ist interruptgesteuert; Hoch- und Nachlaufzeit entfallen also nicht.

Eintipphilfe

Tippen Sie das Listing sorgfältig ab, und starten Sie es mit RUN. Der Rechner überprüft nun die Datenzeilen. Im Falle eines Fehlers wird eine entsprechende Meldung ausgegeben und das Programm beendet. Kontrollieren Sie dann die betreffende Zeile, und verbessern Sie diese gegebenenfalls. Dann starten Sie erneut mit RUN. .Läuft das Programm einwandfrei durch, speichern Sie das Maschinenprogramm mit SAVE ”DISCUTL.RSX”,b,&9C00,&A50 ab. Zur späteren Benutzung der RSX-Befehle sollten Sie Ihr Programm mit folgender Kommandofolge beginnen lassen:

MEMORY &9BFF
LOAD ”DISCUTL.RSX”
CALL &9C00

Stefan Kruse , Computer Partner

★ PUBLISHER: Computer Partner
★ YEAR: 1989
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: COMPUTER PARTNER 1989
★ AUTHOR: Stefan Kruse
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» RSX-Disk-Utility    (Computer  Partner)    LISTING    GERMANDATE: 2021-02-02
DL: 180
TYPE: PDF
SiZE: 762Ko
NOTE: 3 pages/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Flimmern 50/60 Hertz (Schneider CPC Welt)
» Applications » QTH-Distanz (Schneider Aktiv)
» Applications » Razni programi (Kerimovski, Kočanska)
» Applications » Datenverwaltung (Schneider Aktiv)
» Applications » Crown Public Domain Disc #1
» Applications » Alyssa Database (CPC Attack)
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 537 millisecondes et consultée 921 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.