INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST
AX = 440Dh
BL = drive number (00h=default,01h=A:,etc)
CH = category code
08h disk drive
00h-7Fh reserved for Microsoft
80h-FFh reserved for OEM/user-defined
CL = function
40h set device parameters
41h write logical device track
42h format and verify logical device track
46h (DOS 4+) set volume serial number (see also AH=69h)
47h (DOS 4+) set access flag
60h get device parameters
61h read logical device track
62h verify logical device track
66h (DOS 4+) get volume serial number (see also AH=69h)
67h (DOS 4+) get access flag
68h (DOS 5+) sense media type
DS:DX -> (DOS) parameter block (see below)
SI:DI -> (OS/2 comp box) parameter block (see below)
Return: CF set on error
AX = error code (01h,02h) (see AH=59h)
CF clear if successful
DS:DX -> data block if CL=60h or CL=61h
Notes:  DOS 4.01 seems to ignore the high byte of the number of directory
entries in the BPB for diskettes.
functions 46h and 66h undocumented in DOS 4.x, documented for DOS 5.0
SeeAlso: AH=69h,INT 2F/AX=0802h,INT 2F/AX=122Bh

Format of parameter block for functions 40h, 60h:
Offset  Size    Description
00h    BYTE    special functions
bit 0 set if function to use current BPB, clear if Device
BIOS Parameter Block field contains new default BPB
bit 1 set if function to use track layout fields only
must be clear if CL=60h
bit 2 set if all sectors in track same size (should be set)
bits 3-7 reserved
01h    BYTE    device type
00h  320K/360K disk
01h  1.2M disk
02h  720K disk
03h  single-density 8-inch disk
04h  double-density 8-inch disk
05h  fixed disk
06h  tape drive
07h  (DOS 3.3+) 1.44M floppy
08h  read/write optical disk
09h  (DOS 5.0) 2.88M floppy
0Ah  other type of block device
02h    WORD    device attributes
bit 0 set if nonremovable medium
bit 1 set if door lock ("changeline") supported
bits 2-15 reserved
04h    WORD    number of cylinders
06h    BYTE    media type
for 1.2M drive
00h 1.2M disk (default)
01h 320K/360K disk
always 00h for other drive types
07h 31 BYTEs   device BPB (see AH=53h), bytes after BPB offset 1Eh omitted
26h    WORD    number of sectors per track (start of track layout field)
not used by function 60h
28h  N word pairs: number,size of each sector in track

Format of parameter block for functions 41h, 61h:
Offset  Size    Description
00h    BYTE    special functions (reserved, must be zero)
01h    WORD    number of disk head
03h    WORD    number of disk cylinder
05h    WORD    number of first sector to read/write
07h    WORD    number of sectors
09h    DWORD   transfer address

Format of parameter block for functions 42h, 62h:
Offset  Size    Description
00h    BYTE    reserved, must be zero (DOS <3.2)
bit 0=0: format/verify track
1: format status call (DOS 3.2+)
bits 1-7 reserved, must be zero
on return (DOS 4.x):
bit 0: set if specified tracks, sectors/track supported
bit 1: set if function not supported by BIOS
bit 2: set if specified tracks, sectors/track not supported
bit 3: set if no disk in drive
01h    WORD    number of disk head
03h    WORD    number of disk cylinder

Format of parameter block for functions 46h, 66h:
Offset  Size    Description
00h    WORD    info level (00h)
02h    DWORD   disk serial number (binary)
06h 11 BYTEs   volume label or "NO NAME    "
11h  8 BYTEs   filesystem type "FAT12   " or "FAT16   " (CL=66h only)

Format of parameter block for functions 47h, 67h:
Offset  Size    Description
00h    BYTE    special-function field (must be zero)
01h    BYTE    disk-access flag, nonzero if access allowed by driver

Format of parameter block for function 68h:
Offset  Size    Description
00h    BYTE    01h for default media type, 00h for any other media type
01h    BYTE    02h for 720K, 07h for 1.44M, 09h for 2.88M

See also: 21440C

21440D - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST