struc DeviceHeader
dhLink dd ? ; Link to next driver (last = 0FFFFh)
dhAttributes dw ? ; Device attributes
dhStrategy dw ? ; Strategy-routine offset
dhInterrupt dw ? ; Interrupt-routine offset
dhNameOrUnits db "????????" ; Logical device name (char device only)
; or Number of units (block device only)
ends ; = 18d bytes
;
; ; dhAttributes for character devices; bit 15=1
; Bit Description
; 0 1 = Standard input (STDIN) device
; 1 1 = Standard output (STDOUT) device
; 2 1 = NUL device
; 3 1 = Clock device
; 4 1 = Special device (driver supports fast char. output)
; 5,8,9,10,12 Reserved bits (0)
; 6 1 = Driver supports device function 13h (Generic IOCTL)
; 7 1 = Driver supports device function 19h (IOCTL query)
; 11 1 = Driver supports device functions 0Dh and 0Eh
; (Open Device and Close Device)
; 13 1 = Driver supports device function 10h
; (Output Until Busy)
; 14 1 = Driver supports device functions 03h and 0Ch
; (IOCTL Read and IOCTL Write)
; 15 1 = Character device
;
;
; ; dhAttributes for block devices; bit 15=0
; Bit Description
; 0,2,3,4,5,8,9,10,12 Reserved bits (0)
; 1 0 = Driver supports 16-bit sector addressing
; 1 = Driver supports 32-bit sector addressing
; 6 1 = Driver supports device functions 13h, 17h and 18h
; (Generic IOCTL, Get/Set Logical Device)
; 7 1 = Driver supports device function 19h (IOCTL query)
; 11 1 = Driver supports device functions 0Dh,0Eh, and 0Fh
; (Open Device, Close Device, and Removable Media)
; 13 1 = Driver requires DOS to supply the first 512 bytes
; of the file allocation table (FAT) when it calls
; Build BPB (device function 02h)
; 14 1 = Driver supports device functions 03h and 0Ch
; (IOCTL Read and IOCTL Write)
; 15 0 = Block device
;
;
; ; dhLink
; 0000h:offset pointer to next DeviceHeader, or
; 0ffffh:0ffffh if no other DeviceHeader in file
;
; ; dhNameOrUnits
; Char-device: Space-padded ASCII device name (no colon)
; Block-device: 1st byte = no. of units (drives), rest reserved