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.
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.
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, 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.
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.

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.
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.
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 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 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.