13.3 OMTI BilliglösungDie OMTI-Billiglösung für den Atari ST
Ohne Handbremse
Mit einer Festplatte und einem OMTI-Kontroller kann man sich viel Leistung für den Atari erschließen. Und das für wenig Geld. Doch was kostet ist der Bootvorgang. Nach jedem Reset ist wieder warten angesagt, bis alle Accessories und Programme aus dem Autoordner von der langsamen Diskette geladen wurden. Mit ein paar Programmen kann der Atari sich aber auch alleine den Festplattentreiber von derselbigen laden. (!n l) Das geschilderte Problem dürfte eigentlich jedem Benutzer
einer Atari/Festplattenkombination bekannt sein. Für einen
einzigen Systemstart am Tag ist die Handbremse in Form einer
Startdiskette kein sonderliches Manko. Die Bombenleger unter den
Assemblerprogrammierern werden aber für jeden der zahllosen
Totalabstürze mit einem Diskettenboot nicht unter zwanzig
Sekunden bestraft, was spätestens ab dem dreizigsten Reset
langsam als nervig empfunden werden dürfte.
Eine Lösung für die Atari-Harddisk und ähnliche war
schon vor gut einem halben Jahr in der c't zu finden [1]. Für den
OMTI-Kontroller fehlt im TOS jedoch eine geeignete Routine um sich das
Treiberprogramm von selbst aus dem Sumpf, bzw. von der Festplatte zu
ziehen. Da die alte DMABOOT- Routine im ROM-TOS sowieso für die
"Billiglösung" [3] nicht mehr benötigt wird, kann
sie problemlos durch eine neue ersetzt werden.
Die neue Startbahn ...
Der neue DMABOOT-Lader findet zweckmäßigerweise sein
neues Zuhause, wo vorher die alte Routine zu finden war. Dies ist in
der deutschen ROM-TOS Version vom 6.2.86 der Bereich von $fc04a8 bis
$fc0575. Es war zwar etwas mühsam das Programm in den
spärlich vorhandenen Platz hinein zu zwängen, doch lassen
sich durch die Benutzung aller Register mit Register- beziehungsweise
indirekter Adressierung etliche Bytes einsparen. Dadurch leidet
natürlich die Übersichtlichkeit und Wartbarkeit der
einzelnen Programmteile, da man fast alle Register nicht mehr
verändern darf.
Die Routine setzt als erstes den Kontroller zurück und
lädt dann den Bootsektor in die zweite Hälfte des 1 KByte
großen Diskbuffer des TOS, dessen Adresse in der Systemvariable
_DSKBUFP ($4c6) zu finden ist. Die erste Hälfte des Diskbuffer
sollte übrigens nicht benutzt werden, da er später
während der Initialisierungsphase des Festplattentreibers HDBIOS
[3] belegt wird. Nach dem Ladevorgang wird noch die Prüfsumme des
Bootsektors errechnet und bei Übereinstimmung mit einer
"magischen Zahl" wird das erste Byte des Bootsektors
angesprungen.
Es dürfte hoffentlich jedem klar sein, daß die neue
DMABOOT-Routine ein ROM-Patch ist. Somit ist der Besuch bei dem
hilfsbereiten Bekannten mit dem EPROMmer natürlich mal wieder
unerläßlich ! Wie man sich die EPROM-Dateien erstellt
bleibt dem findigen Leser anheimgestellt (Tip: wenn man in [2] sucht,
wird man übrigens auch fündig).
Wenn die ROMs sowieso geändert werden, kann man eigentlich
noch die sechzehn Bytes für das Bitmuster der "Bomben"
ändern (die Dinger gehören weder auf den Bildschirm, noch
woanders hin). Wie wär es denn mal mit einem
"Keep-Smiling-Face"- Muster ?
... führt in den Bootsektor
Eigentlich könnte das Ladeprogramm im Bootsektor doch bis auf
die Leseroutine mit dem aus Heft 8/87 übereinstimmen, oder ?
Leider hat der OMTI- Kontroller zwei kleine, aber Programmplatz
fressende Unterschiede zum Atari-Kontroller: Erstens müssen die
logischen Sektornummern in physikalische Zylinder-, Kopf- und
Sektornummer umgerechnet werden, was nun nicht allzuviel Platz
benötigt. Störender ist dagegen, daß der Kontroller
noch nicht "weiß" wie groß denn die Platte ist
und deshalb vorsichtshalber von nur zwei Köpfen ausgeht. Ohne
eine Initialisierung ist somit die Festplatte nicht ohne
Einschränkung nutzbar. Doch paßt eine zusätzliche
Kontrollerinitialisierung leider nicht mehr in den schon gerammelt
vollen Bootsektor hinein.
Somit scheidet die Möglichkeit den Treiber als ein normales
Programm in eine Partition zu schreiben und von dort laden zu lassen
aus. Reserviert man sich allerdings den ersten (= nullten) Zylinder
von der Festplatte für die Bootprogramme ist das Platzproblem
auch schon gelöst. Ein Pluspunkt liegt übrigens in dem schon
vorgestellten Treiber HDBIOS: Er ist frei verschiebbar, wodurch man
sich das Relozieren auch noch schenken kann.
BOOTLOAD ist der erwähnte Bootlader und startet eigentlich
nur den Festplattentreiber. Da ja ein direktes Laden und Starten noch
nicht mit einem Betriebssystemaufruf zu erledigen ist, muß dem
TOS die Arbeit des Ladens abgenommen werden. Dazu wird erst eine
Basepage erzeugt, ein Programm (i.A. HDBIOS) ohne den Programmkopf aus
der ersten Spur hinter die Basepage geladen und dann ausgeführt.
Das zu ladende Programm muß sich dazu ab dem Sektor eins in der
ersten Spur befinden. Die Länge des Treiberprogramms in Sektoren
wird übrigens in BOOTLOAD bei dem Label PRG_LEN angegeben.
Hierbei kann auch eine zu große Länge angegeben werden, da
die wirkliche Länge aus dem Programmkopf entnommen wird.
Zum Abschluß wird noch Laufwerk c: als Bootlaufwerk
angemeldet. Gegebenenfalls kann aber bei dem Label BOOTDRV eine andere
Laufwerksnummer gegeben werden. Möchte man für die weiteren
Warmstarts einen Diskboot ausschließen, der generell noch vor
der Routine DMABOOT ausgeführt wird, kann die Systemvariable
_BOOTDEV ($446) auch auf das eigentliche Bootlaufwerk gesetzt werden.
In dem Listing ist die betreffende Zeile allerdings
auskommentiert, weswegen nach einem Reset weiterhin versucht wird von
Diskette zu booten. Gerade in der Experimentierphase sollte man sich
diesen Noteinstieg freilassen. So hat man die Möglichkeit mit
einem gebooteten RAM-TOS und nachgeladenem Festplattentreiber einen
defekten Bootlader doch noch durch ein funktionierendes(!) Programm zu
ersetzen.
Ein einfacher Generator
Nachdem man sich schon selbst um die Aufteilung und Erstellung der
Dateien für den EPROM-Brenner kümmern muß stellt sich
dann auch die bange Frage "Wie bekomme ich denn nun Bootlader und
Festplattentreiber an ihre vorgesehenen Plätze ?". Die
Antwort lautet (nein, diesmal nicht 42 sondern): BOOTGEN.
Dies pfiffige Progrämmchen kann beim Aufruf mit zwei
Parametern versorgt werden: mit "b Dateiname.erw" wird das
angegebene Programm in den Bootsektor geschrieben. Das Bootprogramm
muß übrigens frei verschieblich (PC-relativ) sein und darf
nur das TEXT-Segment enthalten.
Der andere Aufruf betrifft, richtig geraten, den
Festplattentreiber. Mit "t dateiname.erw" wird das
gewünschte Programm ab Sektor eins in die erste Spur kopiert. Es
darf maximal sechzehn Sektoren (= 8 KByte) lang sein. Die ganz
hastigen Benutzer können auch beide Parameter auf einmal angeben
und mit einem Aufruf Bootlader und Treiberprogramm auf der Platte
versenken. Danach darf natürlich keine Partition mehr auf
Zylinder null anfangen.
Getreu dem Motto "Was schon geschrieben wurde kann weiterhin
benutzt werden!" ist BOOTGEN.C ebenfalls mit den Programmen CBIND
und HDBIOS aus [3] zu linken.
Zum Schluß einen Tip für die Softwarebastler: Tauscht
man in den Funktionen RD_SECT und WR_SECT die drei Funktionsaufrufe
durch einen passenden BIOS-Aufruf RWABS (Sektoren lesen/schreiben
von/auf Disk) aus, lassen sich recht einfach auch nette Bootprogramme
auf die Diskette schreiben. Dann werden natürlich auch die ersten
drei Funktionsaufrufe in der main-Funktion zum Initialisieren der
Leseroutinen in HDBIOS nicht mehr benötigt.
B I O S - D R I V E T A B L E F O R O M T I - - 5 5 2 0 / 5 5 2 7 M O D E L S - - --------------------------------------------------------------------------- BIOS# 1002570 / #1002571 10/R10 --------------------------------------------------------------------------- W1 W2 W3 W4 Drive/Model #Cylinder #Heads Write Precomp. ................................................................ 1 1 1 1 Maxtor XT1140 918 15 - 1 1 1 0 CMI 6426 640 4 256 1 1 0 1 Rodime 352 306 4 - 1 1 0 1 Microsience HH312 306 4 - 1 1 0 0 Seagate ST 4026 615 4 300 1 0 1 1 Cynthia 570 987 7 - Vertex V170 - 1 0 1 0 DMA/RICOH 612 2 400 Remov. 10Mb - 1 0 0 1 Seagate ST 4038 733 5 300 1 0 0 0 Seagate ST 213 612 2 256 0 1 0 0 Miniscribe 3425 612 4 128 0 1 1 0 Quantum Q540 512 8 256 0 1 0 1 Seagate ST 4051 977 5 300 0 1 0 0 CMI 342 612 4 256 Seagate ST 255 - 0 0 1 1 CDC 9415-36 697 5 256 0 0 1 0 CMI 3212 612 2 128 Miniscr.3012/3212 0 0 0 1 CMI 6640 640 6 256 Tulin 240 0 0 0 0 CMI 5412 306 4 128 Lapine 3522 Otari 514 Seagate ST 412/ST212 Shugart 712 1 1 1 1 Atasi 3085 1024 8 - 0 1 1 1 Miniscribe 8438 612 4 - Microscie. HH330 Microscie. HH738 1 0 1 1 Peripheral 357R 615 4 - 0 0 1 1 Lapine LT 300 616 4 - 1 1 0 0 Piram V170 987 7 - 0 1 0 1 Piram V185 1166 7 - 1 0 0 1 Piram 514 1224 11 - 0 0 0 1 Piram 519 1224 15 - 1 1 1 0 Seagate ST251R 820 4 - 0 1 1 0 Seagate ST277R 820 6 - 1 0 1 0 Seagate ST4077R 1024 5 - 0 0 1 0 Seagate ST4144R 1024 9 - 1 1 0 0 Toshiba MK 53FB 830 5 - 0 1 0 0 Toshiba MK 54FB 830 7 - 1 0 0 0 Toshiba MK 56FB 830 10 - 0 0 0 0 Seagate ST 238R 615 4 - Miniscribe 3438 Tandon 364 615 4 - ............................................................................ O M T I - E R R O R C O D E S --------------------------------------------------------------------------- Error Code ---------------------- Description #1701-A Failed RAM Diagnostic command.This command performs a pattern test on the internal controller buffer. #1701-B Failed Controller Internal Diagnosics command. This command causes the controller to perform some internal diagnostics including ROM checksum and sequencer self test. #1701-C Failed Test Drive Ready command. This command selects the logical units and returns a zero status during the status state to indicate that the unit is selectet, ready and seek or seek/command is complete.In the case of a cartridge unit, a zero status also indicates that a cartridge is installed. For fixed drives,the controller wait up to 50 seconds for the drive to come ready. #1701-D Failed Recalibrate command. The drive is stepped toward the outside cylinder until either: (1) track zero is detectet, or (2) more steps have been issued than available cylinders for the device type. #1701-E Failed Initialize Drive Characteristics command. This command sends a parameter list of all characteristics of the drive to the controller. There is no access to the drive during execution of this command. #1701-F Failed Ready Capacity command. This command returns to the host ESDI drive physical parameters as available directly from the drive interface. --------------------------------------------------------------------------- O M T I - C O N T R O L L E R I N S T A L L A T I O N M A N U A L 1. Cabling Requirements: One 34-pin straight through cable. One 20-pin straight through cable. 2. On winchester hard disk: Install drive select jumpers to lowest Drive Select DS0 or DS1 3. On controller: If your drive is listet in the BIOS-Drive Table ,install jumpers W1 to W4 accordingly. 4. Install the 34-pin drive interface cable to the J1 connector and the 20-pin drive interface cable to the J2 or the J3 connector. Pin 1 is on the left side of the connector in both cases. 5. Install the controller in any available slot, exept the one nearst the power supply ,on the motherboard. CAUTION: Power must be off !! 6. Insert DOS diskette in Drive A: and turn on power 7. Execute BIOS Low/High-level format routine in BIOS by executing DEBUG utility, then entering: g=c800:6 8. Answer all questions properly. If your Drive is not listed in the BIOS drive table answer "N" to "Use defaults (Y/N?) prompt. See BIOS Format Routine Instructions flowchart. 9. Create DOS Partitions by executing FDISK utility. 10. Initialize the Drive by executing the command: Format C:/S (or Format D:) 11. Your hard disk should now be bootable drive C: (or D:). --------------------------------------------------------------------------- 1989 MRT
Alles über die OMTI-Lösung ?
Am besten dient uns hierbei ein 20 poliges Flachbandkabel,das es
in jedem Elektronik-Shop zu kaufen gibt,besser noch man arbeitet in
einer Firma die das als meterware verarbeitet. Ebenfalls in einem
Elektronik-Shop ist der 20 polige Pfostenstecker und der 19 polige
D-Sub Stecker zu besorgen,ihn in Schneid-Klemmtechnik zu bekommen
dürfte allerdings sehr schwer fallen. Das Kabel sollte nicht
länger als ca.50cm werden,da es ansonsten zu Störungen
kommen kann, die später schwer ärger machen. Auf der einen
Seite des Kabels wird der Pfostenstecker so angequetscht das der
farbig markierte Draht auf pin Nr.1 zu liegen kommt. Mit Pin Nr. 1-8
fangen die Datenleitungen des Kabels an,man sollte hier sehr
sorgfältig arbeiten. Man steckt dann am besten den Pfostenstecker
auf die fertige Platine des Omti-Adapter's,und zwar so das der Pin
Nr.1 des Flachbandkabels mit Pin Nr.1 des Omti-Adapters
übereinstimmt. Dieser Pin ist an dem Pfostenstecker meist mit
einem Pfeil gezeichnet. Dann wird mit einem Ohmmeter Leitung für
Leitung durchprobiert und am anderen ende des Kabels sofort mit dem 19
poligen D-Sub verlötet. Es wird somit sichergestellt das keine
verwechselung der Adern auftritt, was dann schnell zu unliebsamen
Überraschungen führt.
DMA-Port Omti-Adapter -------------------------------------------------------- 1- data 0.................................. 1- D0 2- data 1.................................. 2- D1 3- data 2.................................. 3- D2 4- data 3.................................. 4- D3 5- data 4.................................. 5- D4 6- data 5.................................. 6- D5 7- data 6.................................. 7- D6 8- data 7.................................. 8- D7 9- select.................................. 9- CS 10- IR int..................................10- INT 11- masse ..................................11/13/15/17- Masse 12- rücksetzen..............................12- Frei 13- masse ..................................11/13/15/17- Masse 14- ACK ..................................14- ACK 15- masse ..................................11/13/15/17- Masse 16- CA ..................................16- CA 1 17- masse ..................................11/13/15/17- Masse 18- R/W ..................................18- R/W 19- DR ..................................19- DRQ Man kann auch Abgeschirmtes Rundkabel verwenden,was dann auch
etwas länger sein kann,nur besteht dann die schwierigkeit diese
Aderen richtig im Pfostenstecker zu quetschen. Zum Schluß kann
man dann das ganze zur Sicherheit noch mal mit einem Ohmmeter
durchmessen,damit hier nicht's anbrennt. Der Adapter ist ja
hoffentlich bestückt ?
PS:
OMTI-Adapter für Atari ST (8802126dBE,S8802126)
Bitte beachten Sie die folgenden Hinweise, um eine einwandfreie
Funktion der " Billiglösung" (c't 2/88 S.126) zu
gewährleisten:
- der Adapter arbeitet einwandfrei mit den OMTI-Controllern 5510,
5520 (A,B) und 5527, nicht jedoch mit Controllern anderer Typenreihen
oder von anderen Herstellern.
- die veröffentliche Schaltung wurde in c't 3/88 korrigiert:
+5V liegen bei IC1 und IC3 an Pin 20, an Pin 10 liegt Masse. Im
Platinenlayout ist diese Korrektur berücksichtigt.
- für IC5 muß ein 74HCT04 eingesetzt werden (nicht LS
oder andere Typenreihen) ! Es ist empfehlenswert, auch IC3 in HCT zu
bestücken.
- an den Verbindungsstecker X1 des Adapters sind Masse,+5V und
+12V anzuschließen. Der Controller wird dann über die
Slot-Buchse mit Strom versorgt. Strombedarf: ca. 500mA an 5V für
Controller und Adapter, wenige mA an 12V. Die Anforderung an das
Netzteil werden also im wesentlichen duch den Bedarf der Festplatte
bestimmt /typisch 1,5 bis 3A Anlaufstrom an 12V, 0,5A bis 1A nach dem
Hochlaufen).
- bei einigen Rechnern treten Timing-Probleme an der
DMA-Schnittstelle auf, die sich in Schreib-Lesefehlern
äußern (typisches Symtom: unsinnige Werte für
Zylinderzahl etc. beim Partitionieren). Abhilfevorschlag (aus c't 5/88
): Pins 2 und 3 von IC4 (74LS08) aus der Fassung biegen, Pin 2 des ICs
mit Pin 1 verbinden, die Anschlüsse 2 und 3 der Fassung
verbinden. Damit wird das Gatter aus der /ACK-Leitung entfernt und die
Signallaufzeit entsprechend verkürzt. In einigen Fällen
muß darüber hinaus IC4 gegen den schnelleren 74ALS08
ausgetauscht werden (c't 4/88, S.12)
- der Adapter darf nicht ohne Stromversorgung an den DMA-Port
angeschlossen sein, sonst funktioniert die Floppy nicht.
- verschiedene Parameter, die beim Formatieren gefragt werden,
sind den Spezifikationen der Harddisk zu entnehmen (Anzahl der
Zylinder, evtl. verringerter Schreibstrom, Prekompensation, defekte
Spuren, Parkspur). Wenn verringerter Schreibstrom und / oder
Prekompensation nicht eingestellt werden müssen, ist hier die
Nummer des höchsten Zylinders +1 anzugeben. Anzahl der Sektoren:
17 bei MFM-Verfahren (OMTI 5510,5520), 26 bei RLL-Verfahren (5527).
Empfohlener Sektorversatz :2.
- auf der Diskette S8802126 befinden sich weitere
Erläuterungen. Bitte unbedingt lesen.
Für weitere technische Fragen steht die Hotline der
c't-Redaktion (über CosmoNet-Mailbox oder telefonisch von montags
bis freitags zwischen 13 und 14 Uhr) zur Verfügung.
Die Alternative zum OMTI-Problem ?
Nachdem es mittlerweile keine OMTI-Controller mehr zu kaufen gibt
muß man sich nach einer Alternative umsehen,die genauso billig
und einigermaßen gut ist.
Das bei diesen Arbeiten eine gewisse "Sauberkeit"
herrschen sollte dürfte eigentlich Selbstverständlich sein
..... Auch das Treiberprogramm unterliegt einigen Änderungen was
das Timeout in manchen Unterroutinen angeht. Man sollte die
Zeitkonstanten in folgenden Routinen auf mindestens 2 Sec.
verlängern. WAIT_REQ / WAIT_DMA / das trifft natürlich auf
das HDBIOS und auf das BOOTLOAD.PRG zu. Man braucht an dieser Stelle
nur die Anweisung hinter dem Label zu verändern in: move.l #
2*200,d1 Dann sind die Zusatzprogramme (Formatier,Partitionier) mit
dem neuen geänderten HDBIOS zu Linken. In dem Programm
DISKBOOT/eventuell DMABOOT ist auch eine längere Wartezeit
einzubauen,die den ersten Zugriff etwas verlängert. Die Zeile
hinter dem Label WAIT_REQ wird dazu von: moveq #$7f,d1 auf: move.l
#30*200,d1 verändert.
Den Schaltplan des Adapters kann ich wieder als .PIC-File
hochladen so daß man die Änderungen schnell erkennen
kann.(Bei Nachfrage)
Aus einem Brief der eMedia an die OMTI-Adapter Kunden
ACHTUNG Platinenfehler
Sehr geehrte Kundin / sehr geehrter Kunde
nach unseren Unterlagen haben Sie kürzlich die Leerplatine
"OMTI- Adapter für Atari ST", Best.-Nr.8802126dBE,von
uns bezogen.
Wie uns nach Auslieferung bekannt wurde, sind bei einer
Pruduktionscharge dieses Platinentyps durch ein Versehen des
Herstellers die Brücken BR1 und BR2 durchkontaktiert worden - ein
Fehler der durch die elektronische Prüfung nicht endeckt werden
konnte.
Wir möchten Sie vorsorglich informieren und bitten, die an
Sie gelieferte Platine zu überprüfen.Die falschen
Durchkontaktierungen lassen sich leicht durch Aufbohren
(Bohrerdurchmesser 1.3mm) entfernen. Bitte beachten Sie, daß die
Brücke BR2 laut Schaltplan geschlossen werden muß. Wenn Sie
diese Korrektur nicht selbst vornehmen möchten,können Sie
selbstverständlich die fehlerhafte Platine zum Umtausch
zurücksenden.
Wir bedauern das Versehen und bitten um Ihr Verständniss.
Mit der Datenschleuder durch die Galaxis
oder ein Reiseführer durch den Festplattenbetrieb ( für Marvin, die langen Nächte und
meine ständig volle Teekanne ) Eine ernstgemeinte (aber nicht immer ernste) Anleitung zu den
Programmen für die Benutzung von OMTI-Festplattenkontrollern an
Atari ST Rechnern und noch einige Tips.
Auch wenn es mit dem Nach-/Aufbau oder der Inbetriebnahme nicht
auf Anhieb klappt, immer daran denken [9]:
KEINE PANIK !
Inhalt Seite Die Hardware 2 Die Software 2 - 4 Das Booten 4 Der Bootsektor 5 Partitionen 6 Liste defekter Sektoren 6 Geschwindigkeitsvergleich 7 Das Nachwort 7 Die Literatur 8 Die Hard- & Software 2 Wettstreit zweier Adapter
Nun buhlen zwei Adapter um die Gunst eines Festplattenkontrollers,
damit preiswerter Festplattenbetrieb am Atari möglich wird. Als
erstes gibt es die Variante am DMA-Port [2] und dann noch den
PC/ECB-Busadapter [5]. Beide Möglichkeiten haben ihre Vor- und
Nachteile einerseits ist die DMA-Variante schneller als der PC-
Adapter, andererseits wird aber der DMA-Port vollständig benutzt,
womit Laserdrucker und ähnliches 'Gedöns' keinen Zutritt
haben (wenn man dafür das Geld hat, kann man für eine
'richtige' Festplatte auch etwas tiefer in die Tasche greifen).
Nicht immer nur OMTI
Da das Thema 'harte Sachen' angeschnitten ist noch folgende
Hinweise:
Etwas über die weiche Ware
ä Auf der Disk sind (hoffentlich) folgende Programme und Dateien: Name | Sinn | Adapter (Dma/Pc) -------------+---------------------------------+----------------- park.s | Parkprogramm (Quelltext) | D/P hdpart.c | Partitionierer (Quelltext) | D/P hdformat.c | Formatierer (Quelltext) | D/P | | hdbios.s | Treiber (Quelltext) | D cbind.s | Bindeprogramm für C-Programme | D hdbiosc.prg | Treiber für Laufwerk c: - f: | D hdbiosf.prg | " " " f: - i: | D hdbiosh.prg | " " " h: - k: | D hdpart.tos | Partitionierer | D hdformat.tos | Formatierer | D park.tos | Parkprogramm | D | | ifhdbios.s | Treiber (Quelltext) | P ifcbind.s | Bindeprogramm für C-Programme | P ifbiosc.prg | Treiber für Laufwerk c: - f: | P ifbiosf.prg | " " " f: - i: | P ifbiosh.prg | " " " h: - k: | P ifhdpart.tos | Partitionierer | P ifhdform.tos | Formatierer | P ifpark.tos | Parkprogramm | P
Übrigens: Die Programme sind von mir mit (der etwas
ungewöhnlichen Kombination von) Lattice C V3.03.04, as68 und
link68 entwickelt und übersetzt worden.
Alles der Reihe nach
Jeder sollte eigentlich den Sinn und Zweck der ganzen Programme
noch aus dem Artikel 'Billiglösung' [2] kennen. Trotzdem folgt
jetzt eine kleine Beschreibung, die vor allem die Ergänzungen
beinhaltet.
hdbios Ist der eigentliche Festplattentreiber und wird aus einem AUTO-Ordner oder vom Desktop aus gestartet. Übersetzen: Ist u.a. ein selbständiges Programm; der Objekt- code wird aber noch öfters benötigt. Neu: + Gibt nun eine Startmeldung aus + Kann jetzt Platten mit bis zu 16 Köpfen und 1024 Zylindern verkraften (Vorher max. 32 Mbyte) + Dadurch geänderter Aufruf der Lese- & Schreibroutinen + Andere Laufwerksnummern können durch umändern des Labels drv_num im Definitionsteil erreicht werden. - Das Label 'dev' im Modulkopf von der Funktion bpb_calc bekommt den richtigen Wert (20 statt 8) zugewiesen. (Merke: In Programmen die relativ zum Stack adressieren NICHT nachträglich noch einige Register retten !!!) hdformat Hiermit wird die Platte vor dem ersten Gebrauch gebügelt und in Tortenstückchen unterteilt. Übersetzen: Es muß noch der Objektcode von cbind und hdbios für den entsprechenden Adapter dazu gebunden werden. Neu: + Es wird zusätzlich nach einer Parkspur gefragt, die von dem PARKprogramm angefahren wird. Manche Hersteller reservieren hierfür extra eine Spur. Ansonsten sollte der höchste Zylinder oder einer dahinter benutzt werden. hdpart Mit dem Partitionierer wird die Platte in mehrere logische Laufwerke unterteilt. Er hat die augenfälligste Änderung erlitten (Ich geb's ja zu: man mußte die Zahleneingaben selbst aus- und umrechnen, damit der Rechenknecht sie schluckt. Die Listings waren aber eh schon sehr lang.). Übersetzen: Es muß noch der Objektcode von cbind und hdbios für den entsprechenden Adapter dazu gebunden werden. Neu: + Es werden Zylindernummern in dezimal ein- & ausgegeben + Statt Länge der Partition wird der Endzylinder erfragt + Nun gibt es auch eine Plausibilitätsüberprüfung bei den Eingaben der Zylindernummern Die Software und das Booten 4 cbind ist das Bindeglied zwischen den hardwareunabhängigen C-Pro- grammen und den Unterprogrammen aus hdbios. Ferner enthält es die hardwarenahen Teile des Formatierers. Übersetzen: nur der Objektcode wird gebraucht; s.o. Neu: + die Schreib- & Lesefunktionen (h_read,h_write) sind natürlich an den geänderten Aufruf von hd_read/hd_write in hdbios angepaßt. + Ein Timeoutfall beim Formatieren wird abgefangen und gibt die Möglichkeit zum Fortsetzen oder Abbrechen. Nur mit (A)bbrechen wird das Formatierprogramm (NICHT der Formatiervorgang im Kontroller) beendet. Der Chef-Koch empfiehlt: sollte ein Timeout auftreten nur KEINE PANIK, bevor man ewig >F< wie Fortsetzung drückt, kann auch ruhig gewartet werden bis der Kontroller endgültig fertig ist. Es spielt halt keine Rolle, ob sich der Rechner beim Abfragen des Kontrollers oder der Tastatur langweilt. park Hierbei handelt es sich nicht um ein Programm nur für Garten- bauingenieure. Es positioniert eigentlich nur die Köpfe auf einer geeigneten Parkspur, damit beim Abschalten der Platte keine wichtigen Datenbits plattgehauen werden. Der Wert des Parkzylinders stammt aus dem Bootsektor (s.u.) wo er vom Formatierer hineingeschrieben wurde (s.o.). Dort sollte übrigens schon ein sinnvoller Wert gewählt werden und nicht nach dem Motto je-weiter-von-den-Datenzylindern-entfernt- desto-besser. Somit wird sich den Köpfen dann auch kein Hindernis in den Weg stellen, falls sie zu ihren Ruheplätzen eilen. Einige neuere Laufwerke brauchen solch eine Extrawurst allerdings nicht mehr; sie heben die Köpfe ab oder hecheln noch mit letzter Kraft auf eine Sonderspur [0]. Übersetzen: Hierzu gehört ebenfalls der Objektcode von hdbios Neu: + Alles (Die Vermutung trifft zu: Das Programm ist in der Tat am Ende eines langen Tages entstanden ! )
Möglichkeiten von der Platte zu booten
Jetzt kommen keine konkreten Programme, sondern nur Tips wie man
ohne Diskette direkt von der Platte booten könnte. Leider
unterstützt die dma_boot-Routine des ROM nicht den OMTI-
Kontroller am DMA-Port (wäre auch merkwürdig), weswegen man
auf eigene Lösungen angewiesen ist.
Die einfachste Methode ist die Benutzung einer selbststartenden
ROM-Disk (für die Benutzer des PC-Adapters eigentlich
naheliegend) oder durch Verändern der dma_boot-Routine. Von einer
(EP)ROM-Disk könnte man den gesamten Treiber aus einem
AUTO-Ordner starten lassen [3,4,5]. Mit einem geänderten dma_boot
sollte dagegen nur der Bootsektor gelesen werden, wie es ohnehin
vorgesehen ist. Danach kann an ein kleines Programm im Bootsektor
(Adresse $01e - $1b7) die Kontrolle übergeben werden, das den
Treiber aus den ersten Datensektoren liest [6]. Hierbei kann dann der
Joker ausgespielt werden: Das Treiberprogramm ist
unzufälligerweise frei verschiebbar.
Der Bootsektor 5
Das Geheimnis des Bootsektors
Die Informationen zu dem Bootsektor auf der Festplatte waren
bislang etwas spärlich. Nun soll der Vorhang gelüftet
werden.
Der erste logische Sektor (Zylinder 0, Kopf 0, Sektor 0) auf der
Festplatte enthält den Bootsektor, den das Treiberprogramm
für sich auswertet. Dort stehen, wie in dem Bootsektor einer
Diskette, wichtige Informationen über den physikalischen Aufbau
der Platte. Im großen und ganzen sind die beiden Bootsektoren
gleich, jedoch sind in dem von der Festplatte noch
Partitionsinformationen enthalten.
Doch nun direkt in's Volle: (Adressangaben in hex !) von | bis | Kürzel | Bedeutung | Anmerk. -----+-----+--------+-----------------------------------+-------- 0 | 1 | branch | Sprung zum Bootprg. | + 2 | 7 | filler | für evtl. Kennung | 8 | a | serial | Seriennr. | b | c | bps | #Bytes/Sektore (l,h) | + d | d | spc | #Sektoren/Cluster | + e | f | res | #reservierte Sektoren (l,h) | + 10 | 10 | nfats | #FATs | + 11 | 12 | ndirs | #Directoryeinträge (l,h) | + 13 | 14 | nsects | #Sektoren des Mediums (l,h) | + 15 | 15 | media | Media-descriptor (MS/IBM Pfusch !)| + 16 | 17 | spf | #Sektoren/FAT (l,h) | + 18 | 19 | spt | #Sektoren/Spur (l,h) | + 1a | 1b | nsides | #Seiten auf Medium (l,h) !! | + 1c | 1d | nhid | #versteckter Sektoren (l,h) | 1e | 1b7 | code | Platz für Bootprg. | ? 1b8 | 1b9 | parkcyl| #Parkzylinder | * & 1ba | 1c1 | hdparam| Plattenparameter für Kontroller | * & 1c2 | 1c5 | hd_siz | #Gesamtzahl der Sektoren | * 1c6 | 1f5 | p*_info| Partitionsinfo | * ? 1f6 | 1f9 | bsl_st | Startsektor der BadSectorList | * ? 1fa | 1fd | bsl_cnt| Anzahl der defekten Sektoren | * ? 1fe | 1ff | chk_sum| Prüfsumme | Ein '(l,h)' bedeutet einen Eintrag mit vertauschten Low- und High- Byte, wie es die von MS/IBM benutzten intel(ligenten) Prozessoren halt machen. Das ist das Tribut der (ziemlich) gleichen Disketten- formate. *) Zusätzliche Informationen im Bootsektor der Partition 0 (erster logischer Sektor auf der ganzen Platte). So ist's auch auf der Atari-Platte gemacht. &) Diese Eintragungen sind auf meinem Mist gewachsen, und dürfen nicht verändert werden! Ansonsten können Treiber und Park- programm Mist bauen! ?) Nähere Erläuterungen sind noch woanders zu finden. +) Hier wird definitif etwas hineingeschrieben. Die nicht benutzten Einträge werden mit Nullen initialisiert.
Partitionen, Liste defekter Sektoren 6
Das Wesen der Partitionseinträge
Durch die Partitionen läßt sich eine Festplatte in
mehrere kleine logische Laufwerke unterteilen. Dies ist nötig
falls die Platte mehr Sektoren bereitstellt, als mit einer 16-Bit Zahl
überhaupt adressiert werden können, da die BIOS-Funktion
rwabs() nur mit einem 16-Bit-Argument für die logische
Sektornummer arbeitet. Somit könnte eine Partition bis zu 32
MByte groß sein, wobei zu beachten ist, daß das TOS
(Ausnahme: Blitter-TOS) wegen einem Fehler im DOS nur 16 MByte
verwalten kann [7]. Falls man andere Betriebssysteme (mit einem
selbstgeschriebenen Treiberprogramm) benutzen möchte, kann man
sich hierfür eigene Partitionen auf derselben Platte anlegen, die
von dem Treiber 'hdbios' nicht erkannt werden.
Nachfolgend der Aufbau des Eintrags p*_info aus dem Bootsektor: von | bis | Kürzel | Bedeutung ------+------+--------+----------------------------------------- $1c6 | $1d1 | p0_info| Eintrag für Partition 0 $1d2 | $1dd | p1_info| " " " 1 $1de | $1e9 | p2_info| " " " 2 $1ea | $1f5 | p3_info| " " " 3 Struktur eines Partitionseintrags: Offset | Kürzel | Bedeutung --------+--------+---------------------------------------------- + 0 | p*_flg | Partitions-Flag + 1 | p*_id | Partitions-Identifikation + 4 | p*_st | #erster physkalischer Sektor der Partition + 8 | p*_siz | #logische Sektoren der Partition Anmerkung: Das Partitionsflag hat folgende Bedeutung: $0 -> Partition nicht vorhanden; <> $0 -> Partition vorhanden mit $80 -> Partition bootfähig (das soll nicht heißen, daß das ROM mit dem OMTI booten kann!!). Die Partitionsidentifikation enthält drei (ASCII-) Bytes, die das Treiberprogramm auswertet um eventuell zwischen Partitionen von verschiedenen Betriebssystemen unterscheiden zu können.
Die Liste mit den defekten Sektoren
Gibt es nicht !
Die Einträge bsl_st und bsl_cnt im Bootsektor sind eigetlich
dafür vorgesehen um die (unvermeidlichen ?) fehlerhaften Spuren
auf der Platte zu verwalten. bsl_st (BadSectorList STart) gibt den
Sektor an, wo die Tabelle der defekten Sektoren zu finden ist. Diese
Tabelle enthält soviel Einträge, wie in bsl_cnt
(BadSectorList CouNT) vermerkt sind. Da der OMTI-Kontroller defekte
Spuren selbst verwalten kann (immer helle, immer schnelle; gelle !),
habe ich keine gesonderte Behand- lung im Treiberprogramm vorgesehen.
Geschwindigkeitsvergleich und das Nachwort 7
Von DMA, Busadapter und Geschwindigkeit
Nun werde ich noch kurz die Performance (ein Hoch auf's Neu-
deutsch) von DMA-Port und PC-Adaptern abhandeln. Es dürfte jedem
klar sein, daß der Busadapter bei einem Geschwin-
digkeitsvergleich mit dem DMA-Port etwas im Schatten steht. Bei der
Übertragung von großen Datenmengen (Kopieren) macht sich
ein langsamer Zugriff auf den Kontroller natürlich negativ
bemerkbar, wobei Positioniervorgänge natürlich bei beiden
Varianten gleich schnell sind. Leider sind fast alle Programme bei den
Zugriffen auf die Massenspeicher äußerst ineffektiv. Sie
lesen und schreiben nur kleine Blöcke (z.T. nur Byteweise !)
statt den üppigen Speicher auszunutzen. Auch werden teilweise
etliche Zwischendateien gleichzeitig geöffnet (as68 hat
beispielsweise neben der Ein- und Ausgabedatei noch mindestens sechs
weitere Zwischendateien im Zugriff !!), wobei durch die gemixten
Zugriffe viel positioniert werden muß. Hier kann die
PC-Adaptervariante dann auch einiges wieder wettmachen. Eine
Leistungssteigerung von 30% bis 35% erhält sie aber durch einen
anderen 'Trick': wenn man sicher ist, daß die CPU dem Kontroller
bei der Übertragung einzelner Sektoren nicht davon läuft,
kann man auf eine Abfrage des Statusports im Kontroller verzichten.
Dies ist der Grund für einige auskommentierte Befehle in den
Funktionen hd_read() und hd_write() in dem Quelltext von ifhdbios. Wer
lieber auf Nummer sicher gehen möchte, sollte die Befehle wieder
hineinnehmen und sich mit langsameren Zugriffen herumschlagen.
Datenaussetzer konnte ich deswegen jedoch während der
mehrtägigen Testphase nicht verbuchen.
Nachwort
Auch wenn diese Anleitung nicht alles oder manches garnicht zu dem
großen Thema über Festplatten behandelt hat, hoffe ich
daß doch etwas brauchbares dabei war. Zu den unterschlagenen
Informationen nur soviel: ich wußte nicht daß etwas fehlt
und jemand genau daran interessiert ist. So wird es aber jedem
ergehen, der eine Dokumentation macht. Für ihn würde der
Satz 'Alles klar!' ausreichen ! Eine Einführung über die
Programmierung von DMA-Chip und PC/ECB- Busadapter habe ich aber
absichtlich nicht mit aufgenommen. Notfalls kann man sich ja einige
interessante Sachen aus den Listings herauspicken.
Allen stolzen Besitzern einer (hoffentlich funktionierenden)
'Datenschleuder' kann ich noch die Lektüre von [8,7] empfehlen,
damit der Rechner nicht durch zuviele Ordner ins Schleudern
gerät. Funktioniert dennoch etwas nicht, sollte man nicht
vergessen daß eine Kiste mit flitzenden Elektronen nun wirklich
nicht das wichtigste in der Welt ist.
Achim Freimann
P.S.:
Die Literatur 8
Etwas zum Schmökern
0.) Das (nicht) mitgelieferte Handbuch zur Festplatte
Die neue Version von Festplattentreiber und Hilfsprogrammen
für das Universalinterface bietet nun die Unterstützung des
Romport- expanders (RPEX). Aber auch der alleinige Betrieb des
Interfaces ist noch möglich, da es nicht auf die
Umschaltsequenzen für den Expander reagiert. Bei dem Betrieb mit
dem Expander MUß sich das Interface im ersten Steckplatz auf der
ersten Platine befinden (ist also der Slot mit der Nummer Null !). Bei
Zugriffen auf die Festplatte wird als erstes die Nummer des momentan
aktiven Steckplatzes ermittelt und danach das Interface
ausgewählt. Zum Abschluß wird dann wieder der alte
Steckplatz selektiert. Mit dieser Methode kann neben einer 'dummen'
Steck- karte (z.B. Kopierschutzmodul) das Universalinterface mit Fest-
platte betrieben werden. Solange immer nur ein Programm den Romport
adressiert, kann es zu keinen Konflikten kommen (das TOS ist ja
(leider) nicht Multitasking fähig). Sollten Sie jedoch
beispielsweise mittels einer (System-)Interruptroutine ständig
eine (serielle, parallele, o.ä. ) Schnittstelle abfragen, sind
natürlich Synchronisationsmechanismen vorzusehen.
Aber auch die DMA-Variante hat eine kleine Revision über sich
ergehen lassen müssen. Der Treiber HDBIOS kann nun auch die
seltenen Übertragungen auf ungerade Adressen durchführen.
Somit können die Fans von WORDPLUS auch das (übrigens recht
schlappe) Korrekturprogramm benutzen.
Die (Telefon-) Erfahrung hat mittlerweile gezeigt, daß
einige Anwender Probleme mit dem Formatierer haben. Die Frage
"Sektoren pro Spur" scheint dabei eine größere
Hürde zu sein. Deshalb hier noch ein Tip: MFM-Kontroller (z.B.:
OMTI 5520a) benutzen in der Regel 17 Sektoren pro Spur, RLL-Kontroller
(z.B.: OMTI 5527a) hingegen 26 !
Auch wenn das gesamte Projekt Festplatte ziemlich nachbausicher
ist, haben Sie ruhig etwas Geduld bei (den vermutlich selbst ver-
ursachten) Fehlern und greifen Sie deshalb nicht sofort zum
Telefonhörer. Testen Sie lieber noch einmal die Platine, Kabel,
Steckbrücken, Spannungsversorgung usw.
Die Kombination von sehr utopischen Geräten (ESDI-Kontroller
von ABC mit 350 MByte Platte von XYZ) sollten Sie besser nur
ausprobieren, wenn Sie sich mit der Materie auskennen und eigene
Änderungen vornehmen können (oder eine Rückgabegarantie
auch für evtl. defekte Geräte haben). Wenn Sie nicht so
virtuos mit Hard-, Software und (unvollständigen) englischen
Handbüchern umgehen können, sollten Sie doch besser zu
bewährten Kombinationen greifen (OMTI 5520a mit Segate ST225, ist
gut und preiswert!).
Achim Freimann
Copyright © Robert Schaffner (doit@doitarchive.de) Letzte Aktualisierung am 23. Mai 2004 |