Int 2F Fn 0802 U - Driver.sys Support - Execute Device Driver Request [D]
AX = 0802h
ES:BX -> device driver request header (see #2284)
Return: request header updated as per requested operation
STACK: WORD original flags from INT call (left by RETF in device
driver, at least in DOS 5.0-6.22)
Notes: supported by DR DOS 5.0
DOS 3.2 executes this function on any AL value from 02h through F7h;
DOS 4.0+ executes this function on AL=02h and AL=04h-F7h
the command codes (see #2282) and structures described below apply
to all drivers which support the appropriate commands; this call is
just one of a number of ways in which a device driver request may
be invoked
supported by Novell DOS 7
See Also: AX=0800h,AX=0801h,AX=0803h,AX=1510h,INT 21/AH=52h,INT 21/AH=99h
See Also: INT 21/AH=9Ah
(Table 2282)
Values for device driver command code:
00h (0) INIT
01h (1) MEDIA CHECK (block devices)
02h (2) BUILD BPB (block devices)
03h (3) IOCTL INPUT
04h (4) INPUT
05h (5) NONDESTRUCTIVE INPUT, NO WAIT (character devices)
06h (6) INPUT STATUS (character devices)
07h (7) INPUT FLUSH (character devices)
08h (8) OUTPUT
09h (9) OUTPUT WITH VERIFY
0Ah (10) OUTPUT STATUS (character devices)
0Bh (11) OUTPUT FLUSH (character devices)
0Ch (12) IOCTL OUTPUT
0Dh (13) (DOS 3.0+) DEVICE OPEN
0Eh (14) (DOS 3.0+) DEVICE CLOSE
0Fh (15) (DOS 3.0+) REMOVABLE MEDIA (block devices)
10h (16) (DOS 3.0+) OUTPUT UNTIL BUSY (character devices)
11h (17) (European MS-DOS 4.0) STOP OUTPUT (console screen drivers only)
12h (18) (European MS-DOS 4.0) RESTART OUTPUT (console screen drivers only)
13h (19) (DOS 3.2+) GENERIC IOCTL
14h (20) unused
15h (21) (European MS-DOS 4.0) RESET UNCERTAIN MEDIA FLAG
16h (22) unused
17h (23) (DOS 3.2+) GET LOGICAL DEVICE
18h (24) (DOS 3.2+) SET LOGICAL DEVICE
19h (25) (DOS 5.0+) CHECK GENERIC IOCTL SUPPORT
80h (128)(CD-ROM) READ LONG
81h (129)(CD-ROM) reserved
82h (130)(CD-ROM) READ LONG PREFETCH
83h (131)(CD-ROM) SEEK
84h (132)(CD-ROM) PLAY AUDIO
85h (133)(CD-ROM) STOP AUDIO
86h (134)(CD-ROM) WRITE LONG
87h (135)(CD-ROM) WRITE LONG VERIFY
88h (136)(CD-ROM) RESUME AUDIO
Bitfields for device request status:
Bit(s) Description (Table 2283)
15 error
14-11 reserved
10 ??? set by DOS kernel on entry to some driver calls
9 busy
8 done (may be clear on return under European MS-DOS 4.0)
7-0 error code if bit 15 set (see #2285)
Format of device driver request header:
Offset Size Description (Table 2284)
00h BYTE length of request header
01h BYTE subunit within device driver
02h BYTE command code (see #2282)
03h WORD status (filled in by device driver) (see #2283)
---DOS---
05h 4 BYTEs reserved (unused in DOS 2.x and 3.x)
09h DWORD (European MS-DOS 4.0 only) pointer to next request header in
device's request queue
(other versions) reserved (unused in DOS 2.x and 3.x)
---STARLITE architecture---
05h DWORD pointer to next request header
09h 4 BYTEs reserved
---command code 00h---
0Dh BYTE (ret) number of units
0Eh DWORD (call) pointer to DOS device helper function (see #2286)
(European MS-DOS 4.0 only)
(call) pointer past end of memory available to driver (DOS 5+)
(ret) address of first free byte following driver
12h DWORD (call) pointer to commandline arguments
(ret) pointer to BPB array (block drivers) or
0000h:0000h (character drivers)
16h BYTE (DOS 3.0+) drive number for first unit of block driver (0=A)
---European MS-DOS 4.0---
17h DWORD pointer to function to save registers on stack
---DOS 5+ ---
17h WORD (ret) error-message flag
0001h MS-DOS should display error msg on init failure
---command code 01h---
0Dh BYTE media descriptor
0Eh BYTE (ret) media status
00h don't know
01h media has not changed
FFh media has been changed
0Fh DWORD (ret, DOS 3.0+) pointer to previous volume ID if the
OPEN/CLOSE/RM bit in device header is set and disk changed
---command code 02h---
0Dh BYTE media descriptor
0Eh DWORD transfer address
-> scratch sector if NON-IBM FORMAT bit in device header set
-> first FAT sector otherwise
12h DWORD pointer to BPB (set by driver) (see #1349 at INT 21/AH=53h)
---command codes 03h,0Ch---
(see also INT 21/AX=4402h"DOS 2+",INT 21/AX=4403h"DOS")
0Dh BYTE media descriptor (block devices only)
0Eh DWORD transfer address
12h WORD (call) number of bytes to read/write
(ret) actual number of bytes read or written
---command codes 04h,08h,09h (except Compaq DOS 3.31, DR DOS 6)---
0Dh BYTE media descriptor (block devices only)
0Eh DWORD transfer address
12h WORD byte count (character devices) or sector count (block devices)
14h WORD starting sector number (block devices only)
16h DWORD (DOS 3.0+) pointer to volume ID if error 0Fh returned
1Ah DWORD (DOS 4.0+) 32-bit starting sector number (block devices with
device attribute word bit 1 set only) if starting sector
number above is FFFFh (see INT 21/AH=52h)
---command codes 04h,08h,09h (Compaq DOS 3.31, DR DOS 6)---
0Dh BYTE media descriptor (block devices only)
0Eh DWORD transfer address
12h WORD byte count (character devices) or sector count (block devices)
14h DWORD 32-bit starting sector number (block devices only)
Note: to reliably determine which variant of the request block for
functions 04h,08h,09h has been passed to the driver, check
the length field as well as the word at offset 14h. If the
length is 1Eh and 14h=FFFFh, use the DWORD at 1Ah as the
starting sector number; if the length is 18h, use the DWORD
at 14h; otherwise, use the WORD at 14h.
---command code 05h---
0Dh BYTE byte read from device if BUSY bit clear on return
---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
no further fields
---command code 10h---
0Dh BYTE unused
0Eh DWORD transfer address
12h WORD (call) number of bytes to write
(ret) actual number of bytes written
---command codes 11h,12h---
0Dh BYTE reserved
---command code 15h---
no further fields
---command codes 13h,19h---
0Dh BYTE category code
00h unknown
01h COMn:
03h CON
05h LPTn:
07h mouse (European MS-DOS 4.0)
08h disk
9Eh (STARLITE) Media Access Control driver
0Eh BYTE function code
00h (STARLITE) MAC Bind request
0Fh WORD copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
SI contents (European MS-DOS 4.0)
11h WORD offset of device driver header (see #1332)
DI contents (European MS-DOS 4.0)
13h DWORD pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
---command codes 80h,82h---
0Dh BYTE addressing mode
00h HSG (default)
01h Phillips/Sony Red Book
0Eh DWORD transfer address (ignored for command 82h)
12h WORD number of sectors to read
(if 0 for command 82h, request is an advisory seek)
14h DWORD starting sector number
logical sector number in HSG mode
frame/second/minute/unused in Red Book mode
(HSG sector = minute * 4500 + second * 75 + frame - 150)
18h BYTE data read mode
00h cooked (2048 bytes per frame)
01h raw (2352 bytes per frame, including EDC/ECC)
19h BYTE interleave size (number of sectors stored consecutively)
1Ah BYTE interleave skip factor
(number of sectors between consecutive portions)
---command code 83h---
0Dh BYTE addressing mode
00h HSG (default)
01h Phillips/Sony Red Book
0Eh DWORD transfer address (ignored)
12h WORD number of sectors to read (ignored)
14h DWORD starting sector number (see also above)
---command code 84h---
0Dh BYTE addressing mode
00h HSG (default)
01h Phillips/Sony Red Book
0Eh DWORD starting sector number (see also above)
12h DWORD number of sectors to play
---command codes 85h,88h---
no further fields
---command codes 86h,87h---
0Dh BYTE addressing mode
00h HSG (default)
01h Phillips/Sony Red Book
0Eh DWORD transfer address (ignored in write mode 0)
12h WORD number of sectors to write
14h DWORD starting sector number (also see above)
18h BYTE write mode
00h mode 0 (write all zeros)
01h mode 1 (default) (2048 bytes per sector)
02h mode 2 form 1 (2048 bytes per sector)
03h mode 2 form 2 (2336 bytes per sector)
19h BYTE interleave size (number of sectors stored consecutively)
1Ah BYTE interleave skip factor
(number of sectors between consecutive portions)
(Table 2285)
Values for device driver error code:
00h write-protect violation
01h unknown unit
02h drive not ready
03h unknown command
04h CRC error
05h bad drive request structure length
06h seek error
07h unknown media
08h sector not found
09h printer out of paper
0Ah write fault
0Bh read fault
0Ch general failure
0Dh reserved
0Eh (CD-ROM) media unavailable
0Fh invalid disk change
(Table 2286)
Call European MS-DOS 4.0 device helper function with:
DL = function
00h "SchedClock" called on each timer tick
AL = tick interval in milliseconds
01h "DevDone" device I/O complete
ES:BX -> request header
Note: must update status word first; may be called from
an interrupt handler
02h "PullRequest" pull next request from queue
DS:SI -> DWORD pointer to start of device's request queue
Return: ZF clear if pending request
ES:BX -> request header
ZF set if no more requests
03h "PullParticular" remove specific request from queue
DS:SI -> DWORD pointer to start of device's request queue
ES:BX -> request header
Return: ZF set if request header not found
04h "PushRequest" push the request onto the queue
DS:SI -> DWORD pointer to start of device's request queue
ES:BX -> request header
interrupts disabled
05h "ConsInputFilter" keyboard input check
AX = character (high byte 00h if PC ASCII character)
Return: ZF set if character should be discarded
ZF clear if character should be handled normally
Note: called by keyboard interrupt handler so DOS can scan
for special input characters
06h "SortRequest" push request in sorted order by starting sector
DS:SI -> DWORD pointer to start of device's request queue
ES:BX -> request header
interrupts disabled
07h "SigEvent" send signal on keyboard event
AH = event identifier
Return: AL,FLAGS destroyed
09h "ProcBlock" block on event
AX:BX = event identifier (typically a pointer)
CX = timeout in ms or 0000h for never
DH = interruptable flag (nonzero if pause may be interrupted)
interrupts disabled
Return: after corresponding ProcRun call
CF clear if event wakeup, set if unusual wakeup
ZF set if timeout wakeup, clear if interrupted
AL = wakeup code, nonzero if unusual wakeup
interrupts enabled
BX,CX,DX destroyed
Note: block process and schedules another to run
0Ah "ProcRun" unblock process
AX:BX = event identifier (typically a pointer)
Return: AX = number of processes awakened
ZF set if no processes awakened
BX,CX,DX destroyed
0Bh "QueueInit" initialize/clear character queue
DS:BX -> character queue structure (see #2287)
.NG limit reached, continued in next section...