APPLICATIONSDISQUE ★ DISK-MONITOR (CPC MAGAZIN) ★

Disk-Monitor (CPC Magazin)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 ★ 

Die sequentielle Datenverwaltung ist eine sehr einfache Form, um kleine Dateien zu verwalten. Übersteigt allerdings der Speicherbedarf die Kapazität des Rechners, so hilft die sequentielle Datei nicht weiter. Es muß eine andere Form gefunden werden: Der Direktzugriff.

Betrachtet man die Speicherkapazität einer Diskette als normalen Speicher, in dem sich beliebige Informationen befinden können, so müßte es möglich sein, direkt auf diese Information zuzugreifen. Da auf einer Diskette nicht immer alle Daten hintereinander hegen, muß die Diskettenstation intern in der Lage sein, auf beliebige Datenblöcke zuzugreifen. Aber leider haben die Erbauer des CPCs bzw. der Diskettenstation diese Möglichkeit nicht in das sonst so leistungsstarke Basic eingebunden. Erst bei genauerer Untersuchung des Disketten-ROMs wurden neben den bekannten Diskettenbefehlen (|DIR etc.) noch 9 weitere Befehle gefunden. Diese Befehle ermöglichen u. a. den Zugriff auf einen beliebigen Sektor der Diskette. (Eine gute und detaillierte Beschreibung dieser "versteckten" Befehle finden sich in dem Buch "Das große Floppy Buch" von Brückmann und Schieb aus dem DATA BECKER Verlag.) Alle diese Befehle können vom BASIC aus leider nicht aufgerufen werden und sind nur mit einem Maschinenprogramm nutzbar.

Da in dieser Folge nicht auf die Programmierung in Maschinensprache, sondern auf die effektive Anwendung der Diskettenstation eingegangen werden soll, bieten wir Ihnen kommentarlos eine Befehlserweiterung an, die zwei dieser Diskettenbefehle auch unter Basic nutzbar macht. Mit den dadurch entstehenden neuen RSX-Befehlen wollen wir verschiedene Probleme lösen und können auch einen detaillierten Einblick in den Aufbau der Diskette erhalten.

Das FORMAT

Bevor wir zu der Befehlserweiterung kommen, müssen vorab einige Begriffe geklärt werden. Sicherlich haben Sie schon des öfteren Disketten formatiert. Dabei werden bestimmte Bereiche auf der Diskette für die Datenspeicherung vorbereitet und reserviert. Meist handelt es sich um 40 Spuren (Tracks) mit jeweils 9 Sektoren (beim IBM-Format 8).

184320 Byte

Nur innerhalb dieses reservierten Bereichs können überhaupt Daten abgelegt werden. Ein Sektor kann wiederum 512 Byte Daten aufnehmen. Die maximale Speicherkapazität einer Diskette ist also auf 184320 Byte begrenzt (40 Spuren * 9 Sektoren * 512 Byte = 184320 Byte). Ein Sektor bildet dabei immer eine zusammengehörende Speichereinheit.

Die Diskette als Datei

Durch die Befehlserweiterung besteht die Möglichkeit, auf jeden beliebigen Sektor zuzugreifen. Der Inhalt kann dann direkt in einen Speicherbereich des Computers kopiert werden. Aber auch umgekehrt ist- es möglich, einen 512 Byte großen Speicherbereich in einen Sektor zu schreiben. Betrachtet man die gesamte Diskette als eine Datei und einen Sektor als Datensatz, so können hier 360 Datensätze zu je 512 Byte gespeichert werden. Wenn ein Datensatz z. B. nur 64 Byte aufnehmen soll, können innerhalb des Sektors 8 Datensätze untergebracht werden. D.h., die "Datei" könnte dann 2880 Datensätze zu je 64 Byte aufnehmen. Durch den direkten Zugriff auf einen beliebigen Sektor der Diskette besteht also die Möglichkeit, die gesamte Diskette als Datei zu nutzen. Das sind immerhin 184320 Byte.

Die Befehlserweiterungen

Kommen wir jetzt zur Befehlserweiterung (siehe Listing DISCRSX). Sie wurde als Unterprogramm ausgelegt und kann somit in ein beliebiges Programm zugeladen (MERGE) werden. Mit GOSUB 60000 wird sie dann initialisiert. Die neuen Befehle stehen danach bis zum Reset zur Verfügung. Sie können das Maschinenprogramm aber auch direkt als Binärfüe mit SAVE "DISCRSX.BIN”, B, &A000, &1B0 auf Diskette sichern und dann direkt von der Diskette laden. Das Programm muß dann mit CALL &A000 initialisiert werden (nur einmal aufrufen).

6 neue Befehle

Damit das Maschinenprogramm nicht durch irgendwelche Basic-Daten überschrieben wird, muß der Speicherbereich oberhalb &9FFF mit MEMORY &9FFF geschützt werden. Danach stehen 6 neue Befehle zur Verfügung. Ihnen ist immer das "|"-Zeichen (Shift-@) voranzustellen. Die beiden zentralen Befehle sind |SECREAD und |SECWRITE.

|SECREAD liest einen bestimmten Sektor von der Diskette in einen 512 Byte großen Speicher ein. Damit die Befehle universell zu nutzen sind, müssen dem Befehl 4 Parameter übergeben werden: |SECREAD, drive, track, sektor, puffer. drive bestimmt das Laufwerk, aus dem der Sektor eingelesen werden soll. Es kann dabei die Werte 0 für Laufwerk A und 1 für Laufwerk B annehmen, track bestimmt die Spur (0 bis 39) und sektor den Sektor (0 bis 8, bzw. 0 bis 7 beim IBM-Format). Mit dem Parameter "puffer" wird die Startadresse eines 512 Byte großen Puffers angegeben, wo die Daten hinkopiert werden. Es bietët sich der Bereich ab Adresse &A200 an, da er unbenutzt und schon geschützt ist.

Mit |SECREAD, 0,2,0, &A200 wird der Sektor Spur 2/Sektor 0 vom Laufwerk A in den Puffer ab Adresse &A200 eingelesen. |SECWRITE schreibt die Daten, die sich im Puffer befinden, zurück auf die Diskette. Die Parameter sind identisch wie beim

|SECREAD-Befehl.

Liegt einer der Parameter außerhalb des zulässigen Bereichs (z. B. drive = 3), wird der Befehl nicht ausgeführt. Ein solcher Parameterfehler wird in der Adresse &A16C registriert: &A16C = 0 OK, &A16C = 255 FEHLER. Es wird auch eine Fehlermeldung ausgegeben, wenn der Befehl |ERRORON aufgerufen wurde. Dann erfolgt bei jedem Fehler die Meldung "!!! Parameterfehler!!" auf dem Bildschirm. Mit lERROROFF läßt sich diese Meldung unterdrücken.

Wie Sie vielleicht schon wissen, unterstützt die Schneider-Diskette 3 (bzw. 4) unterschiedliche Formate. Das AMSDOS- oder VENDOR-Format arbeitet mit 40 Spuren und 9 Sektoren, reserviert aber die ersten beiden Spuren mit dem CP/M-System. Intern sind die Sektoren pro Spur mit &41 bis &49 bezeichnet. Das DATEN-Format arbeitet zwar auch mit 40 Spuren zu je 9 Sektoren, reserviert aber keine CP/M-Spuren. Hier sind die Sektoren mit &C1 bis &C9 bezeichnet. Als IBM-Format besitzt die Diskette pro Spur nur 8 Sektoren, die intern von &01 bis &08 bezeichnet sind. Damit die Befehlserweiterung auch auf alle Formate zugreifen kann, muß ihr mitgeteüt werden, in welchem Format Sie arbeiten wollen:

|SETFORMAT, format.

format darf den Wert 0 für das AMSDOS- oder VENDOR-Format, 1 für das DATEN-Format und 2 für das IBM-Format annehmen (nach der Initialisierung ist das AMSDOS-Format voreingestellt). Mit dem Befehl |SHOWFORMAT können Sie sich jederzeit zeigen lassen, mit welchem Format Sie arbeiten.

Mit Hilfe dieser neuen Befehle werden wir in der nächsten Zeit arbeiten und einige Projekte realisieren. Zuvor soll jedoch der Umgang mit den Befehlen ein wenig vertieft werden.

Ein Beispiel...

Der Sektor Spur 2/Sektor 0 soll in einen Puffer ab Adresse &A200 geladen und anschließend angezeigt werden. Betrachten Sie dazu unser Demoprogramm 1: Nachdem das Format auf AMSDOS eingestellt ist, wird der Sektor (Spur 2/ Sektor 0) in einen Puffer ab Adresse &A200 geladen. Der 512 Byte große Puffer (&A200 bis &3FF) ist jetzt mit den Daten des Sektors gefüllt. Die FOR-NEXT-Schleife 130 bis 170 druckt alle ASCII-Zeichen des Sektors aus (alle anderen Werte werden als ”." dargestellt). Wenn Sie die CP/M-Systemdiskette eingelegt haben (Kopie!!), erkennen Sie sofort, daß in diesem Sektor ein Teü der Directory zu finden ist. Dies ist der erste Schritt zu einem Disketten-Monitor.

Noch ein Beispiel

Mit der Möglichkeit, Sektoren in den Computer einzulesen und wieder zurückzuschreiben, läßt sich auch ein Diskettenkopierprogramm realisieren. Dazu unser Beispiel 2. Dieses Programm kopiert die CP/M-Systemspuren auf eine andere Diskette (z. B. VENDOR-Format). Insgesamt werden dabei 18 Sektoren eingelesen. Der 1. Sektor befindet sich dann ab Adresse 10000, der zweite ab 10512 usw. im Speicher. Nach einem Diskettenwechsel werden die Inhalte der 18 Puffer wieder nacheinander in die Spuren 0 und 1 geschrieben (das Programm entspricht SYSGEN unter CP/M). Ähnlich könnte ein Programm zum Kopieren einer gesamten Diskette ausse-hen. Bemerkenswert ist auch die Lese-und Schreibgeschwindigkeit. Die 9 kByte Daten werden immerhin in gut einer Sekunde auf die Diskette geschrieben!

Ein Diskettenmonitor

Als erstes Projekt soll ein Diskettenmonitor realisiert werden. Dies ist ein sehr hilfreiches Dienstprogramm, um den Aufbau der Diskette besser zu verstehen. Aber es lassen sich, wie wir in der nächsten Folge feststellen werden, auch gelöschte Dateien retten, Dateien vor dem Überschreiben schützen und vieles mehr. Der hier vorgestellte Diskettenmonitor DMON soll für Sie nur eine Anregung sein, selbst einen Diskettenmonitor zu entwickeln.

Ein Disketten-Monitor hat im wesentlichen 4 Aufgaben:

  1. Sektor einlesen
  2. Sektor anzeigen
  3. Sektor ggf. ändern
  4. Sektor zurückschreiben

Ein besonderes Problem ist die Darstellung des Sektorinhalts (Pufferinhalt). Sinnvoll ist die sedezimale (hexadezimale) DarsteEung, da so jeder Wert zwischen 0 und 255 mit zwei Zeichen dargestellt werden kann (HEX-Dump). Auch ist es sinnvoll, die Werte, sofern es sich um ASCII-Werte handelt, als Zeichenfolge auszugeben. Somit wird ein einfaches Suchen und Finden von Texten möglich (ASCII-Dump).

Das Programm DMON gibt sowohl einen HEX- als auch einen ASCII-Dump aus. AEe Ein- und Ausgaben sind immer in HEX anzugeben. DMON bietet insgesamt 10 Kommandos an:

HHilfe - Zeigt alle Kommandos an.
QQuit - Programmende.
CClear - BILdschirm löschen.
R:&&:&&Read - Liest einen Sektor ein. Es folgen 2 Hex-Zahlen (getrennt durch ein beliebiges Zeichen, hier der Doppelpunkt), welche die Spur und den Sektor angeben.
W:&&:&&Write - Sektor zurückschreiben. Es folgen 2 Hex-Zahlen (getrennt durch ein beliebiges Zeichen, hier der Doppelpunkt), welche die Spur und den Sektor angeben. Ist kein Sektor geladen, erfolgt eine Fehlermeldung.
L:&&&:&&&List - Zeigt den geladenen Sektor an. Es folgen zwei 3-steEige Hex-Zah-len (getrennt durch ein beliebiges Zeichen, hier der Doppelpunkt), die den Anfang und das Ende bestimmen (000 bis 1FF). Ist kein Sektor geladen, erfolgt eine Fehlermeldung.
A:&&&Ändern - Geladenen Sektor ändern. Die 3-steEige Hex-Zahl gÜDt die Adresse an, ab der Daten geändert werden soEen. Es wird dann die Adresse und der alte Inhalt angezeigt. Mit der ENTER-Taste kann der alte Wert übernommen werden. Mit der Eingabe einer Hex-Zahl wird dieser Wert in die Speicherstelle übernommen. Mit der Eingabe einer unzulässigen Hex-Zahl (z.B. ".”) wird das Ändern abgebrochen.
D:$Drive - Laufwerkwechsel. Als Parameter ist A (Laufwerk A) und B (Laufwerk B) zulässig.
F:$Format - Format wählen. Als Parameter ist A (AMSDOS/VENDOR), D (DATEN) und I (IBM) zulässig.
B:&&Block - Spur/Sektor errechnen. Errechnet aus der Blocknummer die entsprechende Spur und den Sektor.

Geben Sie die Programmzeile 1070 erst dann ein, wenn das Programm ohne Syntax-Fehler läuft.

Im nächsten Heft

In der nächsten Folge untersuchen wir mit dem DMON den Aufbau der Diskette. Probieren Sie aber vorher ruhig ein wenig. Seien Sie aber beim Zurückschreiben (W) immer besonders vorsichtig und arbeiten Sie immer mit einer Sicherheitskopie der Diskette.

Manfred Walter Thoma, CPC Magazin

★ PUBLISHER: CPC Magazin
★ YEAR: 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC MAGAZIN 1985 1986
★ AUTHOR: Manfred Walter Thoma
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listings:
» Disk-Monitor    (CPC  Magazin)    GERMANDATE: 2020-05-18
DL: 205
TYPE: ZIP
SiZE: 8Ko
NOTE: 40 Cyls
.HFE: Χ

» Disk-Monitor    (CPC  Magazin)    LISTING    GERMANDATE: 2021-02-02
DL: 221
TYPE: PDF
SiZE: 976Ko
NOTE: 8 pages/PDFlib v1.6

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

Lien(s):
» Applications » DiskDumper
» Applications » Disk Imager
» Applications » Diskinfo (CPC Magazin)
» Applications » Andreas Stroiczek Rsx Disktool
» Applications » Calc Disk
» Applications » Disk-Control (Schneider Aktiv)
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» 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 562 millisecondes et consultée 906 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.