1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
|
%OUT DEVSYM.INC...
; SCCSID = @(#)DEVSYM.ASM 1.10 85/09/04
; SCCSID = @(#)DEVSYM.ASM 1.10 85/09/04
; THE DEVICE TABLE LIST HAS THE FORM:
SYSDEV STRUC
SDEVNEXT DD ? ;POINTER TO NEXT DEVICE HEADER
SDEVATT DW ? ;ATTRIBUTES OF THE DEVICE
SDEVSTRAT DW ? ;STRATEGY ENTRY POINT
SDEVINT DW ? ;INTERRUPT ENTRY POINT
SDEVNAME DB 8 DUP (?) ;NAME OF DEVICE (ONLY FIRST BYTE USED FOR BLOCK)
SYSDEV ENDS
;
; ATTRIBUTE BIT MASKS
;
; CHARACTER DEVICES:
;
; BIT 15 -> MUST BE 1
; 14 -> 1 IF THE DEVICE UNDERSTANDS IOCTL CONTROL STRINGS
; 13 -> 1 IF THE DEVICE SUPPORTS OUTPUT-UNTIL-BUSY
; 12 -> UNUSED
; 11 -> 1 IF THE DEVICE UNDERSTANDS OPEN/CLOSE
; 10 -> MUST BE 0
; 9 -> MUST BE 0
; 8 -> UNUSED
; 7 -> UNUSED
; 6 -> UNUSED
; 5 -> UNUSED
; 4 -> 1 IF DEVICE IS RECIPIENT OF INT 29H
; 3 -> 1 IF DEVICE IS CLOCK DEVICE
; 2 -> 1 IF DEVICE IS NULL DEVICE
; 1 -> 1 IF DEVICE IS CONSOLE OUTPUT
; 0 -> 1 IF DEVICE IS CONSOLE INPUT
;
; BLOCK DEVICES:
;
; BIT 15 -> MUST BE 0
; 14 -> 1 IF THE DEVICE UNDERSTANDS IOCTL CONTROL STRINGS
; 13 -> 1 IF THE DEVICE DETERMINES MEDIA BY EXAMINING THE FAT ID BYTE.
; THIS REQUIRES THE FIRST SECTOR OF THE FAT TO *ALWAYS* RESIDE IN
; THE SAME PLACE.
; 12 -> UNUSED
; 11 -> 1 IF THE DEVICE UNDERSTANDS OPEN/CLOSE/REMOVABLE MEDIA
; 10 -> MUST BE 0
; 9 -> MUST BE 0
; 8 -> UNUSED
; 7 -> UNUSED
; 6 -> IF DEVICE HAS SUPPORT FOR GETMAP/SETMAP OF LOGICAL DRIVES.
; IF THE DEVICE UNDERSTANDS GENERIC IOCTL FUNCTION CALLS.
; 5 -> UNUSED
; 4 -> UNUSED
; 3 -> UNUSED
; 2 -> UNUSED
; 1 -> UNUSED
; 0 -> UNUSED
;
DEVTYP EQU 8000H ; BIT 15 - 1 IF CHAR, 0 IF BLOCK
CHARDEV EQU 8000H
DEVIOCTL EQU 4000H ; BIT 14 - CONTROL MODE BIT
ISFATBYDEV EQU 2000H ; BIT 13 - DEVICE USES FAT ID BYTES,
; COMP MEDIA.
OUTTILBUSY EQU 2000H ; OUTPUT UNTIL BUSY IS ENABLED
ISNET EQU 1000H ; BIT 12 - 1 IF A NET DEVICE, 0 IF
; NOT. CURRENTLY BLOCK ONLY.
DEVOPCL EQU 0800H ; BIT 11 - 1 IF THIS DEVICE HAS
; OPEN,CLOSE AND REMOVABLE MEDIA
; ENTRY POINTS, 0 IF NOT
EXTENTBIT EQU 0400H ; BIT 10 - CURRENTLY 0 ON ALL DEVS
; THIS BIT IS RESERVED FOR FUTURE USE
; TO EXTEND THE DEVICE HEADER BEYOND
; ITS CURRENT FORM.
; NOTE BIT 9 IS CURRENTLY USED ON IBM SYSTEMS TO INDICATE "DRIVE IS SHARED".
; SEE IOCTL FUNCTION 9. THIS USE IS NOT DOCUMENTED, IT IS USED BY SOME
; OF THE UTILITIES WHICH ARE SUPPOSED TO FAIL ON SHARED DRIVES ON SERVER
; MACHINES (FORMAT,CHKDSK,RECOVER,..).
DEV320 EQU 0040H ;BIT 6 - FOR BLOCK DEVICES, THIS
;DEVICE SUPPORTS SET/GET MAP OF
;LOGICAL DRIVES, AND SUPPORTS
;GENERIC IOCTL CALLS.
;FOR CHARACTER DEVICES, THIS
;DEVICE SUPPORTS GENERIC IOCTL.
;THIS IS A DOS 3.2 DEVICE DRIVER.
ISSPEC EQU 0010H ;BIT 4 - THIS DEVICE IS SPECIAL
ISCLOCK EQU 0008H ;BIT 3 - THIS DEVICE IS THE CLOCK DEVICE.
ISNULL EQU 0004H ;BIT 2 - THIS DEVICE IS THE NULL DEVICE.
ISCOUT EQU 0002H ;BIT 1 - THIS DEVICE IS THE CONSOLE OUTPUT.
ISCIN EQU 0001H ;BIT 0 - THIS DEVICE IS THE CONSOLE INPUT.
EXTDRVR EQU 0002H ;BIT 1 - BLOCK DEVICE EXTNDED DRIVER
;STATIC REQUEST HEADER
SRHEAD STRUC
REQLEN DB ? ;LENGTH IN BYTES OF REQUEST BLOCK
REQUNIT DB ? ;DEVICE UNIT NUMBER
REQFUNC DB ? ;TYPE OF REQUEST
REQSTAT DW ? ;STATUS WORD
DB 8 DUP(?) ;RESERVED FOR QUEUE LINKS
SRHEAD ENDS
;STATUS WORD MASKS
STERR EQU 8000H ;BIT 15 - ERROR
STBUI EQU 0200H ;BIT 9 - BUISY
STDON EQU 0100H ;BIT 8 - DONE
STECODE EQU 00FFH ;ERROR CODE
; 2/12/KK
; Interim character identifier 2/12/KK
Ddkey EQU 0000010000000000B ; 2/12/KK
;FUNCTION CODES
DEVINIT EQU 0 ;INITIALIZATION
DINITHL EQU 26 ;SIZE OF INIT HEADER
DEVMDCH EQU 1 ;MEDIA CHECK
DMEDHL EQU 15 ;SIZE OF MEDIA CHECK HEADER
DEVBPB EQU 2 ;GET BPB
DEVRDIOCTL EQU 3 ;IOCTL READ
DBPBHL EQU 22 ;SIZE OF GET BPB HEADER
DEVRD EQU 4 ;READ
DRDWRHL EQU 22 ;SIZE OF RD/WR HEADER
DEVRDND EQU 5 ;NON DESTRUCTIVE READ NO WAIT (CHARACTER DEVS)
DRDNDHL EQU 14 ;SIZE OF NON DESTRUCTIVE READ HEADER
DEVIST EQU 6 ;INPUT STATUS
DSTATHL EQU 13 ;SIZE OF STATUS HEADER
DEVIFL EQU 7 ;INPUT FLUSH
DFLSHL EQU 15 ;SIZE OF FLUSH HEADER
DEVWRT EQU 8 ;WRITE
DEVWRTV EQU 9 ;WRITE WITH VERIFY
DEVOST EQU 10 ;OUTPUT STATUS
DEVOFL EQU 11 ;OUTPUT FLUSH
DEVWRIOCTL EQU 12 ;IOCTL WRITE
DEVOPN EQU 13 ;DEVICE OPEN
DEVCLS EQU 14 ;DEVICE CLOSE
DOPCLHL EQU 13 ;SIZE OF OPEN/CLOSE HEADER
DEVRMD EQU 15 ;REMOVABLE MEDIA
REMHL EQU 13 ;SIZE OF REMOVABLE MEDIA HEADER
GENIOCTL EQU 19
; THE NEXT THREE ARE USED IN DOS 4.0
; 20
; 21
; 22
DEVGETOWN EQU 23 ;GET DEVICE OWNER
DEVSETOWN EQU 24 ;SET DEVICE OWNER
OWNHL EQU 13 ;SIZE OF DEVICE OWNER HEADER
DEVOUT EQU 16 ; OUTPUT UNTIL BUSY.
DEVOUTL EQU DEVWRT ; LENGTH OF OUTPUT UNTIL BUSY
; GENERIC IOCTL REQUEST STRUCTURE
; SEE THE DOS 4.0 DEVICE DRIVER SPEC FOR FURTHER ELABORATION.
;
IOCTL_REQ STRUC
DB (SIZE SRHEAD) DUP(?)
; GENERIC IOCTL ADDITION.
MAJORFUNCTION DB ? ;FUNCTION CODE
MINORFUNCTION DB ? ;FUNCTION CATEGORY
REG_SI DW ?
REG_DI DW ?
GENERICIOCTL_PACKET DD ? ; POINTER TO DATA BUFFER
IOCTL_REQ ENDS
; DEFINITIONS FOR IOCTL_REQ.MINORFUNCTION
GEN_IOCTL_WRT_TRK EQU 40H
GEN_IOCTL_RD_TRK EQU 60H
GEN_IOCTL_FN_TST EQU 20H ; USED TO DIFF. BET READS AND WRTS
;; 32-bit absolute read/write input list structure
ABS_32RW STRUC
SECTOR_RBA DD ? ; relative block address
ABS_RW_COUNT DW ? ; number of sectors to be transferred
BUFFER_ADDR DD ? ; data addrress
ABS_32RW ENDS
;; media ID info
MEDIA_ID_INFO STRUC
MEDIA_level DW 0 ; info level
MEDIA_Serial DD 0 ; serial #
MEDIA_Label DB 11 dup (' ') ;volume label
MEDIA_System DB 8 dup (' ') ;system type
MEDIA_ID_INFO ENDS
;; equates for DOS34_FLAG
IFS_ABSRW EQU 00001H ;IFS absolute read/write
NO_IFS_ABSRW EQU 0FFFEH ;no IFS absolute read/write
IFS_DRIVE_RESET EQU 00002H ;IFS drvive reset
NO_IFS_DRIVE_RESET EQU 0FFFDH ;no IFS drive reset
FROM_DISK_RESET EQU 00004H ;from disk reset
NO_FROM_DISK_RESET EQU 0FFFBH ;not from disk reset
From_String_Output EQU 00008H ;from con string output
NO_From_String_Output EQU 0FFF7H ;not from con string output
From_DOS_WRITE EQU 00010H ;from dos_write
NO_From_DOS_WRITE EQU 0FFEFH ;not from dos_write
Force_I24_Fail EQU 00020H ;form IFS CALL BACK
NO_Force_I24_Fail EQU 0FFDFH ;not form IFS CALL BACK
Disable_EOF_I24 EQU 00040H ;disable EOF int24 for input status
NO_Disable_EOF_I24 EQU 0FFBFH ;disable EOF int24 for input status
DBCS_VOLID EQU 00080H ;indicate from volume id
DBCS_VOLID2 EQU 00100H ;indicate 8th char is DBCS
CTRL_BREAK_FLAG EQU 00200H ;indicate control break is input
NO_CTRL_BREAK_FLAG EQU 0FDFFH ;reset control break
SEARCH_FASTOPEN EQU 00400H ;set fastopen flag for search
X25_special EQU 00800H ;flag for X25 driver
|