minpic01.jpg

Die Harddisk-Alternative

SCSI und Links für den Atari ST

Helge Schulz

Das hatte sich Atari so gedacht: Eine Schnittstelle mit dem mysteriösen Namen `DMA-Port´ und weltfremden Spezifikationen sollte die Scharen potentieller Massenspeicherer zur gar nicht so preiswerten Atari-Harddisk greifen lassen. Daß dies nicht sein muß, bewies c't bereits mit der `Billiglösung´ und dem ST-OMTI/Link-Adapter. Schnelle SCSI-Festplatten sind inzwischen in ähnliche Preislagen gerutscht, und damit ist ein SCSI-Anschluß für den Atari die elegante Alternative zur OMTI-Lösung.

Unterthema: Stückliste
Unterthema: PALs
Unterthema: Erprobte SCSI-Geräte
Unterthema: Controller-Nummern
Unterthema: Datei WINCAP für altes Atari HDX.PRG
Unterthema: Datei WINCAP für neues Atari HDX.PRG
Unterthema: Transfergeschwindigkeiten im Vergleich

Bitte beachten Sie auch diese Ergänzungen!

Über SCSI brauche ich nicht mehr allzu viel zu schreiben; in c't 11/89 wurde dieses Thema in epischer Breite behandelt. Festplatten mit integriertem SCSI-Controller sind inzwischen zu Preisen lieferbar, die mit denen `diskreter´ Adapterkombinationen durchaus vergleichbar sind. Dabei ist die SCSI-Lösung um einiges schneller, eleganter und zukunftssicherer. Die Hardware-Voraussetzungen sind beim Atari ST allerdings so beschaffen, daß man bei vernünftigem Aufwand nur einen Kompromiß erzielen kann. Die Alternative lautet: voller SCSI-Standard oder volle Software-Kompatibilität inklusive Autoboot-Fähigkeit. Ich habe den zweiten Weg gewählt.

Wer sich schon einmal näher mit dem Atari-DMA-Port beschäftigt hat, dem wird vielleicht die Ähnlichkeit der dort entspringenden Signale mit denen des SCSI-Standards aufgefallen sein. In der Tat schafft es auch Atari, am DMA-Port einen SCSI-Controller (von Adaptec) zu betreiben. Warum man hier nicht gleich Nägel mit Köpfen gemacht hat, wird ein ewiges Geheimnis weniger Marktstrategen bleiben. (Man erzählte in diesem Zusammenhang allerdings auch von Schaltungsdesignern, die ihre Hose mit einer glühenden Kneifzange zumachten ...)

Die in diesem Beitrag vorgestellte Alternative ist zur Atari-Harddisk kompatibel und kann daher ohne Diskette von einer SCSI-Platte booten. Der Atari ST bedient so bis zu zwei SCSI-Geräte und darf deren erweiterte Kommandos benutzen, so daß man auch Tape-Streamer, Scanner oder Wechselplatten einsetzen kann (entsprechende Treiber-Software vorausgesetzt). Alternative Betriebssysteme und Emulatoren wie RTOS-UH/PEARL, OS-9, PC-Ditto, PC-Speed, Supercharger, Aladin oder Spectre können mit ihren Atari-kompatiblen Winchester-Treibern ohne Änderungen auf die Festplatte zugreifen.

Zur Wahl: SCSI oder OMTI

Der SCSI-Adapter teilt sich wie die ALIA-Lösung aus c't 1/89 eine Europaplatine mit einem DMA-Port-Buffer und vier Link-Anschlüssen, die eine Transputerkarte oder ein Transputernetz mit dem Atari ST verbinden. Wer mit solch avantgardistischen Kapriolen nichts am Hut hat, kann auch eine verkürzte Platine (Format 67 × 100 mm) betreiben, die nur die SCSI-Steuerlogik und den DMA-Buffer enthält. Entsprechendes gilt übrigens ebenso für den Link-Adapter aus Heft 1/89, der eigentlich die veraltete `c't-Billiglösung´ zum Anschluß von OMTI-Controllern ablösen sollte. Aber anscheinend haben viele Leser vor lauter Transputer-Links den XT-Slot nicht bemerkt ...

minpic02.jpg

Jetzt auch für SCSI-Platten: Der abgebildete Schaltungsteil ersetzt in der ALIA-Schaltung aus c't 1/89 den DMA-Adapter mit `OMTI-Slot´.

Um es also noch einmal ganz deutlich zu machen: Künftig stehen zwei c't-Vorschläge zum Anschluß von Festplatten an den Atari ST zur Wahl. Der DMA-XT-Adapter ermöglicht den Betrieb eines OMTI-Controllers 5520 oder 5527 für XT-Computer mit dazu passender Festplatte (baugleiche Controller aus Fernost sind jetzt als `OMTI-Kompatible´ wieder erhältlich). Diese Lösung erfordert ein eigenes Treiberprogramm. Der DMA-SCSI-Adapter dagegen läuft auch mit der Original-Treibersoftware von Atari und mit kompatiblen Treibern alternativer Betriebssysteme. Beide c't-Adapter können wahlweise mit Transputer-Links kombiniert werden.

Links am ST

Der Schaltungsteil mit den Transputer-Links entspricht bis auf eine kleine Korrektur dem in [1] abgebildeten Schaltplan und wird deshalb nicht noch einmal abgedruckt. Korrigiert wurde ein Fehler bei den Aalener Link-Anschlüssen. Dort habe ich nämlich leider die Abschlußwiderstände der Eingänge vertauscht. Richtig ist es so: Die positive Seite des Differenzeingangs soll über 1 kOhm auf Masse liegen, die negative über 1 kOhm auf +5 V. Der Dreher spielt aber nur in gewissen Situationen eine Rolle, wenn etwa zwei Geräte mit Aalener Link in falscher Reihenfolge eingeschaltet werden. Dann kann es sein, daß ein Gerät Datenmüll empfängt, weil die Link-Verbindung durch die vertauschten Widerstände auf Aktivpegel liegt. Steht die Verbindung aber erst einmal, dann stören die falschen Abschlüsse nicht weiter.

Links sind die bis zu 20 MBaud schnellen seriellen Schnittstellen, über die Transputer untereinander oder mit anderen Rechnern kommunizieren. Der Aalener Link-Anschluß ist eine von der DOIT (Deutsche Occam Interessengemeinschaft der Transputeranwender) auf einem Treffen in Aalen genormte Verbindung. Zur Übertragung der Daten werden hierbei Differential-Treiber und -Empfänger benutzt, die selbst bei höchster Übertragungsrate Kabellängen von einigen Dutzend Metern erlauben. Derjenige, der sich jetzt für den `linken Teil´ interessiert, kann darüber alles in der früheren Veröffentlichung [1] nachlesen. Die in diesem Zusammenhang bereits vorgestellte XBIOS-Erweiterung zum Betrieb der Links ist unverändert nutzbar.

DMA-Port-Puffer

Auch die Schaltung des DMA-Puffers ist bis auf kleine Details mit der Schaltung aus [1] identisch, so daß die erneute Besprechung hier entfallen kann. Aufgrund des kritischen Timings und der nicht ganz `stubenreinen´ Signale am Atari-DMA-Port wurde ein kleiner Kondensator (C6) in die NotAck-Leitung eingefügt. Er bildet zusammen mit dem Dämpfungswiderstand R41 ein RC-Glied, das sehr kurze Spikes (ca. 1 ns) des Atari-DMA-Chips unterdrückt. Diese offensichtlich von einem Designfehler herrührenden Nadelimpulse könnten ansonsten den DMA-Transfer stören.

minpic03.jpg

Für Transputer- oder Netzwerkanwendungen: wahlweise als Europakarte mit vier `Aalener Links´

minpic04.jpg

Zwei SCSI-Geräte können an den SCSI-Adapter angeschlossen werden.

Einen ähnlichen Zweck erfüllt das LC-Glied L1/C5, das den Video-Shifter im Atari vor einem ungewollten Reset schützt. Dieser Baustein reagiert mit üblem Bildschirm-Geflimmer sehr allergisch (Designfehler!) auf minimale Spikes und Störungen auf der NotRes-Leitung. Die beiden Kondensatoren C5 und C6 stehen deshalb aus denselben Gründen dem OMTI-Adapter aus [1] auch nicht schlecht. Grundsätzliche Erläuterungen zur Funktion des DMA-Ports finden Sie in der c't-Kartei [4].

Eine eher marginale Änderung betrifft das Platinen-Layout; wegen der etwas beengteren Platzverhältnisse mußten die beiden D-Sub-Buchsen, die auf dem ALIA mit OMTI-Slot vorhanden sind, bei diesem Entwurf entfallen. Der Anschluß an die DMA-Port-Buchse erfolgt also über die Pfostenleisten und Flachbandkabel. Da die Karte in den meisten Fällen samt Festplatte in ein Gehäuse verfrachtet werden dürfte, ist diese Lösung ohnehin die flexiblere.

SCSI adaptiert

Der SCSI-Adapter-Teil setzt sich aus den beiden negierenden Daten-Latches 74ALS576 (IC21) und 74ALS580 (IC22), dem negierenden Treiber 74ALS540 (IC23), dem zusätzlichen SCSI-Steuerungslatch 74LS273 (IC20) und dem PAL 16L8 (IC19) zusammen. Mechanisch besteht der SCSI-Anschluß aus einem 50poligen Pfostenstecker, an den ein Flachkabel mit Schneidklemmverbinder angeschlossen wird. Alle Pins mit ungeraden Nummern, mit Ausnahme von Pin 25, liegen auf Masse, um die Adern untereinander abzuschirmen. Acht Datenleitungen nebst Parity-Bit und neun Steuerleitungen mit negativer Logik bilden den eigentlichen SCSI-Bus [5]. Die Parity-Option wird allerdings in dieser Schaltung wegen des sonst unvertretbar hohen Aufwands nicht genutzt.

Alle Daten- und Steuerleitungen des SCSI-Bus müssen an beiden Enden durch Widerstände von 330 Ohm gegen Masse und 220 Ohm gegen +5 V abgeschlossen sein; beim SCSI-ALIA erfolgt dies mit den Widerstandsarrays RN1 bis RN4, SCSI-Platten enthalten meist steckbare Arrays. Damit ist gewährleistet, daß die Leitungen korrekt terminiert sind und auf inaktivem Pegel liegen, wenn kein Gerät auf den Bus zugreift. Die TermPwr-Leitung versorgt die Abschlußwiderstände am Ende der Gerätekette mit Spannung, so daß eine Übertragung auch dann funktioniert, wenn das letzte Gerät am Bus gar nicht eingeschaltet ist.

PAL-Akrobatik

Zwei PALs übernehmen die wichtigsten logischen Steueraufgaben sowohl für den SCSI- als auch für den Link-Adapter-Teil der Schaltung. Ein paar kleine Tricks ermöglichen sogar die Implementierung von Flipflop-Logik in den ansonsten rein kombinatorischen PALs 16L8 und 20L8. Zum Verständnis der Logik möchte ich zunächst den gesamten Ablauf beim Zugriff auf ein SCSI-Gerät beschreiben.

Im Ruhezustand (bus free phase) liegen NotBsy und NotSel auf logisch 1. Geräte, die über den Bus auf andere zugreifen wollen (sogenannte Initiatoren), müssen sich zunächst in einer Schlichtungsphase (arbitration phase) einigen, wer als erster an den Bus darf. In der SCSI-Hierarchie steht das Gerät mit der Adresse 7 ganz oben, die letzte Stufe belegt Gerät 0.

Erkennt ein Initiator am Zustand der Datenleitungen, daß ein anderer mit höherer Priorität einen Zugriff versucht, muß er weichen und seine Signale wieder vom Bus nehmen. Anderenfalls hat er freie Bahn und kann sich seinen Kommunikationspartner (Target) in der Selektionsphase aussuchen. Diese Phase leitet er mit dem Setzen von NotSel auf log. 0 ein. Das gewünschte Zielgerät wiederum wird durch Aktivieren einer der Adresse entsprechenden Datenleitung bestimmt. Die Adresse des Initiators bleibt in dieser Phase auf dem Bus stehen.

Die Beschreibung dieser beiden ersten Phasen eines Zugriffes genügt normalerweise zur Abschreckung und verdeutlicht die Komplexität dieser Schnittstelle. Von einem (unintelligenten) SCSI-Adapter an dem einfach strukturierten DMA-Port darf man daher keine Wunder erwarten. Eine vollständige Implementierung wäre nur mit einem zusätzlichen SCSI-Controller wie etwa dem NCR 5380 möglich; der Preis der Schaltung würde damit jedoch unnötig in die Höhe getrieben, und die Kompatibilität zur Atari-Harddisk wäre dahin. Dennoch konnte ich einige schmerzliche Einschränkungen, die beim originären Atari-Adapter gegeben sind, überwinden; doch dazu später mehr.

Zunächst zu den Dingen, die nicht gehen: Der SCSI-ALIA unterstützt kein Multi-Initiator-System; der ST ist immer der Initiator. Es lassen sich nicht mehr als zwei Geräte (Targets) adressieren, und sogenannte Messages und damit verwandte Funktionen fallen auch flach. Messages sind übrigens kleine Datenblöcke, die jedes Gerät am SCSI-Bus zu Abstimmungszwecken jederzeit über den Bus schicken kann.

Target, bitte melden ...

Da der Atari ST mit SCSI-Adapter alleiniger Initiator im System ist, entfällt die Schlichtungsphase, und ein Zugriff beginnt mit der Selektionsphase. Der ST zeigt deren Beginn mit den Signalen A1 und NotSel auf log. 0 am DMA-Port an. Das bewirkt, daß RSel ebenfalls auf 0 geht und damit das am Datenbus anliegende Bitmuster in einem Latch vom Typ 74LS273 (IC14) gespeichert wird. Die drei höchstwertigen Bits repräsentieren die DMA-Geräte-Adresse.

Weil der SCSI-ALIA immer zwei Adressen belegt (eine für den Link-Adapter, die andere für den SCSI-Adapter), sind nur zwei Steckbrücken nötig, um die Geräte-Adresse einzustellen; dies sind die Jumper J21 und J22. Zwischen Link- und SCSI-Zugriff wird durch das höchste Bit, D7, unterschieden: eine `1´ adressiert die Links, eine `0´ den SCSI-Bus.

Ist D7=0 und stimmen D5 und D6 mit der eingestellten Adresse überein, geht das Signal SAkt (SCSIAktiv) auf log. 1. Das löst dann durch eine Verknüpfung im PAL 16L8 die Aktivierung des Signals NComE (NotCommandEnable) aus. NComE bleibt durch Rückkopplung auf sich selbst, eine sogenannte `Selbsthaltung´, in diesem Zustand, bis das erste Kommando-Byte zum SCSI-Gerät übertragen worden ist.

NComE liegt an einem der beiden Freigabeeingänge des Treibers 74ALS540 (IC23). Dieser wird aber erst `eingeschaltet´, um das erste Kommando-Byte zu übertragen, wenn das Zielgerät dies mit NSReq (NotSCSIRequest) anfordert.

Durch die Selbsthaltung des NComE-Signals `merkt sich´ der Adapter die Selektierung bis zum Abschluß der vorangehenden Übertragung. Manchmal folgen nämlich die Befehle an ein SCSI-Gerät zu schnell aufeinander, und kann es passieren, daß das adressierte Gerät den Bus mit NBsy=1 noch nicht wieder freigegeben hat; dann würde der folgende Befehl ignoriert werden. Dieses Problem trat bei einem Prototyp des Adapters insbesondere mit dem neuen Atari-Festplatten-Manager HDX V3.0 auf und konnte durch den Trick mit der Zwischenspeicherung teilweise gelöst werden.

Gibt das SCSI-Gerät den Bus mit NBsy=1 (NotBusy) frei, so wird NSSel aktiviert. Gleichzeitig selektiert das PAL IC19 entsprechend der an SelI0 anliegenden Adresse über einen der Ausgänge SelO0 und SelO1 eines der zwei möglichen Geräte. Das Eingangssignal stammt aus dem Latch IC20.

Wie schon erwähnt, wird ein SCSI-Gerät in der Selektionsphase nicht durch einen Binärcode adressiert, sondern durch `Ziehen´ an einer der Adresse entsprechenden Datenleitung. Deshalb können, weil keine weiteren PAL-Ausgänge mehr frei sind, an den SCSI-ALIA `nur´ bis zu zwei Geräte angeschlossen werden. Verglichen mit dem Atari-Adapter, der nur einen Controller bedienen kann, ist das aber immerhin eine Verdopplung der Möglichkeiten; und notfalls lassen sich mehrere SCSI-ALIAs hintereinanderschalten.

Durch die Selektierung fühlt sich nun hoffentlich ein Zielgerät angesprochen und fordert mit NSReq=0 (NotSCSIReq, NotReq am SCSI-Bus) sein erstes Kommando-Byte an. Dieses Byte kann aber nicht direkt vom DMA-Port übernommen werden, weil in den oberen drei Bits die DMA-Adresse steht. Bei der Atari-Lösung werden diese Bits auf 0 gesetzt. Dadurch schränkt man aber die Möglichkeiten des Adapters stark ein, weil nur Kommandos mit den Nummern von 0 bis 31 gesendet werden können, die übrigen (ab Gruppe 2) jedoch nicht. Daher habe ich dem SCSI-ALIA den schon erwähnten Extratreiber IC23 spendiert, der jetzt durch seine beiden Freigabeeingänge (NComE=0, NSReq=0) aktiviert ist. Die oberen drei Bits kommen aus dem Latch IC20 und können somit frei bestimmt werden. Das bedeutet: alle SCSI-Kommandos stehen zur Verfügung.

Das Anliegen des ersten Bytes wird vom ALIA-SCSI durch NSAck=0 (NotAck am SCSI-Bus) bestätigt. NotAck hält sich so lange, bis NotReq und NComE desaktiviert sind (Flipflop-Funktion). Damit wären die Selektierung und die Übertragung des ersten Kommando-Bytes abgeschlossen. Na, mitgekommen ?

Byte traffic

Der SCSI-Datenverkehr läuft über die beiden invertierenden Datenlatches 74ALS580 (IC22) und 74ALS576 (IC21). IC21 ist für das Lesen zuständig und arbeitet flankengesteuert: unmittelbar nachdem der Atari ST den Erhalt der Daten mit NotSel oder NotAck bestätigt hat, kann das sendende Gerät das Bitmuster wieder vom Datenbus nehmen. Ähnliches gilt für die Ausgabe, wenn auch die Daten vom DMA-Port zu Anfang noch nicht so stabil sind; sie bleiben jedenfalls über das Signal LatchE hinaus bereitgestellt, bis NSReq (NotReq am SCSI-Bus) zurückgenommen wird.

Leider entspricht das Handshaking, also das `Abklatschen´ der einzelnen Bytes, nicht ganz dem asynchronen Verfahren des SCSI-Bus. Der DMA-Chip des ST läßt die Signale NotSel für den Einzel-Byte-Modus und NotAck für den DMA-Betrieb nur für eine bestimmte Zeitspanne aktiv (etwa 250 ns) und wartet nicht, bis die Anforderung NotReq zurückgenommen wird. Die oben beschriebene Zwischenspeicherung in den Latches und die künstliche Verlängerung von NSAck (NotAck am SCSI-Bus) sollen dieses Manko beheben.

Wenn das erste Kommando-Byte automatisch nach der Selektierung übertragen worden ist, folgen die restlichen im Einzel-Byte-Modus. Sie werden ebenfalls durch das Signal NotReq (NSReq) angefordert, das auf den Interrupt-Eingang NInt des DMA-Ports geleitet wird. Die Software prüft, ob NInt aktiv ist; falls ja, wird das nächste Byte ausgegeben. Dies wiederholt sich, bis das Kommando komplett ist, was das SCSI-Gerät durch Setzen von DNotC (DNotC=0) anzeigt. Danach geht´s im DMA-Modus weiter: NotReq des SCSI-Anschlusses wird auf den gleichnamigen Pin des DMA-Ports gelegt, und der DMA-Chip erledigt flugs jede Anforderung. Jedes Lesen oder Schreiben eines Bytes wird durch NotAck (NotAck=0) quittiert.

Das dicke Ende ...

Am Ende eines Zugriffes stellt jedes SCSI-Gerät ein Statusbyte bereit, das angibt, ob das Kommando erfolgreich ausgeführt worden ist. Die Statusphase wird mit CnotD=1 und INotO=0 angezeigt. Diese Signalkombination löst wiederum einen Interrupt am DMA-Port aus, der der Software die Bereitstellung des Statusbytes signalisiert. Ist dieses gelesen, sendet das Target eine Message von wiederum einem Byte, die das Ende eines Zugriffs anzeigt. Da dieses Byte aus `00´ besteht, wird die Übertragung gleich vom PAL 16L8 selbständig bestätigt.

Inbetriebnahme

Hinweise für den Aufbau und Test des Link-Adapter-Teils Platine finden Sie in [1]. Für den ersten Test des SCSI-Adapters (nach sorgfältiger Sichtkontrolle der Lötergebnisse) sollte man auf jeden Fall alle anderen DMA-Geräte und auch die neuen SCSI-Geräte abklemmen. Funktioniert der Computer wie gewohnt, kann man den zweiten Schritt mit angeschlossenem SCSI-Gerät wagen.

Bei diesen Tests sollten Sie insbesondere auf einen einwandfreien Floppy-Betrieb achten. Die Diskettenlaufwerke werden nämlich ebenfalls über den DMA-Chip gesteuert, und die gemeinsamen Datenleitungen liegen ungepuffert am DMA-Port. Nun ist es schon passiert, daß durch einen defekten Adapter oder falsche Verdrahtung des Anschlußkabels bei einem Schreibvorgang wichtige Daten auf der Diskette zerstört wurden. Deshalb lieber einen Schreibtest mit einer leeren Diskette durchführen.

Ist der Adapter geprüft und für einwandfrei befunden, können Sie (fast) alle Vorteile der intelligenten SCSI-Geräte nutzen. An erster Stelle steht natürlich der Anschluß von SCSI-Festplatten, die meist schneller und besser ausgestattet sind als die herkömmlichen Harddisk-Controller-Kombinationen.

Infolge der erwähnten Abweichungen vom Standard kann ich allerdings nicht garantieren, daß jedes beliebige SCSI-Gerät problemlos an dem Adapter betrieben werden kann. Wer nicht zufällig die Möglichkeit zum kostenlosen Ausprobieren geboten bekommt, sollte sich zunächst an die Empfehlungen halten, die in den nächsten c't-Ausgaben noch ergänzt werden.

Beim Anschluß von SCSI-Geräten muß man darauf achten, daß die SCSI-Adresse stimmt und die Parity-Option abgeschaltet ist. Diese Dinge lassen sich meistens durch vier benachbarte Jumper auf dem Controller erledigen. Sorgen Sie auch für die korrekte Einstellung der DMA-Controllernummer durch die beiden Jumper auf der Adapter-Platine.

Und die Software?

Die in der Liste aufgeführten Festplatten laufen mit dem Original-Treiberprogramm von Atari, doch nicht alle Modelle lassen sich mit der Atari-Software formatieren. Wer eine der Seagate-Platten einsetzen will, braucht nur die Datei WINCAP des Atari-Formatierprogramms (HDX.PRG) anzupassen, und schon geht´s los.

Schwierigkeiten bereiten ältere Programmversionen (<3.0): Der Befehlssatz des von Atari eingesetzten Adaptec-SCSI-Controllers ist nämlich nicht vollständig kompatibel zu den üblichen Kommandos. Problempunkt ist das Mode Select Command, das dem Adaptec-Controller die physikalischen Daten der angeschlossenen Platte mitteilt. Die modernen SCSI-Laufwerke mit integriertem Controller kennen diese Daten schon und müssen den Befehl nicht erhalten, zudem ist das Befehlsformat ein anderes. Dies führt dazu, daß das HDX.PRG jedesmal eine Fehlermeldung erhält und die Formatierung abbricht.

Dies kann man aber durch einen kleinen Patch verhindern. Man muß nur in HDX.PRG mit einem Disketten-Monitor die Byte-Folge 80 BC 00 15 00 8A durch 80 BC 00 08 00 8A ersetzen. Dann erhält die SCSI-Festplatte statt des Kommandos Mode Select einen Lesebefehl. Dieser Lesebefehl soll nur die Software zufriedenstellen und gibt keine Fehlermeldung zurück. Schon formatiert HDX.PRG auch fremde Platten.

Bei der Anpassung der WINCAP-Datei ist zu beachten, daß alle SCSI-Platten Platz zur Verwaltung defekter Spuren benötigen. Die Atari-Software errechnet aus den physikalischen Daten die Kapazität für die Partitionierung; deshalb müssen diese Werte entsprechend vermindert werden, damit einige Datensektoren frei bleiben. Faustregel: teilen Sie die vom Hersteller angegebene Anzahl von logischen Sektoren durch die Anzahl der Köpfe und der Sektoren pro Spur und setzen Sie das abgerundete Ergebnis als Zylinderzahl ein.

Bei der neuen Version 3.0 der Atari-Festplattensoftware gibt es dieses Problem nicht, weil eine neue Option zum Abschalten des Mode Select Command eingeführt wurde (siehe Beispieldatei). Offenbar hatte Atari mit dem SCSI-Wechselplattenlaufwerk von Syquest in der Megafile 44 dieselben Schwierigkeiten. Setzt man diese Option ein, muß man sich auch keine Sorgen mehr um die korrekte Anzahl der Sektoren machen. Die fragt HDX nämlich per Mode-Sense-Kommando automatisch ab.

Verfügen Sie nicht über den Atari-Treiber, benutzen Sie eine Quantum-Platte oder wollen Sie weitere Möglichkeiten des SCSI-ALIA nutzen, so benötigen Sie die Diskette `SCSI-ALIA-Treiber´, die in Kürze bei der eMedia-GmbH erhältlich sein wird. Der gesamte Quellcode der in Modula geschriebenen Programme ist auf der Diskette enthalten. Mit Hilfe der grundlegenden Module ist dann auch die Anpassung an andere SCSI-Geräte möglich.

Was bringt die c't-SCSI-Lösung im Vergleich zu anderen? Die Antwort hängt wesentlich von der Wahl des Laufwerks ab: Vergleicht man die Atari-Festplatte SH205 und einen SCSI-ALIA mit Seagate ST157N-0 (dem langsamsten Laufwerk dieser Baureihe), so liegt der SCSI-ALIA beim Lesen eines konkreten Files schon mit rund 150 KByte/s Vorsprung vorn. Die Testergebnisse einiger im Handel befindlicher Fertiglösungen (siehe Bericht in dieser Ausgabe) zeigen, daß mit schnelleren Platten noch bessere Transferraten zu erzielen sind. So schafft der SCSI-ALIA mit der Quantum P40S sogar 197 KByte/s beim Schreiben und 454 KByte/s beim Lesen von Dateien. (cp)

Literatur
[1] Helge Schulz, EingekLinkt, Teil 1: Link-Adapter mit `OMTI-Slot´ für Atari ST, c't 1/89, S. 124

[2] Helge Schulz, EingekLinkt, Teil 2: Programmierung des Atari-Link-Adapters, c't 2/89, S. 174

[3] Helge Schulz, EingekLinkt, Teil 3: Software für OMTI- Controller, c't 3/89, S. 224

[4] Max Böhm, Der DMA-Port des Atari ST, c't 3/88, S. 265

[5] Hans Müller, SCSI - schnell und intelligent, c't 8/87, S. 183

Kasten 1


Stückliste

(ohne Link-Baugruppe)

Halbleiter, ICs

IC11 PAL20L8 (progr.)

IC12 74LS245

IC13 74LS05

IC14, 15 74LS273

IC16 74F138

IC17 74F08

IC18 74F244

IC19 PAL16L8 (progr.)

IC20 74LS273

IC21 74ALS576

IC22 74ALS580

IC23 74ALS540

LED

Kondensatoren

5 × CB ungepolt 100 nF

1 × CB gepolt 10 µF tantal

C5 56 pF

C6 33 pF

Widerstände

RN1 Array 8 × 220 Ohm

RN3 Array 9 × 220 Ohm

RN2,

RN4 Array 8 × 330 Ohm

R33 ... R36 2,2 kOhm

R37 470 Ohm

R38 ... R41 68 Ohm

Diverses

L1 68µH Miniaturdrossel

brechbare Pfostensteckerleisten für Jumper J21, J22

2 × 20poliger, 1 × 50poliger Platinenverbinder für Flachbandkabel

2 Lötnägel (1 mm)

Platine DMA-SCSI-Adapter oder ALIA-SCSI (mit Transputer-Links)

Kasten 2


Zwei PALs enthalten (fast) die gesamte Schaltungslogik.

                           PAL20L8
ATARI-LINKADAPTER-SCSI PAL: ALIA V4.0
PAL20L8
                        _____    _____
                        |    \__/    |
       Input     LNOTS -|  1      24 |-     VCC
       Input   SORLAKT -|  2      23 |-     BA1  Input
       Input     INTE1 -|  3      22 |-     INT  three out
       Input    /BNACK -|  4      21 |-   DATAE  three I/O
       Input     INTE0 -|  5      20 |-     RWE  three I/O
       Input     INTE2 -|  6      19 |-    NINT  three I/O
       Input   STOPDMA -|  7      18 |-     DRQ  three I/O
       Input    /NSREQ -|  8      17 |-    RSEL  three I/O
       Input     DNOTC -|  9      16 |- NDMASEL  three I/O
       Input    /NLINK -| 10      15 |-  LATCHE  three out
       Input    BRNOTW -| 11      14 |-  /BNSEL  Input
                   GND -| 12      13 |- /NERROR  Input
                        |____________|
Atari-Linkadapter-SCSI PAL: ALIA V4.0
Helge Schulz, 17.11.89

;Pins
LNotS SOrLAkt IntE1 /BNAck IntE0 IntE2 StopDma /NSReq DNotC /NLink BRNotW Gnd
/NError /BNSel LatchE NDmaSel RSel Drq NInt RWE DataE Int BA1 Vcc

;Boolean Equations

/Int     =    NInt;

/NInt    =    NSReq   * /IntE2   * /IntE1 * /IntE0 * /DNotC
           +  NError  * /IntE2   * /IntE1 *  IntE0
           +  NLink   * /IntE2   *  IntE1 * /IntE0
           +  NSReq   * /IntE2   *  IntE1 *  IntE0
           +  NSReq   *  IntE2   * /IntE1
           +  StopDma *  IntE2   *  IntE1;

/Drq     =    IntE2   *  /NLink
           +  IntE2   *  StopDma
           +  IntE2   * /LNotS
           +  IntE2   * /SOrLAkt
           + /IntE2   * /NSReq
           + /IntE2   * /DNotC
           + /IntE2   * /DataE;

/DataE   = /DataE * NSReq
           +  BNSel
           +  BNAck;

/LatchE   =    /BNSel * /BNAck * /NSReq
           +   /BNSel * /BNAck * BRNotW;

/RWE     =    SOrLAkt *  BRNotW  * BA1;

/RSel    =   /BNSel
           +  BRNotW
           +  BA1;

/NDmaSel =    SOrLAkt *  LNotS * BA1 * BNSel
           +  SOrLAkt *  LNotS * BA1 * BNAck;

;End


                           PAL16L8
ATARI-LINKADAPTER-SCSI PAL: SCSI V2.0
                        _____    _____
                        |    \__/    |
       Input    BRNOTW -|  1      20 |-     VCC
       Input        NC -|  2      19 |-    NINE  three out
       Input     /NBSY -|  3      18 |-   SELO0  three I/O
       Input     SELI0 -|  4      17 |-   SELO1  three I/O
       Input     /NMSG -|  5      16 |-   NSACK  three I/O
       Input      SAKT -|  6      15 |-   NSSEL  three I/O
       Input    /NSREQ -|  7      14 |-  BNSREQ  three I/O
       Input      RSEL -|  8      13 |-   NCOME  three I/O
       Input     DATAE -|  9      12 |-   NOUTE  three out
                   GND -| 10      11 |-   INOTO  Input
                        |____________|

PAL16L8
Atari-Linkadapter-SCSI PAL: SCSI V2.0
Carsten Meyer, Helge Schulz, 12.11.89

;Pins
BRNotW  nc   /NBsy SelI0 /NMsg SAkt /NSReq RSel DataE Gnd
INotO NOutE NComE BNSReq NSSel NSAck SelO1 SelO0 NInE Vcc

;Boolean Equations

IF (/NSSel)  /SelO0 =  /SelI0;

IF (/NSSel)  /SelO1 =   SelI0;

/NSSel   =   /NComE  * /NBsy   * /NSReq;

/NSAck   =   /NSAck  * /NComE
           + /NSAck  * /DataE
           + /NSAck  *  NSReq
           + /NComE  * /BNSReq
           +  NMsg   *  NBsy   *  NSReq
           + /DataE  *  NBsy   *  NSReq

/NComE   =   /NComE  *  SAkt   * NSReq
           + /NComE  *  SAkt   * NSAck
           +  RSel   * /NSReq  * SAkt  * NSAck;

/NOutE   =    INotO  *  NComE  *  NBsy;

/NInE    =   /INotO  *  BRNotW *  NBsy;

/BNSReq  =    NSReq  *  NBsy;

;End

Kasten 3


Erprobte SCSI-Geräte

Seagate ST125N

Seagate ST157N

Quantum P40S *

Quantum P80S *

* nicht mit HDX.PRG formatierbar

Kasten 4


Vier mögliche Kombinationen von Controller-Nummern lassen sich mit J21 und J22 einstellen.

Controller-Nummern
SCSI 0 1 2 3
Links 4 5 6 7
J21 1-2 2-3 1-2 2-3
J22 1-2 1-2 2-3 2-3

Kasten 5


So muß die WINCAP-Datei aussehen, wenn ein ST157-Laufwerk mit dem einer älteren Version der Originalsoftware von Atari betrieben werden soll.

# Datei WINCAP für altes Atari HDX.PRG (Version<3.0)
# 
# Globale Parameter:
#       ms#Anzahl       Maximale Anzahl von Sektoren pro Partition
#                       (nicht ändern !)
#
:@@=Parameters:ms#32752:

#
# Formatier Parameter:
#   Parameter für die verschiedenen Platten (Standartwert in []):
#       mn=Name         Name der Platte im Menü
#       hd#Anzahl       Anzahl der Köpfe [4]
#       cy#Anzahl       Anzahl der Zylinder [612]
#       lz#n            Landezone [10]
#       rt#n            Spurwechselcode [2]
#       in#n            Sektorversatz (Interleave) [1]
#       rw#Zylinder     Reduzierter Schreibstrom ab Zylinder [cy+1]
#       wp#Zylinder     Schreibprecompensation ab Zylinder [cy+1]
#       pt=Name         Name auf standard Partitionierung [4-6-10]
#       sp#Anzahl       Anzahl der Sektoren pro Spur [17]
#       dp#Wort         Test Wort (16 Bit) zum Testen
#
#  Defektlisten Paramter
#       sl#Anzal        Anzahl der Sektoren für Defektliste [1]
#

46 MB:mn=ST157N:hd#6:cy#609:in#1:pt=15-15-15:sp#26:dp#0x6333:

#
# Partitionierungs Einträge
# '?0' Einträge (? ist eine Ziffer,'N' ist '0', '1', '2' oder '3'):
#       pr=Name         Name der Partitionierung
#       pN#Größe        Größe der Partition N [0]
#       fN#Zahl         Flag Byte für Partition N 
#                       [0 wenn kein pN, sonst 1]
#       iN=ccc          Kennbyte für Partition N [GEM]
#
# Die Größe ist in KB angegeben, wenn 'k' folgt, in MB, 
# wenn 'm' folgt, und sonst in Bytes.
#

:pr=15-15-15:p0#15m:p1#15m:p2#15m

Kasten 6


Ab Version 3.0 läßt sich das störende Mode-Select-Kommando abschalten. Die WINCAP-Datei hat dann diese Form.

# Datei WINCAP für neues Atari HDX.PRG (Version 3.0 !)
#
# Globale Parameter:
#       ms#Anzahl       Max. Anzahl von Sektoren pro Partition
#                       (nicht ändern !)
#
:@@=Parameters:ms#32752:

#
# Formatier Parameter:
#   Parameter für die verschiedenen Platten (Standardwert in []):
#       mn=Name         Name der Platte im Menü
#       hd#Anzahl       Anzahl der Köpfe [4]
#       cy#Anzahl       Anzahl der Zylinder [612]
#       lz#n            Landezone [10]
#       rt#n            Spurwechselcode [2]
#       in#n            Sektorversatz (Interleave) [1]
#       rw#Zylinder     Reduzierter Schreibstrom ab Zylinder [cy+1]
#       wp#Zylinder     Schreibprecompensation ab Zylinder [cy+1]
#       pt=Name         Name von standard Partitionierung [4-6-10]
#       sp#Anzahl       Anzahl der Sektoren pro Spur [17]
#       dp#Wort         Test Wort (16 Bit) zum Testen
#       br=id           Identifikation für weitere Platten
#       md#n            Flag für Ausführung von "Mode Select" [1]
#                       (1: ausführen; 0: nicht ausführen)
#
#  Defektlisten Paramter
#       sl#Anzal        Anzahl der Sektoren für Defektliste [1]
#

XX MB :mn=ALIA-SCSI:br=AS:
60 MB :mn=MEGAFILE 60:br=M6:
44 MB :mn=MEGAFILE 44:md#0:pt=11-11-11-11:dp#0x6333:
30 MB :mn=MEGAFILE 30:cy#615:rw#615:wp#615:pt=10-10-10:sp#26:dp#0x6333:
20 MB :mn=MEGAFILE 20:dp#0x6CDB:
20 MB :mn=SH205:dp#0x6CDB:
20 MB :mn=SH204:dp#0x6CDB:
10 MB :mn=SH104:hd#2:pt=10:dp#0x6CDB:

#
# Daten für weitere Platten-Bezeichnungen (siehe br=id) 
#

:AS=ST157N:md#0:pt=12-12-12-10:dp#0x6333:

:M6=MCS5068:hd#5:cy#1024:rw#1024:wp#1024:sp#26:pt=16-16-16-16:dp#0x6333:
:M6=MSB5064:hd#6:cy#809:rw#809:wp#809:sp#26:pt=15-15-15-15:dp#0x6333:
:M6=SEA5065:hd#6:cy#820:sp#26:pt=15-15-15-15:dp#0x6333:
:M6=NO LABEL:hd#6:cy#809:rw#809:wp#809:sp#26:pt=15-15-15-15:dp#0x6333:

#
# Partitionierungs Einträge
# '?0' Einträge (? ist eine Ziffer,'N' ist '0', '1', '2' oder '3'):
#       Größe=Name      Größe in MB = Name der Partitionierung
#       pN#Größe        Größe der Partition N [0]
#       fN#Zahl         Flag Byte für Partition N 
#                       [0 wenn kein pN, sonst 1]
#       iN=ccc          Kennbyte für Partition N [GEM]
# Die Größe ist in KB angegeben, wenn 'k' folgt, in MB, 
# wenn 'm' folgt und sonst in Bytes.
#

:65=16-16-16-16:p0#16640k:p1#16640k:p2#16640k:p3#16640k:
:65=12-12-20-20:p0#12480k:p1#12480k:p2#20800k:p3#20800k:
:65=10-15-15-24:p0#10400k:p1#15600k:p2#15600k:p3#24960k:
:65=10-10-44:p0#10400k:p1#10400k:p2#45760k:
:65=30-34:p0#31200k:p1#35360k:
:62=15-15-15-15:p0#15990k:p1#15990k:p2#15990k:p3#15990k:
:62=14-14-16-16:p0#14924k:p1#14924k:p2#17056k:p3#17056k:
:62=10-10-20-20:p0#10660k:p1#10660k:p2#21320k:p3#21320k:
:62=5-10-15-30:p0#5330k:p1#10660k:p2#15990k:p3#31980k:
:61=15-15-15-15:p0#15775k:p1#15775k:p2#15775k:p3#15775k:
:61=12-16-16-16:p0#13974k:p1#16376k:p2#16376k:p3#16376k:
:61=14-14-16-16:p0#15175k:p1#15175k:p2#16376k:p3#16376k:
:61=16-16-14-14:p0#16376k:p1#16376k:p2#15175k:p3#15175k:
:46=12-12-12-10:p0#12083k:p1#12083k:p2#12083k:p3#10071k:
:46=10-15-11-10:p0#10069k:p1#15104k:p2#11076k:p3#10071k:
:46=5-31-10:p0#5034k:p1#31215k:p2#10071k:
:46=10-36:p0#10069k:p1#36251k:
:46=46:p0#46320k:
:42=10-10-12-12:p0#9852k:p1#9852k:p2#11823k:p3#11823k:
:42=6-6-16-16:p0#5911k:p1#5911k:p2#15764k:p3#15764k:
:42=6-6-32:p0#5911k:p1#5911k:p2#31528k:
:42=4-10-15-15:p0#3941k:p1#9852k:p2#14778k:p3#14779k:
:42=11-11-11-11:p0#10837k:p1#10837k:p2#10838k:p3#10838k:
:31=10-10-10:p0#10660k:p1#10660k:p2#10660k:
:31=6-8-16:p0#6396k:p1#8528k:p2#17056k:
:31=5-5-10-10:p0#5330k:p1#5330k:p2#10660k:p3#10660k:
:31=4-6-10-10:p0#4264k:p1#6396k:p2#10660k:p3#10660k:
:20=10-10:p0#10404k:p1#10404k:
:20=4-6-10:p0#4424k:p1#6m:p2#10m:
:20=5-5-10:p2#10568k:p0#5m:p1#5m:
:20=10-5-5:p0#10568k:p1#5m:p2#5m:
:20=5-5-5-5:p0#5448k:p1#5m:p2#5m:p3#5m:
:10=10:p0#10m:
:10=5-5:p0#5m:p1#5m:

Kasten 7


Transfergeschwindigkeiten im Vergleich

ALIA-SCSI und ST157N-0 Atari SH205
Lesen (brutto) 500 KByte/s300 KByte/s
Schreiben (netto) 174 KByte/s 96 KByte/s
Lesen (netto) 376 KByte/s 228 KByte/s

(gemessen unter Blitter-TOS)

Kasten 8


Ergänzungen

Inzwischen sind weitere Festplatten an unserem SCSI-Adapter für den Atari ST erprobt worden. Aufgrund der Signalcharakteristik der Atari-DMA-Schnittstelle, die von der SCSI-Norm stark abweicht, und der einfachen, kostensparenden Bauweise des Adapters ist nicht gewährleistet, daß sich beliebige SCSI-Geräte anschließen lassen.

Erprobte SCSI-Platten

voll AHDI-kompatibel:

Seagate ST 125N-0 21 MByte
Seagate ST 125N-1 21 MByte
Seagate ST 157N-0 48 MByte
Seagate ST 157N-1 48 MByte
Seagate ST 1096N 83 MByte
Connor CP 3040 30 MByte

nicht verwendbar: Seagate 225N, 296N, 2106N (Imprimis Line)

Bei Quantum-Festplatten haben sich in einigen Fällen Funktionsstörungen gezeigt, deren Ursache im DMA-Timing des Atari ST liegt. An einer Modifikation des Adapters, die solche Probleme beseitigt, wird gearbeitet. Bis dahin müssen wir leider von der Verwendung abraten.

Ein winziger Eingriff macht den c't-SCSI-ALIA auch für die populäre Seagate-Festplatte ST296N nutzbar: Unterbrechen Sie die Leitung 18 (/DP) des SCSI-Bus, beispielsweise durch Entfernen des betreffenden Pins am 50poligen Pfostenstecker des Adapters. Für den Anschluß von Imprimis- und Quantum-Laufwerken kann leider noch keine Empfehlung gegeben werden.

Einige Rechner verursachen durch ein unsauberes Reset-Signal Probleme beim Booten. In diesen Fällen sollte die Reset-Leitung (Pin 12 des DMA-Ports) abgetrennt werden.

Eine neue PAL-Variante (ALIA 4.4, SCSI 2.3) verbessert nochmals die Kompatibilität unseres SCSI-Adapters für den Atari ST. Alle seither getesteten marktgängigen SCSI-Laufwerke ließen sich ohne Probleme betreiben. Es waren folgende Modelle: Fujitsu M2611SA (Übertragungsrate brutto 597 KByte/s, netto 384 KByte/s schreibend, 454 KByte/s lesend), Seagate ST1162N (729, 412, 609) MiniScribe 8425SA (210, 240, 197), SyQuest SQ555 (505, 347, 473), Rodime RO3088T (836, 444, 713), Rodime RO3128T (709, 487, 564), Ricoh RH5261 (99, 69, 87), Quantum LP52S (1104, 519, 1006). Eine Liste aller bisher getesteten Laufwerke können Sie gegen Rückumschlag bei Fa. eMedia, Hannover, anfordern. Dort sind auch die verbesserten PALs erhältlich.

Mehrere Anwender haben von Problemen zwischen Atari-Laserdrucker SLM 804 und c't-SCSI-Adapter berichtet. Der Logikanalysator im c't-Labor förderte Erstaunliches zutage: Bei angeschlossenem Laserdrucker schaffte es der Adapter nicht, die Interrupt-Leitung des DMA-Ports auf log. 0 zu ziehen. Man muß vermuten, daß das Druckerinterface die Leitung nicht mit Open-Collector-Charakteristik bedient, sondern aufgrund eines Schaltungsfehlers aktiv auf log.1 treibt. Beheben läßt sich der Konflikt ganz einfach durch Einsetzen einer Schottky-Diode am DMA-Port-Output des Adapters (Pin 10, Kathode an Laserdrucker).

Bei dieser Gelegenheit fanden wir auch Mittel heraus, um die in c't 10/91 gemeldeten Probleme mit Conner-Laufwerken CP3040 aus neuerer Produktion zu beseitigen. Betroffene können die Hinweise über die telefonische Hotline der Redaktion (täglich zwischen 13 und 14 Uhr) abrufen. Die Parity-Abschaltung bei Conner-Drives ohne Parity-Jumper kann man jetzt in der Werkstatt des Distributors SYNELEC, München, durchführen lassen.