ATASPI fr 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 fr den kleinen Atari. Bisher war jeder
Entwickler gezwungen, smtliche Treiber und Utilities fr sein Produkt neu
zu schreiben, was natrlich auch einen erheblichen zustzlichen
Entwicklungsaufwand bedeutet.
Nicht zuletzt deshalb untersttzt 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 dafr geeignet
wren.

Eine Lsung fr dieses Problem besteht in der Aufteilung in abstracte,
unabhngige 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 msste dann nur die
entsprechenden low-Level Treiber bereitstellen und die Anwender knnten
sofort alle bereits existierenden Programme nutzen.

Hier ein paar Beispiele fr solche Anwendungsprogramme:

- ISO 9660 Filesystem (Datenformat auf CD-ROM)
- MS-Dos Filesystem (z.B. fr Zip/Harddisk)
- Audio CD-Player
- Scanner ?

Ich mchte hier darlegen, wie eine solche Softwarschnittstelle aussehen
knnte.


Da SCSI-Gerte blockorientiert arbeiten, knnte die SIO des Atari
entsprechend umgewidmet werden.
Der ATASPI Manager wrde 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 enthlt zustzliche Informationen fr das Kommando:

SRB
byte	TID		ID des adressesierten Gertes
byte	CMDLEN	Lnge 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 Gertes 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 fr die Black Box zu schreiben, ein Manager fr 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 verfgbar. 

Achtung ! Diese Version unterstuetzt als erste auch SCSI-Kommandos, die einen Datentransfer zum Geraet erforden (also auch Schreibkommandos).
Das kann zu Datenverlust fhren, 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
--------------------------------------------------------------------------------   

