Das Wincap-File

Man müßte es eigentlich als sträfliche Nachlässigkeit ansehen, daß dieses unscheinbare Anhängsel an das HDX.PRG von der bisherigen Literatur zur Festplatte so stiefmütterlich behandelt wurde. Mit dieser kleinen Bit-Sammlung kann man nämlich herrlich in der Festplatte herumspielen…

Die Festplatte muß - wie wir bereits erfahren haben - vor der ersten Benutzung eingestellt, d.h. formatiert werden. Da es natürlich unterschiedliche Größen - also Formate - gibt, müssen wir diese Werte irgendwie an den Controller übermitteln. Nur mit diesen Daten kann er dann z.B. die Ansteuerung der einzelnen Köpfe vornehmen. Ich habe in der dritten Folge der Serie um die Festplatte die Kommandos des Controllers aufgeführt. Darunter befindet sich der Befehl MODE SELECT ($15). Damit kann eine Parameter-Datei übertragen werden, anhand derer der Controller die Voreinstellung der Festplatte durch eine anschließende Formatierung vornimmt. Diesen Befehl sehen wir uns zunächst einmal näher an.

$15

Das MODE SELECT COMMAND sieht wie folgt aus:

In Byte 4 wird die Anzahl der im Anschluß an die Command-Phase übertragenen Bytes bekanntgegeben. Es müssen mindestens 12 Bytes sein; es können aber auch bis zu 22 Bytes bei softsektorierten und 24 Bytes bei hardsektorierten Laufwerken werden. Diese ersten 12 Bytes beinhalten die MODE-SELECT-PARAMETER-LIST und die EXTENT-DESCRIPTOR-LIST. DieParameter-Liste umfaßt vier Bytes mit den Werten 0, 0, 0 und 8 und gibt nur Auskunft über die Länge der nachfolgenden EXTENT-DESCRIPTOR-LIST. Das hört sich natürlich total unsinnig an, aber damit sollte eine spätere Erweiterung möglich sein.

Die acht Bytes der EXTENT-DESCRIPTOR-LIST enthalten Informationen über die Datendichte, die Anordnung, daß das ausgewählte Laufwerk formatiert werden soll und die Angabe über die Größe der Datenblöcke (der Wert muß zwischen 256 und 1024 liegen). Die beiden erstgenannten Information werden übrigens durch den Wert 0 ausgedrückt. Die eigentliche Liste mit den Formatierungsdaten wollen wir uns wieder etwas genauer ansehen.

Byte 0 - List Format Code Hier muß entweder 0 für softsektorierte oder 1 für hard-sektorierte Laufwerke stehen.
Byte 1 (MSB - Most significant, also höherwertiges Byte) und
Byte 2 (LSB - Low significant Byte) -Cylinder Count Die beiden Bytes beschreiben die Anzahl der Zylinder auf der zu formatierenden Festplatte.
Byte 3 - Data Head Count Die Anzahl der Köpfe.
Byte 4 (MSB) und
Byte 5 (LSB) - Reduced Write Current Cylinder Da der Kreisumfang der einzelnen Zylinder zur Mitte der Platte hin abnimmt, rücken die magnetischen Informationen auf der Platte entsprechend enger zusammen. Damit das magnetische Feld kein benachbartes Bit beeinflußt, wird der Schreibstrom verringert. In diesen beiden Bytes wird jetzt die Nummer des Zylinders eingetragen, ab der diese Stromverminderung einsetzt.
Byte 6 (MSB) und
Byte 7 (LSB) - Write Precompensation Cylinder Hier wird nun eine weitere Datensicherung eingebaut, die ich in Teil 3 der Festplattenserie schon kurz beschrieben habe. Die Vorkompensation verrückt die Flanken der Takt- und Datenfelder so, daß diese Informationen beim Lesen richtig interpretiert werden. Es wird aber erst auf den inneren Spuren akut, daher bestimmen diese beiden Bytes die Zylindernummer für den Einsatz der Vorkompensation.
Byte 8 - Landing Zone Position Mit diesem Byte wird die Landespur definiert, auf die der Kopfschlitten durch den ST ART-/STOP-Befehl gefahren wird. Mit einer “1” in Bit 7 parkt der Schlitten außerhalb von Spur 0, mit einer “0” fährt er die Köpfe in die Mitte der Platte. Die genaue Landeposition errechnet sich durch die Addition der Zylinderanzahl und dem Wert, der in Bit 0 bis 6 steht.
Byte 9 - Step Pulse Output Rate Code Wie beim Diskettenlaufwerk kann für die Schrittgeschwindigkeit des Kopfmotors eine unterschiedliche Steprate eingestellt werden. Das betrifft allerdings nur den SEEK-Befehl. Die drei verschiedenen Werte hierfür sind:

0 = 3,0 ms (ungepuffert)
1 = 28 ps (gepuffert)
2 = 12 ps (gepuffert)

Die Bytes 10 und 11 sind hier nicht so wichtig, da sie nur Angaben für hard-sektorierte Festplatten beinhalten.

Klartext

Für den normalen Benutzer der Festplatte wäre es natürlich viel zu aufwendig, jedesmal den doch recht komplizierten Ablauf der Programmierung vorzunehmen. Deshalb haben die Entwickler der Festplatte dem Benutzer ein Programm zur Verfügung gestellt, mit welchem er diese Aufgabe einfach hinter sich bringt. Dieses Programm heißt HDX.PRG und wird auf der Boot-Diskette mitgeliefert. Vorweg möchte ich sagen, das innerhalb des Programmes bereits die Standardwerte, wie wir sie nachher noch sehen werden, eingetragen sind. Nichtsdestotrotz fragt das HDX-Programm nach dem Start das Vorhandensein des WINCAP-Files ab. Fragen Sie mich bitte nicht, was WINCAP bedeuten soll, ich weiß es nicht. Viel interessanter ist ja auch, was man mit dem Daten-File für das HDX-Programm alles anstellen kann. Doch betrachten wir uns zunächst einmal das Original.

Im nebenstehenden Kasten finden Sie das gleiche WINCAP, wie es z.Zt. mit der SH-205 ausgeliefert wird. Grundsätzlich ist dazu zu sagen, das alle Kommentarzeilen an der ersten Stelle einer Zeile ein #-Symbol haben. Die Parameter dagegen werden von zwei Doppelpunkten eingeschlossen. Theoretisch können wir also ein kurzes File erstellen, dessen Daten nur aus Informationen zwischen den Doppelpunkten bestehen. Gehen wir jetzt aber das File Schritt für Schritt durch.

#	Hard disk format and partition configuration file.
#	Version 1.1: 29-May-1986 lmd
#	Version 1.2: 23-Jun-1987 lrad	SH205	menu entry
#
#	Global pararaeters:
#	ms#count	Maximum partition size in sectors
#	(***DON'T CHANGE***)
#
:@@=Parameters:ms#32767:

#
#	Format parameters:
#	'mn' entries (default values in [brackets]):
#	mn=name	appears in menu, name	of format parms
#	hdfcount	number of heads [4]
#	cy#count	number of cylinders [612]
#	lz#n	landing Zone [4]
#	rt#n	seek rate Code [2]
#	in#n	interleave factor [1]
#	rw#cylno	reduced-write current cylinder [cy	+	1]
#	wp#cylno	write precomp cylinder tcy + 1]
#	pt=name	name of default partition to use	[4-6-10]
#	sp#count	number of sectors/track	[17]
#
20 Mb Mitsubuishi	:mn=SH204:
10 Mb Mitsubuishi	:mn=SH104:hd#2:pt=10:
SH204 in plastic case	:mn=SH205:

#
#	Partition selections
#	'pr' entries ('N' is '0', ’l’, ’2’. or '3'):
#	pr=name	name	of partition
#	pN#size	size	of partition N in bytes	[0]
#	fN#number	flag	byte for partition	N [0	if no pN,
#	1 otherwise]
#	iN=ccc	id bytes for partition N [GEM]
#
#	Numbers are in bytes; may be followed by 'k' (xl024) or
#	'm' (megabytes).
#
:pr=4-6-10:p0#4424k:pl#6m:p2#10m:
:pr=10-10:p0#10404k:pl#10404k:
:pr=16-4:p0#16383k:p1#4425k:
:pr=4-16:p1#16383k:p0#4425k:
:pr=5-5-10:p2#10568k:p0#5m:p1#5m:
:pr=5-10-5:p0#5m:pl#10568k:p2#5m:
:pr=10-5-5:p0#10568k:pl#5m:p2#5m:
:pr=5-5-5-5:p0#5448k:pl#5m:p2#5m:p3#5m:
:pr=10:p0#10m:
:pr=5-5:p0#5m:pl#5m:

Tabelle 1: So wird das WINCAP-File mit der SH205 ausgeliefert.

#	wp#cylno	write precomp cylinder [cy +	1]
#	pt=name	name of default partition to	use	[4-6-10]
#	sp#count	number of sectors/track [17]
#
20 Mb Mitsubuishi	:mn=SH204:
10 Mb Mitsubuishi	:mn=SHl04:hd#2:pt=10:
SH204 in plastic case :mn=SH205:
Hier	:mn=sehen:
Sie	:mn=einen:
typischen	:mn=und:
unnützen	:mn=Eintrag:

#
#	Partition selections
#	'pr' entries ('N' is '0',	'2',	or	'3'):

Tabelle 2: So wird's gemacht!

Hard disk format and partition configuration file

So die Überschrift und wohl offizielle Bezeichnung dieses Files.

Version

Hier werden die unterschiedlichen Versionen des Files eingetragen. Für eine fortlaufende Veränderung ist ein solcher Eintrag eigentlich unumgänglich. Wenn Sie dieses File selbst verschiedentlich modifiziert haben, sind Sie irgendwann bestimmt froh, die einzelnen Versionen durch solche Kommentarzeilen noch auseinanderhalten zu können. Machen Sie davon also regen Gebrauch!

Global Parameters

Es gibt gewisse Standardwerte, die sich normalerweise nicht ändern. Ein Beispiel dafür ist der Eintrag ms#count. Mit diesem Wert wird die maximale Größe einer Partition als Anzahl der Sektoren übergeben. Der Eintrag wurde notwendig, da bei dem älteren Betriebssystem ein Fehler die Einrichtung von Partitions bis 32 MByte verhindert. Bei den Mega-STs soll dieser Fehler behoben sein, trotzdem steht hier noch der Wert ms#32767. Wenn Sie jetzt nachrechnen wollen:

32.767 Sektoren x 512 Bytes = 16.776.704 Bytes

d.h. unsere Partitions können eine Größe bis 16 MByte annehmen. Wozu die vorherige Eintragung von “:§§=Parameters:” dient, weiß ich nicht - da muß ich leider passen.

Format Parameters

Dafür können wir uns aber jetzt so richtig austoben. Die folgende Liste enthält nämlich genau die Parameter, welche mit dem MODE-SELECT-Befehl an den Controller übertragen werden. Die nachstehenden Daten liegen bereits als - sagen wir einmal Mindesteinsatz - in dem HDX.Prg in den Data-Zeilen am Schluß des Programms vor. Das HDX wäre also theoretisch nicht auf das WINCAP angewiesen. Doch sehen wir uns diese Tabelle wieder in der Reihenfolge an.

mn=name

Die Programmierer des HDX.PRG haben sich hier etwas feines ausgedacht. Normalerweise wird in einem GEM-Programm die Information über die Bildschirmmaske im Re-source-File abgelegt. Das dient u.a. dazu, daß man Programmänderungen oder Ausführungen in anderer Sprache nur durch den Neueintrag im Resourcefile erreicht. Nichts anderes geschieht soweit im HDX-Programm. Doch hier ist man einen Schritt weitergegangen.

Im HDX.RSC wird zwar der Maskenaufbau bereitgestellt, doch die Texte für die Auswahl der verschiedenen Versionen werden nicht hier sondern im WINCAP eingetragen. Dadurch kann man jetzt auch so herrliche und unnütze Spielchen, wie sie im nebenstehenden Bild zu sehen sind, treiben. Sehen Sie sich im Ausschnitt des WINCAP die Modifizierung an und vergleichen Sie damit das Resultat im Programmablauf. Sie können hier bis zu 16 verschiedene Einträge vornehmen. Ich habe mir damit ein WINCAP geschrieben, in dem an dieser Stelle die verschiedenen Laufwerkstypen mit unterschiedlichen Formatangaben eingetragen sind. Das Beispiel hat aber noch keine Auswirkung auf die Formate selbst, dazu müssen noch weitere Parameter eingetragen werden.

hd#count

Hiermit wird die Anzahl der Köpfe unserer Festplatte eingestellt. Der Default-Wert, d.h. der voreingestellte Wert ist 4.

cy#count

Hiermit wird die Anzahl der Zylinder angegeben. Die Werte brauchen dazu nicht in hexadezimale Angaben umgerechnet zu werden, das erledigt das Programm. Der Default-Wert ist nicht vergessen wird, führt das HDX-Programm schon mal eine Einteilung durch, diese kann ja jederzeit wieder geändert werden. Der Name für diese Partitionsaufteilung kann mit pt=name bestimmt werden. Wichtig ist nur, daß für diesen Namen auch in der weiter unten stehenden Liste die Daten eingetragen sind.

Bild 2: Das Format-Menü läßt sich leicht mit WINCAF manipulieren
#	iN=ccc	id	bytes for partition N [GEM]
#
#	Numbers are in bytes; may be followed by 'k' (xl024) or
#	'm'	(megabytes).
#
:pr=4-6-10:p0#4424k:pl#6m:p2#10m:
:pr=groß:p0#10404k:pl#10404k:
:pr=16-4:p0#16383k:pl#4425k:
:pr=KLEIN:pl#16383k:p0#4425k:
:pr=5-5-10:p2#10568k:p0#5m:pl#5m:
:pr=D I C K:p0#5m:pl#10568k:p2#5m:
:pr=dünn:p0#10568k:pl#5m:p2#5m: 
:pr=5-5-5-5:p0#5448k:pl#5m:p2#5m:p3#5m:
:pr=10:p0#10m:
:pr=5-5:p0#5m:pl#5m:

Listing 3: Hier werden die Daten zur Positionierung eingetragen

sp#count

Hiermit wird die Anzahl der Sektoren pro Spur bestimmt. Der Default-Wert ist 17. Wie Sie bei dem Eintrag des Interleave-Faktors gesehen haben, könnte man hier auch 18 Sektoren verwenden, dann allerdings nur mit einem Interleave >1 (z.B. 2).

Partitionierung

Nachdem die Default-Werte im WINCAP beschrieben sind, finden wir die ersten Variationen. Auch wenn es verwunderlich erscheint, was hier ein 10-MByte-Laufwerk zu suchen hat - ATARI hatte ganz zu Anfang wirklich einmal vor, eine solche Spardose zu bringen. Über die Entwicklungszeit sind dann die Preise aber so stark gefallen (es hat halt doch eine ganze Weile gedauert...), daß zwar dieser Laufwerkstyp, aber nicht der Eintrag unter den Tisch gefallen ist. Uns bietet er einen Hinweis, wie wir andere Daten eintragen können:

	:mn=SH104:hd#2:pt=10:

Dazu müssen Sie noch wissen, daß das kleinere Laufwerk statt 2 nur 1 Platte besitzt, die restlichen Daten (bis auf die Kapazität) aber identisch sind. Damit ist auch sofort klar, was hier geändert wird: erstens der Name für die Auswahlbox, zweitens statt vier nur zwei Köpfe und drittens eine andere Partition.

Nach diesem Muster können Sie jetzt beliebige Laufwerke formatieren, als Beispiel nachfolgend die Daten, wie ich sie für das Laufwerk TM-755 einstelle:

	:mn=SH404:hd#5:cy#981 :pt= 16-16-8:

Für den letzten Eintrag muß natürlich auch eine entsprechende Formataufteilung in der Liste angegeben sein.

How much

Die so übertragenen Formatinformationen werden in Block 0 auf der Platte abgelegt. Die Eintragungen beinhalten im einzelnen:

Danach folgen die Informationen über die einzelnen Partitions. Der Platz reicht für vier Eintragungen. Diese sind:

Am Ende von Block 0 finden wir noch zwei Einträge:

Bild 3: Auch die Partitionierung ist gegen Sabotage nicht gefeit.

612. Schlagen wir in den Handbüchern der Laufwerke nach, die bisher von ATARI verwendet wurden, so finden wir dort einen Wert von 615 Zylindern. Warum werden also die

3 Zyl. x 17 Sekt, x 4 Köpf. x 
512 Byte/Sekt. = 104.448 Bytes 

unterschlagen? Die Antwort können Sie im WINCAP-File nachlesen. Dort steht für die SH-204 als Laufwerk noch ein 20-MByte-Typ von Mitsubuishi - und die haben wirklich 612 Zylinder. Selbst bei der letzten Änderung vom 23.06.87 scheint das bei ATARI noch niemand aufgefallen zu sein...

Iz#n

Wie oben beschrieben, wird damit der Landezylinder in Relation zum ersten oder letzten Data-Zylinder angegeben. Hier ist der Default-Wert 4, d.h. die Köpfe landen innen (Bit7=0) auf Zylinder #616 bzw. #619. Bei Tandon finden wir als Landezylinder für die TM-262 die Nummer 663, bei Seagate für die ST-225 den Wert 670. Dazwischen haben wir reichlich Platz, um die Kapazität noch ein bißchen zu erhöhen. Ähnlich wie bei den Diskettenlaufwerken geht Probieren über Studieren, hier muß jeder die Möglichkeit selbst austesten. Mir ist zwar noch nicht zu Ohren gekommen, daß dabei Probleme oder Defekte aufgetreten sind, aber das Risiko müssen Sie natürlich selber tragen. Mir sind Laufwerke bekannt, die mit 660 Zylindern formatiert wurden und ein-. andfrei funktionieren. Das ist dann immerhin eine Kapazität von ca. 23 MByte.

rt#n

Hiermit stellt man den Code für die Steprate beim SEEK-Befehl ein, er ist normalerweise 2 und steht damit schon auf der schnellsten Geschwindigkeit. Mit dem SEEK-Befehl wird eine absolute Adresse auf der Platte angegeben. Während der Kopfschlitten auf diese Position fährt, kann der SCSI-Bus freigegeben werden, um anderen Teilnehmern den Datenverkehr zu ermöglichen. Das funktioniert bei den ATARI-Systemen leider nicht.

in#n

Der Interleavefaktor kann mit diesem Kürzel verändert werden. Wir verwenden hier normalerweise einen Interleave von 1. Das bedeutet, daß die komplette Spur innerhalb einer Umdrehung der Platte gelesen wird. Dadurch erreicht man die schnellstmögliche Datenübertragungsrate. Es gibt aber Systeme (z.B. IBM-PCs), deren Bus nicht so schnell arbeitet. Mit einem Interleave von >1 verlangsamt sich die Übertragung, da jetzt zwei oder entsprechend mehr Umdrehungen pro Spur benötigt werden. Für uns läßt sich hiermit - zugegebener-weise auf Kosten der Geschwindigkeit - nochmal die Kapazität erhöhen. Wie bei der Diskette muß jeder Sektor auf der Platte von einer bestimmten Anzahl sogenannter Synchronisationsbytes eingeläutet werden, damit unser Controller den Sektoranfang erkennen kann. Für einen Interleave (I) von 1 sind dazu sicherheitshalber mehr Bytes notwendig als bei einem Faktor >1. Insgesamt beträgt die Sektorlänge für 1= 1 576 Bytes und für I>1 566 Bytes. Da eine Spur etwa 10.500 Bytes aufnehmen kann, paßt bei I>1 ein Sektor mehr auf die Spur, so daß wir die Kapazität von

z.B. 17 x 4 Köpf, x 512 Bytes/S 
x 615 Sekt.= 21.411.840 Bytes 
auf
18x4x512x615 =
22.671.360 Bytes 

erhöhen können. Das funktioniert wirklich, probieren Sie es einmal aus.

rw#cylno

Ab diesem Zylinder wird normalerweise der Schreibstrom vermindert. In unserem WINCAP sehen Sie als Eintrag cy+1. Das würde ja bedeuten, daß unser Laufwerk in jedem Fall erst nach dem offiziellen Ende des Datenbereiches dieses Feature benutzt. Das liegt ganz einfach daran, daß die heutigen Laufwerke über ihren Mikroprozessor selbst den Schreibstrom kontrollieren. Damit ist eine Steuerung über den Controller hinfällig.

wp#cylno

Bei der Vorkompensation steht ebenfalls als Zylindernummer für den Start cy+1. Hier wird die Steuerung nicht beeinflußt, weil auf der Controllerplatine eine kleine Steckbrücke die Einstellung vornimmt und absolute Priorität vor der softwaremäßigen Angabe hat. Diese Brücke hat die Form eines T, da sie insgesamt drei Möglichkeiten zuläßt, aber jeweils nur eine selektiert werden darf. Man kann diese Steckleiste leicht an der Buchstabenkombination erkennen. Die Einstellungen bedeuten im einzelnen:

Die Vorkompensation ist für beide Laufwerke ausgeschaltet. ATARI gibt diese Stellung für das Tandon-Laufwerk an.

Die Vorkompensation wird für beide Laufwerke auf allen Spuren eingeschaltet.

Die Vorkompensation startet ab der Zylindernummer, ab der auch der Schreibstrom reduziert wird. Das trifft für das Seagate-Laufwerk zu.

pt=name

Nach dem Formatieren muß die Festplatte noch partitioniert werden. Wird dieser Vorgang versäumt und der Computer zwischenzeitlich ausgeschaltet, bekommen Sie gewaltigen Ärger. Da die Festplatte als solche beim Booten zwar erkannt wird, der Treiber aber dann einen Fehler interpretiert - weil er keine Partition findet - führt er einen System-Reset durch. Aus dieser Schleife kommt man nur durch Klimmzüge wieder heraus (aber es geht).

Die Angaben, soweit sie die Partition-Aufteilung betrifft, können wir im WINCAP-File ebenfalls modifizieren:

pr=name

Das ist nur der Name der Partition. Neben einer sinnvollen Beschreibung können hier auch wieder reine Phantasienamen benutzt werden. Das entsprechende Beispiel sehen Sie im nebenstehenden Bild.

pN#size

Hiermit wird jetzt die Größe einer Partition bestimmt. Als Ersatz für den Buchstaben “N” muß natürlich die Nummer der Parttion eingesetzt werden und zwar Werte zwischen 0 (entspricht später Laufwerk C) und 3 (=Laufwerk F). Die Größe selbst kann entweder in MByte mit dem Zusatz “m” oder in KBytes mit dem Zusatz “k” angegeben Werden. Dabei ist

1m= 1024k = 1.048.576 Bytes

fN#number

Hiermit könnte man die Partition ein- oder ausschalten. Das wird vom Programm aber alleine erledigt, da es ja aus der Liste die Anzahl der Parti-tions entnehmen kann.

iN=ccc

Auch hier sollte man nach Möglichkeit nichts ändern, da der Default-Wert mit den Buchstaben G, E und M bereits die richtigen Daten enthält.

Spieltrieb

Nach der Erklärung finden Sie am Schluß der WINCAP-Datei bereits eine Auswahlliste für verschiedene Aufteilungen Ihrer Festplatte. Hier muß auf jeden Fall der Eintrag vorhanden sein, der über den Default-Wert von pt=name angesprochen wird. Andere Einteilungen können Sie auch in der Menüwahl des HDX.PRG über das Fenster “Menu ' von Hand frei bestimmen. Da zu Ihrer Sicherheit vor der endgültigen Partitionierung noch einmal eine Sicherheitsabfrage erscheint, können Sie ruhig ein bißchen herumspielen; achten Sie dabei bloß auf Ihren rechten Zeigefinger, daß er keinen Murks baut - für Datenverluste jeglicher An übernehme ich keine Garantie.

hp



Aus: ST-Computer 05 / 1988, Seite 76

Links

Copyright-Bestimmungen: siehe Über diese Seite