Hyper-XF 1.0 HANDBUCH (c)'98 S.Dorndorf Seite @ 1 Einleitung Das Hyper-XF-ROM 1.0 ist eine Erweiterung für das ATARI-Diskettenlaufwerk XF551. Es gibt folgende zwei Versionen: - Hyper-XF 1.0A für die Original-XF551 mit 5,25"-Laufwerk - Hyper-XF 1.0B für umgebaute XF551 mit 3,5"-Laufwerk Nach dem Einbau, der ohne Löten möglich ist, stehen eine Menge zusätzlicher Funktionen zur Verfügung: - schnellerer Floppy-Speeder (Ultra-Speed und Hyper-Speed) - bootfähiger Hyper-Speed-Treiber im ROM - Partitionsverwaltung (vier Partitionen auf einer 3,5"-Disk) - eingebautes Boot-Menü zum Booten von Partitionen und Laden des Hyper-Speed-Treibers - verbesserte Double-Density-Erkennung - Kommandos zum Lesen von ATARI-ST- oder PC-Double-Density-Disks - Kommandos zur Trackanalyse - Kommando zum Formatieren von beliebigen Spezialformaten - Kommandos zum Kopieren von kopiergeschützten Disks - Möglichkeit zum Einbau einer vollautomatischen Density-Erkennung (ähnlich wie bei der 1050) Außerdem wurden natürlich die vielen kleinen Fehler des Original-XF551-ROM beseitigt. Entfallen ist dagegen der "Write with Verify", die Hyper-XF schreibt immer ohne Verify auf Diskette. Der Verify ist ohnehin sehr langsam und wird daher von keinem DOS mehr eingesetzt. Es ist leider nicht möglich, High-Density zu formatieren. Die Hyper-XF verhält sich nach dem Einschalten so, wie Sie es von der normalen XF551 gewohnt sind, es gibt lediglich folgende Unterschiede: - Die Hyper-XF erkennt beim Lesen nun auch Double-Density-Disks - Disks können in allen drei Schreibdichten (Single, Medium und Double) doppelseitig formatiert werden. - Statt XF-High-Speed werden Ultra- und Hyper-Speed unterstützt. 2 Einbau des Hyper-XF-ROMs Das Hyper-XF-ROM liegt auf einem 8KB-EPROM-Chip vor und ist ein Ersatz für das Original-ATARI-XF-ROM. Rechts unten auf dem Etikett des Hyper-XF-ROMs steht die Version: A ist für 5,25"-Laufwerke gedacht und B für 3,5"-Laufwerke. Benutzen Sie niemals die B-Version mit einem 5,25"-Laufwerk !! Zum Einbau gehen Sie wie folgt vor (für den Umbau in ein 3,5"-Laufwerk siehe auch Kapitel 3): - Die vier Schrauben auf der Unterseite der XF herausdrehen - Gehäusedeckel abheben - Die vier Schrauben herausdrehen, die die Metallwinkel am 5,25"-Laufwerk mit dem XF-Gehäuse-Unterteil verbinden - Das Laufwerk vorsichtig nach links zur Seite heben, drehen und wieder ablegen, so daß Sie an den Chip mit den 28 Beinchen (Pins) unter dem Laufwerk herankommen. Sie können dazu auch das Flachbandkabel vom Laufwerk abziehen, merken Sie sich dann aber unbedingt die Polung zum späteren Wiederaufstecken des Kabels. - Den Chip mit den 28 Pins mit einem Schraubendreher vorsichtig aus seinem Sockel hebeln - Das Hyper-XF-ROM in den Sockel stecken ACHTUNG: Die Pins des ROMs möglichst nicht mit den Fingern berühren und die Polung unbedingt beachten: Die Kerbe an einer der Schmalseiten am Hyper-XF-ROM muß nach vorne zur Laufwerksfront zeigen. Falsches Einsetzen führt zur Zerstörung des ROMs. - Laufwerk wieder richtig einsetzen und festschrauben - Kontrollieren, ob das Flachbandkabel am Laufwerk richtig sitzt und ggf. wieder feststecken - Gehäusedeckel aufsetzen und wieder festschrauben Damit ist der Einbau beendet. Für einen Test stecken Sie die Kabel an die XF551 an und schalten die XF ein. Beim Einschalten muß sich der Schreib-Lese-Kopf ein wenig nach innen und wieder nach außen bewegen, wenn nicht, liegt ein Fehler vor. Stellen Sie die XF hinten links an den DIP-Schaltern auf die Laufwerksnummer #1 (beide Schalter nach unten drücken) und schalten dann den ATARI XL/XE ein (ohne eine Disk in die XF einzulegen). Wenn das Boot-Menü mit dem Copyright-Hinweis erscheint, ist die "Hyper-XF" einsatzbereit. 3 Umbau in ein 3,5"-Laufwerk Die XF551 läßt sich ohne Löten in ein 3,5"-Laufwerk umbauen. Sie brauchen dazu: - ein 3,5"-Diskettenlaufwerk (ca. 45 DM) - ein 5,25"-Einbaurahmen für 3,5"-Laufwerke (ca. 8 DM) - einen Shugart-Bus-Zwischenstecker zum Anschluß des 5,25"-Laufwerk-Flachbandkabels an das 3,5"-Laufwerk - ein Stromverbindungskabel zum Anschluß der Stromversorgung an das 3,5"-Laufwerk - u.U. Flachbandkabelverlängerung für 3,5"-Laufwerke (ca. 20 cm) Die Flachbandkabelverlängerung brauchen Sie nur, wenn Sie eine alte XF551 mit Mitsumi-Laufwerk haben (zu erkennen an der rechteckigen Motor-LED), bei diesen XF-Laufwerken ist das Flachbandkabel in der XF zu kurz zum Anschluß an ein 3,5"-Laufwerk. Normalerweise liegen beim Kauf des Einbaurahmens auch die erforderlichen Schrauben, der Verbindungsstecker und das Stromverbindungskabel bei. ACHTUNG: Beim Kauf des Laufwerks darauf achten, daß es als Laufwerk A: (nicht B:) konfiguriert ist, ansonsten müssen Sie einen Jumper im Laufwerk umstecken oder sogar umlöten, damit die XF richtig funktioniert. Der Einbau gestaltet sich wie folgt: - Das 3,5"-Laufwerk mit den 4-6 mitgelieferten Schrauben am Einbaurahmen befestigen - Die vier Schrauben an der Unterseite der XF551 herausdrehen - Gehäusedeckel abheben - Das Flachbandkabel und das Stromversorgunskabel vom 5,25"-Laufwerk abziehen (vorher Polung notieren) - Die vier Schrauben, die das 5,25"-Laufwerk an den Metallwinkeln halten, herausdrehen und das 5,25"-Laufwerk weglegen - Nun das Hyper-XF-ROM 1.0B in die XF einbauen, siehe Kapitel 2. - Das 3,5"-Laufwerk mit den vier Schrauben an den Metallwinkeln befestigen - Den Zwischenstecker auf die Anschußleiste hinten am 3,5"-Laufwerk stecken - Das Flachbandkabel auf den Zwischenstecker stecken ACHTUNG: Polung unbedingt beachten: Das rot markierte Kabel am Flachbandkabel muß auf das Anschlußbeinchen 1 des 3,5"-Laufwerks gesteckt werden. Das Beinchen 1 ist meistens mit "1" auf der 3,5"-Laufwerksplatine gekennzeichnet. - Das Stromverbindungskabel auf das Stromversorgunskabel für das 5,25"-Laufwerk aufstecken und an das 3,5"-Laufwerk anschließen. Dies ist nur in einer Polung möglich, also keine Gewalt anwenden. - Gehäusedeckel auflegen und festschrauben Damit ist der Umbau beendet, für einen Test gehen Sie wie in Kapitel 2 vor. 4 Ultra-Speed Die Hyper-XF verwendet statt der XF-High-Speed das Ultra-Speed-Protokoll, das die Datenübertragung zwischen Rechner und Laufwerk von 19200 bps auf 55000 bps erhöht. Ultra-Speed wird auch von der Speedy 1050-Erweiterug benutzt und ist im ATARI-Bereich inzwischen DER Standard geworden. Daher wird Ultra-Speed auch von allen XL/XE-OS-Erweiterungen (z.B. QMEG-OS, SPOS, US+OS) und vielen DOS-Versionen (XDOS, Bibo-DOS, Turbo-DOS, Sparta-DOS) unterstützt. Damit wird die XF in allen Schreibdichten doppelt so schnell wie im Normalbetrieb. Zur Ausnutzung der hohen Datenübertragungsrate müssen allerdings Disketten wie bei der normalen XF551 in einem speziellen "High-Speed-Format" formatiert werden. Dies geschieht automatisch, wenn das OS oder das DOS das Formatierkommando in Ultra-Speed an das Laufwerk sendet (das QMEG-OS 4.0 tut das). Ansonsten müssen Sie ein Programm einsetzen, das es erlaubt, mit "Ultra-Speed Sector-Skew" zu formatieren (für Sparta-DOS können Sie XINIT.COM benutzen). 5 Hyper-Speed Wenn Sie kein OS oder DOS mit Ultra-Speed-Unterstützung benutzen (wollen), können Sie auch Hyper-Speed einsetzen. Hyper-Speed ist ein neues Protokoll und ist genauso schnell wie Ultra-Speed, hat jedoch zwei Vorteile: Zum ersten lassen sich viele DOS-Versionen mit XF551-Unterstützung für die Verwendung von Hyper-Speed leicht patchen. Ich werde noch einige Patches für bekannte DOS-Versionen im ABBUC-Magazin veröffentlichen. Zum zweiten enthält das Hyper-XF-ROM einen Hyper-Speed-Treiber, der noch vor dem Booten einer Diskette in den ATARI geladen werden kann. Booten Sie dazu Ihren Rechner ohne Diskette im Laufwerk. (Die Hyper-XF muß dazu natürlich als Laufwerk #1 eingestellt sein.) Es erscheint das folgende Menü auf dem Bildschirm: Hyper-XF 1.0x (c) S.Dorndorf Mode=X ABCDMFSX Boot ? E16 Legen Sie nun eine Diskette ein, und drücken Sie eine der im Menü neben "Boot ?" angegebenen folgenden Tasten: (1) Der Hyper-Speed-Treiber wird geladen und im RAM des XL/XE auf der oberen Hälfte der Page 1 ($100-$17F) abgelegt, anschließend wird die eingelegt Diskette mit Hyper-Speed gebootet. (6) Entspricht (1), der Hyper-Speed-Treiber wird jedoch in die obere Hälfte der Page 6 ($600-$67F) geladen. (ESC) Es wird nur die eingelegte Disk gebootet. Der angezeigte BOOT ERROR ist übrigens beabsichtigt, den er stellt die einzige Möglichkeit dar, den ATARI zum Booten der eingelegten Diskette zu veranlassen. Das von der Disk geladene Programm kann natürlich den Hyper-Speed-Treiber im Speicher auf Page 1 oder Page 6 überschreiben. In diesem Fall wird der Rechner abstürzen. Probieren Sie einfach beide Varianten aus, normalerweise funktioniert (1). Bei (6) stürzen recht viele Programme ab, die sich nicht an die ATARI-Richtlinie halten, Page 6 für Hilfsprogramme des Anwenders freizuhalten. Fürs Formatieren gilt dasselbe wie für Ultra-Speed: Zur Ausnutzung von Hyper-Speed müssen die Disketten speziell formatiert werden. Dies geschieht automatisch, wenn das Formatierkommando vom DOS in Hyper-Speed gesendet wird (die oben erwähnten DOS-Patches tun das alle). 6 Diskettenformate Die Hyper-XF unterstützt durch die Standard-Formatier-Kommandos, die jedes DOS verwendet, insgesamt zwölf verschiedene Formate: Es kann in Single Density (SD), Medium Density (MD) oder Double Density (DD) formatiert werden. Alle Formate können wahlweise einseitig oder zweiseitig erzeugt werden: Beim einseitigen Format werden auch bei 3,5"-Laufwerken nur 40 Tracks formatiert, beim zweiseitigen Format wird immer die ganze Diskette formatiert. Zusätzlich kann jedes Format in der Normal-Variante oder in der Ultra-Speed-Variante formatiert werden. Bei 3,5"-Laufwerken ist es besser, DD-Disketten zu verwenden, HD-Disketten funktionieren zwar auch, wenn das HD-Loch zugeklebt wird, sie könnten jedoch später zu Lesefehlern führen (bisher hatte ich selbst noch keine Probleme). In High-Density (1,4MB) kann nicht formatiert werden. 7 Density-Erkennung Die Hyper-XF erkennt grundsätzlich beim Lesen eines Sektors die Dichte der eingelegten Disk. Wenn Sie bei einem DOS ohne XF-Unterstützung nach einen Diskwechsel von SD oder MD auf DD oder umgekehrt die Directory aufrufen, dann klappt das erst beim zweiten Versuch. Das Wechseln von SD auf MD oder umgekehrt geht problemlos, da sich die Sektorlänge nicht ändert. Bei DOS-Versionen, die beim \Öffnen einer Datei Sektor 1 lesen (Sparta-DOS) gibt es dagegen keine Probleme mit der Density-Erkennung. Die Hyper-XF bietet jedoch die Möglichkeit, einen Kontakt an der Laufwerks-Klappe einzubauen, so daß die Density-Erkennung wie bei der 1050 vollautomatisch funktioniert. Zum Einbau muß allerdings in der XF gelötet werden: Pin 35 des 8040/8050 (der Chip mit den 40 Pins) in der XF über einen Taster mit Masse (z.B. Pin 14 des 1772 oder Pin 20 des 8040/8050) verbinden. Der Taster muß im Laufwerksmechanismus so befestigt werden, daß der Taster geschlossen ist, wenn der Laufwerkshebel offen ist. Geeignet für 5,25"-Laufwerke ist z.B. der Pilzkopf-Taster Best-Nr. 704687 aus dem Angebot von Conrad. 8 Partitionen und Betriebsmodi Die Hyper-XF bietet insgesamt acht verschiedene Betriebsmodi, die festlegen wie die Hyper-XF auf Disketten zugreift. Zum Ändern des Betriebsmodus booten Sie die Hyper-XF ohne Diskette, worauf das Boot-Menü erscheint. Rechts neben "MODE=" steht der aktuell eingestellte Betriebsmodus. Durch Drücken einer der Tasten ABCDMFSX wird der Modus geändert. Mit den Tasten ESC (oder 1 oder 6) kann dann eine eingelegte Diskette gebootet werden. Folgende Betriebsmodi gibt es: Modus X: (XF-Modus) Dieser Modus ist nach dem Einschalten der Hyper-XF aktiv. Er entspricht dem normalen XF551-Betrieb. Modus S: (ST-/PC-/HDI-Standard-Modus) Dient zum Zugriff auf doppelseitige Disks im alten Standardformat, wie es z.B. vom HDI benutzt wird. In diesem Modus können auch mit Spezialkommandos Disketten im ST- oder PC-Format gelesen werden, Schreiben geht allerdings nicht. Der S-Modus unterscheidet sich vom X-Modus nur durch das Format auf der Rückseite der Diskette (die XF551 speichert die Sektoren auf der Rückseite "verkehrt herum", z.B. befindet sich bei einer 5,25"-DD-Disk der laufende Sektor 721 im S-Format auf Track 0, Sektor 1, im X-Format dagegen auf Track 39, Sektor 18). ACHTUNG: Die Hyper-XF prüft nicht nach, in welchem Modus eine Disk formatiert wurde. Verwenden Sie daher den Modus S nur, wenn unbedingt nötig (um z.B. eine mit dem HDI formatierte doppelseitige DD-Disk zu lesen) und schalten Sie danach sofort in den X-Modus zurück. Modus M: (Multi) In diesem Modus teilt die XF die eingelegte Diskette in Partitionen auf. Auf jeder Partition können Sie den Inhalt einer 5,25"-Diskseite (wahlweise SD, MD oder DD) unterbringen und mit jedem DOS bearbeiten. Bei 5,25"-Disketten stehen zwei Partitionen (A und B) zur Verfügung, bei 3,5"-Disketten sind es vier Partitionen (A, B, C und D). Auf die Partitionen können Sie mit aufsteigenden Laufwerksnummern zugreifen (abhängig von der Schaltereinstellung hinten am Laufwerk). Ist z.B. die XF als Laufwerk #1 eingestellt, so werden bei einem 3,5"-Laufwerk mit D1: bis D4: die Partitionen A bis D angesprochen. Entsprechend werden bei 5,25"-Laufwerken über D1: und D2: die Partitionen A und B angesprochen. Es stehen also sozusagen zwei bzw. vier Laufwerke zur Verfügung, die auf einer Disk zusammengefaßt sind. Damit können Sie mit jedem DOS auf die gesamte Diskette zugreifen, insbesondere können die Partitionen auch in verschiedenn Dichten formatiert werden. Oder Sie kopieren mit einem Diskkopierer, der die Auswahl von mehreren Laufwerksnummern zuläßt, die Datendiskseiten von "Alternate Reality - The Dungeon" auf eine 3,5"-Disk zusammen, was Diskettenwechsel beim Spielen überflüssig macht. ACHTUNG: Unter der Laufwerksnummer für die Partition A (D1: im obigen Beispiel) können Sie auch genau wie im Modus X auf die ganze Disk zugreifen. Damit wird ein häufiger Wechsel zwischen den Modi X und M vermieden. Wenn Sie alle Partitionen in der gleichen Dichte formatieren wollen, können Sie stattdessen auch das Laufwerk für die Partition A doppelseitig formatieren, das geht schneller. Die Hyper-XF kann partitionierte Disketten nicht automatisch erkennen. Sie müssen also selbst darauf achten, z.B. nicht auf Partition B zu schreiben, wenn eine nicht-partitionierte Disk eingelegt ist. Modus F: (Format-Multi) Entspricht Modus M, jedoch prüft die Hyper-XF bei jedem Partitionswechsel automatisch die Dichte der Partition. Das ermöglicht es, auch ohne spezielle Software zwischen verschieden formatierten Partitionen zu wechseln. ACHTUNG: Bei unterschiedlich formatierten Partitionen wird ein eingebauter Kontakt an der Laufwerksklappe zur automatischen Density-Erkennung außer Gefecht gesetzt, da ja die Disk nicht gewechselt wurde. Modus A,B,C,D: (Partitions-Modi) Hiermit kann unter der hinten am Laufwerk eingestellten Laufwerksnummer auf die entsprechende Partition A bis D zugegriffen werden. Bei 5,25"-Laufwerken entsprechen C und D den Partitionen A und B. Ist z.B. die XF als Laufwerk #1 eingestellt, haben Sie hiermit die Möglichkeit, jede gewünschte Partition zu booten. 9 SIO-Kommandos In den folgenden Kapiteln werden alle SIO-Kommandos der Hyper-XF erkläärt. Dies ist vor allem für Programmierer mit Maschinensprachkenntnissen interessant, die Utilities für die Hyper-XF schreiben möchten. Zunächst einige Erläuterungen: Eine Diskettenseite hat 40 Spuren (Tracks) (bei 3,5": 80 Tracks). Jeder Track wird seinerseits beim Formatieren normalerweise in 18 Sektoren aufgeteilt (bei MD sind es 26 Sektoren). Logische Track- und Sektornr: Die logische Tracknr. geht von 0 bis 79 (3,5": von 0 bis 159). Ist die logische Tracknr. größer als 39 (3,5": größer als 79) greift die Hyper-XF automatisch auf den richtigen Track auf der zweiten Diskseite zu. Die logische Sektornr. entspricht im S-Modus immer der physikalischen Sektornr., in allen anderen Modi sind jedoch die Sektoren (und die Tracks) auf der Diskrückseite "verkehrt herum" abgelegt, um kompatibel zur Original-XF551 zu sein. Z.B. gilt für SD und DD: Der Sektor 1 entspricht dem physikalischen Sektor 18, Sektor 2 entspricht dem phys. Sektor 17 usw. Die Hyper-XF erwartet Track- und Sektorangaben immer logisch, womit Umrechnungen seitens des Programmierers nicht erforderlich sind. laufende Sektornr: Die normale Durchnummerierung aller Sektoren ab 1 beginnend. Es gilt für SD und DD folgende Umrechnung, für MD muß die 18 durch 26 ersetzt werden: lfd.Secnr = log.Tracknr * 18 + log.Secnr Im folgenden werden für alle SIO-Kommandos jeweils - das Kommando-Byte ($302), - die I/O-Datenrichtung ($303: 0=No Data, $40=Receive, $80=Send), - die Anzahl der Datenbytes ($308/9) und - die AUX1/AUX2-Bytes ($30A/B) angegeben: 10 XF551-Kommandos Kommando: R ($52) Funktion: Sektor lesen (Read Sector) Data-I/O: Receive 128/256 Byte AUX1 : laufende Sektornr. (Low-Byte) AUX2 : laufende Sektornr. (High-Byte) oder AUX1 : logische Tracknr. AUX2 : $C0 plus logische Sektornr. oder AUX1 : logische Tracknr. AUX2 : $FF (liest Reserve-Sektor) Liest den angegebenen Sektor von Diskette. Es werden 128 (bei SD und MD) oder 256 Bytes (bei DD) zum Rechner geschickt. Bei den laufenden Sektoren 1 bis 3 werden auch in DD nur 128 Byte gesendet. Der gewünschte Sektor kann auch in Form der logischen Track- und Sektornr. angegeben werden (AUX2>=$C0). Ist AUX2=$FF wird der sog. Reserve-Sektor (siehe e-Kommando) vom angegebenen Track gelesen. Die AUX2-Werte $FC bis $FE sind für interne Funktionen (Boot-Menü) der Hyper-XF reserviert. Kommando: P ($50) Funktion: Sektor schreiben (Put Sector) Data-I/O: Send 128/256 Byte) AUX1/2 : wie bei Kommando R Schreibt die Daten auf den angegebenen Sektor auf Diskette. Entspricht ansonstem dem R-Kommando. Kommando: W ($57) Funktion: Sektor schreiben (Write Sector) Entspricht dem P-Kommando. Kommando: S ($53) Funktion: Status lesen Data-I/O: Receive 4 Byte AUX1 : ohne Bedeutung AUX2 : Density-Check-Level: "S" ($53) = Status only (Kein Check) "T" ($54) = Test Motor (Check nur, wenn Motor aus) "U" ($55) = Unconditional (Check auf jeden Fall) ansonsten = Check on Error (Check nur bei Fehler) ÜÜber AUX2 kann man angeben, ob und in welchem Fall die Hyper-XF die Dichte der eingelegten Disk prüfen soll. Dies ist dann interessant, wenn keine Density-Erkennung ins Laufwerk eingebaut ist. Das Laufwerk sendet 4 Bytes, die den momentanen Status des Laufwerks beinhalten: 1.Byte = Drive Status Bit 0: Letztes Kommando fehlerhaft Bit 1: Letzter Datenblock fehlerhaft Bit 2: Letzter Disk-Lese/Schreib-Zugriff fehlerhaft Bit 3: Disk schreibgeschützt Bit 4: Motor läuft noch Bit 5: Double Density Bit 6: nächster Formatierbefehl formatiert doppelseitig Bit 7: Medium Density Bit 3 ist nur gültig, wenn beim letzten Diskzugriff der gewünschte Sektor auf der Disk vorhanden war. Bit 6 kann über das O-Kommando gesetzt werden und wird nach jedem der sechs Kommandos RPWutc zurückgesetzt, um Fehlformatierungen zu vermeiden. 2.Byte = Status des Floppy-Controllers (FDC) Bit 0: /BUSY Controller arbeitet noch Bit 1: /DRQ Datenanforderung des FDC unbeantwortet Bit 2: /LD Controller-Daten gingen verloren Bit 3: /CRC Prüfsummenfehler Bit 4: /RNF Sektor nicht gefunden Bit 5: /RT Record-Type "Deleted" Bit 6: /WP Schreibgeschützt Bit 7: /OPEN Keine Disk im Laufwerk Dieses Byte gibt an, welche Fehler beim letzten Zugriff auf einen Disksektor aufgetreten sind. Alle Bits sind Low-aktiv. Bit 7 ist nur gültig, wenn die automatische Density-Erkennung in die XF eingebaut wurde. Hierüber lassen sich auch die verschiedensten Error-Sektoren abfragen, folgende Varianten sind möglich: $FF OK $FB LD $F7 CRC $F3 LD+CRC $DF RT $DB LD+RT $D7 RT+CRC $D3 LD+CRC+RT $EF RNF $E7 RNF+CRC 3.Byte = Timeout-Wert fürs Formatieren ($D9) Dieses Byte kann auch benutzt werden, um abzufragen, ob das angesprochene Laufwerk eine Hyper-XF ist. Außerdem steht in den unteren vier Bits die SIO-Transferrate für Ultra- und High-Speed (siehe auch das ?-Kommando). 4.Byte = Betriebsmodus und Laufwerkstyp Bit 7 : reserviert (immer 0) Bit 6 : 0 = 5,25"-Laufwerk 1 = 3,5"-Laufwerk Bit 5 : reserviert (immer 0) Bit 4 : Beim nächsten Diskzugriff Density-Check ausführen Bit 3 : reserviert (immer 0) Bit 210: Betriebsmodus: ABCDMFSX Wert: 01234567 Bit 4 ist immer dann gesetzt, wenn beim letzten Diskzugriff der gewünschte Sektor nicht gefunden wird. Das kann nur dann passieren, wenn der Sektor defekt ist, die Disk garnicht formatiert ist oder keine Disk im Laufwerk liegt. Beim S-Kommando wird dann ein Density-Check durchgeführt, wenn AUX2 nicht gleich "S" ist. Kommando: ! ($21) Funktion: Disk/Partition in SD oder DD formatieren Data-I/O: Receive 128/256 Byte AUX1/2 : ohne Bedeutung Formatiert eine Diskette bzw. eine Partition - je nach eingestelltem Betriebsmodus. Die Dichte (SD oder DD) und die Seitenzahl (einseitig/zweiseitig) muß zuvor über das O-Kommando eingestellt werden. Ist die Dichte auf MD eingestellt, wird in SD formatiert. Es wird immer mit Verify formatiert, um fehlerhafte Disks gleich beim Formatieren zu erkennen. Kommando: " ($22) Funktion: Disk/Partition in MD formatieren Data-I/O: Receive 128 Byte AUX1/2 : ohne Bedeutung Formatiert die Disk immer in MD. Die Seitenanzahl muß zuvor mit dem O-Kommando eingestellt werden. Entspricht ansonsten dem !-Kommando. Kommando: N ($4E) Funktion: Lesen des Config-Blocks (iNput Config-Block) Data-I/O: Receive 12 Byte AUX1/2 : ohne Bedeutung Es werden die 12 Byte der PERCOM-Konfigurationstabelle zum Rechner gesendet, die zuletzt über das O-Kommando eingestellt wurden: Byte 0: Trackanzahl (40 bzw. 80) Byte 1: Steprate in ms (6 bzw. 3) Byte 2: Sektoren je Spur HI (immer 0) Byte 3: Sektoren je Spur LO (18 bzw. 26) Byte 4: Seitenanzahl (0 oder 1) Byte 5: Formatierverfahren (0=FM, 4=MFM) Byte 6: Bytes je Sektor HI (0 oder 1) Byte 7: Bytes je Sektor LO (128 oder 0) Byte 8: Laufwerk aktiv (immer 255) Byte 9-11: unbenutzt (immer 0) Kommando: O ($4F) Funktion: Config-Block schreiben (Output Config-Block) Data-I/O: Send 12 Byte AUX1/2 : ohne Bedeutung Die 12 Bytes des Config-Blocks werden zum Laufwerk gesendet. Zur Bedeutung der Bytes siehe N-Kommando. Das O-Kommando wird benutzt, um vor dem Formatieren mit den Kommandos ! und " die Dichte und Seitenanzahl richtig einzustellen. Die Hyper-XF bestimmt das Format aus den Bytes 5, 6 und 7, alle anderen Bytes werden ignoriert. Trotzdem sollten immer die Bytes 0 und 2-7 gesetzt werden. Nach Ausführen einer der Kommandos RPWutc wird das Byte 5 des Config-Blocks immer zurück auf 0 gesetzt. Damit wird vermieden, daß aus Versehen eine Disk doppelseitig formatiert wird. Byte 5 hat keinen Einfluß auf das Lesen und Schreiben von Disksektoren. 11 Speedy-Kommandos Kommando: ? ($3F) Funktion: SIO-Speed-Byte lesen Data-I/O: Receive 1 Byte AUX1/2 : ohne Bedeutung Es wird ein Byte zum Rechner gesendet ($09), mit dem der Rechner auf die hohe Datenübertragungsrate (Ultra- oder Hyper-Speed) eingestellt wird. Dies geschieht durch Eintragen des Bytes in $D204. Beim Ultra-Speed-Protokoll muß das Kommando mitsamt den Daten in hoher Datenrate übertragen werden. Bei Hyper-Speed muß das Kommandobyte mit gesetztem Bit 5 und 7 gesendet werden und nach dem Empfang des Kommando-ACK-Bytes auf die hohe Datenrate umgeschaltet werden. Hyper-Speed entspricht bis auf die höhere Datenrate und das Setzen von Bit 5 im Kommandobyte der Original-XF551-High-Speed. Kommando: Space ($20) Funktion: Diskette/Partition im Hintergrund formatieren Data-I/O: No Data AUX1/2 : Falls AUX1=$11 und AUX2=$04 wird in MD formatiert Entspricht dem !-Kommando mit folgenden Unterschieden: Ist AUX1=$11 und AUX2=4, wird in MD formatiert. Nach dem Formatieren des ersten Tracks wird dem Rechner ein COMPLETE zurückgegeben. Der Rechner kann nun weiterarbeiten, während das Laufwerk noch formatiert. Mit dem S-Kommando kann später festgestellt werden, ob das Formatieren erfolgreich war. Dieses Kommando ist z.B. für einen Diskkopierer nützlich, um während des Einlesens der Quelldiskette gleichzeitig die Zieldiskette in einem anderen Laufwerk zu formatieren. Kommando: f ($66) Funktion: Disk mit bestimmter Sektorreihenfolge formatieren Data-I/O: Send 128 Byte AUX1/2 : ohne Bedeutung Es werden 128 Bytes zum Laufwerk gesendet. Die ersten 12 Byte entsprechen dem Config-Block (siehe O-Kommando), die nächsten 18 bzw. 26 Bytes legen fest, in welcher Reihenfolge die logischen Sektoren auf den Tracks abgelegt werden. Die optimale Sektorreihenfolge ist je nach Dichte unterschiedlich, z.B. sind die Reihenfolgen für das Normal-Speed-Format wie folgt: SD: 1,3,5,7,9,11,13,15,17,2,4,6,8,10,12,14,16,18 (Sector-Skew=10) DD: 6,12,18,5,11,17,4,10,16,3,9,15,2,8,14,1,7,13 (Sector-Skew=16) 12 Hyper-XF-Kommandos Kommando: c ($63) Funktion: Betriebsmodus einstellen (Configure Mode) Data-I/O: No Data AUX1 : Bit 2-0: Betriebsmodus (01234567 entspricht ABCDMFSX) Bit 4: 1=Density-Check beim nächsten Disk-Zugriff AUX2 : ohne Bedeutung Hiermit wird der Betriebsmodus eingestellt. Kommando: e ($65) Funktion: Universelles Formatieren (Extended Format) Data-I/O: Send 128 Byte AUX1 : logische Nr. des zu formatierenden Tracks $FF = ganze Disk/Partition formatieren $FE = wie $FF, aber im Hintergrund formatieren AUX2 : Bit 7: 1=ohne, 0=mit Verify formatieren Mit diesem Kommando kann jedes beliebige Format auf der Diskette erzeugt werden. Neben den Angaben in AUX1 und AUX2 muß ein 128 Byte langer Format-Block mit folgenden Formatdaten zum Laufwerk gesendet werden: Byte 0-11: Config-Block, siehe O-Kommando Byte 10: Sector-Skew-Byte Bit 0-4: Sektorreihenfolge 0 = aus Sektortabelle übernehmen 1-$19= Sector-Skew-Angabe (gibt an, wieviele Sektoren zwischen zwei nacheinander nummerierten Sektoren liegen sollen) $1A = für Normal Speed berechnen $1B = für Normal Speed (optimiert) $1C = optimiert für Warp-Speed $1D = optimiert für Ultra-Speed $1E = optimiert für HDI-Format $1F = optimiert für Turbo-Drive Bit 65: Reservesektor festlegen 00 = keinen Platz für Reservesektor lassen 01 = mit Platz für Reservesektor formatieren 10 = mit zusätzlichem Reservesektor formatieren ohne Bedeutung, falls Bit 0-4 >=$1A Bit 7: reserviert, muß 0 sein Byte 11: Sector-Length-Byte $00 = Sektorlängen aus Längentabelle übernehmen $01 = Sektorlängen gemäß Bit 5-6 von Byte 10 berechnen $20-$DF = direkte Angabe der Sektorlängen in FM-Bytes Byte 12-56: Sektortabelle Jedes Byte in dieser Tabelle entspricht einem Sektor: Bit 0-4: Sektornummer Bit 765: Error-Status des Sektors: 101 = Sektor mit LD-Fehler 110 = Sektor mit RNF+CRC-Fehler sonst = Sektor ohne Fehler Spezialwerte in der Sektortabelle: $C0 = Lücke formatieren (nur zulässig, wenn Byte 11 = 0) $00 = markiert das Ende der Sektortabelle Byte 60-103: Längentabelle Gibt zu jedem Sektor bzw. Lücke aus der Sektortabelle die Länge in FM-Bytes an. Ein FM-Byte entspricht in SD 1 Byte, in MD und DD 2 Bytes auf der Diskette. Für einen Sektor sind Längen von $20-$DF zulässig, für eine Lücke Längen von 1-$FF. Ein Sektor besteht immer aus 32 FM-Bytes für den Sektor-Header und im Normalfall aus 64 oder 128 FM-Bytes für die Sektordaten. Dazu können noch einige Lückenbytes kommen. Die Summe aller Bytes in der Längentabelle darf 3232 nicht überschreiten. Sollte im Format-Block irgendwo ein falscher Wert stehen, wird dies noch bevor der Motor anläuft mit einem Error 144 quittiert. Kommando: g ($67) Funktion: Track analysieren (Get Track-Info) Data-I/O: Receive 128 Byte AUX1 : logische Tracknr. AUX2 : Analyse-Level: $00 = vollständiger Scan $20 = nur Sektorheader prüfen sonst = nur Sektorinhalte prüfen (AUX2 muß Sektor-Skew der Disk enthalten, siehe Byte 10 des Format-Blocks) Mit diesem Kommando wird der vorgegebene Track analysiert. Das Laufwerk schickt 128 Byte zum Rechner, die in ihrem Aufbau genau dem Format-Block des e-Kommandos entsprechen. Die Dichte des Tracks wird nicht geprüft, daher muß vor dem g-Kommando die richtige Dichte eingestellt sein. Für den empfangenen Format-Block gilt: Byte 10 und 11 sind immer 0. Die Bits 7-5 der Bytes aus der Sektortabelle habe folgende Bedeutung: 000 = Sektor OK und leer (mit Nullen gefüllt) 001 = RT-Fehler 010 = CRC-Fehler 011 = RT+CRC-Fehler * 100 = Sektor ist kurz (hat zu wenige Datenbytes), hat einen CRC-Fehler und evtl. noch einen RT-Fehler * 101 = LD-Fehler, evtl. auch CRC- und/oder RT-Fehler * 110 = RNF+CRC-Fehler 111 = Sektor OK und nicht leer Die Sektorheader-Prüfung stellt nur die mit * markierten Error-Sektoren fest und ermittelt die Sektorlängen. Der Rest wird durch die Sektorinhalts-Prüfung ermittelt. Der mit dem g-Kommando erhaltene Format-Block kann übrigens ohne Änderung als Eingabe für das e-Kommando dienen. Das dient zusammen mit den Kommandos t und u dem Kopieren von kopiergeschützten Disketten. Kommando: t ($74) Funktion: Error-Sektor in SD und MD lesen (Track-Read) Data-I/O: Receive 128/129/256 Byte AUX1 : logische Tracknr. AUX2 : Bit 4-0: logische Sektornr. Bit 765: Lesemodus 000 = normal lesen (nur SD/MD) 001 = RT/CRC/LD-Fehler ignorieren (nur SD/MD) 010 = RT/CRC/LD-Fehler ignorieren (nur SD/MD) und Controller-Status als 1.Byte senden 100 = erste Hälfte eines 512-Byte-Sektors lesen 110 = zweite Hälfte lesen Mit diesem Befehl können in SD und MD Error-Sektoren schnell gelesen werden, die Hyper-XF macht bei einem Fehler keinen Wiederholversuch, wie es beim R-Kommando der Fall ist. Es werden 128 Byte zum Rechner geschickt, bei der Variante 010 sind es 129 Byte. Außerdem können die 512-Byte-Sektoren einer DD-Disk vom ATARI ST oder einem PC in zwei Hälften eingelesen werden. Kommando: u ($75) Funktion: Error-Sektor in SD und MD schreiben (Update Sector) Data-I/O: Send 128 Byte AUX1 : logische Tracknr. AUX2 : Bit 4-0: logische Sektornr. Bit 765: Fehler-Typ: 000 = normal 001 = RT 010 = CRC 011 = RT+CRC 100 = LD ohne CRC 101 = LD+RT ohne CRC 110 = Short Sector (letztes Datenbyte enthält Anzahl der zu schreibenden Bytes) 111 = Short Sector mit RT Schreibt einen Error-Sektor auf die Diskette. Es werden 128 Byte zum Laufwerk geschickt. 13 Disk-Utilities Um die Möglichkeiten der Hyper-XF richtig auszunutzen bedarf es noch einiger Disk-Utilities: - Diskkopierer zum schnellen Kopieren von beliebigen Disks - Trackkopierer zum Kopieren von kopiergeschützten Disketten - Diskmapper zum schnellen Scannen einer Disk - angepaßtes DOS und Game-DOS (Hyper-Speed, Betriebsmodi) - DOS-Formatierer (passend für alle DOS-Versionen) - ST/PC-Disk-Reader zum Lesen von Dateien vom PC oder ST Diese Utilities werde ich nach und nach entwickeln und im ABBUC-Magazin veröffentlichen sowie künftig inkl. Anleitung auf Diskette beilegen.