blob: 44a1ab829bd734ccc7631f98fcd63f5ffc46ad3d (
plain) (
blame)
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
|
BREAK <Device table and SRH definition>
; 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 -> unused
; 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,..).
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.
;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
;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
DevOUT EQU 16 ; output until busy.
DevOutL EQU DevWrt ; length of output until busy
SUBTTL
|