SCSI-Treiber

Der SCSI-Treiber ist eine wichtige offene Software-Schnittstelle (API) für den Zugriff auf Peripheriegeräte, nicht nur SCSI-Geräte. Auch SATA-Laufwerke für optische Medien (z. B. DVDs und BDs) und USB-Massenspeicher verwenden den SCSI-Kommandosatz. Für andere Hardware-Schnittstellen lassen sich SCSI-Kommandos emulieren, so wie es HDDRIVER für IDE- und SATA-Festplatten tut. Mit SCSI-Treibern lassen sich beliebige SCSI-Kommandos an nahezu beliebige Schnittstellen schicken. Mehrere SCSI-Treiber können koexistieren.
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, der ausschließlich über SCSI-Treiber auf Geräte zugreift. Bei diesen Treibern 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 vorhandenen SCSI-Treiber statt seines eigenen, so wie es die SCSI-Treiber-Spezifikation vorschreibt.
Ein Milan mit PCI-SCSI-Karte stellt ein gutes Beispiel dar: Für SCSI-Geräte nutzt HDDRIVER den PCI-SCSI-Treiber des Milan, der bereits beim Booten verfügbar ist. Für IDE-Geräte nutzt HDDRIVER seinen eigenen SCSI-Treiber für Milan IDE. 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 sowie Codebeispiele.

SCSI-Treiber-Dokumentation herunterladen SCSI-Treiber-Dokumentation, Bindings und Codebeispiele

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. Geräte mit 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 belegt HDDRIVER etwa 3 KiB weniger RAM.

Implementierungen

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

Hardware/Emulator Softwarepaket Autor Bemerkung
Atari ACSI/SCSI/IDE HDDRIVER
CBHD/SCSIDRV.PRG
Uwe Seimet
Claus Brod, Steffen Engel
In HDDRIVER integriert
 
Atari ATAPI/SATA HDDRIVER Uwe Seimet In HDDRIVER integriert
IDE/ATAPI/SATA HDDRIVER Uwe Seimet In HDDRIVER integriert
Milan SCSI Milan PCI SCSI Driver Michael Schwingen Open Source
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 Open Source
ARAnyM (Linux SCSI/IDE/ATAPI/SATA/USB) NF_SCSI, s. unten Uwe Seimet, Thorsten Otto Open Source

Zur Implementierung eines neuen SCSI-Treibers wird empfohlen, neben der SCSI-Treiber-Dokumentation die offiziellen SCSI-Standards zu lesen und die Testsuite zu verwenden. Informationen zum SCSI-Treiber-Interface liefern auch einige meiner Artikel für die Zeitschrift ST Computer.

Busnummern

Die folgenden Busnummern sind definiert:

Nummer Bus XHDI Major Device IDs Bemerkung
0 ACSI 0-7 Gemäß SCSI-Treiber-Spezifikation
1 SCSI 8-15 Gemäß SCSI-Treiber-Spezifikation, auch für Milan-SCSI (PCI)/MagiCMac/MagiCPC
2 IDE 16-23 Gemäß SCSI-Treiber-Spezifikation, auch für ATAPI/SATA
3 SD 24-31 SD-Karten-Slot (FireBee-Bus IDE2 und Vampire).
Der SCSI-Treiber der FireBee hat leider bekannte Fehler.
4 USB 32-39 USB-Storage-Treiber. Es ist wichtig, die neueste Version zu verwenden.
Leider hat auch diese Version bekannte Bugs (SCSI-Treiber, XHDI, Medienwechsel).
7 Ramdisk 56-63 Ramdisk neuer Generation in einem zukünftigen HDDRIVER (im Betatest)
8 Floppy 64-71 Siehe XHDI-Spezifikation. Einen SCSI-Treiber gibt es bisher nicht.
30 Linux-SG-Treiber, Bus A 240-247 SCSI-Treiber für Hatari und ARAnyM (/dev/sg0-/dev/sg7)
31 Linux-SG-Treiber, Bus B 248-255 SCSI-Treiber für Hatari und ARAnyM (/dev/sg8-/dev/sg15)

Per Konvention wird die eindeutige Basis-ID jeder XHDI Major Device ID von der Busnummer * 8 abgeleitet, um ID-Konflikte zu vermeiden.

SCSI-Treiber für Hatari und ARAnyM

NF_SCSI herunterladen SCSI-Treiber NF_SCSI 1.22 (15. Juni 2025)

Mit Linux erlaubt dieser SCSI-Treiber den direkten Zugriff auf Massenspeicher, z. B. mit SCSI-, IDE-, SATA- und USB-Geräten. Die Webseite zu Emulatoren liefert weitere Informationen.

SCSI-Treiber-Monitor

SCSI_MON herunterladen SCSI-Treiber-Monitor 1.52 (23. Oktober 2025)

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-, SATA- und USB-Software-Protokolle für Massenspeicher.