
;*********************************************************************************
;
;	SCSI Driver 'Equates' file..
;
;	Written by Matt Gulick.		Started August 13,1988
;
;	Copyright Apple Computer, Inc. 1988-93
;	All Rights Reserved
;
;*********************************************************************************
;
; *** 6.0.1 ***
;
; 15-Dec-92 DAL for 6.0.1d12
;   Changed apple_cd version number to $601a.
;
; 17-Feb-93 JCM for 6.0.1d14
;   Changed direct_acc, mcd_40, scanner and appl_laser (for good measure anyway)
;   version numbers to $601a.
;
;  6-Mar-93 JCM for 6.0.1d14
;	Added equate for new characteristics bit ($0010) called "driver_is_clean".
;	This indicates that we cleanly ignore/return errors when we get a command
;	request from GS/OS or the Device Manager that we don't know about. This was
;	specified in the guidelines since day one, but can people read and follow them?
;   Of course not, that would make my job too easy.
;
;  2-Apr-93 SS for 6.0.1d16
;
;   Changed direct_acc, apple_cd, mcd_40, scanner and appl_laser
;   version numbers to $6010 (final)
;
;*********************************************************************************

;*********************************************************************************
;
;	This file contains all the global equates for the
;	SCSI Driver.  Only those items below that are marked
;	as "**** Changable ****" can be altered safly
;	without detailed intimate knowledge of how the
;	generic driver functions.  Any other values should
;	only be modified by someone who understands how this
;	generic driver functions.
;
;*********************************************************************************

									;
									; Bit Location equates
									;
null			equ		%0000000000000000
bit_0			equ		%0000000000000001
bit_1			equ		%0000000000000010
bit_2			equ		%0000000000000100
bit_3			equ		%0000000000001000
bit_4			equ		%0000000000010000
bit_5			equ		%0000000000100000
bit_6			equ		%0000000001000000
bit_7			equ		%0000000010000000
bit_8			equ		%0000000100000000
bit_9			equ		%0000001000000000
bit_10			equ		%0000010000000000
bit_11			equ		%0000100000000000
bit_12			equ		%0001000000000000
bit_13			equ		%0010000000000000
bit_14			equ		%0100000000000000
bit_15			equ		%1000000000000000
									;
									; Partition Map Signature
									;
Part_sig		equ		$4d50		;High-->Low
									;
									; Driver Descriptor Map Signature
									;
DDM_sig			equ		$5245		;High-->Low
									;
									; Booleans
									;
true			equ		bit_0
false			equ		null
									;
									; Time definitions.
									;
qtr_sec			equ		$0001
one_sec			equ		4*qtr_sec
one_min			equ		60*one_sec
									;
									; SCSI Driver dependent data
									;
cmd_start		equ		$0000		;Driver Startup Call
cmd_open		equ		$0001		;Driver Open Call
cmd_read		equ		$0002		;Driver Read Call
cmd_write		equ		$0003		;Driver Write Call
cmd_close		equ		$0004		;Driver Close Call
cmd_status		equ		$0005		;Driver Status Call
cmd_control		equ		$0006		;Driver Control Call
cmd_flush		equ		$0007		;Driver Flush Call
cmd_shutdown	equ		$0008		;Driver Shutdown Call
max_d_cmd		equ		$0008		;Max Driver Command	**** Changable ****
max_s_cmd		equ		$0005		;Max Status Code	**** Changable ****
max_c_cmd		equ		$0009		;Max Control Code	**** Changable ****
max_config_cmd	equ		$0001		;Max Config Code	**** Changable ****
									;
									; Suppervisory Dispatcher IDs and
									; SCSI Manager Command Numbers
									;
super_d_id		equ		$0000		;Supervisory Dispatcher's ID
get_sdrvr_id	equ		$0000		;Get S Driver's ID Number
set_sib_ptr		equ		$0001		;Set SIB Pointer
cmd_get_dvc		equ		$0002		;SCSI Manager Get Devices Call
cmd_claim_dvc	equ		$0003		;SCSI Manager Claim Devices Call
scsi_io_call	equ		$0004		;SCSI Manager I/O Call
									;
									; SCSI Device Types from INQUIRY Call
									;
direct_acc		equ		$0000		; Direct-Access Device
seq_acc			equ		$0001		; Sequential-Access Device
print_dvc		equ		$0002		; Printer Device
proc_dvc		equ		$0003		; Processor Device
worm_dvc		equ		$0004		; Write-once Read-multiple Device
read_dacc		equ		$0005		; Read-only Direct-Access Device
scanner			equ		$0006		; Scanner Device
optic_mem		equ		$0007		; Optical Memory Devices
changer			equ		$0008		; Changer Devices
comm_dvc		equ		$0009		; Communication Devices
mcd_40			equ		$0010		; Apple's tape. Direct Access Magnetic Tape Device
apple_cd		equ		read_dacc	; Apple's CD-ROM
apple_scan		equ		scanner		; Apple's Scanner
appl_laser		equ		$0002		; Apple's LaserWriter SC
data_dat		equ		$00ff		; Data Dat Device
mag_optical		equ		direct_acc	; Magneto-Optical Device
									;
									; Type of Device we support in this driver.
									;

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

				IF			Type = 0	Then

									;
									; SCSI Driver Version Number.
									; and other driver dependent data
									;
drvr_vers		equ		$6010		;Driver 6.0.1 for GS/OS 6.0.1 - 2-Apr-93 SS
scsi_dtype		equ		direct_acc
block_dvc		equ		true
character_dvc	equ		false
part_suprt		equ		true		;Supports Partions TRUE/FALSE
warm_ss_suprt	equ		true		;Supports Warm Shutdown/Startups
;warm_ss_suprt	equ		false		;Supports Warm Shutdown/Startups
block_size		equ		$200
cache_blks		equ		true
dibs_2_make		equ		4			;Number of dibs to make if growing
max_dvc_cnt		equ		100			;Yes: that's decimal 100
p_mask_adder	equ		bit_10		;First Bit of Partition Count. *** Changable ***
max_p_mask		equ		p_mask_adder\		;6 bits of unit number
						+p_mask_adder*2\
						+p_mask_adder*4\
						+p_mask_adder*8\
						+p_mask_adder*16\
						+p_mask_adder*32
max_partitions	equ		max_p_mask\
						/p_mask_adder+1
interleave		equ		1
max_timeout		equ		60*one_min	;**** Changable ****
									;
									; IMMED Bit is bit 0 of byte 1 in
									; the standard SCSI Command for
									; Direct-Access Devices.
									; That means the high byte because
									; of the 65xxx Low -> High structure.
									; Kind of confusing!
									;
immed_loc		equ		bit_0		; IMMED Bit Usage

				ENDIF

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

				IF			Type = 1	Then

									;
									; SCSI Driver Version Number.
									; and other driver dependent data
									;
drvr_vers		equ		$6010		;Driver 6.0.1 for GS/OS 6.0.1 (2-Apr-93 SS)
scsi_dtype		equ		apple_cd
block_dvc		equ		true
character_dvc	equ		false
part_suprt		equ		true		;Supports Partions TRUE/FALSE
warm_ss_suprt	equ		true		;Supports Warm Shutdown/Startups
;warm_ss_suprt	equ		false		;Supports Warm Shutdown/Startups
block_size		equ		$200
cache_blks		equ		true
dibs_2_make		equ		4			;Number of dibs to make if growing
max_dvc_cnt		equ		100			;Yes: that's decimal 100
p_mask_adder	equ		bit_10		;First Bit of Partition Count. *** Changable ***
max_p_mask		equ		p_mask_adder\		;6 bits of unit number
						+p_mask_adder*2\
						+p_mask_adder*4\
						+p_mask_adder*8\
						+p_mask_adder*16\
						+p_mask_adder*32
max_partitions	equ		max_p_mask\
						/p_mask_adder+1
interleave		equ		0			;Format not allowed
max_timeout		equ		60*one_min	;**** Changable ****
									;
									; IMMED Bit is bit 0 of byte 1 in
									; the standard SCSI Command for
									; Direct-Access Devices.
									; That means the high byte because
									; of the 65xxx Low -> High structure.
									; Kind of confusing!
									;
immed_loc		equ		null		;No IMMED Bit Usage

				ENDIF

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

				IF			Type = 2	Then

									;
									; SCSI Driver Version Number.
									; and other driver dependent data
									;
drvr_vers		equ		$6010		;Driver 6.0.1 for GS/OS 6.0.1 - 2-Apr-93 SS
scsi_dtype		equ		mcd_40
block_dvc		equ		true
character_dvc	equ		false
part_suprt		equ		false		;Supports Partions TRUE/FALSE
warm_ss_suprt	equ		false		;Supports Warm Shutdown/Startups
block_size		equ		$2000
cache_blks		equ		false
dibs_2_make		equ		1			;Number of dibs to make if growing
max_dvc_cnt		equ		10			;Yes: that's decimal 10
p_mask_adder	equ		bit_10		;First Bit of Partition Count. *** Changable ***
max_p_mask		equ		p_mask_adder	;1 bit unit number
max_partitions	equ		max_p_mask\
						/p_mask_adder
interleave		equ		0			;None for tape drive
max_timeout		equ		60*one_min	;**** Changable ****
									;
									; IMMED Bit is bit 0 of byte 1 in
									; the standard SCSI Command for
									; Direct-Access Devices.
									; That means the high byte because
									; of the 65xxx Low -> High structure.
									; Kind of confusing!
									;
immed_loc		equ		bit_8		;**** Changable ****
immed_load		equ		bit_0		;**** Changable ****

				ENDIF

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

				IF			Type = 3	Then

									;
									; SCSI Driver Version Number.
									; and other driver dependent data
									;
drvr_vers		equ		$6010		;Driver 6.0.1 for GS/OS 6.0.1 - 2-Apr-93 SS
scsi_dtype		equ		scanner
block_dvc		equ		false
character_dvc	equ		true
part_suprt		equ		false		;Supports Partions TRUE/FALSE
warm_ss_suprt	equ		false		;Supports Warm Shutdown/Startups
block_size		equ		null
cache_blks		equ		false
dibs_2_make		equ		1			;Number of dibs to make if growing
max_dvc_cnt		equ		1			;Yes: that's decimal 1
p_mask_adder	equ		bit_10		;First Bit of Partition Count. *** Changable ***
max_p_mask		equ		p_mask_adder	;1 bit unit number
max_partitions	equ		max_p_mask\
						/p_mask_adder
interleave		equ		0			;None for Scanner
max_timeout		equ		60*one_min	;**** Changable ****
									;
									; IMMED Bit is bit 0 of byte 1 in
									; the standard SCSI Command for
									; Direct-Access Devices.
									; That means the high byte because
									; of the 65xxx Low -> High structure.
									; Kind of confusing!
									;
immed_loc		equ		null

				ENDIF

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

				IF			Type = 4	Then

									;
									; SCSI Driver Version Number.
									; and other driver dependent data
									;
drvr_vers		equ		$6010		;Driver 6.0.1 for GS/OS 6.0.1 - 2-Apr-93 SS
scsi_dtype		equ		appl_laser
block_dvc		equ		false
character_dvc	equ		true
part_suprt		equ		false		;Supports Partions TRUE/FALSE
warm_ss_suprt	equ		false		;Supports Warm Shutdown/Startups
block_size		equ		null
cache_blks		equ		false
dibs_2_make		equ		1			;Number of dibs to make if growing
max_dvc_cnt		equ		1			;Yes: that's decimal 1
p_mask_adder	equ		bit_10		;First Bit of Partition Count. *** Changable ***
max_p_mask		equ		p_mask_adder	;1 bit unit number
max_partitions	equ		max_p_mask\
						/p_mask_adder
interleave		equ		0			;None for appl_laser
max_timeout		equ		60*one_min	;**** Changable ****
									;
									; IMMED Bit is bit 0 of byte 1 in
									; the standard SCSI Command for
									; Direct-Access Devices.
									; That means the high byte because
									; of the 65xxx Low -> High structure.
									; Kind of confusing!
									;
immed_loc		equ		null

				ENDIF

;-------------------------------------------------------------------------------
; BD 201811 - Changer type
				IF			Type = 5	Then

									;
									; SCSI Driver Version Number.
									; and other driver dependent data
									;
drvr_vers		equ		$6010		;Driver 6.0.1 for GS/OS 6.0.1 (2-Apr-93 SS)
scsi_dtype		equ		changer
block_dvc		equ		true
character_dvc	equ		false
part_suprt		equ		true		;Supports Partions TRUE/FALSE
warm_ss_suprt	equ		true		;Supports Warm Shutdown/Startups
;warm_ss_suprt	equ		false		;Supports Warm Shutdown/Startups
block_size		equ		$200
cache_blks		equ		true
dibs_2_make		equ		4			;Number of dibs to make if growing
max_dvc_cnt		equ		100			;Yes: that's decimal 100
p_mask_adder	equ		bit_10		;First Bit of Partition Count. *** Changable ***
max_p_mask		equ		p_mask_adder\		;6 bits of unit number
						+p_mask_adder*2\
						+p_mask_adder*4\
						+p_mask_adder*8\
						+p_mask_adder*16\
						+p_mask_adder*32
max_partitions	equ		max_p_mask\
						/p_mask_adder+1
interleave		equ		0			;Format not allowed
max_timeout		equ		60*one_min	;**** Changable ****
									;
									; IMMED Bit is bit 0 of byte 1 in
									; the standard SCSI Command for
									; Direct-Access Devices.
									; That means the high byte because
									; of the 65xxx Low -> High structure.
									; Kind of confusing!
									;
immed_loc		equ		null		;No IMMED Bit Usage

				ENDIF

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

				IF 		block_dvc = character_dvc	THEN

;				"These two can not be the same!"

				ENDIF

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

									;
									; Structure Sizes.
									;
one_page		equ		$00000100
dib_size		equ		one_page
max_gdvc_buf	equ		$00000704
max_cmd_len		equ		12			;Yes: that's decimal 12

scsi_duid		equ		$3C00		;**** Changable ****
claim_dvc		equ		false		;**** Changable ****

warm_cold_flag	equ		$e101d0		;word:	0 = cold startup/shutdown
									;		1 = warm startup/shutdown

									;
									; System Service Calls we need.
									;
;*******************************************************
;
;	ENTRY:	move_info via 'jsl'
;
;				LONGWORD	- Source buffer pointer
;				LONGWORD	- Destination buffer pointer
;				LONGWORD	- Transfer length
;				WORD		- Source buffer pointer
;		SP -->
;
;		A Reg	=	Undefined
;		X Reg	=	Undefined
;		Y Reg	=	Undefined
;	 Bank Reg	=	Undefined
;	  Dir Reg	=	GS/OS Direct Page
;		P Reg	=	N V M X D I Z C  E
;					x x 0 0 0 x x x  0
;
;	EXIT:	move_info via 'rtl'
;
;		A Reg	=	Error Code
;		X Reg	=	Undefined
;		Y Reg	=	Undefined
;	 Bank Reg	=	Undefined
;	  Dir Reg	=	GS/OS Direct Page
;		P Reg	=	N V M X D I Z C  E
;					x x 0 0 0 x x 0  0	No Error
;					x x 0 0 0 x x 1  0	Error
;
;*******************************************************

move_info		equ		$01fc70

moveblkcmd		equ		$0800		;Block Move Option
move_sinc_dinc	equ		$0805		;Source Inc, Dest Inc

move_sinc_ddec	equ		$0809		;Source Inc, Dest Dec
move_sdec_dinc	equ		$0806		;Source Dec, Dest Inc
move_sdec_ddec	equ		$080a		;Source Dec, Dest Dec

move_scon_dcon	equ		$0800		;Source con, Dest con
move_sinc_dcon	equ		$0801		;Source Inc, Dest con
move_sdec_dcon	equ		$0802		;Source Dec, Dest con
move_scon_dinc	equ		$0804		;Source con, Dest Inc
move_scon_ddec	equ		$0808		;Source con, Dest Dec

;*******************************************************
;
;	ENTRY:	set_disksw via 'jsl'
;
;		A Reg	=	Undefined
;		X Reg	=	Undefined
;		Y Reg	=	Undefined
;	 Bank Reg	=	Undefined
;	  Dir Reg	=	GS/OS Direct Page
;		P Reg	=	N V M X D I Z C  E
;					x x 0 0 0 x x x  0
;
;	EXIT:	set_disksw via 'rtl'
;
;		A Reg	=	Undefined
;		X Reg	=	Undefined
;		Y Reg	=	Undefined
;	 Bank Reg	=	Undefined
;	  Dir Reg	=	GS/OS Direct Page
;		P Reg	=	N V M X D I Z C  E
;					x x 0 0 0 x x 0  0	No Error
;
;*******************************************************

cache_find_blk	equ		$01fc04

cache_add_blk	equ		$01fc08

cache_kil_blk	equ		$01fc14

cache_del_vol	equ		$01fc18

set_disksw		equ		$01fc90

s_dispatch		equ		$01fca4

install_driver	equ		$01fca8
									;
									; Direct Page Addresses.
									;
dev_num			equ		$0000		;Device Number
call_num		equ		$0002		;Call Number
buff_ptr		equ		$0004		;Buffer Pointer
rqst_cnt		equ		$0008		;Request Count
trans_cnt		equ		$000C		;Transfer Count
block_num		equ		$0010		;Block Number (Read/Write only)
blk_size		equ		$0014		;Block Size
fst_num			equ		$0016		;FST Number (Read/Write only)
stat_code		equ		$0016		;Status Command Code
cont_code		equ		$0016		;Control Command Code
volume_id		equ		$0018		;Volume ID (Read/Write only)
cache_prio		equ		$001A		;Cache Priority Value (Read/Write only)
cache_ptr		equ		$001C		;Cache Pointer (Read/Write only)
dib_ptr			equ		$0020		;DIB Pointer
start_our_zp	equ		$0030
scsi_mdrvr		equ		start_our_zp;Main Driver Command Data Ptr goes here.
dvc_list		equ		scsi_mdrvr+4;Get Devices List (Startup Command Only)
scsi_zp0		equ		dvc_list+4	;User Defined Direct page scratch pad
scsi_zp1		equ		scsi_zp0+2	;User Defined Direct page scratch pad
scsi_zp2		equ		scsi_zp1+2	;User Defined Direct page scratch pad
scsi_zp3		equ		scsi_zp2+2	;User Defined Direct page scratch pad
scsi_zp4		equ		scsi_zp3+2	;User Defined Direct page scratch pad
scsi_zp5		equ		scsi_zp4+2	;User Defined Direct page scratch pad
scsi_zp6		equ		scsi_zp5+2	;User Defined Direct page scratch pad
scsi_zp7		equ		scsi_zp6+2	;User Defined Direct page scratch pad
first_dib		equ		scsi_zp7+2	;Start of DIB RAM (Startup Command Only)
next_dib		equ		first_dib+4	;Next DIB to be used (Startup Command Only)
last_dib		equ		next_dib+4	;Pointer to Default DIB Structure
prev_dib		equ		last_dib+4	;Pointer to previous DIB in linked list
add_dib_here	equ		prev_dib+4	;Pointer for DIB walking code
rebuild_zp		equ		add_dib_here+4	;Reserved for the use of rebuild dib code
config_buff		equ		rebuild_zp+4;Pointer to the current Config Data
ddm_buff		equ		config_buff+4	;Pointer to DDM
config_tcnt		equ		ddm_buff+4	;Pointer to the Transfer Count word.
end_our_zp		equ		config_tcnt+4

sib_pointer		equ		$0074
smgr_pl_ptr		equ		$0078
									;
									; Memory attribute equates
									;
attrlock		equ		bit_15		;Block is locked down.
attrfixed		equ		bit_14		;Block can't move in mem
attrpurg1		equ		bit_8		;Purge level 1
attrpurg2		equ		bit_9		;Purge level 2
attrpurg3		equ		bit_8+bit_9	;Purge level 3
attrnocross		equ		bit_4		;May not cross banks
attrnospec		equ		bit_3		;don't use special mem
attrpage		equ		bit_2		;Page alligned
attraddr		equ		bit_1		;Remain at fixed address
attrbank		equ		bit_0		;Remain in fixed bank
									;
									; SCSI Command Translation Table Flags
									;
scsit_tx		equ		bit_15		;SCSI Send Data Command
scsit_rx		equ		bit_14		;SCSI Receive Data Command
scsit_stat		equ		bit_13		;SCSI Status Command
scsit_cont		equ		bit_12		;SCSI Control Command
scsit_data		equ		bit_11		;SCSI Data I/O Command
scsit_dvc		equ		bit_10		;SCSI Device I/O Command
scsit_blk		equ		bit_9		;Command has a Block Number
scsic_1st		equ		bit_8		;Must be first device if linked
scsic_int		equ		bit_7		;Internal Driver Command only
scsic_dsw		equ		bit_6		;Issue DISK_SW with this call
scsic_off		equ		bit_5		;Device is going offline.
scsic_tout		equ		bit_4		;Adjust time out by block count
scsid_asis		equ		bit_3		;CMD Data is in SCSI format
scsid_blk		equ		bit_1		;Convert Trans Count to Blocks
scsid_byte		equ		bit_0		;Leave Trans Count in Bytes
scsid_none		equ		null		;Transfer count does not go in CMD
scsi_endcmd		equ		null		;End of SCSI Translation Table
									;
									; Device Characteristics.
									;
ram_rom_disk	equ		bit_15		;RAM or ROM Disk		if Set
gened_drvr		equ		bit_14		;Generated Driver		if Set
linked_dvc		equ		bit_13		;Linked Device			if Set
call_active		equ		bit_12		;Device Busy			if Set
restartable		equ		bit_11		;Restartable from ram	if Set
mhz_1			equ		null		;1 Mhz Device
mhz_2_6			equ		bit_8		;2.6 Mhz Device
mhz_gt_2_6		equ		bit_9		;>2.6 Mhz Device
speed_ind		equ		bit_8+bit_9	;Device is speed independent
blk_device		equ		bit_7		;Block Device			if Set
write_allow		equ		bit_6		;Write is Allowed		if Set
read_allow		equ		bit_5		;Read is Allowed		if Set
driver_is_clean	equ		bit_4		;Driver follows guidelines if Set
format_allow	equ		bit_3		;Format is Allowed		if Set
removable		equ		bit_2		;Removable Media		if Set
									;
									; Device Flags for 'dvcflag'.  All
									; are considered true if set.
									;
int_busy		equ		bit_15		;Internal busy flag for async
wait_mode		equ		bit_14		;Driver Wait/No Wait state
dvc_online		equ		bit_13		;Device Online Flag
dvc_switch		equ		bit_12		;Device Switched Flag
dvc_hardofl		equ		bit_11		;Device Hard Offline Flag
dvc_hard_sw		equ		bit_10		;Device Hard Switch Flag
relaxing		equ		bit_9		;Device is relaxing (Warm Shutdown)
cold_dib		equ		bit_8		;Do cold startup regardless of warmstart
play_mode		equ		bit_7		;In Audio Play Mode if set
pdos_part		equ		bit_6		;ProDOS Partition if set.
;	Bits 0 - 5 are reserved at this time.
									;
									; Config Bitmap Definitions
									;
conf_vol		equ		bit_15		;Volume Config if set

dconf_ddm		equ		bit_14		;Disk DDM if set and 15 clear
vconf_remount	equ		bit_14		;Remount Vol if set and 15 set

dconf_bvol		equ		bit_13		;Boot Volume if set and 15 clear
vconf_resv2		equ		bit_13		;RESERVED if set and 15 set

dconf_drvr		equ		bit_12		;Boot Driver if set and 15 clear
vconf_resv3		equ		bit_12		;RESERVED if set and 15 set

dconf_resv4		equ		bit_11		;RESERVED if set and 15 clear
vconf_resv4		equ		bit_11		;RESERVED if set and 15 set

dconf_resv5		equ		bit_10		;RESERVED if set and 15 clear
vconf_resv5		equ		bit_10		;RESERVED if set and 15 set

dconf_resv6		equ		bit_9		;RESERVED if set and 15 clear
vconf_resv6		equ		bit_9		;RESERVED if set and 15 set

dconf_resv7		equ		bit_8		;RESERVED if set and 15 clear
vconf_set_stat	equ		bit_8		;Set Stat Bits if set and 15 set

dconf_resv8		equ		bit_7		;RESERVED if set and 15 clear
vconf_resv8		equ		bit_7		;RESERVED if set and 15 set

dconf_resv9		equ		bit_6		;RESERVED if set and 15 clear
vconf_resv9		equ		bit_6		;RESERVED if set and 15 set

dconf_resv10	equ		bit_5		;RESERVED if set and 15 clear
vconf_wr_enable	equ		bit_5		;Do Write Inhibit if set & 8 & 15 are set

dconf_resv11	equ		bit_4		;RESERVED if set and 15 clear
vconf_rd_enable	equ		bit_4		;Do Read Inhibit if set & 8 & 15 are set

dconf_resv12	equ		bit_3		;RESERVED if set and 15 clear
vconf_resv12	equ		bit_3		;RESERVED if set and 15 set

dconf_resv13	equ		bit_2		;RESERVED if set and 15 clear
vconf_resv13	equ		bit_2		;RESERVED if set and 15 set

dconf_resv14	equ		bit_1		;RESERVED if set and 15 clear
vconf_resv14	equ		bit_1		;RESERVED if set and 15 set

dconf_resv15	equ		bit_0		;RESERVED if set and 15 clear
vconf_resv15	equ		bit_0		;RESERVED if set and 15 set
									;
									; Config Parm List
									;
disk_pl			RECORD	$0000

drvr_num		ds.w	1			;Driver Number

ddm_buff_len	ds.w	1			;DDM Buffer Length
ddm_trns_len	ds.w	1			;DDM Transfer Length
ddm_buff_ptr	ds.l	1			;DDM Buffer Pointer

vol_buff_len	ds.w	1			;Volume Buffer Length
vol_trns_len	ds.w	1			;Volume Transfer Length
vol_buff_ptr	ds.l	1			;Volume Buffer Pointer

drvr_buff_len	ds.w	1			;Driver Buffer Length
drvr_trns_len	ds.w	1			;Driver Transfer Length
drvr_buff_ptr	ds.l	1			;Driver Buffer Pointer

				ENDR
									;
									; Error_Codes.
									;
no_error		equ		$0000
bad_dev_number	equ		$0011
drvr_bad_req	equ		$0020
drvr_bad_code	equ		$0021
drvr_bad_parm	equ		$0022
drvr_not_open	equ		$0023
drvr_prior_open	equ		$0024
drvr_io			equ		$0027
drvr_no_dev		equ		$0028
drvr_busy		equ		$0029
drvr_wrt_prot	equ		$002b
drvr_bad_cnt	equ		$002c
drvr_bad_blk	equ		$002d
drvr_dsk_swch	equ		$002e
drvr_off_line	equ		$002f


;*******************************************************
;
;	The following statements are used to define the DIB
;	structure.  The structure contains the traditional
;	DIB followed by an extension used for device
;	maintainence.  All together each DIB with the
;	associated extensions will take one page of RAM.
;
;*******************************************************
;
;	$00	------------------------------------------------
;		|											   |
;		|      Device Information Block Data (DIB)     |
;	$3F	|											   |
;		------------------------------------------------
;	$40	|             Physical Block Number            |
;		|											   |
;	$43	|        that maps to logical block zero       |
;		------------------------------------------------
;	$44	|											   |
;		|                 Head Pointer                 |
;	$47	|											   |
;		------------------------------------------------
;	$48	|											   |
;		|               Forward Pointer                |
;	$4B	|											   |
;		------------------------------------------------
;	$4C	|				Memory DIB Count			   |
;		------------------------------------------------
;	$4E	|					Reserved				   |
;		------------------------------------------------
;	$50	|											   |
;		|      Memory Manager Handle for this DIB      |
;	$53	|											   |
;		------------------------------------------------
;	$54	|											   |
;		|              Block Size (Bytes)              |
;	$57	|											   |
;		------------------------------------------------
;	$58	|       Max SCSI Command for this Device       |
;		------------------------------------------------
;	$5A	|                                              |
;		|   Command Bitmap (See ERS for description)   |
;	$79	|                                              |
;		------------------------------------------------
;	$7A	|              SCSI Command Data               |
;		|                     and                      |
;	$D9	|      SCSI Manager Call Buffer Structures     |
;		------------------------------------------------
;	$DA	|            'Busy' and other Flags            |
;		------------------------------------------------
;	$DC	|                                              |
;		|          Completion Vector with Code         |
;	$FF	|                                              |
;		------------------------------------------------
;
;*******************************************************

dib				RECORD	$0000
									;
									; Definition of DIB Structure.
									;
linkptr			ds.l	1			; DIB Link Pointer				(LONG)
entry			ds.l	1			; Pointer to Drvrs Main Entry	(LONG)
dvcchar			ds.w	1			; Device Characteristics		(WORD)
blkcnt			ds.l	1			; Block Count for this device	(LONG)
namelen			ds.b	1			; Length of Descriptive Name	(PSTR)
disname			ds.b	31			; Field for this devices Name	(STR)
slotnum			ds.w	1			; Device Slot Number from MGR.	(WORD)
unitnum			ds.w	1			; Device Unit Number from MGR.	(WORD)
versnum			ds.w	1			; Version Number for our Driver	(WORD)
dvcid			ds.w	1			; ID of Device we talk to		(WORD)
headlnk			ds.w	1			; Head Device Link				(WORD)
fdvclnk			ds.w	1			; Forward Device Link			(WORD)
ext_ptr			ds.l	1			; Pointer to DIB Extension		(LONG)
devnum			ds.w	1			; DIB Device Number				(WORD)
									;
									; The Starting Block Number for this device
									; is maintained here.  This is used to
									; modify the requested block number from
									; a logical to a physical number.
									;
start_blk		ds.l	1			; Starting Physical Block Num.	(LONG)
									;
									; These two pointers are the compliment
									; to the links in the standard DIB and
									; will point to the actual DIB referenced
									; in the Head and Forward Device Links.
									;
headptr			ds.l	1			; Head Dvc Pointer				(LONG)
fdvcptr			ds.l	1			; Forward Dvc Pointer			(LONG)
mem_dib_cnt		ds.w	1			; Number of active dibs in mem	(WORD)
part_blk		ds.w	1			; Block containing partition	(WORD)
									;
									; Memory Manager Handle
									;
handle			ds.l	1			;								(LONG)
									;
									; Block Size
									;
blksize			ds.l	1			;								(LONG)
									;
									; Maximum SCSI Command supported by
									; the device for this DIB.
									;
maxcmd			ds.w	1			;								(WORD)
									;
									; SCSI Command Group Bitmaps
									;
group0			ds.l	1			; Group 0						(LONG)
group1			ds.l	1			; Group 1						(LONG)
group2			ds.l	1			; Group 2						(LONG)
group3			ds.l	1			; Group 3						(LONG)
group4			ds.l	1			; Group 4						(LONG)
group5			ds.l	1			; Group 5						(LONG)
group6			ds.l	1			; Group 6						(LONG)
group7			ds.l	1			; Group 7						(LONG)
									;
									; SCSI Manager Call PList
									;
scsi_slot		ds.w	1			; Same as our Slot Number		(WORD)
scsiid			ds.w	1			; Same as our Unit Number		(WORD)
version			ds.w	1			; Version of call issued		(WORD)
scsic_flgs		ds.w	1			; Flags from Command Table		(WORD)
time_out		ds.w	1			; Time Out Factor * xxx ms		(WORD)
compvec			ds.l	1			; Completion Routine Pointer	(LONG)
cp_ptr			ds.l	1			; Pointer to Command Packet		(LONG)
trx_ptr			ds.l	1			; Ptr to Send/R'cv Structure	(LONG)
trx_len
trx_rqst		ds.l	1			; Users Send/R'cv Length		(LONG)
rslt_ptr		ds.l	1			; Pointer to Status Structure	(LONG)

				ds.l	1			; Reserved space 0				(LONG)
				ds.l	1			; Reserved space 1				(LONG)
									;
									; SCSI Command Packet
									;
scsicmd			ds.b	12			; Room for any SCSI Command		(BYTES)
									;
									; SCSI Manager Device Send/R'cv Buffers List
									;
trx_buff		ds.l	1			; Users Send Buffer				(LONG)
trx_length		ds.l	1			; Request cnt for this buffer	(LONG)
trx_offset		ds.l	1			; Offset for next pass			(LONG)
trx_null		ds.l	1			; Null							(LONG)
trx_stop		ds.l	1			; Null							(LONG)
				ds.l	1			; Null							(LONG)
				ds.l	1			; Null							(LONG)
				ds.l	1			; Null							(LONG)
trx_rsrv		ds.l	4			; Reserved Space * 4 for future	(LONG)
									;
									; Device Busy and other Flags and results
									;
dvcflag			ds.w	1			; Device Busy and other Flags	(WORD)
									;
									; Completion Routine for this DIB.
									; This takes the remaining space in
									; the allocated RAM.  Any routine can
									; be placed here but must never go
									; beyond offset $FF
									;
end				equ		*
complet			ds.b	$100-end

				ENDR

pm				RECORD	$0000
									;
									; All Values given below are
									; in Macintosh High >> Low
									; format.
									; 
Sig				ds.w	1			;Signature Always $504d
									;		Apple II = $4d50
SigPad			ds.w	1			;Reserved for future use
MapBlkCnt		ds.l	1			;Number of blocks in Map
PyPartStart		ds.l	1			;First Physical Block of Partition
PartBlkCnt		ds.l	1			;Number of Blocks in Partition
PartName		ds.b	32			;Partition Name
PartType		ds.b	32			;Partition Type
LgDataStart		ds.l	1			;1st Logical Data Block
DataCnt			ds.l	1			;Number of data blocks
PartStatus		ds.l	1			;Partition Status Info
LgBootStart		ds.l	1			;1st Logical Boot Block
BootSize		ds.l	1			;Size of Boot Code in Bytes
BootLoad		ds.l	1			;Boot Code Load Address
BootLoad2		ds.l	1			;Additional Boot Load Info
BootEntry		ds.l	1			;Boot Code Entry Point
BootEntry2		ds.l	1			;Additional Boot Entry Info
BootCksum		ds.l	1			;Boot Code Checksum
Processor		ds.b	16			;Processor Type
Args			ds.b	128			;Boot Specific Arguments
end				equ		*
				ds.b	$200-end	;Pad to 1 Block
				ENDR
									;
									; Structure of data from Read Capacity Call
									;
block			RECORD	$0000

count			ds.l	1			;Block Count High >> Low
size			ds.l	1			;Block Size High >> Low

				ENDR
									;
									; Structure of data from Mode Sense Call
									;
mode			RECORD	$0000

sense_len		ds.b	1			;Sense Data Length
med_type		ds.b	1			;Medium Type
w_protect		ds.b	1			;Write Protect bit 7
blk_disc		ds.b	1			;Block Descriptor Length
				ds.b	1			;Unused data
blocks			ds.b	3			;Block Count High >> Low
				ds.b	1			;Unused data
blk_size		ds.b	3			;Block Size High >> Low
page_number		ds.b	1			;Page number of mode sense data
length			ds.b	1			;Length of data that follows

				ENDR
									;
									; Structure of data from Request Sense Call
									;
rqst_sens			RECORD	$0000

error_code		ds.b	1			;Bit 7		= Valid Flag
									;Bits 0-6	= Error Code
segment			ds.b	1			;			= Segment Number
sense_key		ds.b	1			;Bit 7		= Filemark bit
									;Bit 6		= EOM bit
									;Bit 5		= ILI bit
									;Bit 4		= Reserved
									;Bits 0-3	= Sense Key
info_bytes		ds.b	4			;			= Information Bytes
addnl_sens_len	ds.b	1			;			= Additional Sense Length (n-7)
command_spec	ds.b	4			;			= Command Specific Information
addnl_sens_code	ds.b	1			;			= Additional Sense Code
addnl_code_qual	ds.b	1			;			= Additional Sense Code Qualifier

				ENDR
									;
									; Structure of data from Inquiry Call
									;
inq				RECORD	$0000

pd_type			ds.b	1			;Peripheral Device Type
removable		ds.b	1			;Removable bit 7
				ds.b	$26-2		;Unused data
group			ds.b	1			;First Group Number

				ENDR
									;
									; Structure of data from GET DATA STATUS Call
									;
gds				RECORD	$0000

				ds.b	2			;reserved
data_len		ds.b	1			;Amount of data returned by this call
block			ds.b	1			;bit 0
winw_id			ds.b	1			;Window Identifier
				ds.b	1			;reserved
buf_avail		ds.b	3			;Amount of available Scanner Buffer Space
data_avail		ds.b	3			;Amount of Available Scan Data

				ENDR
									;
									; Structure of data from Device Specific Calls
									;
ds				RECORD	$0000

version			ds.w	1			;Version Number of this structure
				ds.b	12			;Command Bytes
DCcode			ds.l	1			;1st DC Code
DCcount			ds.l	1			;1st Count
DCoffset		ds.l	1			;1st Offset
DCreserved		ds.l	1			;1st Reserved

				ENDR

				EJECT
