Home Festplatten / Wechselplatten IDE Flash Drive MegaSTe Harddrive
 

13.3 OMTI Billiglösung


Die OMTI-Billiglösung für den Atari ST



Ohne Handbremse
Atari bootet mit OMTI

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.


!!! Listing 1 (dmaboot.s): Neu gegen alt; ein ROM- Patch der DMABOOT-Routine bedient den jetzt den OMTI-Kontroller.

!!! Listing 2 (bootload.s): Dem TOS muß beim Laden des Harddisktreibers kräftig auf die Sprünge geholfen werden.

!!! Listing 3 (bootgen.c): Bootlader und Festplattentreiber werden mit BOOTGEN in einem Startzylinder versteckt.

               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 ?
Das Verbindungskabel zwischen ST und dem OMTI-Adapter

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:
Es gibt einige Omti-Adapter-Platinen bei denen versehentlich die beiden Brücken BR1 + BR2 mit Durchkontaktiert wurden. Man bohrt das am besten mit einem PASSENDEM Bohrer aus und verlötet dann die BR1
Ansonsten sind Fehlfunktionen vorprogrammiert.

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.
Gemeint ist als Ersatz für die Typen 5510/5520/5527 der Seagate- Controller ST11R ,der einem vorschlag aus der c't entspricht. Natürlich geht das ganze nicht ohne die entsprechenden änderungen an der Hard bzw. Software,die wichtigste ändererung ist wohl die Zeit- anpassung der Treiberroutine. Der neue Controller arbeitet auch mit ganz neuen Festplatten zusammen (niedrigere Drehzahl),um unterscheiden zu können welches Laufwerk angeschlossen ist wird etwas Zeit gebraucht. Auch die Arbeitsgeschwindigkeit ist etwas geringer ,und selbst die Formatierung der Platte muß mit einem Interleave von 2-4 durchgeführt werden,da der Controller sonst aus dem Gleichgewicht kommmt. Auf der Adapterplatine sind einige kleine Modifikationen notwendig.... Das in der ACK Leitung liegende Oder-Gatter sollte Entfernt werden... (Pin 2+3 Überbrücken sowie von Pin 3 einen Kondensator mit 22pF gegen Masse löten) Das Timing der DMA-Handshake Signale muß etwas verzögert werden.... dazu werden die 4 noch freien Inverter des 74HCT04 benutzt. Sie werden alle hintereinander in die DRQ-Leitung eingeschleift,bei geschickter Ausführung braucht man nicht mal die Platine zu zerkratzen. Die Anschlußpin's des Chips werden einfach hochgebogen,sodaß sie nicht mehr in der Fassung stecken und dann in der gewünschten Reihenfolge mit einander Verbunden.

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:
Auch andere Firmen bauen Kontroller für Festplatten, wobei Western Digital der klassische Hersteller ist. Im Prinzip kann (!!!!) man auch Glück mit den guten Stücken aus jennem Hause haben, wobei das Augenmerk auf die Befehlskompatibilität zum OMTI [1] (diesmal nicht IBM) gerichtet werden sollte. Zwei verschiedene Testmuster haben sich bei mir geweigert defekte Spuren auf der Platte selbständig zu verwalten. Desweiteren wollten sie auch nicht am DMA-Port mitspielen, was vermutlich an dem etwas zu schnellen Timing des Atari liegt. Deshalb: Ich weiß nicht was Ihnen der nette Herr empfiehlt; mein Tip zielt auf den OMTI 5520a. Dazu wurde halt manches maßge- schneidert.


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



Die Software 3


Der Umfang der Software ist gegenüber der aus [2] etwas angewachsen. Die Assemblertexte sind, bis auf das Parkprogramm, vom Adapter abhängig und deshalb sind alle Programme quasi doppelt vorhanden. Die Dateinamen der Programme für den PC/ECB-Busadapter glänzen (sofern möglich) durch ein vorangestelltes 'if' (wie InterFace). Im folgenden verwende ich nur noch die 'Original- dateinamen', wobei auch immer die Programme für das PC-Interface gemeint sind.

Ü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.
Aber auch die Partitionen (0-3) erhalten, falls sie überhaupt angelegt wurden, einen Bootsektor mit den entsprechenden Ein- tragungen. Fängt eine Partition auf Zylinder 0 an, erhält sie den Bootsektor der die Informationen über die Platte und die Partitionen beinhaltet (s.o.).

      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
Hannover, den 23. Jänner 1988(!nl)


P.S.:
Für unvorherbare Ereignisse und Schäden, die durch den
unsachgemäßen Gebrauch von diesem Text oder der Programm-
kommentare ausgeht übernehme ich keine Haftung.


Die Literatur 8

Etwas zum Schmökern


0.) Das (nicht) mitgelieferte Handbuch zur Festplatte
1.) Scientific Micro Systems, Inc: IBM PC/XT Controller Series Reference Manual
2.) Achim Freimann/Hans Werschner: Billiglösung (c't 2/88 S.126)
3.) Manfred Friese: Solid-State-Floppy mit Vollautomatik (c't 12/86 S.124)
4.) Klaus Koerth: EPROM-Bank für den Atarti 520 ST (c't 1/86 S.58)
5.) Eberhard Meyer: Hochzeit zu dritt (c't 7/87 S.138)
6.) Jens Abraham: Blitzstart (c't 8/87 S.138)
7.) Alfons Kramer: GEMDOS - viel besser als sein Ruf (c't 1/88 S.90)
8.) Martin Schulz: Abenteuerreise durchs TOS (c't 9/87 S.122)
9.) Douglas Adams: Per Anhalter durch die Galaxis (Trilogie in
vier Bänden, erschienen bei Zweitausendeins) (nl)


Ergänzung und Nachtrag 19.4.88

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 !
Die anderen Fragen lassen sich nicht pauschal beantworten, aber eigentlich sollte bei jeder Festplatte zumindest ein Testprotokoll dabei sein, das auch die 'technischen Daten' der Platte verrät. Ist dies nicht der Fall muß man wohl 'den Dealer kontaktieren' um an die notwendigen Informationen heranzukommen. Ist der dazu nicht in der Lage handelt es sich bei ihm wohl mehr um einen Dealer im negativen deutschen Sinne als um einen seriösen Händler.

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
Home Festplatten / Wechselplatten IDE Flash Drive MegaSTe Harddrive