mirror of
https://github.com/antoinevignau/source.git
synced 2025-01-06 16:30:01 +00:00
d29484938c
What we wrote to make audio hearable on a SCSI-2 CD-ROM drive ;-)
1 line
32 KiB
Plaintext
1 line
32 KiB
Plaintext
|
|
;*********************************************************************************
|
|
;
|
|
; 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
|