ATASPI für XL/XE Computer "Atari Advanced SCSI Programming Interface" (Version vom 09.05.2000) Wozu soll das gut sein ? Mittlerweile gibt es sowohl eine Reihe verschiedener SCSI Interfaces als auch diverse IDE Interfaces für den kleinen Atari. Bisher war jeder Entwickler gezwungen, sämtliche Treiber und Utilities für sein Produkt neu zu schreiben, was natürlich auch einen erheblichen zusätzlichen Entwicklungsaufwand bedeutet. Nicht zuletzt deshalb unterstützt meines Wissens z.B. bisher auch nur ein Interface (msc-IDE) Lesezugriffe auf CD-ROMs, obwohl mindestens zwei weitere Interfaces (BB SCSI, draco-IDE) von der Hardware dafür geeignet wären. Eine Lösung für dieses Problem besteht in der Aufteilung in abstracte, unabhängige Tools und Hardware-spezifische Treiber, die über eine definirte Software-Schnittstelle miteinander kommunizieren. Dieses Konzept basiert auf dem ASPI Konzept des PC, das von der Firma ADAPTEC entwickelt wurde. Der Entwickler eines neuen IDE oder SCSI-Interfaces müsste dann nur die entsprechenden low-Level Treiber bereitstellen und die Anwender könnten sofort alle bereits existierenden Programme nutzen. Hier ein paar Beispiele für solche Anwendungsprogramme: - ISO 9660 Filesystem (Datenformat auf CD-ROM) - MS-Dos Filesystem (z.B. für Zip/Harddisk) - Audio CD-Player - Scanner ? Ich möchte hier darlegen, wie eine solche Softwarschnittstelle aussehen könnte. Da SCSI-Geräte blockorientiert arbeiten, könnte die SIO des Atari entsprechend umgewidmet werden. Der ATASPI Manager würde dann ähnlich wie eine Floppy angesprochen. Hier die entsprechende Neudefiniton des DCB DDEVIC $70 ASPI manager DUNIT $01 ..(Nummer des ASPI Manager, es koennte ja mehr als ein Interface angeschlossen sein, z.B. SCSI/IDE) DCOMND $XX ..(Kommando Code) DSTATS $ ..Datenrichtung $80 Schreiben, $40 Lesen, nach der Ausfuehrung Fehler-Code DBUFR ADR ..Adresse des Datenbuffer DTIMO ..Timeout Wert DBYTE ..Anzahl erwarteter Bytes zur Übertragung DAUX ..Adresse des SCSI Request Blocks (SRB), also des eigentliche SCSI Befehls Die Kommandos orientieren sich am ASPI-Standard von ADAPTEC $00 host adapter inquiry $01 get device type $02 execute SCSI command $03 abort SCSI command $04 RESET SCSI device $05 set host adapter parameters $06 get disk drive information Der SCSI Request Block enthält zusätzliche Informationen für das Kommando: SRB byte TID ID des adressesierten Gerätes byte CMDLEN Länge des folgenden SCSI Kommandos in Bytes 6-12 bytes das eigentliche SCSI-Kommando, 6-12 Bytes lang Am Ende der Entwicklung sollten die entsprechenden Routinen bereits im ROM des Gerätes enthalten sein, damit sie unter allen DOS direkt erreichbar sind. ATASPI Manager fuer die Black Box Aufgrund der weltweiten Verbreitung habe ich bereits begonnen, einen solchen ATASPI-Manager für die Black Box zu schreiben, ein Manager für das msc-Interface wird irgendwann folgen. Die augenblickliche Version ist V0.40, der Quelltext ist unter Beachtung der GNU General Public License V2 oder hoeher frei verfügbar. Achtung ! Diese Version unterstuetzt als erste auch SCSI-Kommandos, die einen Datentransfer zum Geraet erforden (also auch Schreibkommandos). Das kann zu Datenverlust führen, wenn man nicht genau weiss, was man tut ! Da sich der ASPI Manager noch in der Entwicklung befindet, wird er einfach von jedem DOS aus in den RAM Bereich von $8000 bis $8800 geladen. Bis sich eine eindeutige Loesung findet, kann der Vector an Adresse $0002 als Einsprungpunkt genutzt werden. Dieser Vector ist als Init-Vector nach einem Cassetten-Boot vorgesehen und deshalb vermutlich unbenutzt, wenn man mit SCSI oder IDE Devices arbeitet. Ein JMP ($0002) springt in den ATASPI Manager. Ein JMP ($0002)+3 ; so als Befehl nicht verfuegbar initialisiert den ATASPI Manager neu. Nach dem Start werden die ID 0-6 nach Geraeten abgesucht, wird eines gefunden, werden einige grundlegende Informationen ueber das Geraet ausgegeben: Idx Manufacturer Name of the target Cxxy Sxy mit Idx x.. Geraete Id Cxxy xx..Geraete Klasse: 00-> Festplatte, 05-> CD-ROM y.. "r" wenn es sich um ein entnehmbares Medium handeld (Zip, CDROM) Sxy x.. ANSI SCSI Revision, y.."c" wenn es ein SCSI1 Geaet mit CCS Unterstuetzung ist Zur Ausfuehrung eines ATASPI Kommandos muss sowohl der DCB als auch ein SRB wie oben beschrieben aufgesetzt werden. Im Moment werden nur die ATASPI Kommandos $02 (Ausfuehrung eines SCSI Kommandos) und $04 (im Moment nur als BUS RESET) unterstuetzt. Nach der Ausfuehrung eines SCSI Kommandos enthalten DBYTLO/DBYTHI die Anzahl der tatsaechlich ubertragenen Bytes. Wichtig ist die Ueberpruefung des STATUS-Codes des Befehls, der sowohl in DSTATS als auch im Y-Prozessor-Register uebertragen wird. Ein Status von $01 bedeutet, das der Befehl erfolgreich ausgefuehrt wurde, alle Werte ueber $80 codieren eine Fehlermeldung: 8x Softwarefehler $82 falsche Datenrichtung -> das Geraet wollte Daten in einer anderen Richtung uebertragen als durch DSTATS definiert $83 Geraet wollte eine Message mit mehr als einem Byte senden (wird im Moment nicht unterstuetzt) $84 unerwartete Busfreigabe -> moeglicherweise unterstuetzt das Geraet das Kommando nicht oder ist defekt $85 das Geraet moechte mehr Daten uebertragen, als erwartet (in DBYTLO/DBYTHI) gesetzt -> falsche Blockgroesse ? $8A Zeit abgelaufen -> moeglicherweise ist kein Geraet unter dieser Id angeschlossen $8E kein freier Bus nach einem RESET -> das ist ein ernsthafter Fehler $92 Kommando ni th unterstuetzt vom ATASPI Manager (im Moment nur $02 und $04) Cx durchgereichter SCSI Kommando status (status | %11000000) C0 GOOD -> dies sollte nicht auftreten, da dieser Status nach 01 "verbogen" wird C2 Check condition -> als naechstes sollte ein "Request Sense" Kommando ausgefuehrt werden, um mehr ueber die Fehlerursache zu erfahren C4 condition met C8 busy D0 intermediate (GOOD for command chains) E2 command terminated Hilfsprogramme Anmerkung zu beiden Hilfsprogrammen: Diese Programme setzen auf der oben beschriebenen ATASPI Schnittstelle auf und sind allein nicht ausfuehrbar. Also starte erst den ATASPI Manager und dann das entsprechende Hilfsprogramm. Die Hilfsprogramme unterliegen wie auch der ATASPI Manager der GNU General Public License V2 oder hoeher. SCMON Das SCSI Monitor-Programm erlaubt es, bis zehn verschiedene SCSI Befehle auszufuehren und sich sofort einen Teil des Datenbuffers und der zurueckgegebenen Statuswerte anzuschauen. Diese erste Version erlaubt es nur, vorgegebene Kommandos auszufuehren, spaeter wird man jedoch auch eigene eingeben koennen. Man bekommt so einfach einen Einblick, wie der SRB fuer verschiedene Kommandos aussehen kann und wie verschiedene Geraete auf einzelne Kommandos reagieren. Bildschirm: C1 Id3 L06 D40 #00FF S01 #0082 12 00 00 00 FF 00 00 00 00 00 00 00 00: 00 00 00 00 00 00 00 00 00 00 00 Beschreibung Zeile 1 Cx Kommando Buffer (x 0..9) Idx Geraete Id (x 0..6; erstes Byte des SRB) Lxx Laenge des SCSI Kommandos in Byte (6, 0a, 0c; zweites Byte des SRB) Dxx Erwartete Uebertragungsrichtung (lesen..$40, schreiben..$80; Wert von DSTATS vor der Kommandoausfuehrung) #xxxx Anzahl zu uebertragender Bytes, Wert von DBYTLO/DBYTHI vor der Kommandoausfuehrung Sxx Status des letzten ausgefuehrten Befehls, Wert von DSTATS nach der Kommandoausfuehrung #xxxx Anzahl der uebertragenen Bytes, Wert von DBYTLO/DBYTHI nach der Kommandoausfuehrung Beschreibung Zeile 2 Inhalt des SRB (byte 3-14) Beschreibung Zeile 4-16 Inhalt des Datenbuffer Kommandos (durch druecken der entsprechenden Taste anzuwaehlen) 1..0 Auswahl des Kommandobuffer 1..0 SHIFT 0..6 Auswahl der Geraete Id0..Id6 ESCape Programm verlassen RETURN aktuellen Kommandobuffer ausfuehren M Aendern des Anzeigemodes fuer den Datenbuffer ( 8 bytes hex/asc; 16 bytes hex; 32 bytes asc) C Loeschen des Datenbuffer R Bus RESET; zuruecksetzen des SCSI-Busses < Verkleinern (logische Blocknummer fuer Lese-Kommando; Tracknummer fuer Audio-Play Kommando) > Vergroessern (logische Blocknummer fuer Lese-Kommando; Tracknummer fuer Audio-Play Kommando) Vordefinierte Kommandobuffer 0 request sense 1 inquiry 2 mode sense 3 read10 4 read capacity 5 6 read toc (audio CD only) 7 play track 1 (audio CD only) 8 PAUSE/RESUME (audio CD only, toggles function with execution) 9 OPEN/LOAD (removeable media only, toggles function with execution) Bemerkung: Jedesmal, wenn nach der Kommandoausfuehrung ein Fehler mit einer Nummer groesser $C0 aufgetreten ist, sollte als naechster Befehl ein "request sense" (Taste 0) mit derselben Geraete Id ausgefuehrt werden, um die Ursache des Fehlers zu ermitteln. Der Sense-Key ist in den unteren 4 Bits von Byte 2 des Datenbuffers (Achtung: Zaehlung beginnt mit Byte 0) codiert. ============================================================================== Sense Key Description -- ------------------------------------------------------------------- 0h NO SENSE. Indicates that there is no specific sense key information to be reported for the designated logical unit. This would be the case for a successful command or a command that received CHECK CONDITION or COMMAND TERMINATED status because one of the filemark, EOM, or ILI bits is set to one. 1h RECOVERED ERROR. Indicates that the last command completed successfully with some recovery action performed by the target. Details may be determinable by examining the additional sense bytes and the information field. When multiple recovered errors occur during one command, the choice of which error to report (first, last, most severe, etc.) is device specific. 2h NOT READY. Indicates that the logical unit addressed cannot be accessed. Operator intervention may be required to correct this condition. 3h MEDIUM ERROR. Indicates that the command terminated with a non- recovered error condition that was probably caused by a flaw in the medium or an error in the recorded data. This sense key may also be returned if the target is unable to distinguish between a flaw in the medium and a specific hardware failure (sense key 4h). 4h HARDWARE ERROR. Indicates that the target detected a non- recoverable hardware failure (for example, controller failure, device failure, parity error, etc.) while performing the command or during a self test. 5h ILLEGAL REQUEST. Indicates that there was an illegal parameter in the command descriptor block or in the additional parameters supplied as data for some commands (FORMAT UNIT, SEARCH DATA, etc.). If the target detects an invalid parameter in the command descriptor block, then it shall terminate the command without altering the medium. If the target detects an invalid parameter in the additional parameters supplied as data, then the target may have already altered the medium. This sense key may also indicate that an invalid IDENTIFY message was received (5.6.7). 6h UNIT ATTENTION. Indicates that the removable medium may have been changed or the target has been reset. See 6.9 for more detailed information about the unit attention condition. 7h DATA PROTECT. Indicates that a command that reads or writes the medium was attempted on a block that is protected from this operation. The read or write operation is not performed. ============================================================================== Sense Key Description -- ------------------------------------------------------------------- 8h BLANK CHECK. Indicates that a write-once device or a sequential- access device encountered blank medium or format-defined end-of- data indication while reading or a write-once device encountered a non-blank medium while writing. 9h Vendor Specific. This sense key is available for reporting vendor specific conditions. Ah COPY ABORTED. Indicates a COPY, COMPARE, or COPY AND VERIFY command was aborted due to an error condition on the source device, the destination device, or both. (See 7.2.3.2 for additional information about this sense key.) Bh ABORTED COMMAND. Indicates that the target aborted the command. The initiator may be able to recover by trying the command again. Ch EQUAL. Indicates a SEARCH DATA command has satisfied an equal comparison. Dh VOLUME OVERFLOW. Indicates that a buffered peripheral device has reached the end-of-partition and data may remain in the buffer that has not been written to the medium. A RECOVER BUFFERED DATA command(s) may be issued to read the unwritten data from the buffer. Eh MISCOMPARE. Indicates that the source data did not match the data read from the medium. Fh RESERVED. -- Die Bytes $0C und $0D geben dann weitere Informationen (sense code). CDROM-Laufwerke quittieren nach dem POWER-On, nach einem RESET oder nach einem Medienwechsel z.B. jedes Kommando (ausser inquiry) mit einem "check condition" Status, um den Adapter darueber zu informieren, dass das Medium gewechselt wurde. Audio CD Player Das ist nur eine kleine Demo, um zu zeigen, was mit dem ASPI-Manager moeglich ist. Der CD-Player koennte sicher noch erheblich verbessert werden, vielleicht hast Du ja Lust dazu ? Das Programm sucht nach dem ersten CD-Laufwerk (dem mit der niedrigsten Id). Dann wird die CD untersucht (wenn eine eingelegt ist) und die Trackliste angezeigt. Hier die Kommandos (Tasten): P ... play/pause O ... open/load tray > ... play next track < .. play previus track ESC .. leave programm Wer Interesse an der Mitarbeit hat, sollte sich mit mir in Verbindung setzen. Tschoe, Matthias Literaturhinweise: Buch: Schmidt, Friedhelm: SCSI-Bus und IDE-Schnittstelle; Bonn, Paris; Addison Wesley Deutschland GmbH; 1.Aufl. 1993 Internet: Here is a list, where you may find information about SCSI2 standard (physical interface, commandset ...) This information was taken from: ------------------------------------------ WELCOME TO ALT.COMP.HARDWARE.HOMEBUILT(v.20 Modified 6/18/97) This file contains frequently asked questions (FAQ) and general information pertaining to the newsgroup alt.comp.hardware.homebuilt. It is maintained by Mark Sokos (msokos1@gl.umbc.edu). It is posted every two weeks to the newsgroup alt.comp.hardware.homebuilt. The latest version may also be obtained by sending an e-mail request to the above address. This file is available via FTP from * ftp://rtfm.mit.edu/pub/usenet/alt.comp.hardware.homebuilt A DOS text version is available from: * ftp://ftp.netcom.com/pub/di/dibald/FAQS Dave Baldwin's FTP site * ftp://ftp.psyber.com/tcj/faqs The Computer Journal (TCJ FTP) An HTML version is available online at: * http://www.gl.umbc.edu/~msokos1 This file is (C) copyright 1996, 1997 by Mark Sokos. It may be freely copied and distributed as long as this notice remains intact and the file is not modified, and no fee is charged for its duplication. * SCSI: o http://www.symbios.com/ftp/pub/standards/io/scsi2 o http://www.abekrd.co.uk/SCSI2/SCSI2-index.html o ftp://ftp.compusult.nf.ca:/pub/sunos/scsi-doc/scsi1.17b.gz o ftp://ftp.loria.fr:/pub7/obi/Standards/scsi/ o ftp://unix.hensa.ac.uk:/mirrors/yggdrasil.fall95/disk1/usr/doc/scsi-1/ o ftp://ftp.funet.fi:/pub/doc/SCSI/SCSI1-docs.tar.gz o ftp://romeo-klive.nvg.unit.no:/pub/hardware/scsi-3/x3t10/drafts/scsi1 o ftp://ftp.nau.edu:/pub/info/hardware/scsi/ o ftp://relay.cs.toronto.edu:/doc/scsi/ o ftp://sunsite.unc.edu:/pub/academic/computer-science/history/pdp-8/fromnichols/scsi1-17b.zip o ftp://ftp.compusult.nf.ca:/pub/sunos/scsi-doc/scsi1.17b.gz o ftp://ftp.tu-clausthal.de:/docs/comp-allg/scsi2doc.zip o ftp://ftp.uni-kl.de:/pub3/docs+papers/scsi2 o ftp://ftp.funet.fi:/pub/doc/SCSI/SCSI2-docs.tar.gz o ftp://romeo-klive.nvg.unit.no:/pub/hardware/scsi-3/x3t10/drafts/scsi2 -----------------------------------------------------