SCSI-Treiber

Der SCSI-Treiber ist eine offene Software-Schnittstelle (API) für den Zugriff auf beliebige Peripheriegeräte, nicht nur SCSI-Geräte. Auch SATA-Laufwerke für optische Medien wie DVDs und BDs verwenden den SCSI-Kommandosatz. Für andere Hardware-Schnittstellen, z. B. IDE oder USB, lassen sich SCSI-Kommandos emulieren, so wie es HDDRIVER für IDE- und SATA-Festplatten tut. Alles in allem lassen sich mit SCSI-Treibern beliebige SCSI-Kommandos an nahezu beliebige Schnittstellen schicken.
Die Quelltexte für die Software auf dieser Seite sind auf GitHub verfügbar.

HDDRIVERs Nutzung von SCSI-Treibern

Intern besteht HDDRIVER aus zwei Treiber-Schichten: Dem SCSI-Treiber und dem eigentlichen Festplattentreiber. Letzterer greift ausschließlich über den SCSI-Treiber auf Geräte zu. So lassen sich beliebige Geräte-Schnittstellen nahtlos integrieren. Beim SCSI-Treiber kann es sich um einen der in HDDRIVER eingebauten SCSI-Treiber handeln (für ACSI/SCSI/IDE/ATAPI/SATA), um einen SCSI-Treiber eines Drittanbieters, z. B. für USB, oder eine Kombination. Existiert beim Start von HDDRIVER bereits ein SCSI-Treiber für Bus 0 (ACSI), 1 (SCSI) oder 2 (IDE) benutzt HDDRIVER zum Zugriff auf diesen Bus automatisch den bereits vorhandenen SCSI-Treiber statt seines eigenen.
Ein Milan mit PCI-SCSI-Karte stellt ein gutes Beispiel dar: Für SCSI-Zugriffe nutzt HDDRIVER den PCI-SCSI-Treiber des Milan, der bereits beim Start von HDDRIVER verfügbar ist. Für IDE-Zugriffe nutzt HDDRIVER seinen eigenen SCSI-Treiber für Milan IDE/ATAPI/SATA. Bei MagiCMac, MagiCPC, Hatari und ARAnyM ist es ähnlich, vorausgesetzt dass HDDRIVER nach dem SCSI-Treiber für die jeweilige Plattform/Hardware gestartet wird.

Standard-SCSI-Treiber-Schnittstelle

HDDRIVER unterstützt die aktuelle Version 1.01 der SCSI-Treiber-Schnittstelle vollständig. Die Dokumentation ist im ST GUIDE-Format verfügbar und beinhaltet C- und Modula-2-Bindings.

SCSI-Treiber-Dokumentation herunterladen SCSI-Treiber-Dokumentation

Eine kleine Schwachstelle der SCSI-Treiber-Schnittstelle ist die Beschränkung auf die LUNs 0-7 (SCSI-Untereinheiten) pro Gerät, obwohl SCSI (nicht aber ACSI) 32 LUNs erlaubt. Durch eine abwärtskompatible Erweiterung der SCSI-Treiber-Schnittstelle lassen sich mit HDDRIVERs SCSI-Treiber alle 32 SCSI-LUNs verwenden. Mehr als 8 LUNs werden beispielsweise von SCSI2Pi unterstützt.

Target-Schnittstelle

HDDRIVER unterstützt als einziger Treiber die SCSI-Treiber-Target-Schnittstelle: Ein TT oder Falcon werden von anderen Computern (auch Nicht-Ataris) als SCSI-Geräte erkannt und können standardisierte oder selbstdefinierte SCSI-Kommandos ausführen.

SCSI-Target-Interface
Der Screenshot zeigt den Geräte-Check eines TT, mit einem Falcon am selben Bus. Auf dem TT (SCSI ID 7) läuft HDDRIVER 11.06, auf dem Falcon (SCSI ID 6) HDDRIVER 11.05. Beide Computer "sehen" sich, und der eine kann vom anderen gesendete SCSI-Kommandos ausführen.

Beispielcode in C für die Implementierung eigener SCSI-Kommandos ist auf GitHub verfügbar. Für die fehlerfreie Funktion des Target-Interfaces muss jede Software, die auf SCSI-Peripherie zugreift, dies über die SCSI-Treiber-Schnittstelle tun.

In den HDDRUTIL-Einstellungen lässt sich konfigurieren, ob HDDRIVER mit oder ohne Unterstützung der Target-Schnittstelle installiert werden soll. Ohne Target-Unterstützung (das Standard-Interface bleibt verfügbar) belegt HDDRIVER etwa 3 KiB weniger RAM.

Implementierungen

Voll funktionsfähige SCSI-Treiber sind für die folgenden Hardware-Schnittstellen bzw. Emulatoren verfügbar:

Schnittstelle/Emulator Softwarepaket Autor
Atari ACSI/SCSI/IDE HDDRIVER
CBHD/SCSIDRV.PRG
Uwe Seimet
Claus Brod, Steffen Engel
Atari ATAPI/SATA HDDRIVER Uwe Seimet
Milan IDE/ATAPI/SATA HDDRIVER Uwe Seimet
Milan SCSI Milan PCI SCSI Driver Michael Schwingen
MagiCMac MM_SCSI.PRG Steffen Engel, Thomas Tempelmann
MagiCPC SCSIDRIV.DLL Steffen Engel
Hatari (Linux SCSI/IDE/ATAPI/SATA/USB) NF_SCSI, s. unten Uwe Seimet
ARAnyM (Linux SCSI/IDE/ATAPI/SATA/USB) NF_SCSI, s. unten Uwe Seimet, Thorsten Otto

Es gibt auch andere, möglicherweise unvollständige Implementierungen mit unbekanntem Status (z. B. für USB), die hier nicht aufgeführt sind. Der SCSI-Treiber der FireBee hat leider bekannte Fehler und kann daher nicht von HDDRIVER und HDDRUTIL genutzt werden.
Zur Implementierung eines neuen SCSI-Treibers wird empfohlen, neben der SCSI-Treiber-Dokumentation die offiziellen SCSI-Standards zu lesen. Informationen zum SCSI-Treiber-Interface liefern auch einige meiner Artikel für die Zeitschrift ST Computer.

SCSI-Treiber für Hatari und ARAnyM

NF_SCSI herunterladen SCSI-Treiber NF_SCSI 1.21

Mit Linux erlaubt dieser SCSI-Treiber den direkten Zugriff auf Massenspeicher. Die Webseite zu Emulatoren liefert weitere Informationen.

SCSI-Treiber-Monitor

SCSI_MON herunterladen SCSI-Treiber-Monitor 1.50

SCSI_MON protokolliert Aufrufe des SCSI-Treibers. Dies hilft bei der Fehleranalyse oder beim Entwickeln eines neuen SCSI-Treibers. SCSI_MON hilft auch beim Verstehen der SCSI- und SATA-Software-Protokolle.

SCSI-Treiber- und Firmware-Testsuite

SCSI-Treiber- und Firmware-Testsuite herunterladen SCSI-Treiber- und Firmware-Testsuite 3.00

Dieses Archiv enhält mehrere Tools zum Testen von SCSI-Firmware/Emulationen (insbesondere SCSI-2 und neuer) und einiger SCSI-Treiber-Funktionen, auch für SCSI-Treiber, die IDE/SATA-Platten oder USB-Geräte unterstützen. Getestet wird die Kompatibilität zu SCSI-2, nicht die Kompatibilität zu HDDRIVER. Letztere folgt aus der SCSI-2-Kompatibilität. Die Testsuite zeigt außerdem eine Reihe von Geräteeigenschaften an.
Das Beispiel-Logfile zeigt die Daten von Geräten, die alle Tests bestehen: Eine IBM DDRS-39130-Festplatte, eine von SCSI2Pi emulierte Festplatte, ein von SCSI2Pi emulierter Streamer und das Target-Interface von HDDRIVER.

Beispiel-Logfile Beispiel-Logfile