
;*******************************************************
;
;	SCSI Driver 'Command Table'.
;
;	Written by Matt Gulick.		Started May 20,1988
;
;	Copyright Apple Computer, Inc. 1988-90
;
;*******************************************************

;*******************************************************
;
;	This file contains the Command Tables that actually
;	drives the SCSI Driver when talking to a target
;	device.  By changing these tables, the SCSI Driver
;	will be able to talk to almost any class of SCSI
;	Device.  There are actually two tables in this file.
;	The first table is a list of a two word group for
;	each command supported.
;
;	The first word is the actual SCSI Command Number
;	followed by the low word of that commands table
;	address.  We use the only the low word because the
;	second table is in the same bank as the indexing
;	table.
;
;	The second table is the actual command translation
;	data.  The first word is a set of flags that
;	indicate some of the translation and verification
;	that needs to take place.
;
;		Bit	15	=	Data is being sent to the device
;			14	=	Data is to be received by us
;			13	=	This is a Status Command
;			12	=	This is a Control Command
;			11	=	Data I/O Command
;			10	=	Device I/O Command
;			 9	=	Command Includes Block Number
;			 8	=	Must be first device if linked
;			 7	=	Internal Driver Command Only
;			 6	=	Must issue a DISK_SW with this call
;			 5	=	Results in device offline
;			 4	=	Reserved
;			 3	=	Command Data needs no translation
;			 2	=	Reserved
;			 1	=	Block request count goes into command
;			 0	=	Byte request count goes into command
;
;	The second word is a time out tick count to be used by
;	the SCSI Manager to determine when to abandone any SCSI
;	Device transaction due to lack of response by the
;	target.  Each tick = 250 ms.
;
;	Any additional words are only used if Bit 3 above is
;	zero.  The translation bytes conatin two offsets.  A
;	Source and a Destination offset.  This is used by the
;	driver to take information fron the caller's command
;	(Source) and .OR. them in to their proper location in
;	the SCSI Command Packet (Destination).
;
;		MSBit							LSBit
;			%0000	0000	0000	0000
;			
;			   R	  S		  R		  D
;			   e	  o		  e		  e
;			   s	  u		  s		  s
;			   e	  r		  e		  t
;			   r	  c		  r		  i
;			   v	  e		  v		  t
;			   e			  e		  i
;			   d			  d		  n
;									  a
;									  t
;									  i
;									  o
;									  n
;
;	A NULL Word at any location in the command entry
;	will terminate translation for that command.
;
;*******************************************************

;*******************************************************
;
;	Revision History:
;
;*******************************************************

;	May 20, 1988	File started.
;	Feb 28, 1989	Added Tape Drive Tables

				STRING		PASCAL
				BLANKS		OFF
				PAGESIZE	70
				PRINT		NOGEN
				PRINT		NOMDIR
				MACHINE		M65816

				PRINT		OFF

				INCLUDE		'scsihd.equates'
				INCLUDE		'M16.MEMORY'
				INCLUDE		'M16.UTIL'
				PRINT		ON

				EJECT
			
;*******************************************************
;
;	List of Commands Supported:
;
;*******************************************************

			EXPORT	cmd_t_tbl
cmd_t_tbl	PROC

;-------------------------------------------------------------------------------

			IF		scsi_dtype = direct_acc	THEN
											;
											; 
											;
											; 
			dc.w	$0028					; Command $28 'READ (EXTENDED)'
			dc.w	scsi_cmd28				; Mandatory
											; 
			dc.w	$002A					; Command $2A 'WRITE (EXTENDED)'
			dc.w	scsi_cmd2A				; Mandatory
											; 
			dc.w	$0008					; Command $08 'READ'
			dc.w	scsi_cmd08				; Mandatory
											; 
			dc.w	$000A					; Command $0A 'WRITE'
			dc.w	scsi_cmd0A				; Mandatory
											;
			dc.w	$0000					; Command $00 'TEST UNIT READY'
			dc.w	scsi_cmd00				; Mandatory
											;
			dc.w	$0003					; Command $03 'REQUEST SENSE'
			dc.w	scsi_cmd03				; Mandatory
											; 
			dc.w	$0025					; Command $25 'READ CAPACITY'
			dc.w	scsi_cmd25				; Mandatory
											; 
			dc.w	$0012					; Command $12 'INQUIRY'
			dc.w	scsi_cmd12				; Mandatory
											; 
			dc.w	$001A					; Command $1A 'MODE SENSE'
			dc.w	scsi_cmd1A				; Optional
											; 
			dc.w	$0015					; Command $15 'MODE SELECT'
			dc.w	scsi_cmd15				; Optional
											; 
			dc.w	$0004					; Command $04 'FORMAT UNIT'
			dc.w	scsi_cmd04				; Mandatory
											; 
			dc.w	$001E					; Command $1E 'PREVENT/ALLOW REMOVAL'
			dc.w	scsi_cmd1E				; Optional
											;
			dc.w	$0001					; Command $01 'REZERO UNIT'
			dc.w	scsi_cmd01				; Optional
											; 
			dc.w	$0007					; Command $07 'REASSIGN BLOCKS'
			dc.w	scsi_cmd07				; Optional
											; 
			dc.w	$000B					; Command $0B 'SEEK'
			dc.w	scsi_cmd0B				; Optional
											; 
			dc.w	$002B					; Command $2B 'SEEK (EXTENDED)'
			dc.w	scsi_cmd2B				; Optional
											; 
			dc.w	$0016					; Command $16 'RESERVE UNIT'
			dc.w	scsi_cmd16				; Mandatory
											; 
			dc.w	$0017					; Command $17 'RELEASE UNIT'
			dc.w	scsi_cmd17				; Mandatory
											; 
			dc.w	$001B					; Command $1B 'START/STOP UNIT'
			dc.w	scsi_cmd1B				; Optional
											; 
			dc.w	$001C					; Command $1C 'RECEIVE DIAGNOSTIC RESULTS'
			dc.w	scsi_cmd1C				; Optional
											; 
			dc.w	$001D					; Command $1D 'SEND DIAGNOSTICS'
			dc.w	scsi_cmd1D				; Mandatory
											; 
			dc.w	$002E					; Command $2E 'WRITE AND VERIFY'
			dc.w	scsi_cmd2E				; Optional
											; 
			dc.w	$002F					; Command $2F 'VERIFY'
			dc.w	scsi_cmd2F				; Optional
											; 
			dc.w	$0033					; Command $33 'SET LIMITS'
			dc.w	scsi_cmd33				; Optional
											; 
			dc.w	$0034					; Command $34 'PRE-FETCH'
			dc.w	scsi_cmd34				; Optional
											; 
			dc.w	$0035					; Command $35 'SYNCHRONIZE CACHE'
			dc.w	scsi_cmd35				; Optional
											;
			dc.w	$0036					; Command $36 'LOCK/UNLOCK CACHE'
			dc.w	scsi_cmd36				; Optional
											; 
			dc.w	$0037					; Command $37 'READ DEFECT DATA'
			dc.w	scsi_cmd37				; Optional
											; 
			dc.w	$003B					; Command $3B 'WRITE BUFFER'
			dc.w	scsi_cmd3B				; Optional
											; 
			dc.w	$003C					; Command $3C 'READ BUFFER'
			dc.w	scsi_cmd3C				; Optional
											; 
			dc.w	$003E					; Command $3E 'READ LONG'
			dc.w	scsi_cmd3E				; Optional
											; 
			dc.w	$003F					; Command $3F 'WRITE LONG'
			dc.w	scsi_cmd3F				; Optional
											; 
			dc.w	$004C					; Command $4C 'LOG SELECT'
			dc.w	scsi_cmd4C				; Optional
											; 
			dc.w	$004D					; Command $4D 'LOG SENSE'
			dc.w	scsi_cmd4D				; Optional
											; 
			dc.w	$0055					; Command $55 'MODE SELECT'
			dc.w	scsi_cmd55				; Optional
											; 
			dc.w	$005A					; Command $5A 'MODE SENSE'
			dc.w	scsi_cmd5A				; Mandatory
											; 
			dc.w	$00B3					; Command $B3 'SET LIMITS'
			dc.w	scsi_cmdB3				; Optional

			ENDIF

;-------------------------------------------------------------------------------

			IF		scsi_dtype = apple_cd	THEN
											;
											;
			dc.w	$00CC					; Command $CC 'AUDIO STATUS'
			dc.w	scsi_cmdCC				; Mandatory
											; 
			dc.w	$0003					; Command $03 'REQUEST SENSE'
			dc.w	scsi_cmd03				; Mandatory
											; 
			dc.w	$0028					; Command $28 'READ (EXTENDED)'
			dc.w	scsi_cmd28				; Mandatory
											; 
			dc.w	$0008					; Command $08 'READ'
			dc.w	scsi_cmd08				; Mandatory
											; 
			dc.w	$0000					; Command $00 'TEST UNIT READY'
			dc.w	scsi_cmd00				; Mandatory
											;
			dc.w	$0012					; Command $12 'INQUIRY'
			dc.w	scsi_cmd12				; Mandatory
											; 
			dc.w	$001A					; Command $1A 'MODE SENSE'
			dc.w	scsi_cmd1A				; Optional
											; 
			dc.w	$0025					; Command $25 'READ CAPACITY'
			dc.w	scsi_cmd25				; Mandatory
											; 
			dc.w	$0015					; Command $15 'MODE SELECT'
			dc.w	scsi_cmd15				; Optional
											; 
			dc.w	$00C0					; Command $C0 'EJECT DISK'
			dc.w	scsi_cmdC0				; Mandatory
											; 
			dc.w	$001E					; Command $1E 'PREVENT/ALLOW REMOVAL'
			dc.w	scsi_cmd1E				; Optional
											; 
			dc.w	$00C9					; Command $C9 'AUDIO PLAY'
			dc.w	scsi_cmdC9				; Mandatory
											; 
			dc.w	$00CA					; Command $CA 'AUDIO PAUSE'
			dc.w	scsi_cmdCA				; Mandatory
											; 
			dc.w	$00CB					; Command $CB 'AUDIO STOP'
			dc.w	scsi_cmdCB				; Mandatory
											; 
			dc.w	$00CD					; Command $CD 'AUDIO SCAN'
			dc.w	scsi_cmdCD				; Mandatory
											;
			dc.w	$0001					; Command $01 'REZERO UNIT'
			dc.w	scsi_cmd01				; Optional
											;
			dc.w	$000B					; Command $0B 'SEEK'
			dc.w	scsi_cmd0B				; Optional
											; 
			dc.w	$0016					; Command $16 'RESERVE UNIT'
			dc.w	scsi_cmd16				; Mandatory
											; 
			dc.w	$0017					; Command $17 'RELEASE UNIT'
			dc.w	scsi_cmd17				; Mandatory
											; 
			dc.w	$001B					; Command $1B 'START/STOP UNIT'
			dc.w	scsi_cmd1B				; Optional
											; 
			dc.w	$001C					; Command $1C 'RECEIVE DIAGNOSTIC RESULTS'
			dc.w	scsi_cmd1C				; Optional
											; 
			dc.w	$001D					; Command $1D 'SEND DIAGNOSTICS'
			dc.w	scsi_cmd1D				; Mandatory
											; 
			dc.w	$002B					; Command $2B 'SEEK (EXTENDED)'
			dc.w	scsi_cmd2B				; Optional
											; 
			dc.w	$002F					; Command $2F 'VERIFY'
			dc.w	scsi_cmd2F				; Optional
											; 
			dc.w	$003B					; Command $3B 'WRITE BUFFER'
			dc.w	scsi_cmd3B				; Optional
											; 
			dc.w	$003C					; Command $3C 'READ BUFFER'
			dc.w	scsi_cmd3C				; Optional
											; 
			dc.w	$004C					; Command $4C 'LOG SELECT'
			dc.w	scsi_cmd4C				; Optional
											; 
			dc.w	$004D					; Command $4D 'LOG SENSE'
			dc.w	scsi_cmd4D				; Optional
											; 
			dc.w	$0055					; Command $55 'MODE SELECT (EXTENDED)'
			dc.w	scsi_cmd55				; Optional
											; 
			dc.w	$005A					; Command $5A 'MODE SENSE (EXTENDED)'
			dc.w	scsi_cmd5A				; Optional
											; 
			dc.w	$00C1					; Command $C1 'READ TOC'
			dc.w	scsi_cmdC1				; Mandatory
											; 
			dc.w	$00C2					; Command $C2 'READ Q SUBCODE'
			dc.w	scsi_cmdC2				; Mandatory
											; 
			dc.w	$00C3					; Command $C3 'READ HEADER'
			dc.w	scsi_cmdC3				; Mandatory
											; 
			dc.w	$00C8					; Command $C8 'AUDIO TRACK SEARCH'
			dc.w	scsi_cmdC8				; Mandatory

			ENDIF

;-------------------------------------------------------------------------------

											; 
			dc.w	$FFFF					; End of the List.
			dc.w	$FFFF					;

			EJECT


;*******************************************************
;
;	Command translation Table:
;
;*******************************************************

;*******************************************************
;
;scsi_cmdxx	dc.w	scsit_tx++\				; SCSI Send Data Command
;					scsit_rx++\				; SCSI Receive Data Command
;					scsit_stat++\			; SCSI Status Command
;					scsit_cont++\			; SCSI Control Command
;					scsit_data++\			; SCSI Data I/O Command
;					scsit_dvc++\			; SCSI Device I/O Command
;					scsit_blk++\			; Command has a Block Number
;					scsic_1st++\			; Must be first device if linked
;					scsic_int++\			; Internal Driver Command only
;					scsic_dsw++\			; Issue DISK_SW with this call
;					scsic_off++\			; Device is going offline.
;					scsic_tout++\			; Adjust time out by block count
;					scsid_asis++\			; CMD Data is in SCSI format
;					scsid_blk++\			; Convert Trans Count to Blocks
;					scsid_byte++\			; Leave Trans Count in Bytes
;					scsid_none				; Transfer count does not go in CMD
;			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
;			dc.w	scsi_endcmd				; End of SCSI Translation Table
;
;*******************************************************

;-------------------------------------------------------------------------------

			IF		scsi_dtype = direct_acc	THEN

											;
											; Command $00 'TEST UNIT READY'
											; Mandatory
											; 
scsi_cmd00	dc.w	scsit_stat++\			; It is a Status Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $01 'REZERO UNIT'
											; Optional
											; 
scsi_cmd01	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	2*one_min				; Time out = 2 minutes.
			dc.w	scsi_endcmd
											;
											; Command $03 'REQUEST SENSE'
											; Mandatory
											; 
scsi_cmd03	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $04 'FORMAT UNIT'
											; Mandatory
											; 
scsi_cmd04	dc.w	scsit_tx++\				; It sends data to the target
					scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsic_1st++\			; Must be first device if linked
					scsic_dsw++\			; Issue DISK_SW with this call
					scsic_off++\			; Device is going offline.
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	60*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $07 'REASSIGN BLOCKS'
											; Optional
											; 
scsi_cmd07	dc.w	scsit_tx++\				; It sends data to the target
					scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsic_1st++\			; Must be first device if linked
					scsic_int++\			; Internal Driver Command Only
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	1*one_sec				; Time out = one second.
			dc.w	scsi_endcmd
											;
											; Command $08 'READ'
											; Mandatory
											; 
scsi_cmd08	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_data++\			; It is a Data I/O Command
					scsic_tout++\			; Adjust time out by block count
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_blk				; Length is in Blocks
			dc.w	one_sec					; Time out = 1 second/Block.
			dc.w	scsi_endcmd
											;
											; Command $0A 'WRITE'
											; Mandatory
											; 
scsi_cmd0A	dc.w	scsit_tx++\				; It sends data to the target
					scsit_cont++\			; It is a Control Command
					scsit_data++\			; It is a Data I/O Command
					scsic_tout++\			; Adjust time out by block count
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_blk				; Length is in Blocks
			dc.w	one_sec					; Time out = 1 second/Block.
			dc.w	scsi_endcmd
											;
											; Command $0B 'SEEK'
											; Optional
											; 
scsi_cmd0B	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	1*one_sec				; Time out = 1 second.
			dc.w	scsi_endcmd
											;
											; Command $12 'INQUIRY'
											; Mandatory
											; 
scsi_cmd12	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $15 'MODE SELECT'
											; Optional
											; 
scsi_cmd15	dc.w	scsit_tx++\				; It sends data to the target
					scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsic_1st++\			; Must be first device if linked
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	20*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $16 'RESERVE UNIT'
											; Mandatory
											; 
scsi_cmd16	dc.w	scsit_tx++\				; It sends data to the target
					scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsic_1st++\			; Must be first device if linked
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $17 'RELEASE UNIT'
											; Mandatory
											; 
scsi_cmd17	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsic_1st++\			; Must be first device if linked
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $1A 'MODE SENSE'
											; Optional
											; 
scsi_cmd1A	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $1B 'START/STOP UNIT'
											; Optional
											; 
scsi_cmd1B	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsic_1st++\			; Must be first device if linked
					scsic_dsw++\			; Issue DISK_SW with this call
					scsic_off++\			; Device is going offline.
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	20*qtr_sec				; Time out = 20 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $1C 'RECEIVE DIAGNOSTIC RESULTS'
											; Optional
											; 
scsi_cmd1C	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $1D 'SEND DIAGNOSTICS'
											; Mandatory
											; 
scsi_cmd1D	dc.w	scsit_tx++\				; It sends data to the target
					scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	10*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $1E 'PREVENT/ALLOW REMOVAL'
											; Optional
											; 
scsi_cmd1E	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $25 'READ CAPACITY'
											; Mandatory
											; 
scsi_cmd25	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $28 'READ (EXTENDED)'
											; Mandatory
											; 
scsi_cmd28	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_data++\			; It is a Data I/O Command
					scsic_tout++\			; Adjust time out by block count
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_blk				; Length is in Blocks
			dc.w	one_sec					; Time out = 1 second/Block.
			dc.w	scsi_endcmd
											;
											; Command $2A 'WRITE (EXTENDED)'
											; Mandatory
											; 
scsi_cmd2A	dc.w	scsit_tx++\				; It sends data to the target
					scsit_cont++\			; It is a Control Command
					scsit_data++\			; It is a Data I/O Command
					scsic_tout++\			; Adjust time out by block count
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_blk				; Length is in Blocks
			dc.w	one_sec					; Time out = 1 second/Block.
			dc.w	scsi_endcmd
											;
											; Command $2B 'SEEK (EXTENDED)'
											; Optional
											; 
scsi_cmd2B	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $2E 'WRITE AND VERIFY'
											; Optional
											; 
scsi_cmd2E	dc.w	scsit_tx++\				; It sends data to the target
					scsit_cont++\			; It is a Control Command
					scsit_data++\			; It is a Data I/O Command
					scsic_tout++\			; Adjust time out by block count
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_blk				; Length is in Blocks
			dc.w	one_sec					; Time out = 1 second/Block.
			dc.w	scsi_endcmd
											;
											; Command $2F 'VERIFY'
											; Optional
											; 
scsi_cmd2F	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsic_tout++\			; Adjust time out by block count
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	one_sec					; Time out = 1 second/Block.
			dc.w	scsi_endcmd
											;
											; Command $33 'SET LIMITS'
											; Optional
											; 
scsi_cmd33	dc.w	scsit_cont++\			; It is a Control Command
					scsic_int++\			; Internal Driver Command Only
					scsit_dvc++\			; It is a Device I/O Command
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $34 'PRE-FETCH'
											; Optional
											; 
scsi_cmd34	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $35 'SYNCHRONIZE CACHE'
											; Optional
											; 
scsi_cmd35	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $36 'LOCK/UNLOCK CACHE'
											; Optional
											; 
scsi_cmd36	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $37 'READ DEFECT DATA'
											; Optional
											; 
scsi_cmd37	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $3B 'WRITE BUFFER'
											; Optional
											; 
scsi_cmd3B	dc.w	scsit_tx++\				; It sends data to the target
					scsit_cont++\			; It is a Control Command
					scsit_data++\			; It is a Data I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $3C 'READ BUFFER'
											; Optional
											; 
scsi_cmd3C	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_data++\			; It is a Data I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $3E 'READ LONG'
											; Optional
											; 
scsi_cmd3E	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_data++\			; It is a Data I/O Command
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $3F 'WRITE LONG'
											; Optional
											; 
scsi_cmd3F	dc.w	scsit_tx++\				; It sends data to the target
					scsit_cont++\			; It is a Control Command
					scsit_data++\			; It is a Data I/O Command
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $4C 'LOG SELECT'
											; Optional
											; 
scsi_cmd4C	dc.w	scsit_tx++\				; SCSI Send Data Command
					scsit_cont++\			; SCSI Control Command
					scsit_data++\			; SCSI Data I/O Command
					scsid_asis++\			; CMD Data is in SCSI format
					scsid_byte				; Leave Trans Count in Bytes
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd				; End of SCSI Translation Table
											;
											; Command $4D 'LOG SENSE'
											; Optional
											; 
scsi_cmd4D	dc.w	scsit_rx++\				; SCSI Receive Data Command
					scsit_stat++\			; SCSI Status Command
					scsit_data++\			; SCSI Data I/O Command
					scsid_asis++\			; CMD Data is in SCSI format
					scsid_byte				; Leave Trans Count in Bytes
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd				; End of SCSI Translation Table
											;
											; Command $55 'MODE SELECT'
											; Optional
											; 
scsi_cmd55	dc.w	scsit_tx++\				; It sends data to the target
					scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsic_1st++\			; Must be first device if linked
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	one_sec					; Time out = 4 qtr second tick.
			dc.w	scsi_endcmd
											;
											; Command $5A 'MODE SENSE'
											; Mandatory
											; 
scsi_cmd5A	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd
											;
											; Command $B3 'SET LIMITS'
											; Optional
											; 
scsi_cmdB3	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd

			ENDIF

;-------------------------------------------------------------------------------

			IF		scsi_dtype = apple_cd	THEN

											;
											; Command $00 'TEST UNIT READY'
											; Mandatory
											; 
scsi_cmd00	dc.w	scsit_stat++\			; It is a Status Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	5*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $01 'REZERO UNIT'
											; Optional
											; 
scsi_cmd01	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	1*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $03 'REQUEST SENSE'
											; Mandatory
											; 
scsi_cmd03	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	1*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $08 'READ'
											; Mandatory
											; 
scsi_cmd08	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_data++\			; It is a Data I/O Command
					scsic_tout++\			; Adjust time out by block count
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_blk				; Length is in Blocks
			dc.w	4*qtr_sec				; Time out = 1 second/block.
			dc.w	scsi_endcmd
											;
											; Command $0B 'SEEK'
											; Optional
											; 
scsi_cmd0B	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	1*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $12 'INQUIRY'
											; Mandatory
											; 
scsi_cmd12	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	1*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $15 'MODE SELECT'
											; Optional
											; 
scsi_cmd15	dc.w	scsit_tx++\				; It sends data to the target
					scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsic_1st++\			; Must be first device if linked
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	1*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $16 'RESERVE UNIT'
											; Mandatory
											; 
scsi_cmd16	dc.w	scsit_tx++\				; It sends data to the target
					scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsic_1st++\			; Must be first device if linked
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	1*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $17 'RELEASE UNIT'
											; Mandatory
											; 
scsi_cmd17	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsic_1st++\			; Must be first device if linked
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	1*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $1A 'MODE SENSE'
											; Optional
											; 
scsi_cmd1A	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	1*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $1B 'START/STOP UNIT'
											; Optional
											; 
scsi_cmd1B	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsic_1st++\			; Must be first device if linked
					scsic_dsw++\			; Issue DISK_SW with this call
					scsic_off++\			; Device is going offline.
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	1*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $1C 'RECEIVE DIAGNOSTIC RESULTS'
											; Optional
											; 
scsi_cmd1C	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	1*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $1D 'SEND DIAGNOSTICS'
											; Mandatory
											; 
scsi_cmd1D	dc.w	scsit_tx++\				; It sends data to the target
					scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	1*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $1E 'PREVENT/ALLOW REMOVAL'
											; Optional
											; 
scsi_cmd1E	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	1*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $25 'READ CAPACITY'
											; Mandatory
											; 
scsi_cmd25	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_dvc++\			; It is a Device I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	1*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $28 'READ (EXTENDED)'
											; Mandatory
											; 
scsi_cmd28	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_data++\			; It is a Data I/O Command
					scsic_tout++\			; Adjust time out by block count
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_blk				; Length is in Blocks
			dc.w	4*qtr_sec				; Time out = 1 second/block.
			dc.w	scsi_endcmd
											;
											; Command $2B 'SEEK (EXTENDED)'
											; Optional
											; 
scsi_cmd2B	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	1*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $2F 'VERIFY'
											; Optional
											; 
scsi_cmd2F	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsic_tout++\			; Adjust time out by block count
					scsit_blk++\			; It has a Block Number
					scsid_asis++\			; It is an as is Packet
					scsid_none				; Length is not in command
			dc.w	4*qtr_sec				; Time out = 1 second/block.
			dc.w	scsi_endcmd
											;
											; Command $3B 'WRITE BUFFER'
											; Optional
											; 
scsi_cmd3B	dc.w	scsit_tx++\				; It sends data to the target
					scsit_cont++\			; It is a Control Command
					scsit_data++\			; It is a Data I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	10*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $3C 'READ BUFFER'
											; Optional
											; 
scsi_cmd3C	dc.w	scsit_rx++\				; It requests data from target
					scsit_stat++\			; It is a Status Command
					scsit_data++\			; It is a Data I/O Command
					scsid_asis++\			; It is an as is Packet
					scsid_byte				; Length is in Bytes
			dc.w	10*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $4C 'LOG SELECT'
											; Optional
											; 
scsi_cmd4C	dc.w	scsit_tx++\				; SCSI Send Data Command
					scsit_cont++\			; SCSI Control Command
					scsit_data++\			; SCSI Data I/O Command
					scsid_asis++\			; CMD Data is in SCSI format
					scsid_byte				; Leave Trans Count in Bytes
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd				; End of SCSI Translation Table
											;
											; Command $4D 'LOG SENSE'
											; Optional
											; 
scsi_cmd4D	dc.w	scsit_rx++\				; SCSI Receive Data Command
					scsit_stat++\			; SCSI Status Command
					scsit_data++\			; SCSI Data I/O Command
					scsid_asis++\			; CMD Data is in SCSI format
					scsid_byte				; Leave Trans Count in Bytes
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd				; End of SCSI Translation Table
											;
											; Command $55 'MODE SELECT (EXTENDED)'
											; Optional
											; 
scsi_cmd55	dc.w	scsit_tx++\				; SCSI Send Data Command
					scsit_cont++\			; SCSI Control Command
					scsit_dvc++\			; SCSI Device I/O Command
					scsid_asis++\			; CMD Data is in SCSI format
					scsid_byte				; Leave Trans Count in Bytes
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd				; End of SCSI Translation Table
											;
											; Command $5A 'MODE SENSE (EXTENDED)'
											; Optional
											; 
scsi_cmd5A	dc.w	scsit_rx++\				; SCSI Receive Data Command
					scsit_stat++\			; SCSI Status Command
					scsit_dvc++\			; SCSI Device I/O Command
					scsid_asis++\			; CMD Data is in SCSI format
					scsid_byte				; Leave Trans Count in Bytes
			dc.w	4*qtr_sec				; Time out = 4 qtr second ticks.
			dc.w	scsi_endcmd				; End of SCSI Translation Table
											;
											; Command $C0 'EJECT DISK'
											; Mandatory
											; 
scsi_cmdC0	dc.w	scsit_cont++\			; It is a Control Command
					scsit_dvc++\			; It is a Device I/O Command
					scsic_dsw++\			; Issue DISK_SW with this call
					scsic_off++\			; Device is going offline.
					scsid_asis++\			; CMD Data is in SCSI format
					scsid_none				; Length is not in command
			dc.w	10*one_min				; Time out = 10 minutes.
			dc.w	scsi_endcmd
											;
											; Command $C1 'READ TOC'
											; Mandatory
											; 
scsi_cmdC1	dc.w	scsit_rx++\				; SCSI Receive Data Command
					scsit_stat++\			; SCSI Status Command
					scsit_data++\			; SCSI Data I/O Command
					scsid_byte				; Leave Trans Count in Bytes
			dc.w	10*one_min				; Time out = 10 minutes.
			dc.w	$0101
			dc.w	$0205
			dc.w	$0307
			dc.w	$0408
			dc.w	$0509
			dc.w	scsi_endcmd				; End of SCSI Translation Table
											;
											; Command $C2 'READ Q SUBCODE'
											; Mandatory
											; 
scsi_cmdC2	dc.w	scsit_rx++\				; SCSI Receive Data Command
					scsit_stat++\			; SCSI Status Command
					scsit_dvc++\			; SCSI Device I/O Command
					scsid_byte				; Leave Trans Count in Bytes
			dc.w	10*one_min				; Time out = 10 minutes.
			dc.w	$0101
			dc.w	scsi_endcmd				; End of SCSI Translation Table
											;
											; Command $C3 'READ HEADER'
											; Mandatory
											; 
scsi_cmdC3	dc.w	scsit_rx++\				; SCSI Receive Data Command
					scsit_stat++\			; SCSI Status Command
					scsit_data++\			; SCSI Data I/O Command
					scsid_byte				; Leave Trans Count in Bytes
			dc.w	10*one_min				; Time out = 10 minutes.
			dc.w	$0101
			dc.w	$0202
			dc.w	$0303
			dc.w	$0404
			dc.w	$0505
			dc.w	scsi_endcmd				; End of SCSI Translation Table
											;
											; Command $C8 'AUDIO TRACK SEARCH'
											; Mandatory
											; 
scsi_cmdC8	dc.w	scsit_tx++\				; SCSI Send Data Command
					scsit_cont++\			; SCSI Control Command
					scsit_dvc++\			; SCSI Device I/O Command
					scsid_none				; Transfer count does not go in CMD
			dc.w	10*one_min				; Time out = 10 minutes.
			dc.w	$0101
			dc.w	$0201
			dc.w	$0301
			dc.w	$0402
			dc.w	$0503
			dc.w	$0604
			dc.w	$0705
			dc.w	$0809
			dc.w	scsi_endcmd				; End of SCSI Translation Table
											;
											; Command $C9 'AUDIO PLAY'
											; Mandatory
											; 
scsi_cmdC9	dc.w	scsit_tx++\				; SCSI Send Data Command
					scsit_cont++\			; SCSI Control Command
					scsit_dvc++\			; SCSI Device I/O Command
					scsid_none				; Transfer count does not go in CMD
			dc.w	10*one_min				; Time out = 10 minutes.
			dc.w	$0101
			dc.w	$0201
			dc.w	$0301
			dc.w	$0402
			dc.w	$0503
			dc.w	$0604
			dc.w	$0705
			dc.w	$0809
			dc.w	scsi_endcmd				; End of SCSI Translation Table
											;
											; Command $CA 'AUDIO PAUSE'
											; Mandatory
											; 
scsi_cmdCA	dc.w	scsit_tx++\				; SCSI Send Data Command
					scsit_cont++\			; SCSI Control Command
					scsit_dvc++\			; SCSI Device I/O Command
					scsid_none				; Transfer count does not go in CMD
			dc.w	10*one_min				; Time out = 10 minutes.
			dc.w	$0101
			dc.w	$0201
			dc.w	scsi_endcmd				; End of SCSI Translation Table
											;
											; Command $CB 'AUDIO STOP'
											; Mandatory
											; 
scsi_cmdCB	dc.w	scsit_tx++\				; SCSI Send Data Command
					scsit_cont++\			; SCSI Control Command
					scsit_dvc++\			; SCSI Device I/O Command
					scsid_none				; Transfer count does not go in CMD
			dc.w	10*one_min				; Time out = 10 minutes.
			dc.w	$0101
			dc.w	$0202
			dc.w	$0303
			dc.w	$0404
			dc.w	$0505
			dc.w	$0609
			dc.w	scsi_endcmd				; End of SCSI Translation Table
											;
											; Command $CC 'AUDIO STATUS'
											; Mandatory
											; 
scsi_cmdCC	dc.w	scsit_rx++\				; SCSI Receive Data Command
					scsit_stat++\			; SCSI Status Command
					scsit_dvc++\			; SCSI Device I/O Command
					scsid_byte				; Leave Trans Count in Bytes
			dc.w	10*one_min				; Time out = 10 minutes.
			dc.w	$0101
			dc.w	$0201
			dc.w	$0301
			dc.w	$0402
			dc.w	$0503
			dc.w	$0604
			dc.w	$0705
			dc.w	$0809
			dc.w	scsi_endcmd				; End of SCSI Translation Table
											;
											; Command $CD 'AUDIO SCAN'
											; Mandatory
											; 
scsi_cmdCD	dc.w	scsit_tx++\				; SCSI Send Data Command
					scsit_cont++\			; SCSI Control Command
					scsit_dvc++\			; SCSI Device I/O Command
					scsid_none				; Transfer count does not go in CMD
			dc.w	10*one_min				; Time out = 10 minutes.
			dc.w	$0101
			dc.w	scsi_endcmd				; End of SCSI Translation Table

			ENDIF

;-------------------------------------------------------------------------------


			ENDP
			
			EJECT


;*******************************************************
;
;	Command Packet Size Table:
;
;	This table is indexed by (Group Number * 6)
;
;	The first word in an entry equals the Packet Size.
;	This is used to set the command length in the data
;	for the SCSI Manager calls.  If this value is null,
;	then the group is undefined for this driver.
;
;	The next byte is the offset to the first and most
;	significant byte of the requested block number if
;	used in this packet.
;
;	The byte following this is the number of bytes that
;	make up a valid Block Number.
;
;	The next byte is the offset to the first and most
;	significant byte of the requested data length if
;	used in this packet.
;
;	The byte following this is the number of bytes that
;	make up a valid request length.
;
;*******************************************************

			EXPORT	cmd_ps_tbl
cmd_ps_tbl	PROC
start_tbl
											;
											; Group 0 Commands
											;
			dc.w	0006					; 6 Byte Command.
			dc.b	$03						; Offset to last Block Parm
			EXPORT	c_blk_len:EQU
c_blk_len	equ		*-start_tbl				; Equated offset to Block Length
			dc.b	$02						; Length of Block Parm
			dc.b	$04						; Offset to last Length Parm
			EXPORT	c_len_len:EQU
c_len_len	equ		*-start_tbl				; Equated offset to Length Length
			dc.b	$01						; Length of Length Parm
											;
											; Group 1 Commands
											;
			dc.w	0010					; 10 Byte Command.
			dc.b	$05						; Offset to last Block Parm
			dc.b	$04						; Length of Block Parm
			dc.b	$08						; Offset to last Length Parm
			dc.b	$03						; Length of Length Parm
											;
											; Group 2 Commands
											;
			dc.w	0010					; 10 Byte Command.
			dc.b	$05						; Offset to last Block Parm
			dc.b	$04						; Length of Block Parm
			dc.b	$08						; Offset to last Length Parm
			dc.b	$03						; Length of Length Parm
											;
											; Group 3 Commands
											;
			dc.w	0000					; Reserved Command.
			dc.b	$00						; Offset to last Block Parm
			dc.b	$00						; Length of Block Parm
			dc.b	$00						; Offset to last Length Parm
			dc.b	$00						; Length of Length Parm
											;
											; Group 4 Commands
											;
			dc.w	0000					; Reserved Command.
			dc.b	$00						; Offset to last Block Parm
			dc.b	$00						; Length of Block Parm
			dc.b	$00						; Offset to last Length Parm
			dc.b	$00						; Length of Length Parm
											;
											; Group 5 Commands
											;
			dc.w	0012					; 12 Byte Command.
			dc.b	$05						; Offset to last Block Parm
			dc.b	$04						; Length of Block Parm
			dc.b	$09						; Offset to last Length Parm
			dc.b	$04						; Length of Length Parm
											;
											; Group 6 Commands
											;
			dc.w	0010					; 10 Byte Command.
			dc.b	$05						; Offset to last Block Parm
			dc.b	$04						; Length of Block Parm
			dc.b	$08						; Offset to last Length Parm
			dc.b	$03						; Length of Length Parm
											;
											; Group 7 Commands
											;
			dc.w	0000					; Reserved Command.
			dc.b	$00						; Offset to last Block Parm
			dc.b	$00						; Length of Block Parm
			dc.b	$00						; Offset to last Length Parm
			dc.b	$00						; Length of Length Parm

			ENDP
			
			EJECT

;*******************************************************
;
;	Internal Data Buffer:
;
;	This buffer is used by the driver for all of it's
;	maintainence I/O between it and the devices that it
;	manages or communicates with.  This is where any
;	INQUIRY data will be received or blocks read in that
;	are needed by the driver to make any kind of
;	determination.  There is also a section reserved for
;	the REQUEST SENSE command for that last command sent.
;
;*******************************************************

				EXPORT	internal_buff
internal_buff	PROC


;-------------------------------------------------------------------------------

				IF			scsi_dtype = direct_acc	THEN

				dcb.b	block_size+20,0		;Incase 532 byte block

				ENDIF

;-------------------------------------------------------------------------------

				IF			scsi_dtype = apple_cd	THEN

				dcb.b	block_size*4,0		;Worst case 2k Block size

				ENDIF

;-------------------------------------------------------------------------------

				ENDP

				END

				EJECT