CODINGFDC ★ Arbeiten mit Diskette (3) Lesen eines Diskettensektors ★

Arbeiten mit Diskette (3) Lesen eines Diskettensektors (Computer Schau)
Nun „steht” also unser Maschinenprogramm zum Lesen und Schreiben von Diskettensektoren. Um dieses herum bauen wir nun unsere Basicprogramme auf. Als erstes nun ein Programm, welches ich aufgrund einer Leseranregung geschrieben habe. Ein Leser der ComputerSchau hatte mich gebeten, ihm bei seinem Problem zu helfen. Es ging darum, ein CP/M-COM-File in ein Binärfile umzuwandeln.

Dieser Leser hatte für einen anderen Computer (VZ200) eine Befehlserweiterung in Assembler geschrieben. Diese zusätzlichen Befehle sollten in ein Eprom vom Typ 27128 gebrannt werden, um danach ein eingebautes ROM zu ersetzen. Zur Erstellung des Sourcecodes benutzte der Leser den Macro-80-Assembler unter CP/M 80 auf dem Schneider CPC 464. Der Output (das Ergebnis) war eine Hex-Datei, bzw. ein lauffähiges Programm mit dem Extend .COM.

Zum Brennen des Eproms war ein EPROM-Programmer (Typ 4003) von der Firma Dobbertin vorhanden. Dieser Eprommer wird auch für die CPC's angeboten. Das Problem hierbei war nun, die COM-Datei in eine BIN-Datei umzuwandeln. Wäre es aber nur um den Extend gegangen, wäre dies gewiß kein Problem gewesen. Aber es ging genauer gesagt darum, daß die BIN-Datei ab einer bestimmten Speicheradresse im CPC stehen mußte, damit die Prommersoftware korrekt loslegen konnte. Der Leser konnte bis zu diesem Zeitpunkt kein Programm finden, das diese Umsetzung hätte bewirken können. Dies hätte bedeutet, daß insgesamt 16 KByte Maschinenprogramm hätten von ihm abgetippt werden müssen. Wer jemals längere Maschinenprogramme abgetippt hat, kann sich vorstellen, welches mühselige und auch fehlerbehaftete Unterfangen eine derartige Unternehmung darstellt. Das von mir an den Leser übersandte Programm, half ihm aus diesem Dilemma. Demnächst will dieser Leser auch noch die ROMs des CPC in Angriff nehmen. Da seit kurzer Zeit für die CPC's Erweiterungskarten angeboten werden, ist deshalb, so glaube ich, das Problem für viele Leser, die sich eigene Erweiterungs-eproms brennen wollen, von großem Interesse. Deshalb ist hier eine Möglichkeit aufgezeigt, wie auch Sie derartige „Problemchen” meistern können.

Etwas Gedankenakrobatik vorher

Es wäre von mir aber, so glaube ich, nicht fair, Ihnen einfach die Lösung anhand des Programmes vorzulegen. Deshalb will ich Ihnen meine Gedankengänge, die mich zur Lösung des Problemes brachten aufzeigen. Auch hier erfahren Sie wieder einiges über Ihre Disketten. Bereits im ersten der Grundlagenartikel hatte ich erwähnt, daß jeder Fileeintrag im Inhaltsverzeichnis 32 Bytes belegt. Erinnern Sie sich noch? Noch nicht erfahren hatten Sie aber wo diese Informationen auf der Diskette stehen. Je nach Format ist dies unterschiedlich. Trotzdem ist die Kurzantwort sehr einfach: Diese Informationen sind in den ersten vier verfügbaren Sektoren zu finden. Im Falle einer Data-only-Diskette heißt dies, Spur 0, Sektor 1 bis 4.
Beim Systemformat aber: Spur 2, Sektor 1 bis 4.
Damit Sie sich dies nun näher ansehen können, sollten Sie sich zunächst einmal die Maschinenroutine mittels eines Basicteiles so ausbauen, damit Sie sich dies näher betrachten können. Hierzu brauchen Sie lediglich das Basic-Programm „Readsect” abzutippen und zu starten. Berücksichtigen Sie dabei aber, daß beim Programmstart auf der in das Laufwerk eingelegten Diskette das Programm „SECTOR-.BIN” verfügbar sein muß. Außerdem klappt es bei diesem Programm nur, wenn Sie eine Diskette im Data-only-Format benutzen. Bei den weiteren Programmen sind dann alle beiden Formate les- und schreibbar. Readsect ist nur ein kleines Programm für die weiteren Erklärungen.

Nach dem Programmstart wird der Maschinencodeteil eingelesen. Danach werden Sie aufgefordert die zu untersuchende Diskette einzulegen. Haben Sie dies getan und dann eine Taste gedrückt, dann wird der erste verfügbare Sektor in den gewählten Buffer eingelesen. Anschließend wird der Inhalt des Buffers ausgelesen und sowohl im Hexformat als auch in ASCII auf dem Bildschirm dargestellt. Lassen Sie beim ersten Male ruhig das Programm ganz durchlaufen. Beim zweiten Mal sollten Sie nach Ausgabe der ersten „Bufferinhaltszeilen” aber mittels der ESC-Taste stoppen. Denn nun wollen wir uns dieses Ergebnis etwas näher betrachten, um weitere Schlüsse ziehen zu können. Die anderen Programme sind weit komfortabler, aber dieses Programm soll uns wirklich nur zur Veranschaulichung und zu Erklärungen dienen. Deswegen fehlt ihm auch jeglicher Bedienungskomfort. Da ein File, wie schon bekannt, 32 Bytes des Directoryeintrages benötigt, ist die in dem kleinen Programm gewählte Bildschirmdarstellung ideal, um Erkenntnisse zu erarbeiten. Zusätzlich wird durch das Programm nach jedem Fileeintrag eine Trennungslinie erzeugt. Dies dient nur dazu um alles noch übersichtlicher zu machen.

So ist ein Fileeintrag codiert

Die erste Hexzahl, die Sie auf dem Bildschirm sehen, ist vermutlich „00” oder „E5 ”. Dieses erste Byte ist die User-Nummer. Falls Ihnen „Usemummer” unbekannt ist, sehen Sie doch bitte im Handbuch nach. Bei „&E5” handelt es sich um ein „gelöschtes” File. Die wirklichen Usernummern können nur zwischen 0 und 15 liegen. Ist an dieser Stelle aber ein Wert ungleich E5 und größer 15, dann hat jemand an diesem Eintrag manipuliert! Durch derartige Spielereien können Einträge oder auch natürlich die zu diesen gehörenden Files selbst, auf die vielleicht direkt zugegriffen wird, vor den normalen Blicken und auch vor dem „Löschen” geschützt werden.

Anschließend kommen 11 Hexzahlen welche die ASCII-Werte des File-Namens und der „Extension” darstellen. Wie Sie sich überzeugen können, gibt es dazwischen keinen Punkt, sondern Name und Extend werden unmittelbar hintereinander abgespeichert.

Die nächste Hexzahl gibt Auskunft darüber, ob das File länger als 16 KB ist und sich aus diesem Grunde über mehrere Einträge erstreckt. Es ist die Directory-Eintragsnummer. Im Falle von „00” ist es der erste Eintrag. Im Falle von „01” der
zweite usw. Die nächsten beiden überspringen wir nun kurz. Die letzte Zahl der ersten Zeile gibt die Anzahl der für das File benötigten Records wieder. (Ein Record sind 128 Bytes, dies stammt noch aus den Urzeiten von CP/M!)

Wenn Sie diesen Wert mit 128 multiplizieren, dann haben Sie die Länge die das File auf der Diskette belegt. Steht an dieser Stelle der Wert &80, dann gibt es noch einen weiteren Teil dieses Files. In diesem Falle gibt es dann mindestens einen weiteren Fileeintrag mit dem gleichen Namen, dessen zwölftes Byte dann keine Null, sondern eine „01” oder höhere Nummern, je nach Anzahl der Einträge, beinhaltet. Die Bytes 15 bis 31 enthalten die Blocknummern, über die das Programm auf der Diskette verteilt ist. Nun kommt etwas ganz wichtiges! Ein Block sind immer zwei aufeinanderfolgende Sektoren! Aufgrund dieser Informationen wissen Sie nun auch, weshalb ein Programm immer nur „ganze” Kilobytewerte als Länge hat. Halbe Blöcke in diesen Einträgen (dies würde einem Sektor entsprechen) gibt es nicht im Inhaltsverzeichnis. Selbst wenn also ein Programm nur ein paar Bytes umfaßt, werden dadurch auf der Diskette zwei (!) Sektoren belegt. Dieses Wissen benötigen wir später nochmals. Nun wissen Sie prinzipiell aber eigentlich alles, was für die Erstellung eines Programmes, um den eingangs erwähnten Leser aus der Patsche helfen zu können, notwendig ist.

Da das in diesem Heft abgedruckte Programm „Reader” aber noch weit mehr kann, als bisher erwähnt, ist es auch für Leser interessant, die keine Eproms brennen wollen. Denn es gibt noch einige weitere Informationen preis! Das im Heft abgedruckte Programm akzeptiert auch Systemformat und ist ausreichend kommentiert, deshalb unterbleibt die genaue Erklärung.

Die Bedienung von READER

Zur Bedienung aber noch ein paar Sätze. Nach dem Programmstart erhalten Sie einige Informationen über das Programm selbst. Da das Programm feststellt, daß im ersten Byte des Maschinenprogrammbereiches noch keine 58 steht, wird der Maschinenteil erst geladen. Daraufhin werden Sie aufgefordert, die zu untersuchende Diskette einzulegen und eine Taste zu drücken. Durch einen kleinen Trick erkennt das Programm das Diskettenformat und liest die vier entsprechenden Directorysektoren ein.

Danach wird Ihnen das komplette Verzeichnis aller Fileeinträge ausgegeben. Ein „+” hinter dem jeweiligen Extend zeigt an, daß das File gültig ist. Ein signalisiert, daß dieses File gelöscht ist. Dabei ist nun folgendes von großer Wichtigkeit: Beim Löschen mit ERA wird nur die User-Nummer auf &E5 gesetzt und dadurch auch die zugehörigen Blöcke freigegeben. Das Programm selbst ist aber noch da, wenn noch nicht neu auf diese Diskette geschrieben wurde. Im Programm „FRETTER” des nächsten Kapitels wird dies ausgenützt.

Denken Sie deshalb bitte immer daran, wenn Sie Disketten weitergeben und nicht wollen, daß plötzlich jemand über Ihre Programme oder Daten verfügt. Wie schnell diese zurückgeholt sind, können Sie bald selbst sehen. Nach der Ausgabe aller Fileeinträge werden Sie aufgefordert, eine Filenummer einzugeben, wenn Sie mehr darüber wissen wollen. Damit ist die in Klammer stehende Hexadezimalzahl gemeint, die gleichzeitig auch die laufende Nummer im Directory-Eintrag darstellt.

Nachdem Sie eine entsprechende Nummer eingegeben haben, erfahren Sie Usernummer, die benutzten Blöcke, die Verteilung über die Sektoren usw. Nun können Sie auswählen, ob Sie andere Einträge ansehen wollen, oder ob dieses File geladen werden soll. Das Einladen eines Files kann nun z. B. zu Programmierzwecken geschehen. Aber auch andere Gründe für einen derartigen Ladevorgang kann es geben. Z. B. Retten von teilweise schon über-schriebenen Files, wenn der FRETTER nicht mehr in der Lage ist alles korrekt zurückzuholen und noch weitere Gründe.

Probieren lohnt sich...

L. Miedel, ComputerSchau

★ PUBLISHER: COMPUTER SCHAU
★ ANNÉE: 1986
★ LANGAGE:
★ LiCENCE: LISTING
★ AUTHOR: Lothar MIEDEL
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Arbeiten  mit  Diskette-3-Lesen  eines  Diskettensektors    (Computer  Schau)    LISTINGDATE: 2023-10-29
DL: 125
TYPE: PDF
SiZE: 5232Ko
NOTE: 5 pages/PDFlib v1.6

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.732-desktop/c
Page créée en 029 millisecondes et consultée 422 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.