You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
9112 lines
348 KiB
9112 lines
348 KiB
Interrupt List, part 7 of 18
|
|
Copyright (c) 1989-1999,2000 Ralf Brown
|
|
--------D-214400-----------------------------
|
|
INT 21 - DOS 2+ - IOCTL - GET DEVICE INFORMATION
|
|
AX = 4400h
|
|
BX = handle
|
|
Return: CF clear if successful
|
|
DX = device information word (see #01423)
|
|
AX destroyed
|
|
CF set on error
|
|
AX = error code (01h,05h,06h) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: value in DH corresponds to high byte of device driver's attribute word
|
|
if handle refers to a character device
|
|
Novell NetWare reportedly does not return a drive number in bits 5-0
|
|
for a disk file
|
|
this function was not supported by Digital Research's DOS Plus
|
|
SeeAlso: AX=4401h,INT 2F/AX=122Bh
|
|
|
|
Bitfields for device information word:
|
|
Bit(s) Description (Table 01423)
|
|
character device
|
|
14 device driver can process IOCTL requests (see AX=4402h"DOS 2+")
|
|
13 output until busy supported
|
|
11 driver supports OPEN/CLOSE calls
|
|
8 ??? (set by MS-DOS 6.2x KEYB)
|
|
7 set (indicates device)
|
|
6 EOF on input
|
|
5 raw (binary) mode
|
|
4 device is special (uses INT 29)
|
|
3 clock device
|
|
2 NUL device
|
|
1 standard output
|
|
0 standard input
|
|
disk file
|
|
15 file is remote (DOS 3.0+)
|
|
14 don't set file date/time on closing (DOS 3.0+)
|
|
11 media not removable
|
|
8 (DOS 4 only) generate INT 24 if no disk space on write or read past
|
|
end of file
|
|
7 clear (indicates file)
|
|
6 file has not been written
|
|
5-0 drive number (0 = A:)
|
|
SeeAlso: INT 29
|
|
--------D-214401-----------------------------
|
|
INT 21 - DOS 2+ - IOCTL - SET DEVICE INFORMATION
|
|
AX = 4401h
|
|
BX = handle (must refer to character device)
|
|
DX = device information word (see #01423)
|
|
(DH must be zero for DOS version prior to 6.x)
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Note: this function was not supported by Digital Research's DOS Plus
|
|
SeeAlso: AX=4400h,INT 2F/AX=122Bh
|
|
--------D-214402-----------------------------
|
|
INT 21 - DOS 2+ - IOCTL - READ FROM CHARACTER DEVICE CONTROL CHANNEL
|
|
AX = 4402h
|
|
BX = file handle referencing character device
|
|
CX = number of bytes to read
|
|
DS:DX -> buffer
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually read
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: format of data is driver-specific
|
|
(also see separate entries below for some specific cases)
|
|
this function was not supported by Digital Research's DOS Plus
|
|
SeeAlso: AX=4400h,AX=4403h"DOS",AX=4404h"DOS",INT 2F/AX=122Bh
|
|
--------N-214402-----------------------------
|
|
INT 21 - Network Driver Interface Specification (NDIS) 2.0.1 - PROTOCOL MANAGER
|
|
AX = 4402h
|
|
BX = file handle for device "PROTMAN$"
|
|
CX = 000Eh (size of request block)
|
|
DS:DX -> request block (see #01424,#01425,#01426,#01427,#01428,#01432,#01433)
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually read
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
SeeAlso: AX=4402h"FTPSOFT"
|
|
|
|
Format of NDIS request block for GetProtocolManagerInfo:
|
|
Offset Size Description (Table 01424)
|
|
00h WORD 01h
|
|
02h WORD returned status (see #01434)
|
|
04h DWORD returned pointer to structure representing parsed user config
|
|
08h DWORD unused
|
|
0Ch WORD returned BCD version of NDIS on which Protocol Manager is based
|
|
SeeAlso: #01425,#01426,#01427,#01428,#01429,#01430,#01431,#01432,#01433
|
|
|
|
Format of NDIS request block for RegisterModule:
|
|
Offset Size Description (Table 01425)
|
|
00h WORD 02h
|
|
02h WORD returned status (see #01434)
|
|
04h DWORD pointer to module's common characteristics table (see #01435)
|
|
08h DWORD pointer to list of modules to which the module is to be bound
|
|
0Ch WORD unused
|
|
SeeAlso: #01424,#01426,#01427,#01428,#01429,#01430,#01431,#01432,#01433
|
|
|
|
Format of NDIS request block for BindAndStart:
|
|
Offset Size Description (Table 01426)
|
|
00h WORD 03h
|
|
02h WORD returned status (see #01434)
|
|
04h DWORD caller's virtual address in FailingModules structure
|
|
08h DWORD unused
|
|
0Ch WORD unused
|
|
SeeAlso: #01424,#01425,#01427,#01428,#01429,#01430,#01431,#01432,#01433
|
|
|
|
Format of NDIS request block for GetProtocolManagerLinkage:
|
|
Offset Size Description (Table 01427)
|
|
00h WORD 04h
|
|
02h WORD returned status (see #01434)
|
|
04h DWORD returned dispatch point
|
|
08h DWORD unused
|
|
0Ch WORD returned protocol manager DS
|
|
Note: the dispatch point may be called as follows instead of using this IOCTL
|
|
STACK: WORD protocol manager DS
|
|
DWORD pointer to request block
|
|
Return: AX = returned status
|
|
STACK popped
|
|
SeeAlso: #01424,#01425,#01426,#01428,#01429,#01430,#01431,#01432,#01433
|
|
|
|
Format of NDIS request block for GetProtocolIniPath:
|
|
Offset Size Description (Table 01428)
|
|
00h WORD 05h
|
|
02h WORD returned status (see #01434)
|
|
04h DWORD pointer to a buffer for the ASCIZ pathname of PROTOCOL.INI
|
|
08h DWORD unused
|
|
0Ch WORD buffer length
|
|
SeeAlso: #01424,#01425,#01426,#01427,#01429,#01430,#01431,#01432,#01433
|
|
|
|
Format of NDIS request block for RegisterProtocolManagerInfo:
|
|
Offset Size Description (Table 01429)
|
|
00h WORD 06h
|
|
02h WORD returned status (see #01434)
|
|
04h DWORD pointer to structure containing parsed user config file
|
|
08h DWORD unused
|
|
0Ch WORD length of structure
|
|
SeeAlso: #01424,#01425,#01426,#01427,#01428,#01430,#01431,#01432,#01433
|
|
|
|
Format of NDIS request block for InitAndRegister:
|
|
Offset Size Description (Table 01430)
|
|
00h WORD 07h
|
|
02h WORD returned status (see #01434)
|
|
04h DWORD unused
|
|
08h DWORD poitner to ASCIZ name of the module to be prebind initialized
|
|
0Ch WORD unused
|
|
SeeAlso: #01424,#01425,#01426,#01427,#01428,#01429,#01431,#01432,#01433
|
|
|
|
Format of NDIS request block for UnbindAndStop:
|
|
Offset Size Description (Table 01431)
|
|
00h WORD 08h
|
|
02h WORD returned status (see #01434)
|
|
04h DWORD failing modules as for BindAndStart
|
|
08h DWORD if not 0000h:0000h, pointer to ASCIZ name of module to unbind
|
|
if 0000h:0000h, terminate a set of previously dynamically
|
|
bound protocol modules
|
|
0Ch WORD unused
|
|
SeeAlso: #01424,#01425,#01426,#01427,#01428,#01429,#01430,#01432,#01433
|
|
|
|
Format of NDIS request block for BindStatus:
|
|
Offset Size Description (Table 01432)
|
|
00h WORD 09h
|
|
02h WORD returned status (see #01434)
|
|
04h DWORD must be 0000h:0000h
|
|
on return, points to root tree
|
|
08h DWORD 0000h:0000h
|
|
0Ch WORD unused under DOS
|
|
SeeAlso: #01424,#01425,#01426,#01427,#01428,#01429,#01430,#01431,#01433
|
|
|
|
Format of NDIS request block for RegisterStatus:
|
|
Offset Size Description (Table 01433)
|
|
00h WORD 0Ah
|
|
02h WORD returned status (0000h, 0008h, 002Ch) (see #01434)
|
|
04h DWORD 0000h:0000h
|
|
08h DWORD pointer to 16-byte ASCIZ module name
|
|
0Ch WORD 0000h
|
|
Note: not supported by the 10NET v5.0 PROTMAN$ driver
|
|
SeeAlso: #01424,#01425,#01426,#01427,#01428,#01429,#01430,#01431,#01432
|
|
|
|
(Table 01434)
|
|
Values for NDIS status code:
|
|
0000h success
|
|
0001h wait for release--protocol has retained control of the data buffer
|
|
0002h request queued
|
|
0003h frame not recognized
|
|
0004h frame rejected
|
|
0005h frame should be forwarded
|
|
0006h out of resource
|
|
0007h invalid parameter
|
|
0008h invalid function
|
|
0009h not supported
|
|
000Ah hardware error
|
|
000Bh transmit error
|
|
000Ch unrecognized destination
|
|
000Dh buffer too small
|
|
0020h already started
|
|
0021h binding incomplete
|
|
0022h driver not initialized
|
|
0023h hardware not found
|
|
0024h hardware failure
|
|
0025h configuration failure
|
|
0026h interrupt conflict
|
|
0027h MAC incompatible
|
|
0028h initialization failed
|
|
0029h no binding
|
|
002Ah network may be disconnected
|
|
002Bh incompatible OS version
|
|
002Ch already registered
|
|
002Dh path not found
|
|
002Eh insufficient memory
|
|
002Fh info not found
|
|
00FFh general failure
|
|
F000h-FFFFh reserved for vendor-specific codes, treated as general failure
|
|
|
|
Format of NDIS common characteristics table:
|
|
Offset Size Description (Table 01435)
|
|
00h WORD size of table in bytes
|
|
02h BYTE NDIS major version
|
|
03h BYTE NDIS minor version
|
|
04h WORD reserved
|
|
06h BYTE module major version
|
|
07h BYTE module minor version
|
|
08h DWORD module function flag bits
|
|
bit 0: binding at upper boundary supported
|
|
bit 1: binding at lower boundary supported
|
|
bit 2: dynamically bound
|
|
bits 3-31 reserved, must be 0
|
|
0Ch 16 BYTEs ASCIZ module name
|
|
1Ch BYTE upper boundary protocol level (see #01436)
|
|
1Dh BYTE upper boundary interface type
|
|
for MACs: 1 = MAC
|
|
for data links and transports: to be defined
|
|
for session: 1 = NCB
|
|
any level: 0 = private (ISV-defined)
|
|
1Eh BYTE lower boundary protocol level (see #01436)
|
|
1Fh BYTE lower boundary interface type
|
|
same as offset 1Dh
|
|
20h WORD module ID filled in by protocol manager
|
|
22h WORD module DS
|
|
24h DWORD system request entry point
|
|
28h DWORD pointer to service-specific characteristics (see #01438,#01440)
|
|
0000h:0000h if none
|
|
2Ch DWORD pointer to service-specific status, or 0000h:0000h if none
|
|
(see #01441)
|
|
30h DWORD pointer to upper dispatch table (see #01437)
|
|
0000h:0000h if none
|
|
34h DWORD pointer to lower dispatch table (see #01437)
|
|
0000h:0000h if none
|
|
38h 2 DWORDs reserved, must be 0
|
|
Note: for compatibility with NDIS 1.x.x, a major version of 00h is
|
|
interpreted as 01h
|
|
|
|
(Table 01436)
|
|
Values for NDIS boundary protocol level:
|
|
00h physical
|
|
01h Media Access Control
|
|
02h Data link
|
|
03h network
|
|
04h transport
|
|
05h session
|
|
FFh not specified
|
|
|
|
Format of NDIS dispatch table:
|
|
Offset Size Description (Table 01437)
|
|
00h DWORD -> common characteristics table (see #01435)
|
|
04h 4 BYTEs ???
|
|
08h DWORD -> ??? function (called with 12 bytes of stack arguments)
|
|
0Ch DWORD -> ??? function (called with 10 bytes of stack arguments)
|
|
10h DWORD -> ??? function (called with 16 bytes of stack arguments)
|
|
14h DWORD -> ??? function (called with 4 bytes of stack arguments)
|
|
18h DWORD -> ??? function (called with 18 bytes of stack arguments)
|
|
1Ch DWORD -> ??? function (called with 12 bytes of stack arguments)
|
|
|
|
Format of MAC Service-Specific Characteristics Table:
|
|
Offset Size Description (Table 01438)
|
|
00h WORD length of table in bytes
|
|
02h 16 BYTEs ASCIZ MAC type name, "802.3", "802.4", "802.5", "802.6", "DIX",
|
|
"DIX+802.3", "APPLETALK", "ARCNET", "FDDI", "SDLC", "BSC",
|
|
"HDLC", or "ISDN"
|
|
12h WORD length of station addresses in bytes
|
|
14h 16 BYTEs permanent station address
|
|
24h 16 BYTEs current station address
|
|
34h DWORD current functional adapter address (00000000h if none)
|
|
38h DWORD pointer to multicast address list
|
|
3Ch DWORD link speed in bits/sec
|
|
40h DWORD service flags (see #01439)
|
|
44h WORD maximum frame size which may be both sent and received
|
|
46h DWORD total transmit buffer capacity in bytes
|
|
4Ah WORD transmit buffer allocation block size in bytes
|
|
4Ch DWORD total receive buffer capacity in bytes
|
|
50h WORD receive buffer allocation block size in bytes
|
|
52h 3 BYTEs IEEE vendor code
|
|
55h BYTE vendor adapter code
|
|
56h DWORD pointer to ASCIZ vendor adapter description
|
|
5Ah WORD IRQ used by adapter
|
|
5Ch WORD transmit queue depth
|
|
5Eh WORD maximum supported number of data blocks in buffer descriptors
|
|
60h N BYTEs vendor-specific info
|
|
SeeAlso: #01440
|
|
|
|
Bitfields for service flags:
|
|
Bit(s) Description (Table 01439)
|
|
0 supports broadcast
|
|
1 supports multicast
|
|
2 supports functional/group addressing
|
|
3 supports promiscuous mode
|
|
4 station address software settable
|
|
5 statistics always current
|
|
6 supports InitiateDiagnostics
|
|
7 supports loopback
|
|
8 MAC does primarily ReceiveChain indications instead of ReceiveLookahead
|
|
indications
|
|
9 supports IBM source routing
|
|
10 supports MAC reset
|
|
11 supports Open/Close adapter
|
|
12 supports interrupt request
|
|
13 supports source routing bridge
|
|
14 supports GDT virtual addresses (OS/2 version)
|
|
15 multiple TransferDatas allowed durign a single indication
|
|
16 MAC normally sets FrameSize = 0 in ReceiveLookahead
|
|
17-31 reserved, must be 0
|
|
|
|
Format of NetBIOS Service-Specific Characteristics Table:
|
|
Offset Size Description (Table 01440)
|
|
00h WORD length of table in bytes
|
|
02h 16 BYTEs ASCIZ type name of NetBIOS module
|
|
12h WORD NetBIOS module code
|
|
14h N BYTEs vendor-specific info
|
|
SeeAlso: #01438
|
|
|
|
Format of MAC Service-Specific Status Table:
|
|
Offset Size Description (Table 01441)
|
|
00h WORD length of table in bytes
|
|
02h DWORD seconds since 0:00 1/1/70 when diagnostics last run
|
|
(FFFFFFFFh = never)
|
|
06h DWORD MAC status bits (see #01442)
|
|
0Ah WORD current packet filter flags (see #01443)
|
|
0Ch DWORD pointer to media-specific status table or 0000h:0000h
|
|
10h DWORD seconds past 0:00 1/1/70 of last ClearStatistics
|
|
14h DWORD total frames received (FFFFFFFFh = not counted)
|
|
18h DWORD frames with CRC error (FFFFFFFFh = not counted)
|
|
1Ch DWORD total bytes received (FFFFFFFFh = not counted)
|
|
20h DWORD frames discarded--no buffer space (FFFFFFFFh = not counted)
|
|
24h DWORD multicast frames received (FFFFFFFFh = not counted)
|
|
28h DWORD broadcast frames received (FFFFFFFFh = not counted)
|
|
2Ch DWORD frames with errors (FFFFFFFFh = not counted)
|
|
30h DWORD overly large frames (FFFFFFFFh = not counted)
|
|
34h DWORD frames less than minimum size (FFFFFFFFh = not counted)
|
|
38h DWORD multicast bytes received (FFFFFFFFh = not counted)
|
|
3Ch DWORD broadcast bytes received (FFFFFFFFh = not counted)
|
|
40h DWORD frames discarded--hardware error (FFFFFFFFh = not counted)
|
|
44h DWORD total frames transmitted (FFFFFFFFh = not counted)
|
|
48h DWORD total bytes transmitted (FFFFFFFFh = not counted)
|
|
4Ch DWORD multicast frames transmitted (FFFFFFFFh = not counted)
|
|
50h DWORD broadcast frames transmitted (FFFFFFFFh = not counted)
|
|
54h DWORD broadcast bytes transmitted (FFFFFFFFh = not counted)
|
|
58h DWORD multicast bytes transmitted (FFFFFFFFh = not counted)
|
|
5Ch DWORD frames not transmitted--timeout (FFFFFFFFh = not counted)
|
|
60h DWORD frames not transmitted--hardware error (FFFFFFFFh = not countd)
|
|
64h N BYTEs vendor-specific info
|
|
|
|
Bitfields for MAC status bits:
|
|
Bit(s) Description (Table 01442)
|
|
0-2 operational status
|
|
000 hardware not installed
|
|
001 hardware failed startup diagnostics
|
|
010 hardware configuration problem
|
|
011 hardware fault
|
|
100 operating marginally due to soft faults
|
|
101 reserved
|
|
110 reserved
|
|
111 hardware fully operational
|
|
3 MAC bound
|
|
4 MAC open
|
|
5 diagnostics in progress
|
|
6-31 reserved
|
|
|
|
Bitfields for packet filter flags:
|
|
Bit(s) Description (Table 01443)
|
|
0 directed/multicast or group/functional
|
|
1 broadcast
|
|
2 promiscuous
|
|
3 all source routing
|
|
4-15 reserved, must be zero
|
|
--------D-214402-----------------------------
|
|
INT 21 U - MS-DOS 7.0+ - CONFIG$ device - GET CONFIGURATION INFORMATION
|
|
AX = 4402h
|
|
BX = file handle for character device "CONFIG$"
|
|
CX = number of bytes to read (at least 5)
|
|
DS:DX -> buffer for ??? data (see #01444)
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually read
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
SeeAlso: AX=4403h"CONFIG$"
|
|
|
|
Format of MS-DOS 7.0 CONFIG$ ??? data:
|
|
Offset Size Description (Table 01444)
|
|
00h WORD ??? (0000h)
|
|
02h WORD ??? (0000h or value read from IO.SYS segment 70h)
|
|
04h BYTE ??? (value read from IO.SYS segment 70h)
|
|
--------I-214402-----------------------------
|
|
INT 21 U - IBM SYSTEM 36/38 WORKSTATION EMULATION - VDI.SYS - GET ???
|
|
AX = 4402h
|
|
BX = handle for character device "GDMS"
|
|
CX = number of bytes to read (>= 4)
|
|
DS:DX -> buffer (see #01445)
|
|
Return: CF set on error
|
|
AX = error code (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if successful
|
|
AX = number of bytes read
|
|
|
|
Format of System 36/38 emulator returned data:
|
|
Offset Size Description (Table 01445)
|
|
00h 4 BYTEs ???
|
|
04h DWORD pointer to ???
|
|
08h 4 BYTEs ???
|
|
--------m-214402-----------------------------
|
|
INT 21 U - LASTBYTE.SYS v1.19 - IOCTL - GET ??? TABLE
|
|
AX = 4402h
|
|
BX = handle for device "LA$TBYTE"
|
|
CX = 0004h
|
|
DS:DX -> DWORD to hold address of 39-byte table of ???
|
|
Return: CF set on error
|
|
AX = error code (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if successful
|
|
AX = number of bytes read
|
|
Program: LASTBYTE.SYS is part of the shareware "The Last Byte" memory
|
|
management package by Key Software Products
|
|
SeeAlso: AX=4402h"HIGHUMM"
|
|
--------m-214402-----------------------------
|
|
INT 21 - HIGHUMM.SYS v1.17+ - IOCTL - GET API ADDRESS
|
|
AX = 4402h
|
|
BX = handle for device "KSP$UMM"
|
|
CX = 0004h
|
|
DS:DX -> DWORD to hold entry point (see #01446)
|
|
Return: CF set on error
|
|
AX = error code (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if successful
|
|
AX = number of bytes read
|
|
Program: HIGHUMM.SYS is part of the shareware "The Last Byte" memory
|
|
management package by Key Software Products
|
|
SeeAlso: AX=4402h"LASTBYTE"
|
|
|
|
(Table 01446)
|
|
Call HIGHUMM.SYS entry point with:
|
|
AH = 00h allocate UMB (same as XMS function 10h) (see INT 2F/AX=4310h)
|
|
DX = size in paragraphs
|
|
Return: BX = segment number (if successful)
|
|
DX = size of requested block/size of largest block
|
|
AH = 01h deallocate UMB (same as XMS func 11h) (see INT 2F/AX=4310h)
|
|
DX = segment number of UMB
|
|
AH = 02h request a bank-switched memory block
|
|
DX = size in paragraphs
|
|
Return: BX = segment number (if successful)
|
|
DX = size of requested block/size of largest block
|
|
AH = 03h release a bank-switched memory block
|
|
DX = segment number
|
|
AH = 04h transfer data to/from high memory
|
|
DS:SI -> source
|
|
ES:DI -> destination
|
|
CX = length in bytes
|
|
Note: enables bank-switched memory, does the copy, then disables
|
|
bank-switched memory
|
|
AH = 05h get a word from bank-switched memory
|
|
ES:DI -> word to read
|
|
Return: DX = word
|
|
AH = 06h put a word to bank-switched memory
|
|
ES:DI -> word to write
|
|
DX = word
|
|
AH = 07h put a byte to bank-switched memory
|
|
ES:DI -> byte to write
|
|
DL = byte
|
|
AH = 08h enable bank-switched memory
|
|
DS:SI -> 6-byte status save area
|
|
AH = 09h disable bank-switched memory
|
|
DS:SI -> 6-byte save area from enable call (AH=08h)
|
|
AH = 0Ah assign name to UMB or high bank-switched block
|
|
DX = segment number
|
|
DS:SI -> 8-byte blank-padded name
|
|
AH = 0Bh locate UMB block by name
|
|
DS:SI -> 8-byte blank-padded name
|
|
Return: BX = segment number (if successful)
|
|
DX = size of block
|
|
AH = 0Ch locate bank-switched block by name
|
|
DS:SI -> 8-byte blank-padded name
|
|
Return: BX = segment number (if successful)
|
|
DX = size of block
|
|
Return: AX = status code
|
|
0001h successful
|
|
0000h failed
|
|
BL = error code
|
|
80h not implemented
|
|
B0h insufficient memory, smaller block available
|
|
B1h insufficient memory, no blocks available
|
|
B2h invalid segment number
|
|
Note: only functions 00h and 01h are always available; the remaining
|
|
functions are only enabled if the proper commandline switch is given
|
|
--------c-214402-----------------------------
|
|
INT 21 - SMARTDRV.SYS v3.x only - IOCTL - GET CACHE STATUS
|
|
AX = 4402h
|
|
BX = file handle for device "SMARTAAR"
|
|
CX = number of bytes to read (min 28h)
|
|
DS:DX -> buffer for status record (see #01447)
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually read
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Note: NCache2 (from the Norton Utilities v8.0) attempts to support this
|
|
interface, but does not do so correctly, often hanging the system;
|
|
one should use the SmartDrive v4.x or NCache private interfaces
|
|
(see INT 2F/AX=4A10h/BX=0000h,INT 2F/AX=FE00h/DI=4E55h)
|
|
SeeAlso: AX=4403h"SMARTDRV",INT 2F/AX=4A10h/BX=0000h
|
|
|
|
Format of SMARTDRV status record:
|
|
Offset Size Description (Table 01447)
|
|
00h BYTE write-through flag (always 01h)
|
|
01h BYTE writes should be buffered (always 00h)
|
|
02h BYTE cache enabled if 01h
|
|
03h BYTE driver type (01h extended memory, 02h expanded)
|
|
04h WORD clock ticks between cache flushes (currently unused)
|
|
06h BYTE cache contains locked tracks if nonzero
|
|
07h BYTE flush cache on INT 19 reboot if nonzero
|
|
08h BYTE cache full track writes if nonzero
|
|
09h BYTE double buffering (for VDS) state (00h off, 01h on, 02h dynamic)
|
|
0Ah DWORD original INT 13 vector
|
|
0Eh BYTE minor version number
|
|
0Fh BYTE major version number
|
|
10h WORD unused
|
|
12h WORD sectors read \
|
|
14h WORD sectors already in cache > may be scaled rather than
|
|
16h WORD sectors already in track buffer / absolute counts
|
|
18h BYTE cache hit rate in percent
|
|
19h BYTE track buffer hit rate in percent
|
|
1Ah WORD total tracks in cache
|
|
1Ch WORD number of tracks in use
|
|
1Eh WORD number of locked tracks
|
|
20h WORD number of dirty tracks
|
|
22h WORD current cache size in 16K pages
|
|
24h WORD original (maximum) cache size in 16K pages
|
|
26h WORD minimum cache size in 16K pages
|
|
28h DWORD pointer to byte flag to increment for locking cache contents
|
|
--------d-214402-----------------------------
|
|
INT 21 - CD-ROM device driver - IOCTL INPUT
|
|
AX = 4402h
|
|
BX = file handle referencing character device for CD-ROM driver
|
|
CX = number of bytes to read
|
|
DS:DX -> control block (see #01449)
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually read
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: the data returned depends on the first byte of the control block
|
|
(two bytes for functions 01h/07h/0Bh, see #01449); the remainder of
|
|
the control block is filled by the driver
|
|
some device drivers support several subunits (that is more than one
|
|
drive) but it is not possible to distinguish between them with this
|
|
function; use INT 2F/AX=1510h or INT 2F/AX=0802h instead
|
|
under Windows95, the "mscd$$$$" device cannot be opened so you cannot
|
|
obtain the handle required by this function: use INT 2F/AX=1510h
|
|
or INT 2F/AX=0802h instead
|
|
SeeAlso: AX=4403h"CD-ROM",INT 2F/AX=0802h,INT 2F/AX=1510h
|
|
|
|
(Table 01448)
|
|
Values for CD-ROM data being requested:
|
|
00h device driver header address
|
|
01h drive head location
|
|
02h reserved
|
|
03h error statistics
|
|
04h audio channel info
|
|
05h raw drive bytes (uninterpreted and device-specific)
|
|
06h device status
|
|
07h sector size
|
|
08h volume size
|
|
09h media change status
|
|
0Ah audio disk info
|
|
0Bh audio track info
|
|
0Ch audio Q-Channel info
|
|
0Dh audio sub-channel info
|
|
0Eh UPC code
|
|
0Fh audio status info
|
|
|
|
Format of CD-ROM control block:
|
|
Offset Size Description (Table 01449)
|
|
00h BYTE data being requested (see #01448)
|
|
---function 00h---
|
|
01h DWORD device driver header address (see also AH=52h,#01646)
|
|
---function 01h---
|
|
01h BYTE (call) addressing mode
|
|
00h HSG
|
|
01h Red Book
|
|
02h DWORD current location of drive's head
|
|
logical sector number in HSG mode
|
|
frame/second/minute/unused in Red Book mode
|
|
(HSG sector = minute * 4500 + second * 75 + frame - 150)
|
|
---function 03h---
|
|
01h N BYTEs undefined as of 5 Aug 88 specification
|
|
---function 04h---
|
|
01h BYTE input channel (0-3) for output channel 0
|
|
02h BYTE volume for output channel 0
|
|
03h BYTE input channel (0-3) for output channel 1
|
|
04h BYTE volume for output channel 1
|
|
05h BYTE input channel (0-3) for output channel 2
|
|
06h BYTE volume for output channel 2
|
|
07h BYTE input channel (0-3) for output channel 3
|
|
08h BYTE volume for output channel 3
|
|
Notes: output channels 0 and 1 are left and right, 2 and 3 are left prime and
|
|
right prime; a volume of 00h is off
|
|
the default setting is for each input channel to be assigned to the
|
|
same-numbered output channel at full (FFh) volume
|
|
---function 05h---
|
|
01h BYTE number of bytes read
|
|
02h 128 BYTEs buffer for drive bytes
|
|
---function 06h---
|
|
01h DWORD device parameters (see #01450)
|
|
---function 07h---
|
|
01h BYTE (call) read mode
|
|
00h cooked
|
|
01h raw
|
|
02h WORD (return) sector size in bytes
|
|
---function 08h---
|
|
01h DWORD volume size in sectors
|
|
BUGS: Aztech device driver v1.10 and v1.27 (at least) return the last sector
|
|
number, i.e. total number of sectors - 1
|
|
Windows95 returns the total number of sectors + 150 (see the Red Book
|
|
to HSG conversion formula at function 01h to understand why this
|
|
happens)
|
|
---function 09h---
|
|
01h BYTE media change status
|
|
00h don't know
|
|
01h media unchanged
|
|
FFh media has been changed
|
|
---function 0Ah---
|
|
01h BYTE lowest audio track number
|
|
02h BYTE highest audio track number
|
|
03h DWORD start address of lead-out track (Red Book format)
|
|
--function 0Bh---
|
|
01h BYTE (call) track number
|
|
02h DWORD starting point of track (Red Book format)
|
|
06h BYTE track control info
|
|
bits 15,14,12: track type (notice: bits not contiguous!)
|
|
000 two audio channels, no pre-emphasis
|
|
001 two audio channels with pre-emphasis
|
|
010 data track
|
|
100 four audio channels, no pre-emphasis
|
|
101 four audio channels with pre-emphasis
|
|
other reserved
|
|
bit 13: digital copy permitted
|
|
---function 0Ch---
|
|
01h BYTE CONTROL and ADR byte (as received from drive)
|
|
02h BYTE track number
|
|
03h BYTE point or index
|
|
04h BYTE minute \
|
|
05h BYTE second > running time within track
|
|
06h BYTE frame /
|
|
07h BYTE zero
|
|
08h BYTE "AMIN" or "PMIN" \
|
|
09h BYTE "ASEC" or "PSEC" > running time on disk
|
|
0Ah BYTE "AFRAME" or "PFRAME" /
|
|
---function 0Dh---
|
|
01h DWORD starting frame address (Red Book format)
|
|
05h DWORD transfer address
|
|
09h DWORD number of sectors to read
|
|
Note: copies 96 bytes of sub-channel info per sector into buffer
|
|
---function 0Eh---
|
|
01h BYTE CONTROL and ADR byte
|
|
02h 7 BYTEs UPC/EAN code (13 BCD digits,low-order nybble of last byte is 0)
|
|
09h BYTE zero
|
|
0Ah BYTE "AFRAME"
|
|
---function 0Fh---
|
|
??? documentation not yet available
|
|
01h WORD pause status (0000h not paused, 0001h paused)
|
|
03h DWORD audio play start address
|
|
07h DWORD ??? audio play length or end address
|
|
|
|
Bitfields for CD-ROM device parameters:
|
|
Bit(s) Description (Table 01450)
|
|
0 door open
|
|
1 door unlocked
|
|
2 supports raw reading in addition to cooked
|
|
3 writable
|
|
4 can play audio/video tracks
|
|
5 supports interleaving
|
|
6 reserved
|
|
7 supports prefetch requests
|
|
8 supports audio channel control
|
|
9 supports Red Book addressing in addition to HSG
|
|
10 audio is playing
|
|
11 no disk in drive
|
|
12 supports R-W subchannels
|
|
--------m-214402-----------------------------
|
|
INT 21 - Quarterdeck - QEMM-386 v5+ - GET API ENTRY POINT
|
|
AX = 4402h
|
|
BX = file handle for device "QEMM386$"
|
|
CX = 0004h
|
|
DS:DX -> DWORD buffer for API entry point
|
|
Return: CF clear if successful
|
|
buffer filled (refer to INT 67/AH=3Fh for entry point parameters)
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Note: Quarterdeck recently (June 1993) documented this function, but the
|
|
documentation incorrectly states that it is only available for
|
|
QEMM 6+
|
|
SeeAlso: AX=4402h"HOOKROM",INT 2F/AX=D201h/BX=5145h,INT 67/AH=3Fh
|
|
--------Q-214402-----------------------------
|
|
INT 21 U - Quarterdeck - HOOKROM.SYS - GET HOOKED VECTOR TABLE
|
|
AX = 4402h
|
|
BX = file handle for device "HOOKROM$"
|
|
CX = 0004h
|
|
DS:DX -> DWORD buffer for address of hooked vector table (see #01451)
|
|
Return: CF clear if successful
|
|
DS:DX buffer filled
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
SeeAlso: AX=4402h/SF=01h
|
|
|
|
Format of HOOKROM.SYS hooked vector table entry:
|
|
Offset Size Description (Table 01451)
|
|
00h 5 BYTEs FAR jump to actual interrupt handler
|
|
(end of table if first byte is not EAh)
|
|
05h BYTE interrupt vector number
|
|
--------d-214402-----------------------------
|
|
INT 21 - Advanced SCSI Programming Interface (ASPI) - INTERFACE
|
|
AX = 4402h
|
|
BX = file handle for device "SCSIMGR$"
|
|
CX = 0004h or 0005h (refer to notes below)
|
|
DS:DX -> buffer for result (see #01452), set to zeros before call
|
|
Return: CF clear if successful
|
|
AX = 0004h or 0005h (refer to notes below)
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: the variant of the call requesting five bytes is an UNDOCUMENTED
|
|
extension supported by Adaptec's ASPI2DOS.SYS, ASPI4DOS.SYS, and
|
|
ASPI7DOS.SYS; if made of a host manager which does not support the
|
|
variant, only four bytes will be returned. If the variant is
|
|
supported, Adaptec's WINASPI.DLL assumes that the host manager is
|
|
an "advanced" one which operates in either real or protected mode
|
|
(and thus does not require a DPMI INT 31/AX=0301h call to be invoked
|
|
from protected mode). Support of the five-byte variant also appears
|
|
to imply that an advanced ASPI host manager uses no temporary
|
|
storage space except the SRB (see #01454) and the stack, and that it
|
|
is fully reentrant.
|
|
if called with a standard request for four bytes, even Adaptec's
|
|
advanced drivers return only the requested four bytes containing the
|
|
ASPI entry point address
|
|
the function address is called with the address of a SCSI Request
|
|
Block (see #01454) on the stack and the caller must clean up the
|
|
stack
|
|
SeeAlso: AX=440Ch"ASPITAPE",INT 11/AH=FFh"WD7000"
|
|
|
|
Format of ASPI IOCTL result:
|
|
Offset Size Description (Table 01452)
|
|
00h DWORD function address
|
|
04h BYTE number of SCSI host adapters supported by host manager
|
|
|
|
(Table 01453)
|
|
Values for ASPI request number:
|
|
00h "HA_INQ" host adapter inquiry / extended host adapter inquiry
|
|
01h "GET_TYPE" get device type
|
|
02h "EXEC_SIO" execute SCSI I/O
|
|
03h "ABORT_SRB" abort SRB
|
|
04h "RESET_DEV" reset SCSI device
|
|
05h "SET_HAPRMS" set host adapter parameters
|
|
06h get disk drive information
|
|
7Fh (Adaptec) get ASPI manager info?
|
|
Note: request 7Fh is supported by all the Adaptec's DOS ASPI managers:
|
|
ASPI2DOS.SYS (for AHA-152x), ASPI4DOS.SYS (for AHA-154x/164x),
|
|
ASPI7DOS.SYS (for AIC-77xx), and ASPI8DOS.SYS (for AIC-78xx)
|
|
|
|
Format of SCSI Request Block (64 bytes):
|
|
Offset Size Description (Table 01454)
|
|
00h BYTE request number (see #01453)
|
|
01h BYTE request status (see #01455)
|
|
02h BYTE host adapter ID
|
|
03h BYTE request flags (see #01456)
|
|
04h DWORD reserved (0)
|
|
---request 00h---
|
|
08h BYTE (ret) number of host adapters
|
|
09h BYTE (ret) target adapter ID
|
|
0Ah 16 BYTEs (ret) SCSI manager ID
|
|
1Ah 16 BYTEs (ret) host adapter ID
|
|
2Ah 16 BYTEs (ret) host adapter-unique parameters (see #90010,#90011)
|
|
---extended request 00h---
|
|
04h 2 BYTEs (call) extended request signature 55h AAh
|
|
(ret) if extended request supported, reply AAh 55h
|
|
06h WORD (call) length of extended buffer at offset 3Ah
|
|
(ret) number of bytes returned in extended buffer
|
|
08h BYTE (ret) number of host adapters
|
|
09h BYTE (ret) target adapter ID
|
|
0Ah 16 BYTEs (ret) SCSI manager ID
|
|
1Ah 16 BYTEs (ret) host adapter ID
|
|
2Ah 16 BYTEs (ret) host adapter-unique parameters
|
|
3Ah N BYTEs extended buffer
|
|
3Ah WORD features (see #01457)
|
|
3Ch WORD maximum scatter/gather list length
|
|
3Eh DWORD maximum SCIS data transfer size (0 = unlimited)
|
|
---request 01h---
|
|
08h BYTE target ID
|
|
09h BYTE logical unit number
|
|
0Ah BYTE (ret) device type (see #01460)
|
|
---request 02h---
|
|
08h BYTE target ID
|
|
09h BYTE logical unit number
|
|
0Ah DWORD data allocation length
|
|
(ret) residual byte length (if supported and requested)
|
|
0Eh BYTE sense allocation length
|
|
0Fh DWORD data buffer pointer
|
|
13h DWORD next request pointer (for linking)
|
|
17h BYTE CDB length
|
|
18h BYTE (ret) host adapter status (see #01454)
|
|
19h BYTE (ret) target status (see #01459)
|
|
1Ah DWORD post routine address (see #01466)
|
|
1Eh WORD real mode Post DS
|
|
20h DWORD SRB pointer
|
|
24h WORD reserved
|
|
26h DWORD SRB physical address
|
|
2Ah 22 BYTEs SCSIMGR$ workspace
|
|
40h N BYTEs CCB, including sense data (20-24 bytes)
|
|
---request 03h---
|
|
08h DWORD address of SRB to abort
|
|
---request 04h---
|
|
08h BYTE target ID
|
|
09h BYTE logical unit number
|
|
0Ah 14 BYTEs reserved
|
|
18h BYTE (ret) host adapter status (see #01458)
|
|
19h BYTE (ret) target status (see #01459)
|
|
1Ah DWORD post routine address
|
|
1Eh 34 BYTEs workspace
|
|
---request 05h---
|
|
08h 16 BYTEs host adapter-unique parameters
|
|
---request 06h---
|
|
08h BYTE target ID
|
|
09h BYTE logical unit number
|
|
0Ah BYTE disk drive flags (see #01461)
|
|
0Bh BYTE INT 13h drive number
|
|
0Ch BYTE preferred head number translation
|
|
0Dh BYTE preferred sector size translation
|
|
0Eh 10 BYTEs reserved
|
|
---request 7Fh---
|
|
08h WORD base I/O port address
|
|
0Ah BYTE number of I/O ports used
|
|
0Bh BYTE ??? (01h returned for AHA-152x)
|
|
0Ch BYTE interrupt level
|
|
0Dh BYTE DMA channel
|
|
0Eh BYTE (ASPI7DOS.SYS) EISA slot number
|
|
(ASPI8DOS.SYS) PCI device number
|
|
0Fh BYTE bits 7-1: reserved (0)
|
|
bit 0: (AHA-152x) ???
|
|
10h DWORD ASPI entry point address
|
|
14h DWORD previous ASPI entry point address
|
|
18h WORD offset to "ASPI request dispatcher" procedure
|
|
1Ah WORD offset to "interrupt handler" procedure
|
|
1Ch WORD offset to some procedure
|
|
1Eh WORD offset to some procedure
|
|
20h WORD offset to host adapter data
|
|
22h BYTE ??? (apparently always 02h)
|
|
23h BYTE reserved??? (0)
|
|
24h BYTE (ASPI8DOS.SYS) PCI bus number?
|
|
25h 11 BYTEs reserved??? (0)
|
|
SeeAlso: #01462
|
|
|
|
(Table 01455)
|
|
Values for ASPI request status:
|
|
00h not done yet
|
|
01h completed successfully
|
|
02h aborted by host
|
|
04h SCSI I/O error
|
|
80h invalid
|
|
81h no adapter
|
|
82h no device attached
|
|
else status
|
|
SeeAlso: #01454
|
|
|
|
Bitfields for ASPI request flags:
|
|
Bit(s) Description (Table 01456)
|
|
0 posting enabled
|
|
1 linking enabled
|
|
2 residual byte length reported in Data Allocation Length field
|
|
3 transfer from SCSI target to host
|
|
4 transfer from host to SCSI target
|
|
5 scatter/gather
|
|
7-6 reserved
|
|
Note: no data is transferred if both bits 3 and 4 are set; if neither is
|
|
set, the direction is determined by the SCSI command
|
|
SeeAlso: #01454
|
|
|
|
Bitfields for ASPI extended features:
|
|
Bit(s) Description (Table 01457)
|
|
0 scatter/gather supported
|
|
1 residual byte length reported
|
|
2 Wide SCSI 16 host adapter
|
|
3 Wide SCSI 32 host adapter
|
|
15-4 reserved
|
|
SeeAlso: #01454
|
|
|
|
(Table 01458)
|
|
Values for host adapter status:
|
|
00h no error detected
|
|
11h select timeout
|
|
12h data overrun
|
|
13h bus error
|
|
14h bus failure
|
|
|
|
(Table 01459)
|
|
Values for target status:
|
|
00h no status
|
|
02h sense data stored in SRB
|
|
08h target busy
|
|
18h reservation error
|
|
|
|
(Table 01460)
|
|
Values for device type:
|
|
00h disk drive
|
|
01h tape drive (streamer)
|
|
02h printer
|
|
03h processor
|
|
04h WORM drive
|
|
05h CD-ROM drive
|
|
06h scanner
|
|
07h optical drive
|
|
08h autochanger
|
|
09h communications device
|
|
|
|
(Table 01461)
|
|
Values for disk drive flags:
|
|
00h no INT 13 access
|
|
01h INT 13 with DOS access
|
|
02h INT 13 without DOS access
|
|
03h invalid flags
|
|
|
|
Format of CCB:
|
|
Offset Size Description (Table 01462)
|
|
00h BYTE command code (see #01463)
|
|
01h BYTE flags
|
|
bits 4-0: vary by function
|
|
bits 7-5: logical unit number
|
|
02h BYTE "adr_1"
|
|
03h BYTE "adr_0"
|
|
04h BYTE length
|
|
05h BYTE control
|
|
...
|
|
06h/0Ah 14 BYTEs buffer for sense data (see #01464)
|
|
SeeAlso: #01454
|
|
|
|
(Table 01463)
|
|
Values for CCB command code:
|
|
00h test unit ready
|
|
01h rewind
|
|
03h request sense data
|
|
05h get block size limits
|
|
08h Group 0 read
|
|
0Ah Group 0 write
|
|
10h write file marks
|
|
11h SCSI Space (set position?)
|
|
12h SCSI Inquire
|
|
15h set mode information
|
|
16h reserve SCSI device
|
|
17h release SCSI device
|
|
19h erase
|
|
1Ah request mode information
|
|
1Bh load/unload media
|
|
1Dh request target self-check
|
|
24h set window parameters
|
|
25h get window parameters
|
|
28h Group 1 read
|
|
2Ah Group 1 write
|
|
31h document feeder control
|
|
34h get scan data status
|
|
---vendor-specific commands---
|
|
D3h get document feeder status
|
|
D4h set document feeder mode
|
|
|
|
Format of sense data:
|
|
Offset Size Description (Table 01464)
|
|
00h BYTE error code (bit 7 set if valid)
|
|
01h BYTE segment number
|
|
02h BYTE sense key
|
|
bit 6: EOM
|
|
bit 5: ILI
|
|
bits 0-3: sense key (see #01465)
|
|
03h 4 BYTEs information bytes
|
|
07h BYTE additional sense length (0Ah)
|
|
08h 4 BYTEs command-specific information
|
|
0Ch BYTE additional sense code
|
|
0Dh BYTE additional sense code qualifier
|
|
0Eh BYTE field replaceable unit code
|
|
0Fh 3 BYTEs sense key specific bytes
|
|
|
|
(Table 01465)
|
|
Values for sense key:
|
|
00h no sense data
|
|
02h SCSI unit not ready
|
|
03h media error
|
|
04h unrecoverable hardware error
|
|
05h illegal parameter in CDB
|
|
06h target has been reset
|
|
0Bh target aborted command
|
|
|
|
(Table 01466)
|
|
Values ASPI post function is called with:
|
|
STACK: DWORD -> SRB (see #01454) which completed
|
|
interrupts disabled
|
|
Return: EBP, EBX, ESI, EDI must be preserved
|
|
interrupts disabled
|
|
Note: the post function may issue any ASPI function except an abort; it
|
|
should complete as quickly as possible
|
|
|
|
Format of ASPI2DOS.SYS v3.65 host adapter unique parameters:
|
|
Offset Size Description (Table 90010)
|
|
00h WORD reserved? (0)
|
|
02h WORD reserved? (0)
|
|
04h WORD base I/O port address
|
|
06h BYTE interrupt level
|
|
07h 9 BYTEs reserved (0)
|
|
SeeAlso: #90011,#01454
|
|
|
|
Format of ASPI4DOS.SYS v3.35 host adapter unique parameters:
|
|
Offset Size Description (Table 90011)
|
|
00h WORD offset to "ASPI request dispatcher" procedure
|
|
02h WORD offset to "interrupt handler" procedure
|
|
04h 12 BYTEs reserved (0)
|
|
SeeAlso: #90010,#01454
|
|
--------m-214402-----------------------------
|
|
INT 21 U - Qualitas 386MAX v6.00+ - IOCTL INPUT - GET STATE
|
|
AX = 4402h
|
|
BX = file handle for device "386MAX$$"
|
|
CX = number of bytes to read
|
|
DS:DX -> BYTE 03h followed by 386MAX state buffer (see #01467)
|
|
Return: CF clear if successful
|
|
buffer at DS:DX+1 filled
|
|
AX = number of bytes actually copied
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: if the value given in CX is less than the size of the state record
|
|
(5Ah for v6.01, 66h for v7.00), only a partial state record will be
|
|
returned
|
|
the state is 40h bytes for 386MAX (actually ASTEMM) v2.20 ("386MAX$$"
|
|
did not exist yet, use "QMMXXXX0" and then "EMMXXXX0" instead) and
|
|
56h bytes for v5.11.
|
|
to invoke 386MAX API functions, push DX onto the stack, load DX with
|
|
the word at offset 25h in the returned state, load all other
|
|
registers as needed for the desired function, and execute an
|
|
OUT DX,AL or OUT DX,AX; DX will be set to the pushed value on return
|
|
if it is not otherwise modified by the API function. For safety,
|
|
in case a function is not supported or 386MAX is not present, SP
|
|
should be saved and restored around the API call.
|
|
Windows 3.1 Standard mode, LAN Manager, and Windows for Workgroups all
|
|
use the 386MAX API; LAN Manager and Windows for Workgroups reportedly
|
|
make some calls incorrectly
|
|
SeeAlso: AX=4403h/SF=03h"386MAX",INT 67/AH=3Fh
|
|
|
|
Format of 386MAX v6.01+ state:
|
|
Offset Size Description (Table 01467)
|
|
-1 BYTE (call) 03h
|
|
00h 6 BYTEs signature "386MAX"
|
|
06h 4 BYTEs version string "N;NN" or "N.NN" (i.e. "6;01" for v6.01)
|
|
(';' by default; apparently changed to a period when 386MAX
|
|
has linked high RAM into DOS's memory chain)
|
|
0Ah WORD segment of low-memory portion of 386MAX.SYS
|
|
0Ch 2 BYTEs ???
|
|
0Eh WORD segment of ??? memory block or 0000h
|
|
10h WORD bit flags 1 (see #01468)
|
|
12h WORD starting address of video memory in KB
|
|
14h 2 BYTEs ???
|
|
16h WORD total high DOS memory in KB
|
|
18h 2 BYTEs ???
|
|
1Ah WORD available shared memory in KB
|
|
1Ch WORD KBytes extended memory used by 386MAX
|
|
1Eh 2 BYTEs ???
|
|
20h WORD total extended memory in KB
|
|
22h WORD IO port to write (OUT DX,AL) to invoke 386MAX INT 15 functions
|
|
24h WORD IO port to write (OUT DX,AL) to invoke 386MAX API functions
|
|
(see #01481)
|
|
26h WORD ??? (depends on DOS version)
|
|
28h WORD size of ??? in paragraphs
|
|
2Ah DWORD machine type (see #01476)
|
|
2Eh DWORD -> first DOS memory control block
|
|
32h WORD system configuration flags (see #01469)
|
|
34h WORD debugging flags 1 (see #01470)
|
|
36h WORD debugging flags 2 (see #01471)
|
|
38h 2 BYTEs ???
|
|
3Ah WORD segment of first MCB in high memory chain
|
|
3Ch WORD feature flags 1 (see #01473)
|
|
3Eh WORD feature flags 2 (see #01474)
|
|
40h WORD feature flags 3 (see #01475)
|
|
42h WORD segment of first 386MAX control block??? (see #01477)
|
|
44h WORD amount of memory to report available on INT 15/AH=88h
|
|
46h 4 BYTEs ???
|
|
4Ah WORD number of K at start of address space swapped with fast
|
|
extended memory (SWAP= parameter)
|
|
4Ch 2 BYTEs ???
|
|
4Eh WORD segment address of ???
|
|
50h WORD debugging flags 3 (see #01472)
|
|
52h DWORD old INT 21h
|
|
56h DWORD pointer to 386MAX's EMS (INT 67h) handler
|
|
---386MAX v7.00---
|
|
5Ah DWORD KB of extended memory managed by 386MAX
|
|
5Eh DWORD bytes of extended memory (EXT= parameter)
|
|
62h 4 BYTEs ???
|
|
|
|
Bitfields for 386MAX bit flags 1:
|
|
Bit(s) Description (Table 01468)
|
|
1 ???
|
|
2 allow A20 to be enabled/disabled???
|
|
3 ??? (cleared by calling INT 67 functions or starting MSWindows)
|
|
4 high RAM present???
|
|
5 386MAX in AUTO mode
|
|
6 386MAX enabled
|
|
7 386MAX is providing EMS services
|
|
8 ??? (affects API function 08h)
|
|
9 A20 gate closed (A20 disabled) (see INT 15/AX=2402h)
|
|
10 Weitek support enabled
|
|
11 ???
|
|
12 ROMs not shadowed???
|
|
13 QPMS has been used
|
|
14 ???
|
|
15 ???
|
|
|
|
Bitfields for 386MAX system configuration flags:
|
|
Bit(s) Description (Table 01469)
|
|
1 ROM compressed???
|
|
3 ???
|
|
5 386MAX loaded into high memory
|
|
6 Microchannel bus
|
|
7 Weitek math coprocessor detected
|
|
9 ??? (also generates INT 01 on ??? and INT 03 on ???)
|
|
11 PC/XT (thus only single 8259 interrupt controller present, DMA only
|
|
in 1st megabyte, etc)
|
|
13 LMLTOP= specified
|
|
14 enable A20 control???
|
|
15 ???
|
|
|
|
Bitfields for 386MAX debugging flags 1:
|
|
Bit(s) Description (Table 01470)
|
|
0 DEBUG=LED
|
|
1 DEBUG=X67
|
|
2 DEBUG=INV
|
|
3 DEBUG=EMSPTED
|
|
4 DEBUG=JMP
|
|
5 DEBUG=CALL
|
|
6 DEBUG=HLT
|
|
7 DEBUG=PMR
|
|
8 DEBUG=CR3
|
|
9 DEBUG=CAPS or DEBUG=INT
|
|
10 DEBUG=RC
|
|
11 DEBUG=ROM
|
|
12 DEBUG=XM
|
|
13 DEBUG=SOR
|
|
14 DEBUG=XR
|
|
15 DEBUG=EMSERR (generate INT 01 on returning error from EMS call)
|
|
|
|
Bitfields for 386MAX debugging flags 2:
|
|
Bit(s) Description (Table 01471)
|
|
0 DEBUG=ROMSWAP
|
|
1 DEBUG=UNSHADOWROM
|
|
2 DEBUG=COMPROM
|
|
3 DEBUG=DPMIPHYS
|
|
4 DEBUG=ALLROM
|
|
5 DEBUG=VMS
|
|
6 DEBUG=XMS (generate INT 01 on XMS calls)
|
|
7 DEBUG=I06
|
|
8 DEBUG=VCPI
|
|
9 DEBUG=XDMA
|
|
10 DEBUG=X09
|
|
13 DEBUG=I67 (generate INT 01 on every INT 67 call)
|
|
14 DEBUG=EVM (generate INT 01 on entering V86 mode)
|
|
15 DEBUG=EMSSAVE or DEBUG=VDS
|
|
|
|
Bitfields for 386MAX debugging flags 3:
|
|
Bit(s) Description (Table 01472)
|
|
10 DEBUG=EPM
|
|
12 DEBUG=ABIOS
|
|
13 DEBUG=XMSPTED
|
|
14 DEBUG=TIME
|
|
15 DEBUG=SCRUB
|
|
|
|
Bitfields for 386MAX feature flags 1:
|
|
Bit(s) Description (Table 01473)
|
|
1 Weitek present
|
|
2 no DPMI services
|
|
3 NODMA
|
|
4 TERSE
|
|
5 NOROM
|
|
6 NOPARITY
|
|
8 NOFLEX (IGNOREFLEXFRAME)
|
|
11 don't create UMBs
|
|
12 don't backfill below video memory (NOLOW)
|
|
13 FRAME= specified
|
|
14 EXT= specified
|
|
15 NOEMS, allow prior expanded memory manager to provide EMS
|
|
|
|
Bitfields for 386MAX feature flags 2:
|
|
Bit(s) Description (Table 01474)
|
|
0 UNSHIFT specified (FORCEA20 disabled)
|
|
1 NOXRAM
|
|
2 NOSCSI specified
|
|
3 SCREEN specified
|
|
4 enabled EISADMA
|
|
5 slow DMA
|
|
6 RESETKEYB specified
|
|
7 ???
|
|
9 TOP384
|
|
10 ???
|
|
11 NOWARMBOOT
|
|
12 USE= specified
|
|
13 ROM= specified
|
|
|
|
Bitfields for 386MAX feature flags 3:
|
|
Bit(s) Description (Table 01475)
|
|
0 Windows3 support enabled
|
|
1 SHADOWROM
|
|
2 don't compress ROM (NOCOMPROM)
|
|
3 ??? (related to PRGREG=)
|
|
4 ??? (related to PRGREG=)
|
|
5 SHADOWRAM
|
|
6 DOS4 specified
|
|
7 NOLOADHIGH
|
|
8 NOPULSE
|
|
11 FORCEA20
|
|
12 DMA buffer enabled
|
|
13 NOSCRUB
|
|
15 NOFRAME
|
|
|
|
Bitfields for 386MAX machine type:
|
|
Bit(s) Description (Table 01476)
|
|
12 Amstrad
|
|
13 Epson
|
|
14 Zenith Data Systems
|
|
15 "ASEM"
|
|
16 NEC
|
|
17 "HPRS" model codes 69h and 6Ah
|
|
18 Dell
|
|
19 "CA"
|
|
20 ITT (Xtra Business Systems/Alcatel)
|
|
21 Toshiba 5100
|
|
22 Olivetti
|
|
23 Quadram Quad386 (BIOS model FEh, submodel A6h)
|
|
24 Tandy???
|
|
25 AST 386
|
|
26 INBOARD, ??? version
|
|
27 INBOARD, ??? version
|
|
28 INBOARD, ??? version
|
|
29 "HPRS"
|
|
30 Compaq 386
|
|
31 JET386
|
|
|
|
Format of 386MAX control block:
|
|
Offset Size Description (Table 01477)
|
|
00h WORD segment of next block (FFFFh if last)
|
|
02h WORD segment of previous block (FFFFh if first)
|
|
04h 12 BYTEs filename
|
|
10h WORD resident size in paragraphs
|
|
12h WORD environment size???
|
|
14h WORD real prsent environment size + 1 (0000h if ENVSAVE used)
|
|
16h 2 BYTEs ???
|
|
18h DWORD initial size or SIZE=n in 386LOAD commandline
|
|
1Ch DWORD SIZE=-1 ???
|
|
20h DWORD SIZE= ???
|
|
24h BYTE PRGREG= if specified, else FFh
|
|
25h BYTE ENVREG= if specified, else FFh
|
|
26h BYTE FlexFrame (00h not present, 01h present)
|
|
27h 3 BYTEs ???
|
|
2Ah BYTE GROUP= or 00h if not present
|
|
2Bh BYTE ???
|
|
2Ch WORD PSP
|
|
|
|
Format of 386MAX high memory info record:
|
|
Offset Size Description (Table 01478)
|
|
00h WORD segment address of memory region
|
|
02h WORD size of memory region in paragraphs
|
|
04h BYTE type or flags???
|
|
00h if locked out
|
|
02h if EMS page frame
|
|
04h if high RAM
|
|
42h if ROM
|
|
05h BYTE ???
|
|
|
|
Format of 386MAX ROM shadowing record:
|
|
Offset Size Description (Table 01479)
|
|
00h WORD logical start segment of ROM??? (may be used by BlueMAX when it
|
|
squeezes together the ROMs to make room)
|
|
02h WORD physical start segment of ROM
|
|
04h 2 BYTEs ???
|
|
06h WORD size of shadowed ROM in paragraphs
|
|
08h 2 BYTEs ???
|
|
0Ah WORD flags
|
|
bit 15: shadowing enabled for this ROM???
|
|
bit 14: ???
|
|
bit 13: ???
|
|
bit 12: ???
|
|
bit 10: ???
|
|
|
|
(Table 01480)
|
|
Values for 386MAX memory type:
|
|
00h unused by EMS
|
|
01h DOS
|
|
04h page frame overlapping ROM???
|
|
80h high memory
|
|
84h page frame???
|
|
87h video ROM???
|
|
Note: the type may be 00h (unused) if the 16K page is split among different
|
|
uses (such as ROM and high RAM)
|
|
|
|
(Table 01481)
|
|
Call 386MAX API (via OUT DX,AL) with:
|
|
STACK: WORD value for DX
|
|
AH = 00h unused
|
|
Return: AH = 84h (unsupported function)
|
|
AH = 01h get high memory information
|
|
ES:DI -> buffer for array of high memory info records
|
|
(see #01478)
|
|
Return: CX = number of records placed in buffer
|
|
AH = 02h get shadowed ROM info
|
|
ES:DI -> buffer for array of ROM shadowing records (see #01479)
|
|
Return: CX = number of records placed in buffer
|
|
AH = 03h get 386MAX state
|
|
ES:DI -> 90-byte buffer for state (see #01467)
|
|
Return: AH = 00h (successful)
|
|
buffer filled
|
|
AH = 04h get memory types???
|
|
ES:DI -> buffer for memory type info (array of bytes, one per
|
|
16K page) (see #01480)
|
|
Return: CX = number of bytes placed in buffer
|
|
AH = 05h get page table entries
|
|
AL = A20 control (00h enable A20 first, 01h leave unchanged)
|
|
CX = buffer size in bytes (0000h = enough for all memory from
|
|
given start to end of memory managed by 386MAX)
|
|
SI = first K to report (rounded down to 4K page)
|
|
ES:DI -> buffer for returned page table entries
|
|
Return: CX = number of bytes returned (four per 4K page)
|
|
ES:DI buffer filled
|
|
AH = 06h get memory speed info
|
|
ES:DI -> buffer for memory speed records (see #01482)
|
|
Return: AH = 00h (successful)
|
|
CX = number of bytes placed in buffer
|
|
Note: this function can take over a second to execute
|
|
AH = 07h map/unmap multiple handle pages
|
|
DX = EMS handle (on stack)
|
|
STACK: DWORD -> EMS mapping record
|
|
Return: AH = status (00h,80h,83h,8Ah,8Bh)
|
|
Format of EMS mapping record:
|
|
Offset Size Description
|
|
00h WORD function
|
|
0000h use physical page numbers
|
|
0001h use segment addresses
|
|
02h WORD EMS handle
|
|
04h WORD number of mapping entries following
|
|
06h 2N WORDs logical page number and physical page/segment
|
|
logical page FFFFh means unmap physical page
|
|
SeeAlso: INT 67/AH=50h
|
|
AH = 08h "EMM2_GOREAL" check whether possible to disable 386MAX
|
|
AL = ??? (00h or nonzero)
|
|
Return: AH = status (00h OK, A4h not possible at this time)
|
|
Note: if AL=00h, this function always returns success
|
|
AH = 09h toggle Bit Flags 1 flags
|
|
BX = bitmask of bit flags 1's flags to toggle (see #01468)
|
|
Return: AH = 00h (successful)
|
|
Note: enables A20 first
|
|
AH = 0Ah toggle Debugging Flags 1 flags
|
|
BX = bitmask of Debugging Flags 1's bits to toggle (see #01470)
|
|
Return: AH = 00h (successful)
|
|
Notes: enables A20 first
|
|
does ??? if bit 3 on after specified bits are toggled
|
|
AH = 0Bh toggle Debugging Flags 2 flags
|
|
BX = bitmask of Debugging Flags 2's bits to toggle (see #01471)
|
|
Return: AH = 00h (successful)
|
|
Note: enables A20 first
|
|
AH = 0Ch toggle feature flags 3
|
|
BX = bitmask of feature flags 3's bits to toggle (see #01475)
|
|
Return: AH = 00h (successful)
|
|
Note: enables A20 first
|
|
AH = 0Dh specify 386MAX high-memory location
|
|
BX = segment address of high-memory real-mode portion of 386MAX
|
|
CX = current segment of real-mode stub???
|
|
Return: AH = status (00h successful)
|
|
???
|
|
AH = 0Eh CRT controller register virtualization
|
|
AL = subfunction
|
|
00h allow access to CRTC I/O ports 03B4h/03B5h, 03D4h/03D5h
|
|
01h trap accesses to CRTC I/O ports
|
|
AH = 0Fh reboot system
|
|
Return: never
|
|
AH = 10h unused
|
|
Return: AH = 84h (unsupported function)
|
|
AH = 11h get high memory information
|
|
ES:DI -> 96-byte buffer for high memory info
|
|
Return: AH = 00h (successful)
|
|
ES:DI buffer filled
|
|
Notes: each byte in buffer contains bit flags for a 4K page in
|
|
the A000h-FFFFh region
|
|
bit 0: page is writeable
|
|
bit 1: physical address same as linear address
|
|
bit 2: EMS page frame
|
|
bit 6: page is part of the QPMS window
|
|
this function can take over a second to execute,
|
|
because it does a 128K read for each page in an
|
|
attempt to flush any RAM cache the system may have
|
|
AH = 12h shadow RAM mapping
|
|
AL = subfunction
|
|
00h unshadow ROMs (except page FFh if NOWARMBOOT set)
|
|
01h map shadow RAM into ROM regions???
|
|
Return: AH = 00h (successful) if AL=00h or 01h
|
|
AH = 8Fh otherwise
|
|
AH = 13h shadow RAM page protection
|
|
AL = subfunction
|
|
00h set all shadowed ROM 4K pages to read-only
|
|
01h set all shadowed ROM 4K pages to read-write
|
|
Return: AH = 00h (successful) if AL=00h or 01h
|
|
AH = 8Fh otherwise
|
|
AH = 14h get Programmable Option Select info???
|
|
ES:DI -> 54-byte buffer for POS data???
|
|
Return: AH = 00h if successful
|
|
AH = A4h on error
|
|
Note: the buffer consists of nine 6-byte fields; the first
|
|
eight for slots 1-8, the last for the system board
|
|
AH = 15h ???
|
|
???
|
|
Return: ???
|
|
AH = 16h get 386MAX memory usage screen
|
|
ES:DI -> buffer for memory info display
|
|
CX = size of buffer in bytes
|
|
Return: ES:DI buffer filled with '$'-terminated string (if
|
|
large enough to hold entire usage screen)
|
|
Note: the screen is 0303h bytes in v7.00
|
|
AH = 17h Windows 3 startup/termination
|
|
AL = subfunction
|
|
00h Windows3 initializing
|
|
DX (on stack) = Windows startup flags
|
|
DI = Windows version number (major in upper byte)
|
|
ES:BX = 0000h:0000h
|
|
DS:SI = 0000h:0000h
|
|
Return: CX = 0000h if OK for Windows to load
|
|
<> 0 if Windows should not load
|
|
ES:BX -> startup info structure
|
|
DS:SI -> Virtual86 mode enable/disable callback
|
|
01h Windows3 terminating
|
|
ES:BX -> ???
|
|
DX (on stack) = Windows exit flags
|
|
Return: ???
|
|
AH = 18h QPMS (Qualitas Protected Memory Services)
|
|
AL = subfunction
|
|
00h get QPMS configuration
|
|
Return: BX = starting segment of QPMS memory window
|
|
CX = number of 4K pages reserved for QPMS???
|
|
DX = number of 4K pages in QPMS window???
|
|
01h map QPMS memory page???
|
|
BX = 4K page number within memory reserved for QPMS???
|
|
CL = 4K page number within QPMS memory window???
|
|
02h mark all QPMS memory read-only
|
|
03h mark all QPMS memory read-write
|
|
Return: AH = status (00h,8Ah,8Bh,8Fh)
|
|
AH = 19h get linear address for physical address
|
|
EDX = physical address (low word on stack)
|
|
Return: AH = status
|
|
00h successful
|
|
EDX = linear address at which physical address
|
|
may be accessed
|
|
8Bh physical address currently not addressable
|
|
Note: enables A20 first
|
|
AH = 1Ah set page table entry
|
|
EDX = new page table entry (low word on stack)
|
|
ESI = linear address of page to map (bits 0-11 clear)
|
|
Return: AH = status (00h,8Bh)
|
|
Note: enables A20 first
|
|
AH = 1Bh get ???
|
|
Return: AH = status
|
|
BX = ???
|
|
CX = number of ???
|
|
EDX = physical address of ???
|
|
AH = 1Ch get original interrupt vector
|
|
AL = interrupt vector (00h-7Fh)
|
|
Return: AH = 00h (successful)
|
|
EDX = original vector before 386MAX loaded (segment in
|
|
high word, offset in low word)
|
|
Note: no range checking is performed; requests for INTs 80h-
|
|
FFh will return random values
|
|
AH = 1Dh display string???
|
|
SI = ???
|
|
Return: AH = 00h (successful)
|
|
???
|
|
Note: this function appears to be broken in v7.00
|
|
AH = 1Eh get memory info
|
|
ES:DI -> memory info (see #01483)
|
|
Return: ???
|
|
AH = 1Fh get DPMI host information
|
|
Return: AX = 0000h if successful
|
|
BX = DPMI flags (see #03152 at INT 31/AX=0400h)
|
|
CL = CPU type (02h = 80286, 03h = 80386, etc.)
|
|
DX = DPMI ver supported (DH=major, DL=2-digit minor)
|
|
SI = ???
|
|
ES???:DI -> ???
|
|
Note: NOP if NODPMI switch specified
|
|
AH = 20h (v7.00) get ???
|
|
AL = index of ???
|
|
Return: EDX = ??? for specified ???
|
|
AH = 21h (v7.00) STACKS support
|
|
AL = 00h get STACKS parameters
|
|
Return: BX = ??? (0060h for v7.00)
|
|
CX = number of stacks for hardware interrupts
|
|
DX = size of each stack in bytes
|
|
SI = ??? (low and high bytes are separate values)
|
|
DI = ??? (low and high bytes are separate values)
|
|
low byte = logical page number set by subfn 02h
|
|
ES = ???
|
|
AL = 01h set ??? "EMM2_DSTKS"
|
|
EBX = ???
|
|
ECX = ???
|
|
AL = 02h set ???
|
|
BL = logical page number for ??? (00h-03h)
|
|
Return: AH = status (00h,8Ah)
|
|
AH = 22h (v7.00) call ??? for every load module
|
|
AL = which function to call
|
|
00h call ???
|
|
else call ????
|
|
Return: AH = 00h
|
|
Note: if AL=00h, calls the protected-mode function pointed at by
|
|
the DWORD at offset 22h from the start of each module installed
|
|
by a LOAD= directive; if AL<>00h, it calls the function
|
|
pointed at by the DWORD at offset 28h of the load module
|
|
AH = 23h (v7.00) ???
|
|
AL = 00h set ???
|
|
BL = ???
|
|
Return: AH = 00h or unchanged (depending on ???)
|
|
AL = 01h set ???
|
|
BL = ???
|
|
BH = ???
|
|
CX = ???
|
|
DX = ??? (on top of stack)
|
|
Return: AH = status (00h if successful, 8Fh once table full)
|
|
Note: this call adds one entry to an internal table on each
|
|
call, until the table is full
|
|
AL = 02h get ???
|
|
CX = size of buffer
|
|
ES:DI -> buffer for ??? (60 bytes total data)
|
|
Return: CX = number of bytes actually returned
|
|
Note: returns the array storing the values set with AX=2301h
|
|
Format of one entry in array:
|
|
Offset Size Description
|
|
00h BYTE ??? (BL from subfn 01h)
|
|
01h WORD ??? (CX from subfn 01h)
|
|
03h BYTE ??? (BH from subfn 01h)
|
|
04h WORD ??? (DX from subfn 01h)
|
|
AL = 03h set ??? name/path
|
|
ES:DI -> buffer containing ASCIZ ???
|
|
AL = 04h get ???
|
|
ES:DI -> buffer for ASCIZ ???
|
|
Note: the ASCIZ string for subfunctions 03h and 04h does not appear
|
|
to be used by 386MAX, and may serve merely for communication
|
|
between two other Qualitas programs
|
|
AH = 24h (v7.00) high memory control
|
|
AL = 00h get high memory state
|
|
Return: BX = current state
|
|
00h high memory removed from DOS memory chain
|
|
01h high memory included in DOS memory chain
|
|
AL = 01h set high memory state
|
|
BX = new state
|
|
00h high memory removed from DOS memory chain
|
|
01h high memory included in DOS memory chain
|
|
else
|
|
Return: ??? (error, but return varies according to ???)
|
|
AH = 25h (v7.00) remove high RAM from DOS memory chain
|
|
AH = 26h (v7.00) ???
|
|
BX = ???
|
|
CX = ???
|
|
SI = ???
|
|
DI = ???
|
|
Return: AH = status
|
|
BX = ???
|
|
CX = ???
|
|
AH = 27h (v7.00) ???
|
|
AL = 00h get ???
|
|
Return: BX = number of paragraphs for ???
|
|
AL = 01h ???
|
|
BX = ???
|
|
ES??? = ???
|
|
AL = 02h ???
|
|
???
|
|
AL = 03h ???
|
|
CX = ???
|
|
DX = ???
|
|
ES??? = ???
|
|
Return: ???
|
|
AH = 28h (v7.00) get ???
|
|
Return: AH = status (00h,8Fh) (see #03648 at INT 67/AH=40h)
|
|
if AH=00h,
|
|
CX = ???
|
|
DX = ???
|
|
AH = 29h (v7.00) get ???
|
|
Return: AX = ???
|
|
AH = 40h-5Dh EMS services (see INT 67/AH=40h, etc.)
|
|
AH = DEh VCPI services (see INT 67/AX=DE00h, etc.)
|
|
Return: AH = status (as for EMS INT 67 calls)
|
|
00h successful
|
|
80h internal error
|
|
81h hardware malfunction
|
|
83h invalid handle
|
|
84h undefined function
|
|
8Ah invalid logical page nuber
|
|
8Bh illegal physical page number
|
|
8Fh undefined subfunction
|
|
A4h access denied
|
|
etc.
|
|
STACK popped (value placed in DX if no specific return value for DX)
|
|
|
|
Format of 386MAX memory speed record:
|
|
Offset Size Description (Table 01482)
|
|
00h DWORD page table entry for 4K page
|
|
04h WORD number of microticks (840ns units) required for REP LODSD of
|
|
entire 4K page
|
|
|
|
Format of 386MAX memory info [array]:
|
|
Offset Size Description (Table 01483)
|
|
00h DWORD linear start address
|
|
04h DWORD size in bytes
|
|
08h WORD XMS handle (if next byte = 04h)
|
|
??? (if next byte = 05h)
|
|
??? (if next byte = 06h)
|
|
??? (if next byte = 13h)
|
|
??? (if next byte = 14h)
|
|
??? (if next byte = 15h)
|
|
??? (if next byte = 23h)
|
|
??? (if next byte = 24h)
|
|
??? (if next byte = 26h)
|
|
else unused
|
|
0Ah BYTE type
|
|
00h = ???, 01h = VDISK,
|
|
02h = INT 15h extended memory, 03h = ??? extended,
|
|
04h = XMS handle's memory, 05h = ???, 06h = ???, 07h = ???,
|
|
08h = ???, 09h = ???, 0Ah = ???, 0Bh = ???,
|
|
11h = ???, 12h = ???, 14h = ???, 15h = ???,
|
|
19h = ???, 1Ah = ???, 1Bh = ???,
|
|
1Ch = ???, 1Dh = ???, 1Eh = ???, 1Fh = ???,
|
|
20h = ???, 21h = ???, 23h = ???, 24h = ???,
|
|
26h = ???
|
|
0Bh BYTE ??? (00h for types 00h-03h, 07h-0Bh, 19h-21h;
|
|
80h for types 04h/13h-15h/23h-26h;
|
|
??? for type 05h)
|
|
--------V-214402-----------------------------
|
|
INT 21 - PGS1600.DEV - IOCTL - GET CONFIGURATION INFO
|
|
AX = 4402h
|
|
BX = file handle for device "PGS1600$"
|
|
CX = 0018h (size of buffer)
|
|
DS:DX -> configuration buffer (see #01484)
|
|
Return: CF clear if successful
|
|
buffer filled
|
|
AX = number of bytes actually copied
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Program: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
|
|
display adapter, which provides a 1600x1200 monochrome display as
|
|
well as one of two emulations, MDA or CGA.
|
|
SeeAlso: AX=4403h"PGS1600"
|
|
|
|
Format of PGS1600.DEV configuration information:
|
|
Offset Size Description (Table 01484)
|
|
00h WORD version (high byte = major, low byte = minor)
|
|
02h WORD board initialisation mode
|
|
04h WORD board I/O address
|
|
03D0h CGA emulation
|
|
03B0h MDA emulation
|
|
0390h no emulation
|
|
0350h no emulation, alternate
|
|
06h WORD emulation buffer segment
|
|
B800h CGA emulation
|
|
B000h MDA emulation
|
|
0000h no emulation
|
|
08h WORD PG1600 graphics buffer segment
|
|
0Ah WORD number of bytes between consecutive graphic rows
|
|
0Ch WORD horizontal pixel size
|
|
0Eh WORD vertical pixel size
|
|
10h WORD horizontal dots per inch
|
|
12h WORD vertical dots per inch
|
|
14h WORD graphics buffer bits per pixel
|
|
16h WORD monitor bits per pixel
|
|
--------N-214402-----------------------------
|
|
INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
|
|
AX = 4402h
|
|
BX = file handle referencing device "$IPCUST"
|
|
CX, DS:DX ignored
|
|
Return: CF clear if successful
|
|
AX destroyed
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: there are a total of 378h bytes of configuration data for IPCUST.SYS
|
|
version 2.05. If less than the entire data is read or written,
|
|
the next read/write continues where the previous one ended; this
|
|
call and AX=4403h both reset the location at which the next
|
|
operation starts to zero
|
|
v2.1+ uses a new configuration method, but allows the installation
|
|
of IPCUST.SYS for backward compatibility with other software which
|
|
must read the PC/TCP configuration
|
|
SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4403h"IPCUST"
|
|
--------N-214402-----------------------------
|
|
INT 21 - WORKGRP.SYS - GET API ENTRY POINT
|
|
AX = 4402h
|
|
BX = file handle for device "NET$HLP$"
|
|
CX = 0008h
|
|
DS:DX -> buffer for entry point record (see #01485)
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually read
|
|
CF set on error
|
|
AX = error code
|
|
Program: WORKGRP.SYS is the portion of Microsoft's Workgroup Connection which
|
|
permits communication with PCs running Windows for Workgroups or
|
|
LAN Manager
|
|
SeeAlso: AH=3Fh"WORKGRP.SYS"
|
|
|
|
Format of WORKGRP.SYS entry point record:
|
|
Offset Size Description (Table 01485)
|
|
00h WORD 3633h \ signature???
|
|
02h WORD EF6Fh /
|
|
04h DWORD address of entry point (see #01486)
|
|
Note: first four bytes of buffer must be 6Fh E9h 33h 36h on entry when using
|
|
IOCTL rather than READ to get the entry point record
|
|
|
|
(Table 01486)
|
|
Call WORKGRP entry point with:
|
|
STACK: WORD function number (0000h-0009h)
|
|
Return: STACK unchanged
|
|
SeeAlso: #01487,#01488,#01489,#01490,#01491,#01492,#01493,#01494
|
|
|
|
(Table 01487)
|
|
Call WORKGRP function 00h with:
|
|
STACK: WORD 0000h (function "get ???")
|
|
Return: DX:AX -> data table
|
|
|
|
(Table 01488)
|
|
Call WORKGRP function 01h with:
|
|
STACK: WORD 0001h (function "hook ???")
|
|
Return: STACK: DWORD pointer to ???
|
|
WORD 0001h (function number)
|
|
|
|
(Table 01489)
|
|
Call WORKGRP function 02h with:
|
|
STACK: WORD 0002h (function "unhook ???")
|
|
???
|
|
Return: ???
|
|
|
|
(Table 01490)
|
|
Call WORKGRP function 03h with:
|
|
STACK: WORD 0003h (function "reenable printer port")
|
|
WORD LPT port number
|
|
Return: ???
|
|
|
|
(Table 01491)
|
|
Call WORKGRP function 04h with:
|
|
STACK: WORD 0004h (function "disable printer port")
|
|
WORD LPT port number
|
|
Return: ???
|
|
|
|
(Table 01492)
|
|
Call WORKGRP function 05h with:
|
|
STACK: WORD 0005h (function "???")
|
|
???
|
|
Return: ???
|
|
|
|
(Table 01493)
|
|
Call WORKGRP function 06h with:
|
|
STACK: WORD 0006h (function "???")
|
|
Return: STACK unchanged
|
|
AX = 0000h
|
|
DX = 0000h
|
|
|
|
(Table 01494)
|
|
Call WORKGRP functions 07h-09h with:
|
|
STACK: WORD 0007h-0009h (NOP functions)
|
|
Return: STACK unchanged
|
|
AX = 0001h
|
|
DX = 0000h
|
|
--------N-214402-----------------------------
|
|
INT 21 - 10NET v5.0 - 10BEUI.DOS - API
|
|
AX = 4402h
|
|
BX = file handle referencing device "10BEUI$"
|
|
DS:DX -> parameter record (see #01495)
|
|
CX ignored
|
|
Return: CF clear if successful
|
|
AX destroyed
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
SeeAlso: AX=4402h"10MEMMGR",INT 6F/AH=00h"10NET"
|
|
|
|
Format of 10NET 10BEUI.DOS parameter record:
|
|
Offset Size Description (Table 01495)
|
|
00h WORD 000Ah (function number???)
|
|
02h WORD ???
|
|
04h DWORD pointer to buffer for ???
|
|
08h 4 BYTEs ???
|
|
0Ch WORD transfer size
|
|
--------N-214402-----------------------------
|
|
INT 21 - 10NET v5.0 - 10MEMMGR.SYS - API
|
|
AX = 4402h
|
|
BX = file handle referencing device "MEMMGR0$"
|
|
DS:DX -> 6-byte buffer for interface info (see #01496)
|
|
CX ignored
|
|
Return: CF clear if successful
|
|
AX destroyed
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
SeeAlso: AX=4402h"10BEUI",INT 6F/AH=00h"10NET"
|
|
|
|
Format of 10NET 10MEMMGR.SYS interface info:
|
|
Offset Size Description (Table 01496)
|
|
00h DWORD address of entry point (see #01497)
|
|
04h WORD version (0500h for v5.00)
|
|
|
|
(Table 01497)
|
|
Call 10NET 10MEMMGR.SYS entry point with:
|
|
AL = 01h ???
|
|
BX = ???
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = error code
|
|
AL = 02h ???
|
|
???
|
|
AL = 03h ???
|
|
???
|
|
AL = 04h set/restore memory allocation strategy
|
|
BX = subfunction
|
|
0000h set strategy
|
|
0001h restore strategy
|
|
Return: CF clear if successful
|
|
CF set on error (if function disabled)
|
|
various registers destroyed
|
|
AL = other
|
|
Return: CF set
|
|
AX = 0000h
|
|
BL = 01h
|
|
--------V-214402-----------------------------
|
|
INT 21 - Compaq AG1024.SYS - RGDI - GET DRIVER LOCATION
|
|
AX = 4402h
|
|
BX = file handle for device "$$$$RGDI"
|
|
CX = 0006h (size of returned data)
|
|
DS:DX -> location record (see #01498)
|
|
Return: CF clear if successful
|
|
buffer filled
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
|
|
SeeAlso: AX=4403h"RGDI"
|
|
|
|
Format of Compaq AG1024.SYS location record:
|
|
Offset Size Description (Table 01498)
|
|
00h WORD signature 55AAh
|
|
02h WORD segment of ???
|
|
04h WORD segment of device driver's code
|
|
--------N-214402-----------------------------
|
|
INT 21 - FTPSOFT.DOS v3.1 - GET ???
|
|
AX = 4402h
|
|
BX = file handle for device "FTPSOFT$"
|
|
CX = size of buffer
|
|
DS:DX -> buffer for data (see #01499)
|
|
Return: CF clear if successful
|
|
buffer filled
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Program: FTPSOFT.DOS is a device driver for Protocol Manager support from
|
|
FTP Software, Inc.
|
|
SeeAlso: AH=3Fh"PC/TCP",AX=4402h"NDIS"
|
|
|
|
Format of FTPSOFT.DOS data:
|
|
Offset Size Description (Table 01499)
|
|
00h WORD (call) BA98h (if different, no data returned)
|
|
02h DWORD -> NDIS common characteristics table
|
|
(see #01435 at AX=4402h"NDIS")
|
|
06h DWORD (call) -> new dispatch table (see #01437 at AX=4402h"NDIS")
|
|
0Ah DWORD -> 28-byte buffer for ??? data
|
|
0Eh DWORD ???
|
|
12h DWORD -> FAR function to reset dispatch jump table to defaults
|
|
16h BYTE ???
|
|
Note: the addresses in the new dispatch table are copied into an internal
|
|
jump table which may be reset by calling the function pointed at by
|
|
offset 12h
|
|
--------n-214402-----------------------------
|
|
INT 21 U - PenDOS PENDEV.SYS - GET ENTRY POINTS
|
|
AX = 4402h
|
|
BX = file handle for device "$$PENDOS" or "$$PD_REG"
|
|
CX = size of buffer (4 for $$PENDOS and a 4,8,12, or 16 for $$PD_REG)
|
|
DS:DX -> buffer for entry point record (see #01500)
|
|
Return: CF clear if successful
|
|
buffer filled
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Program: A limited version of PenDOS by Communication Intelligence Corporation,
|
|
which provides pen capability to keyboard-based programs, is bundled
|
|
with IBM DOS 6.1
|
|
SeeAlso: AX=4403h"PENDEV.SYS"
|
|
|
|
Format of PENDEV.SYS entry point record:
|
|
Offset Size Description (Table 01500)
|
|
00h DWORD -> array of jumps
|
|
04h WORD offset of function to retrieve entry point (see #01501)
|
|
06h 2 BYTEs signature "Pe"
|
|
08h WORD offset of function to set entry point (see #01502)
|
|
0Ah 2 BYTEs signature "nD"
|
|
0Ch WORD offset of function to clear entry point (see #01503)
|
|
0Eh WORD signature "OS"
|
|
|
|
(Table 01501)
|
|
Call PENDEV.SYS function to retrieve entry point with:
|
|
AX = index of entry point (0-9)
|
|
Return: CF clear if successful
|
|
DX:AX -> desired entry point
|
|
CF set on error (AX out of range)
|
|
|
|
(Table 01502)
|
|
Call PENDEV.SYS function to set entry point with:
|
|
AX = index of entry point (0-9)
|
|
DX:SI -> new handler
|
|
Return: CF clear if successful
|
|
CF set on error (AX out of range)
|
|
|
|
(Table 01503)
|
|
Call PENDEV.SYS function to clear entry point with:
|
|
AX = index of entry point (0-9)
|
|
Return: CF clear if successful
|
|
CF set on error (AX out of range)
|
|
Note: resets the jump at the specified entry point to its default target,
|
|
which simply returns
|
|
--------N-214402-----------------------------
|
|
INT 21 U - LAN Manager - TCPDRV.DOS - API
|
|
AX = 4402h
|
|
BX = file handle referencing device "TCPDRV$"
|
|
CX = 0019h
|
|
DS:DX -> buffer containing request block (see #01504)
|
|
Return: CF clear if successful
|
|
buffer filled
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Program: TCPDRV.DOS is the low-level device driver supporting LAN Manager's
|
|
TCP/IP protocol stack
|
|
|
|
Format of TCPDRV.DOS request block:
|
|
Offset Size Description (Table 01504)
|
|
00h BYTE (call) function number
|
|
00h initialize ???
|
|
06h get ???
|
|
07h get ???
|
|
01h BYTE (call) 00h
|
|
(ret) error code if error, unchanged if successful
|
|
02h WORD signature 4354h ('CT')
|
|
---function 00h---
|
|
04h DWORD (call) pointer to ??? FAR function
|
|
function is called with ES:BX -> device driver request used to
|
|
invoke this function
|
|
08h 4 BYTEs ???
|
|
0Ch DWORD (call) pointer to ??? record, WORD at offset 22h is read
|
|
10h DWORD (ret) -> ??? buffer if 0000h:0000h on call
|
|
---function 06h---
|
|
04h 4 BYTEs ???
|
|
08h DWORD (ret) pointer to ???
|
|
---function 07h---
|
|
04h DWORD (ret) pointer to ??? record
|
|
--------y-214402-----------------------------
|
|
INT 21 U - PC Tools 9 CPRLOW.EXE - GET CODE AND DATA ADDRESSES
|
|
AX = 4402h
|
|
BX = file handle referencing device "RECLOWLD"
|
|
DS:DX -> buffer for address list (see #01505)
|
|
CX ignored
|
|
Return: CF clear if successful
|
|
buffer filled
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
|
|
Format of CPRLOW address list:
|
|
Offset Size Description (Table 01505)
|
|
00h WORD segment of CPRLOW code
|
|
02h WORD offset in code segment of ??? entry point
|
|
(switches into protected mode)
|
|
04h WORD offset in code segment of jump array (see #01506)
|
|
06h WORD segment of copy of interrupt vector table at CPRLOW load time
|
|
Note: neither the entry point nor the jump array is valid until after a
|
|
CPR /LOAD, because CPR.EXE installs the code into CPRLOW at runtime.
|
|
|
|
Format of CPRLOW jump array:
|
|
Offset Size Description (Table 01506)
|
|
00h 3 BYTEs initialize CPRLOW interrupt hooks
|
|
03h 3 BYTEs reset timers and enable CPR (hotkey enable)
|
|
06h 3 BYTEs disable CPR (hotkey disable)
|
|
09h 3 BYTEs clear ??? flag, hotkey disable, and ???
|
|
0Ch 3 BYTEs initialize delay loop counter (destroys AX,BX,CX,DX)
|
|
0Fh 3 BYTEs disable CPR completely (commandline /DISABLE)
|
|
12h 3 BYTEs enable ??? if CPR enabled by both cmdline and hotkey
|
|
15h 3 BYTEs enable CPR (commandline /ENABLE)
|
|
--------s-214402-----------------------------
|
|
INT 21 U - Creative Technology CTMMSYS.SYS v1.00.01 - API
|
|
AX = 4402h
|
|
BX = file handle for device "CTMMSYS$"
|
|
CX = 0004h (size of data)
|
|
DS:DX -> buffer for entry point (see #01507)
|
|
Return: CF clear if successful
|
|
buffer updated
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Program: CTMMSYS.SYS is the Creative DOS Multimedia Architecture Integration
|
|
driver
|
|
SeeAlso: AX=4402h"CTSB2",INT 80/BX=0000h"SBFM"
|
|
|
|
Format of CTMMSYS.SYS entry point record:
|
|
Offset Size Description (Table 01507)
|
|
00h DWORD (call) signature 4D6D7443h (ASCII "CtmM")
|
|
(ret) pointer to CTMMSYS entry point (see #01508)
|
|
SeeAlso: #01509
|
|
|
|
(Table 01508)
|
|
Call CTMMSYS.SYS entry point with:
|
|
AX = ???
|
|
STACK: WORD ???
|
|
WORD ???
|
|
WORD ??? (0001h,0002h,0005h,0006h)
|
|
WORD ???
|
|
DWORD -> ???
|
|
WORD ???
|
|
WORD ???
|
|
Return: DX:AX = ??? or error code
|
|
0000h:000Bh invalid value for ???
|
|
0000h:000Fh API call already in progress
|
|
SeeAlso: #01507
|
|
--------s-214402-----------------------------
|
|
INT 21 U - Creative Technology CTSB2.SYS v1.01.01 - API
|
|
AX = 4402h
|
|
BX = file handle for device "CTSOUND0"
|
|
CX = 0004h (size of data)
|
|
DS:DX -> buffer for entry point (see #01509)
|
|
Return: CF clear if successful
|
|
buffer updated
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Program: CTMMSYS.SYS is the Creative DOS Multimedia Architecture Integration
|
|
driver
|
|
SeeAlso: AX=4402h"CTMMSYS",INT 80/BX=0000h"SBFM"
|
|
|
|
Format of CTSB2.SYS entry point record:
|
|
Offset Size Description (Table 01509)
|
|
00h DWORD (call) signature 4D6D7443h (ASCII "CtmM")
|
|
(ret) pointer to CTSB2 entry point (see #01510)
|
|
SeeAlso: #01507
|
|
|
|
(Table 01510)
|
|
Call CTSB2.SYS entry point with:
|
|
AX = ???
|
|
STACK: DWORD -> ???
|
|
WORD function number
|
|
(0100h,0200h,0300h,0400h,0500h,0600h,0701h)
|
|
DWORD -> ???
|
|
WORD ???
|
|
WORD ???
|
|
Return: DX:AX = ??? or error code
|
|
0000h:0004h invalid subfunction???
|
|
0000h:000Bh invalid value for ???
|
|
0000h:000Fh API call already in progress
|
|
SeeAlso: #01509
|
|
--------m-214402-----------------------------
|
|
INT 21 U - Novell DOS 7+ EMM386.EXE - GET STATE RECORD
|
|
AX = 4402h
|
|
BX = file handle for device "EMMXXXX0" or "EMMQXXX0"
|
|
CX = 003Eh (size of state record)
|
|
DS:DX -> buffer for state record (see #01511)
|
|
Return: CF clear if successful
|
|
buffer filled (see #03603 at INT 67/AH=3Fh)
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Note: This function is called by the Novell DOS 7+ MEM utility.
|
|
|
|
Format of Novell DOS 7 - DR-DOS 7.03 EMM386.EXE state record:
|
|
Offset Size Description (Table 01511)
|
|
00h WORD signature EDC0h
|
|
02h 12 BYTEs (ret) bitmap for include range
|
|
0Eh 12 BYTEs (ret) bitmap for auto range
|
|
1Ah 12 BYTEs (ret) bitmap for BIOS range
|
|
26h 12 BYTEs (ret) bitmap for ROM range
|
|
32h 12 BYTEs (ret) bitmap for map range
|
|
Note: each bitmap covers the upper-memory address range A000h-FFFFh, where
|
|
offset X bit B within the bitmap indicates the state of the 4K page
|
|
starting at segment A000h + (8X + B) * 100h
|
|
--------m-214402SF00-------------------------
|
|
INT 21 U - Memory Managers - GET API ENTRY POINT
|
|
AX = 4402h subfn 00h
|
|
BX = file handle for device "EMMXXXX0"
|
|
CX = 0006h (size of buffer in bytes)
|
|
DS:DX -> buffer for API entry point record (see #01512)
|
|
first byte must be 00h on entry
|
|
Return: CF clear if successful
|
|
buffer filled (see #03603 at INT 67/AH=3Fh)
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: this function is supported by Microsoft EMM386.EXE v4.45+ and
|
|
CEMM v5.10+, and is intended for use by MS Windows as it starts up
|
|
if no other program has hooked INT 67, an alternate installation
|
|
check for CEMM is testing for the string
|
|
"COMPAQ EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
|
|
handler's segment; if present, the word at offset 12h contains the
|
|
offset of the API entry point
|
|
SeeAlso: AX=4402h/SF=01h,AX=4402h/SF=02h,AX=4402h"EMM386",INT 67/AH=3Fh
|
|
|
|
Format of memory manager API entry point record:
|
|
Offset Size Description (Table 01512)
|
|
00h WORD ??? (0022h for CEMM 5.11, 0025h for MS EMM386 v4.45)
|
|
02h DWORD manager's private API entry point
|
|
(see #01513,#03666 at INT 67/AX=FFA5h)
|
|
|
|
(Table 01513)
|
|
Call CEMM v5.10+ entry point with:
|
|
AH = 00h get memory manager's state
|
|
Return: AH = state
|
|
bit 0: turned OFF
|
|
bit 1: AUTO mode enabled
|
|
AH = 01h set memory manager's state
|
|
AL = new state (00h ON, 01h OFF, 02h AUTO)
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AH = 02h Weitek coprocessor support
|
|
AL = subfunction
|
|
00h get Weitek support state
|
|
Return: AL = status
|
|
bit 0: Weitek coprocessor is present
|
|
bit 1: Weitek support is enabled
|
|
01h turn on Weitek support
|
|
02h turn off Weitek support
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AH = error code (01h invalid subfunc, 02h no Weitek)
|
|
AH = 05h get statistics
|
|
???
|
|
AH > 06h
|
|
Return: CF set
|
|
AH = 01h (invalid function)
|
|
Notes: AH=03h,04h,06h are NOPs which return CF clear, presumably for backwards
|
|
compatibility with earlier versions of CEMM
|
|
in v5.11, AH=05h merely prints an error message (using INT 21/AH=09h)
|
|
stating that a different version of CEMM is installed and it is
|
|
therefore not possible to display the statistics
|
|
--------m-214402SF01-------------------------
|
|
INT 21 U - Memory Managers - GET EMM IMPORT STRUCTURE ADDRESS
|
|
AX = 4402h subfn 01h
|
|
BX = file handle for device "EMMXXXX0"
|
|
CX = 0006h (size of buffer in bytes)
|
|
DS:DX -> buffer for EMM import structure record (see #01514)
|
|
first byte must be 01h on entry
|
|
Return: CF clear if successful
|
|
buffer filled (see also #03603 at INT 67/AH=3Fh)
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: this function is supported by Microsoft EMM386.EXE v4.45+,
|
|
QEMM-386 v6+, and CEMM v5.10+, and is intended for use by MS Windows
|
|
as it starts up
|
|
for QEMM-386, this call always returns an error if Windows3 support
|
|
has been disabled with the NW3 switch
|
|
SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 2F/AX=D201h/BX=5145h
|
|
SeeAlso: INT 67/AH=3Fh
|
|
|
|
Format of EMM import structure record:
|
|
Offset Size Description (Table 01514)
|
|
00h DWORD physical address of EMM import structure (see #01515)
|
|
04h BYTE EMM import structure major version
|
|
05h BYTE EMM import structure minor version
|
|
Note: vession 1.00 contains only EMS information (Windows 3.0+)
|
|
version 1.10 contains UMB/XMS/HMA/EMS information (Windows 3.1)
|
|
version 1.11 is version 1.10 plus memory manager maker/product name
|
|
SeeAlso: #03643
|
|
|
|
Format of Global EMM Import record:
|
|
Offset Size Description (Table 01515)
|
|
00h BYTE bit flags
|
|
bit 2: ???
|
|
bit 3: free EMM386 virtual HMA only if hma_page_table_paddr!=0
|
|
bit 4: no UMB???
|
|
01h BYTE reserved (0)
|
|
02h WORD size of structure in bytes
|
|
04h WORD structure version
|
|
06h DWORD reserved
|
|
0Ah 384 BYTEs 64 EMS frame status records (see #01516), one per 16K of
|
|
real-mode 1M address space
|
|
18Ah BYTE ??? (must be at least 3*number_of_EMS_frames+4)
|
|
18Bh BYTE number of UMB frame descriptors following
|
|
18Ch 4N DWORDs UMB frame descriptors
|
|
each is 4 DWORDs giving physical page numbers for the four
|
|
4K pages of a 16K EMS frame (00000000h if non-UMB page)
|
|
var BYTE number of EMS handle info records following
|
|
16N BYTEs EMS handle info records (see #01518)
|
|
---version 1.10+ ---
|
|
DWORD realmode INT 67 vector (used by Windows to set breakpoints)
|
|
DWORD physical address of HMA page table values
|
|
BYTE number of free page entries following
|
|
2N DWORDs free page entries
|
|
each is:
|
|
DWORD physical page number
|
|
DWORD number of consecutive physical pages
|
|
BYTE number of XMS handle info records following
|
|
00h if memory manager does not emulate XMS or has real mode
|
|
XMS code which can execute in the Windows environment
|
|
12N BYTEs XMS handle info records (see #01519)
|
|
BYTE number of free UMB info records following
|
|
2N WORDs free UMB info records
|
|
each is:
|
|
WORD real mode start segment
|
|
WORD size in paragraphs
|
|
---version 1.11---
|
|
20 BYTEs blank-padded maker name
|
|
20 BYTEs blank-padded product name
|
|
|
|
Format of EMS frame status record:
|
|
Offset Size Description (Table 01516)
|
|
00h BYTE frame type (see #01517)
|
|
01h BYTE owner handle (00h/FFh = none) from frame including UMB
|
|
index to UMB frame descriptors
|
|
02h WORD logical page for frame, 7FFFh if none, FFFFh if non-EMS frame
|
|
04h BYTE EMS physical page number (FFh for non-EMS = don't care???)
|
|
05h BYTE flags for non-EMS frames (00h for EMS frame)
|
|
bits 0,1 for first 4K, bits 2,3 for second 4K, etc:
|
|
10: direct mapping (linear address = physical address)
|
|
01: UMB mapping
|
|
|
|
Bitfields for EMS frame type:
|
|
Bit(s) Description (Table 01517)
|
|
0 EMS frame
|
|
1 (if EMS frame) in standard 64K page frame
|
|
2 first 4K of frame is UMB
|
|
3 second 4K of frame is UMB
|
|
4 third 4K of frame is UMB
|
|
5 last 4K of frame is UMB
|
|
|
|
Format of EMS handle info record:
|
|
Offset Size Description (Table 01518)
|
|
00h BYTE handle number (00h = system handle)
|
|
01h BYTE flags
|
|
bit 0: normal handle rather than system handle
|
|
bit 2: ??? (set by some EMS managers)
|
|
02h 8 BYTEs EMS handle's name
|
|
0Ah WORD number of 16K pages for handle
|
|
0Ch DWORD physical address of page table entries forming page map
|
|
Note: all values should be zero for the system handle if no large frame
|
|
support is present
|
|
|
|
Format of XMS handle info record:
|
|
Offset Size Description (Table 01519)
|
|
00h WORD handle
|
|
02h WORD flags
|
|
bit 0: handle usable by Windows
|
|
(already in use when Windows started if clear)
|
|
bit 1: reserved (0)
|
|
04h DWORD size in KB (may be zero, used only if flags bit 0 set)
|
|
08h DWORD physical address (only if flags bit 0 set)
|
|
--------m-214402SF02-------------------------
|
|
INT 21 U - Memory Managers - GET MEMORY MANAGER VERSION
|
|
AX = 4402h subfn 02h
|
|
BX = file handle for device "EMMXXXX0"
|
|
CX = 0002h (size of buffer in bytes)
|
|
DS:DX -> buffer for memory manager version (see #01520)
|
|
first byte must be 02h on entry
|
|
Return: CF clear if successful
|
|
buffer filled
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Note: this function is supported by Microsoft EMM386.EXE v4.45+ and
|
|
CEMM v5.10+, and is intended for use by MS Windows as it starts up
|
|
SeeAlso: AX=4402h/SF=00h,AX=4402h"EMM386",INT 67/AH=3Fh
|
|
|
|
Format of memory manager version:
|
|
Offset Size Description (Table 01520)
|
|
00h BYTE major version
|
|
01h BYTE minor version (binary)
|
|
--------m-214402-----------------------------
|
|
INT 21 U - Microsoft EMM386.EXE v4.45 - GET MEMORY MANAGER INFORMATION
|
|
AX = 4402h
|
|
BX = file handle for device "EMMXXXX0"
|
|
CX = size of buffer in bytes (varies, see #01521)
|
|
DS:DX -> buffer for returned data (see #01521)
|
|
first byte must be set on entry to indicate desired data
|
|
Return: CF clear if successful
|
|
buffer filled
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: an error is returned if the number of bytes to be read does not match
|
|
the number of bytes returned for the specified data item
|
|
this function is part of the interface which allows MS Windows to
|
|
cooperate with memory managers
|
|
SeeAlso: AX=4402h/SF=00h,AX=4402h/SF=01h,AX=4402h/SF=02h,INT 67/AX=FFA5h
|
|
|
|
Format of EMM386.EXE data buffer:
|
|
Offset Size Description (Table 01521)
|
|
00h BYTE (call) function
|
|
03h get ???
|
|
04h get ???
|
|
---function 03h---
|
|
00h WORD ???
|
|
02h WORD ???
|
|
---function 04h---
|
|
00h WORD segment of UMB containing EMM386 code/data
|
|
02h WORD number of paragraphs of EMM386 code/data in UMB
|
|
04h WORD ???
|
|
----------214402-----------------------------
|
|
INT 21 U - IFSHLP.SYS - GET ENTRY POINT
|
|
AX = 4402h
|
|
BX = file handle for device "IFS$HLP$"
|
|
CX = 0008h (size of buffer in bytes)
|
|
DS:DX -> buffer for entry point record (see #01415 at AH=3Fh"IFSHLP")
|
|
Return: CF clear if successful
|
|
buffer filled
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
SeeAlso: AH=3Fh"IFSHLP"
|
|
--------d-214402-----------------------------
|
|
INT 21 - ATA Software Programming Interface (ATASPI) - INTERFACE
|
|
AX = 4402h
|
|
BX = file handle for device "$ATAMGR$"
|
|
CX = 0004h (size of buffer in bytes)
|
|
DS:DX -> buffer for result (see #90000), set to zeros before call
|
|
Return: CF clear if successful
|
|
AX = 0004h
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: ATASPI is an API to control IDE, EIDE, and ATAPI devices, proposed by
|
|
Future Domain; there's at least one driver in existence which
|
|
conforms to this specification: ATASPI16.SYS by Future Domain
|
|
(see #90002) on the stack and the caller must clean up the stack
|
|
Future Domain ATASPI16.SYS v2.2 performs ATASPI calls using INT 4Fh
|
|
interface instead of this INT 21/4402h interface and itself supports
|
|
both interfaces
|
|
SeeAlso: AX=4402h"ASPI",INT 4F/AX=0081h,INT 4F/AX=0082h,PORT 01F0h-01F7h"HDC1"
|
|
|
|
Format of ATASPI IOCTL result:
|
|
Offset Size Description (Table 90000)
|
|
00h DWORD ATASPI entry point address
|
|
|
|
(Table 90001)
|
|
Call ATASPI entry point with:
|
|
STACK: DWORD -> ATA Request Block (ARB) (see #90003)
|
|
Notes: caller must clean up the stack
|
|
the large-model C declaration is
|
|
void (*entry)(ARB_Struct *);
|
|
SeeAlso: #90000
|
|
|
|
(Table 90002)
|
|
Values for ATASPI command code:
|
|
00h ATA controller inquiry
|
|
01h get ATA device type
|
|
02h execute ATA I/O
|
|
03h abort ATA request
|
|
04h reset ATA device
|
|
05h set ATA controller parameter
|
|
06h get ATA disk drive information
|
|
SeeAlso: #90003
|
|
|
|
Format of ATA Request Block (ARB):
|
|
Offset Size Description (Table 90003)
|
|
00h BYTE command code (see #90002)
|
|
01h BYTE (ret) status (see #90004)
|
|
02h BYTE ATA controller number
|
|
03h BYTE request flags (see #90005)
|
|
04h DWORD reserved (0)
|
|
---request 00h---
|
|
08h BYTE (ret) total number of ATA controllers
|
|
valid only if ATA controller number = 0FFh
|
|
09h BYTE reserved (0)
|
|
0Ah 16 BYTEs (ret) ATA manager ID
|
|
1Ah 16 BYTEs (ret) ATA controller ID
|
|
2Ah 16 BYTEs (ret) controller unique parameters (see #90010)
|
|
---request 01h---
|
|
08h BYTE device ID (00h = master, 01h = slave)
|
|
09h BYTE reserved (0)
|
|
0Ah BYTE (ret) peripheral device type (see #90007)
|
|
---request 02h---
|
|
08h BYTE device ID
|
|
09h BYTE reserved (0)
|
|
0Ah DWORD data transfer length
|
|
(ret) residual byte length
|
|
0Eh BYTE sense allocation length (N)
|
|
0Fh DWORD data buffer pointer
|
|
13h DWORD reserved (0)
|
|
17h BYTE ACB length (M)
|
|
for Task File requests must be set to 07h, for ATAPI Packet
|
|
requests must match the number of bytes in the packet
|
|
18h BYTE (ret) ATA controller status (see #90006)
|
|
19h BYTE (ret) device status
|
|
value of the error register, 00h if no error (see #P0512)
|
|
1Ah DWORD post routine address (see #90009)
|
|
1Eh WORD data transfer block size (in bytes)
|
|
number of data bytes to transfer per hardware interrupt for Task
|
|
File requests; number of data bytes host prefers to transfer
|
|
per hardware interrupt for ATAPI Packet commands
|
|
20h 32 BYTEs reserved for ATASPI workspace
|
|
40h M BYTEs ATA/ATAPI command block (ACB)
|
|
contains AT Task File Structure (see #90008) if bit 2 of the
|
|
request flags is set, ATAPI packet (see #03236,#03237,#03238)
|
|
if bit 2 is cleared
|
|
40h+M N BYTEs sense allocation area
|
|
---request 03h---
|
|
08h DWORD address of ARB to be aborted
|
|
---request 04h---
|
|
08h BYTE device ID
|
|
09h 15 BYTEs reserved (0)
|
|
18h BYTE (ret) ATA controller status (see #90006)
|
|
19h BYTE (ret) device status
|
|
1Ah DWORD post routine address (see #90009)
|
|
1Eh 34 BYTEs reserved for ATASPI workspace
|
|
---request 05h---
|
|
08h 16 BYTEs controller unique parameters (vendor unique)
|
|
---request 06h---
|
|
08h BYTE device ID
|
|
09h BYTE reserved (0)
|
|
0Ah BYTE (ret) drive flags (see #01461)
|
|
0Bh BYTE (ret) INT 13h drive
|
|
0Ch BYTE (ret) preferred head translation
|
|
0Dh BYTE (ret) preferred sector translation
|
|
0Eh 10 BYTEs reserved (0)
|
|
|
|
(Table 90004)
|
|
Values for ATASPI request status:
|
|
00h request in progress
|
|
01h request completed without error
|
|
02h request aborted by host
|
|
04h request completed with error
|
|
80h invalid request
|
|
81h invalid ATA controller number
|
|
82h ATA device not installed
|
|
83h ATA controller/device busy
|
|
Note: if ATASPI ever returns 83h as the status, it is the responsibility of
|
|
the driver/applications to re-send the request at a later time
|
|
SeeAlso: #90003
|
|
|
|
Bitfields for request flags:
|
|
Bit(s) Description (Table 90005)
|
|
7 reserved (0)
|
|
6 "ByteXfer"
|
|
=0 use word transfer mode
|
|
=1 use byte transfer mode
|
|
5 (ATAPI device) DSC unavailable action (DUA)
|
|
=0 queue the request and service it when DSC bit is set
|
|
=1 return with status 83h
|
|
4-3 direction
|
|
00 direction determined by device
|
|
01 data in
|
|
10 data out
|
|
11 no data transfer
|
|
2 request type
|
|
=0 ATAPI Packet Command
|
|
=1 AT Task File Structure
|
|
1 reserved (0)
|
|
0 "Post"
|
|
=0 disable posting
|
|
=1 enable posting
|
|
SeeAlso: #90003
|
|
|
|
(Table 90006)
|
|
Values for ATA controller status:
|
|
00h no error
|
|
11h device not present
|
|
12h data overrun/underrun
|
|
SeeAlso: #90003
|
|
|
|
(Table 90007)
|
|
Values for peripheral device type:
|
|
00h direct-access device (e.g. magnetic disk)
|
|
01h tape device (QIC-121 SCSI Architectural Model)
|
|
02h-04h reserved
|
|
05h CD-ROM device
|
|
06h reserved
|
|
07h optical memory device (e.g. some optical disks)
|
|
08h-0Bh reserved
|
|
0Ch tape device (Cost Sensitive Architectural Model)
|
|
0Dh-1Eh reserved
|
|
1Fh unknown or no device type
|
|
80h non-ATAPI device
|
|
SeeAlso: #90003
|
|
|
|
Format of AT Task File Structure:
|
|
Offset Size Description (Table 90008)
|
|
00h features register
|
|
01h sector count register
|
|
02h cylinder LSB register
|
|
04h cylinder MSB register
|
|
05h device/head register (see #P0513)
|
|
06h command register (see #P0515)
|
|
SeeAlso: #90005
|
|
|
|
(Table 90009)
|
|
Values ATASPI post function is called with:
|
|
STACK: DWORD -> ARB (see #90003) which completed
|
|
interrupts disabled
|
|
Return: EBP, EBX, ESI, EDI must be preserved
|
|
interrupts disabled
|
|
Notes: the post function may issue any ATASPI function except an abort; it
|
|
should complete as quickly as possible
|
|
the large-model C declaration is
|
|
void (*post)(ARB_Struct *);
|
|
SeeAlso: #90003
|
|
|
|
Format of Future Domain controller unique parameters:
|
|
Offset Size Description (Table 90010)
|
|
00h WORD controller features
|
|
02h WORD controller main I/O port
|
|
04h WORD controller alternate I/O port
|
|
06h BYTE controller IRQ
|
|
07h BYTE ??? (00h or 01h)
|
|
08h BYTE ??? (00h or 01h)
|
|
09h 7 BYTEs reserved (0)
|
|
SeeAlso: #90003
|
|
----------214402-----------------------------
|
|
INT 21 - DRFAT32.SYS device driver - IOCTL INPUT
|
|
AX = 4402h
|
|
BX = file handle referencing character device for DRFAT32.SYS driver
|
|
(e.g. "FAT32XXX" in the default configuration)
|
|
CX = number of bytes to read
|
|
DS:DX -> control block (see #04108)
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually read
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: the data returned depends on the first byte of the control block
|
|
the remainder of the control block is filled by the driver
|
|
one DRFAT32.SYS device driver supports up to 8 subunits (that is up
|
|
to 8 FAT32 partitions). By default, DRFAT32.SYS logs in all FAT32
|
|
partitions it finds, however, by using command line options /C (CHS),
|
|
/L (LBA), /H (Hidden) and /P:1..4 (Primary), /E:1..255 (Logical
|
|
Drive), and /U:min[,max] (Unit 128..255) it can be directed to
|
|
attach only to one or a specific range of partitions. Multiple
|
|
DRFAT32.SYS drivers can be loaded in a system when using the
|
|
/D:name option. To assign them to the redirector, the /D:name option
|
|
must be repeated for each of the DRFAT32.SYS drivers in the
|
|
DRFAT32.EXE command line.
|
|
SeeAlso: AX=4402h"CD-ROM",INT 2F/AX=0802h
|
|
|
|
Format of DRFAT32 control block:
|
|
Offset Size Description (Table 04108)
|
|
00h BYTE data being requested
|
|
00h device driver header address
|
|
09h media change status
|
|
48h address of DRFAT32 geometry table
|
|
else error
|
|
---function 00h---
|
|
01h DWORD device driver header address (see also AH=52h,#01646)
|
|
---function 09h---
|
|
01h BYTE media change status
|
|
00h don't know
|
|
01h media unchanged
|
|
FFh media has been changed
|
|
---DRFAT32 function 48h---
|
|
01h DWORD address of DRFAT32 geometry table (see #04109)
|
|
|
|
Format of DRFAT32 Geometry Table:
|
|
Offset Size Description (Table 04109)
|
|
00h 8*59 BYTEs eight DRFAT32 partition data tables (see #04110)
|
|
1D8h BYTE DRFAT32 access flags (see #04111)
|
|
1D9h BYTE DRFAT32 status flags (see #04112)
|
|
Note: This is the table layout used by DRFAT32.SYS 1.00 which supports up
|
|
to 8 sub-units. The layout of this table and its records may change,
|
|
so the version indicator in the device driver's signature ("FAT320")
|
|
and the size of the public data structure should be checked first.
|
|
SeeAlso: #04108
|
|
|
|
Format of DRFAT32 partition data table:
|
|
Offset Size Description (Table 04110)
|
|
00h BYTE size of following public data structure (9)
|
|
--- public data (needed by the DRFAT32.EXE redirector) ---
|
|
01h WORD bytes per sector
|
|
03h BYTE sectors per cluster
|
|
04h WORD reserved sectors
|
|
06h DWORD root directory start cluster
|
|
--- private data ---
|
|
0Ah DWORD sectors per track
|
|
0Eh DWORD root directory sector
|
|
12h DWORD partition start sector
|
|
16h DWORD highest partition sector allowed
|
|
(only if range checking enabled)
|
|
1Ah DWORD absolute cluster start sector
|
|
(cluster start sector+partition start sector)
|
|
1Eh DWORD total sectors per track (number of heads * sectors per track)
|
|
22h BYTE drive unit (default 80h)
|
|
23h BYTE temp buffer: CHS sectors to write (if verify enabled)
|
|
24h BYTE INT 13h extension version
|
|
--- CHS data ---
|
|
25h WORD cylinder
|
|
27h WORD head
|
|
29h WORD sector
|
|
--- LBA data ---
|
|
2Bh 16 BYTEs disk address packet (see #00272 at INT 13/AH=42h)
|
|
SeeAlso: #04109
|
|
|
|
Bitfields for DRFAT32 access flags:
|
|
Bit(s) Description (Table 04111)
|
|
7 using LBA addressing instead of CHS
|
|
6 using INT 13h extensions (see also INT 13/AH=48h)
|
|
5 multi-sector access allowed
|
|
4 force media change indication on removable drives
|
|
3 force verify after every write (/W)
|
|
2 more than 1024 cylinders, less than 64 heads (/A)
|
|
1 client-side asynchronous buffering allowed (/B), normally =0
|
|
0 read-only access (/R)
|
|
SeeAlso: #04109,#04112
|
|
|
|
Bitfields for DRFAT32 status flags:
|
|
Bit(s) Description (Table 04112)
|
|
7-2 reserved (0)
|
|
1 Save Guard enabled (blocks any further writes after a fault)
|
|
0 volume may have dirty sectors (set after write operations)
|
|
SeeAlso: #04109,#04111
|
|
--------D-214403-----------------------------
|
|
INT 21 - DOS 2+ - IOCTL - WRITE TO CHARACTER DEVICE CONTROL CHANNEL
|
|
AX = 4403h
|
|
BX = file handle referencing character device
|
|
CX = number of bytes to write
|
|
DS:DX -> data to write
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually written
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: format of data is driver-specific
|
|
(also see separate entries below for some specific cases)
|
|
if the file handle refers to "4DOSSTAK", the 4DOS (v2.x-3.03)
|
|
KEYSTACK.SYS driver will push the specified characters on the
|
|
keyboard stack; similarly for "NDOSSTAK", the NDOS KEYSTACK.SYS
|
|
driver will push the characters onto the keyboard stack
|
|
this function was not supported by Digital Research's DOS Plus
|
|
SeeAlso: AX=4400h,AX=4402h"DOS 2+",AX=4405h"DOS",INT 2F/AX=122Bh
|
|
SeeAlso: INT 2F/AX=D44Dh,INT 2F/AX=D44Fh
|
|
--------c-214403-----------------------------
|
|
INT 21 - SMARTDRV.SYS v3.x only - IOCTL - CACHE CONTROL
|
|
AX = 4403h
|
|
BX = handle for device "SMARTAAR"
|
|
CX = number of bytes to write
|
|
DS:DX -> SMARTDRV control block (see #01523)
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually written
|
|
0000h if control block too small for given command
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Note: NCache2 (from the Norton Utilities v8.0) attempts to support this
|
|
interface, but does not do so correctly, often hanging the system;
|
|
one should use the SmartDrive v4.x or NCache private interfaces
|
|
(see INT 2F/AX=4A10h/BX=0000h,INT 2F/AX=FE00h/DI=4E55h)
|
|
SeeAlso: AX=4402h"SMARTDRV",INT 2F/AX=4A10h/BX=0000h
|
|
|
|
(Table 01522)
|
|
Values for SMARTDRV function code:
|
|
00h flush cache
|
|
01h flush and discard cache
|
|
02h disable caching (flushes and discards cache first)
|
|
03h enable caching
|
|
04h control write caching
|
|
05h set flushing tick count
|
|
06h lock cache contents
|
|
07h unlock cache contents
|
|
08h set flush-on-reboot flag
|
|
09h unused
|
|
0Ah control full-track caching
|
|
0Bh reduce cache size
|
|
0Ch increase cache size
|
|
0Dh set INT 13 chain address
|
|
|
|
Format of SMARTDRV control block:
|
|
Offset Size Description (Table 01523)
|
|
00h BYTE function code (see #01522)
|
|
---functions 00h-03h,06h,07h---
|
|
no additional fields
|
|
---function 04h---
|
|
01h BYTE write caching control action
|
|
00h turn off write-through
|
|
01h turn on write-through
|
|
02h turn off write buffering (also flushes cache)
|
|
03h turn on write buffering (also flushes cache)
|
|
---function 05h---
|
|
01h WORD number of timer ticks between cache flushes
|
|
---function 08h---
|
|
01h BYTE new flush-on-reboot flag (00h off, 01h on)
|
|
---function 0Ah---
|
|
01h BYTE full-track writes are
|
|
00h not cached
|
|
01h cached
|
|
---functions 0Bh,0Ch---
|
|
01h WORD number of 16K pages by which to increase/reduce cache size
|
|
---function 0Dh---
|
|
01h DWORD new address to which to chain on INT 13
|
|
Note: the previous address is not preserved
|
|
--------d-214403-----------------------------
|
|
INT 21 - CD-ROM device driver - IOCTL OUTPUT
|
|
AX = 4403h
|
|
BX = file handle referencing character device for CD-ROM driver
|
|
CX = number of bytes to write
|
|
DS:DX -> control block (see #01524)
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually written
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: some device drivers support several subunits (that is more than one
|
|
drive) but it is not possible to distinguish between them with this
|
|
function; use INT 2F/AX=1510h or INT 2F/AX=0802h instead
|
|
under Windows95, the "mscd$$$$" device cannot be opened so you cannot
|
|
obtain the handle required by this function: use INT 2F/AX=1510h
|
|
or INT 2F/AX=0802h instead
|
|
SeeAlso: AX=4402h"CD-ROM",INT 2F/AX=0802h,INT 2F/AX=1510h
|
|
|
|
Format of CR-ROM control block:
|
|
Offset Size Description (Table 01524)
|
|
00h BYTE function code
|
|
00h eject disk
|
|
01h lock/unlock door
|
|
02h reset drive
|
|
03h control audio channel
|
|
04h write device control string
|
|
05h close tray
|
|
---functions 00h,02h,05h---
|
|
no further fields
|
|
---function 01h---
|
|
01h BYTE lock function
|
|
00h unlock door
|
|
01h lock door
|
|
---function 03h---
|
|
01h BYTE input channel (0-3) for output channel 0
|
|
02h BYTE volume for output channel 0
|
|
03h BYTE input channel (0-3) for output channel 1
|
|
04h BYTE volume for output channel 1
|
|
05h BYTE input channel (0-3) for output channel 2
|
|
06h BYTE volume for output channel 2
|
|
07h BYTE input channel (0-3) for output channel 3
|
|
08h BYTE volume for output channel 3
|
|
Note: output channels 0 and 1 are left and right, 2 and 3 are left prime and
|
|
right prime; a volume of 00h is off
|
|
---function 04h---
|
|
01h N BYTEs bytes to send directly to the CD-ROM drive without
|
|
interpretation
|
|
--------D-214403-----------------------------
|
|
INT 21 U - MS-DOS 7.0+ - CONFIG$ device - SET??? CONFIGURATION INFORMATION
|
|
AX = 4403h
|
|
BX = file handle for character device "CONFIG$"
|
|
CX = number of bytes to write
|
|
DS:DX -> buffer containing ???
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually written
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Note: IOCTL Output to CONFIG$ is only available while IO.SYS is booting
|
|
the system; once CONFIG.SYS has been processed, this call always
|
|
succeeds, ignoring any input
|
|
SeeAlso: AX=4403h"CONFIG$"
|
|
--------d-214403-----------------------------
|
|
INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
|
|
AX = 4403h
|
|
BX = handle for device "SCSITAPE"
|
|
CX = number of bytes to write
|
|
DS:DX -> SCSITAPE control block (see #01525)
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually written
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
SeeAlso: AX=4405h"ST-01",INT 78/AH=10h
|
|
|
|
Format of SCSITAPE control block:
|
|
Offset Size Description (Table 01525)
|
|
00h WORD command type
|
|
'F' Format (argument 1 = interleave, argument 2 = format type)
|
|
'E' Erase
|
|
'R' Rewind
|
|
'L' Load
|
|
'N' No Load
|
|
'S' Space (argument 1 = count, argument 2 = type)
|
|
'M' File Mark (argument 1 = count)
|
|
'A' Reassign
|
|
02h WORD argument 1
|
|
04h WORD argument 2
|
|
06h WORD segment of command buffer
|
|
08h WORD offset of command buffer
|
|
0Ah WORD length of command buffer
|
|
--------E-214403-----------------------------
|
|
INT 21 U - AI Architects - OS/x86??? - API
|
|
AX = 4403h
|
|
BX = handle for device "AIA_OS"
|
|
CX = number of bytes to write (ignored)
|
|
DS:DX -> 12-byte buffer (see #01526), first byte is command:
|
|
81h installation check
|
|
82h get API entry point
|
|
84h uninstall
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually written
|
|
DS:DX buffer filled
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Ch,0Dh) (see #01680 at AH=59h)
|
|
Notes: these functions are only available if the DOS extender was loaded as a
|
|
device driver in CONFIG.SYS
|
|
called by TKERNEL (a licensed version of AI Architects/Ergo OS/x86)
|
|
SeeAlso: INT 2F/AX=FBA1h/BX=0081h,INT 2F/AX=FBA1h/BX=0082h
|
|
Index: installation check;OS/x86|entry point;OS/x86|uninstall;OS/x86
|
|
|
|
Format of buffer on return:
|
|
Offset Size Description (Table 01526)
|
|
00h 4 BYTEs signature "IABH"
|
|
---if function 81h---
|
|
(no additional fields)
|
|
---if function 82h---
|
|
04h DWORD pointer to API entry point (see INT 2F/AX=FBA1h/BX=0082h)
|
|
---if function 84h---
|
|
04h WORD success indicator
|
|
06h WORD segment of ???
|
|
08h WORD segment of ??? memory block to free if nonzero
|
|
0Ah WORD segment of ??? memory block to free if nonzero
|
|
--------V-214403-----------------------------
|
|
INT 21 - PGS1600.DEV - IOCTL - SET CONFIGURATION???
|
|
AX = 4403h
|
|
BX = file handle for device "PGS1600$"
|
|
CX = 0018h (size of buffer)
|
|
DS:DX -> configuration buffer (see #01484 at AX=4402h"PGS1600")
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually written
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Program: PGS1600.DEV is a device driver for the Cornerstone Technology PG1600
|
|
display adapter, which provides a 1600x1200 monochrome display as
|
|
well as one of two emulations, MDA or CGA.
|
|
SeeAlso: AX=4402h"PGS1600"
|
|
--------N-214403-----------------------------
|
|
INT 21 - PC/TCP IPCUST.SYS - RESET CONFIGURATION DATA READ POINTER
|
|
AX = 4403h
|
|
BX = file handle referencing device "$IPCUST"
|
|
CX, DS:DX ignored
|
|
Return: CF clear if successful
|
|
AX destroyed
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: there are a total of 378h bytes of configuration data for IPCUST.SYS
|
|
version 2.05. If less than the entire data is read or written,
|
|
the next read/write continues where the previous one ended; this
|
|
call and AX=4402h both reset the location at which the next
|
|
operation starts to zero
|
|
v2.1+ uses a new configuration method, but allows the installation
|
|
of IPCUST.SYS for backward compatibility with other software which
|
|
must read the PC/TCP configuration
|
|
SeeAlso: AH=3Fh"IPCUST",AH=40h"IPCUST",AX=4402h"IPCUST"
|
|
--------V-214403-----------------------------
|
|
INT 21 - Compaq AG1024.SYS - CPQ_MGES - IOCTL OUTPUT
|
|
AX = 4403h
|
|
BX = file handle referencing device "CPQ_MGES"
|
|
DS:DX -> request packet (see #01527)
|
|
CX ignored
|
|
Return: CF clear if successful
|
|
AX destroyed
|
|
data buffer filled (if applicable)
|
|
first word of request packet set to number of bytes of data
|
|
available (amount returned is smaller of this and requested
|
|
amount)
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
|
|
SeeAlso: AX=4403h"RGDI"
|
|
|
|
Format of Compaq AG1024.SYS request packet:
|
|
Offset Size Description (Table 01527)
|
|
00h WORD function
|
|
0000h get ??? (26h bytes)
|
|
0001h get ??? (36h bytes)
|
|
0002h set ??? (same as returned by function 0001h)
|
|
0003h get ??? (6 bytes)
|
|
0004h get ???
|
|
0005h get ???
|
|
0006h get ??? (10h bytes)
|
|
0007h set ??? (same as returned by function 0006h)
|
|
---functions 00h-03h,06h,07h---
|
|
02h WORD size of data buffer
|
|
04h DWORD -> buffer for function's data
|
|
---functions 04h,05h---
|
|
02h WORD ???
|
|
04h WORD size of data buffer
|
|
06h DWORD -> buffer to receive data
|
|
--------V-214403-----------------------------
|
|
INT 21 - Compaq AG1024.SYS - RGDI - IOCTL OUTPUT
|
|
AX = 4403h
|
|
BX = file handle referencing device "$$$$RGDI"
|
|
DS:DX -> request packet (see #01528)
|
|
CX ignored
|
|
Return: CF clear if successful
|
|
AX destroyed
|
|
data buffer filled (if applicable)
|
|
first word of request packet set to number of bytes of data
|
|
available (amount returned is smaller of this and requested
|
|
amount)
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Program: AG1024.SYS is a device driver for the Advanced Graphics 1024 adapter
|
|
SeeAlso: AX=4402h"RGDI",AX=4403h"CPQ_MGES"
|
|
|
|
Format of Compaq AG1024.SYS request packet:
|
|
Offset Size Description (Table 01528)
|
|
00h WORD function
|
|
0000h get entry points
|
|
0001h get ???
|
|
02h DWORD address of buffer for returned data
|
|
--------m-214403SF01-------------------------
|
|
INT 21 U - Qualitas 386MAX v6.01+ - TURN 386MAX OFF
|
|
AX = 4403h subfn 01h
|
|
BX = handle for device "386MAX$$"
|
|
DS:DX -> BYTE 01h
|
|
CX ignored
|
|
Return: DS:DX -> BYTE status (00h = successful)
|
|
CF clear if successful
|
|
AX destroyed
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Note: this function will fail if any EMS or UMBs are in use
|
|
SeeAlso: AX=4403h/SF=02h,AX=4403h/SF=03h,AX=4403h/SF=05h
|
|
--------m-214403SF02-------------------------
|
|
INT 21 U - Qualitas 386MAX v6.01+ - TURN 386MAX ON
|
|
AX = 4403h subfn 02h
|
|
BX = handle for device "386MAX$$"
|
|
DS:DX -> BYTE 02h
|
|
CX ignored
|
|
Return: DS:DX -> BYTE status (00h = successful)
|
|
CF clear if successful
|
|
AX destroyed
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
SeeAlso: AX=4403h/SF=01h,AX=4403h/SF=03h,AX=4403h/SF=05h
|
|
--------m-214403SF03-------------------------
|
|
INT 21 U - Qualitas 386MAX v6.01+ - SET STATE
|
|
AX = 4403h subfn 03h
|
|
BX = handle for device "386MAX$$"
|
|
CX = number of bytes to copy (up to size of state buffer)
|
|
DS:DX -> BYTE 03h followed by state buffer
|
|
(see #01467 at AX=4402h"386MAX")
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually written
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Note: the first byte of the buffer must be either 01h, 02h, or 03h
|
|
(specifying the version of the state record) and the buffer must
|
|
contain CX bytes AFTER the initial byte
|
|
SeeAlso: AX=4402h"386MAX"
|
|
--------m-214403SF05-------------------------
|
|
INT 21 U - Qualitas 386MAX v7.00+ - LIMIT AUTOMATIC ACTIVATION TO STD EMS CALLS
|
|
AX = 4403h subfn 05h
|
|
BX = handle for device "386MAX$$"
|
|
DS:DX -> BYTE 05h
|
|
CX ignored
|
|
Return: CF clear if successful
|
|
AX destroyed
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Desc: specifies that 386MAX will only shift from AUTO to ON mode on standard
|
|
EMS calls INT 67/AH=40h-5Dh
|
|
SeeAlso: AX=4403h/SF=02h,AX=4403h/SF=03h,AX=4403h/SF=06h
|
|
--------m-214403SF06-------------------------
|
|
INT 21 U - Qualitas 386MAX v7.00+ - ALLOW AUTOMATIC ACTIVATION ON ANY INT 67
|
|
AX = 4403h subfn 06h
|
|
BX = handle for device "386MAX$$"
|
|
DS:DX -> BYTE 06h
|
|
CX ignored
|
|
Return: CF clear if successful
|
|
AX destroyed
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Desc: specified that 386MAX should shift from AUTO to ON mode on any INT 67
|
|
call other than INT 67/AH=3Fh
|
|
SeeAlso: AX=4403h/SF=01h,AX=4403h/SF=03h,AX=4403h/SF=05h
|
|
--------n-214403-----------------------------
|
|
INT 21 U - PenDOS PENDEV.SYS - ???
|
|
AX = 4403h
|
|
BX = file handle for device "$$PENDOS" or "$$PD_REG"
|
|
CX = size of buffer
|
|
DS:DX -> buffer containing ???
|
|
Return: CF clear if successful
|
|
buffer filled
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Program: A limited version of PenDOS by Communication Intelligence Corporation,
|
|
which provides pen capability to keyboard-based programs, is bundled
|
|
with IBM DOS 6.1
|
|
Note: this call sets the WORD at offset 1Ah into the device driver request
|
|
header used to call the driver to 0000h.
|
|
SeeAlso: AX=4402h"PENDEV.SYS"
|
|
----------214403-----------------------------
|
|
INT 21 - DR DOS $IDLE$ - IOCTL - DYNAMIC IDLE DETECTION CONTROL
|
|
AX = 4403h
|
|
BX = file handle referencing character device $IDLE$
|
|
CX = number of bytes to write (0004h)
|
|
DS:DX -> $IDLE$ IOCTL structure (see #04113)
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually written
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: When the DR DOS IBMBIO.COM detects the presence of the $IDLE$ device
|
|
during startup, it will retrieve the address of the idle state
|
|
data area via INT 21/AX=4458h and pass it along to the $IDLE$ device
|
|
driver by calling this function.
|
|
|
|
Format of DR DOS $IDLE$ IOCTL structure:
|
|
Offset Size Description (Table 04113)
|
|
00h DWORD -> idle state data area (see Table !!! at INT 21/AX=4458h)
|
|
--------D-214404-----------------------------
|
|
INT 21 - DOS 2+ - IOCTL - READ FROM BLOCK DEVICE CONTROL CHANNEL
|
|
AX = 4404h
|
|
BL = drive number (00h = default, 01h = A:, etc.)
|
|
CX = number of bytes to read
|
|
DS:DX -> buffer
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually read
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: format of data is driver-specific
|
|
this function was not supported by Digital Research's DOS Plus
|
|
SeeAlso: AX=4402h"DOS 2+",AX=4405h"DOS",INT 2F/AX=122Bh
|
|
--------k-214404-----------------------------
|
|
INT 21 - Stacker - GET DEVICE DRIVER ADDRESS AND SET VOLUME NUMBER
|
|
AX = 4404h
|
|
BL = drive number (00h = default, 01h = A:, etc.)
|
|
CX = 0004h
|
|
DS:DX -> DWORD buffer to receive device driver address
|
|
Return: buffer filled with pointer into Stacker device driver (see #02550):
|
|
driver + 19h if Stacker Anywhere controls this drive
|
|
driver + 1Ah if Stacker controls this drive
|
|
unchanged else
|
|
Notes: in addition to returning the address of the Stacker device driver,
|
|
this call also sets the volume number at offset 58h in the device
|
|
driver (see #02550 at INT 25/AX=CDCDh)
|
|
Stacker Anywhere does not link its built-in device driver into
|
|
the standard device driver chain, but it can be found via CDS/DPB
|
|
this call can be used as an installation check for all versions of
|
|
Stacker and Stacker Anywhere to avoid the INT 25 call
|
|
SeeAlso: AX=4408h,AX=440Eh,AH=52h,INT 25/AX=CDCDh
|
|
--------k-214404-----------------------------
|
|
INT 21 - Stacker - GET STACVOL FILE SECTORS
|
|
AX = 4404h
|
|
BL = drive number (0 is current drive)
|
|
CX = byte count (i.e., 200h = 1 sector)
|
|
DS:DX -> buffer (see #01529)
|
|
Return: Data Buffer contains the number of sectors requested from the
|
|
STACVOL physical file for the drive specified.
|
|
|
|
Format of Stacker buffer:
|
|
Offset Size Description (Table 01529)
|
|
00h WORD 01CDh
|
|
02h WORD sector count
|
|
04h DWORD number of starting sector
|
|
08h DWORD far pointer to Data Buffer
|
|
--------k-214404-----------------------------
|
|
INT 21 - DUBLDISK.SYS v2.6 - GET INFO
|
|
AX = 4404h
|
|
BL = drive number of DoubleDisk drive (00h = default, 01h = A:, etc.)
|
|
CX = number of bytes (000Ah-0014h, call ignored otherwise)
|
|
DS:DX -> data record (see #01530)
|
|
Return: CF clear if successful
|
|
AX = number of bytes read
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Program: DUBLDISK.SYS is the device driver portion of DoubleDisk, a disk
|
|
expander by Vertisoft Systems, Inc.
|
|
InstallCheck: for v2.6, scan memory for the signature "FAT 2.6 byte:",
|
|
which is immediately followed by a data table (see #01531)
|
|
BUG: VOPT (a disk optimizer by Golden Bow Software) assumes that any driver
|
|
which returns the "correct" number of bytes when the first word of
|
|
the buffer for the data record contains the signature value 4444h is
|
|
DoubleDisk; a workaround is for the non-DoubleDisk driver to return
|
|
no data if the signature is present
|
|
SeeAlso: AX=440Dh"DOS 3.2+"
|
|
Index: installation check;DUBLDISK.SYS
|
|
|
|
Format of DUBLDISK data record:
|
|
Offset Size Description (Table 01530)
|
|
00h WORD (call) signature 4444h
|
|
02h BYTE (call) function
|
|
00h ???
|
|
01h ???
|
|
---function 00h---
|
|
02h BYTE (ret) ???
|
|
03h BYTE (ret) ???
|
|
---function 01h---
|
|
02h WORD (ret) 4444h
|
|
04h WORD allocation unit size???
|
|
06h WORD ???
|
|
08h WORD ???
|
|
0Ah BYTE ???
|
|
|
|
Format of DUBLDISK signature data table:
|
|
Offset Size Description (Table 01531)
|
|
00h 5 BYTEs ???
|
|
05h BYTE first drive number
|
|
06h BYTE number of drives
|
|
07h ???
|
|
--------k-214404-----------------------------
|
|
INT 21 - DBLSPACE.BIN - IOCTL - FLUSH OR INVALIDATE INTERNAL CACHES
|
|
AX = 4404h
|
|
BL = drive number (00h = default, 01h = A:, etc)
|
|
CX = 000Ah (size of DSPACKET structure)
|
|
DS:DX -> DSPACKET structure (see #01532)
|
|
Return: CF clear if IOCTL successful -- check DSPACKET for actual status
|
|
AX = number of bytes actually transferred
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
SeeAlso: AX=4405h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
|
|
|
|
Format of DoubleSpace DSPACKET structure:
|
|
Offset Size Description (Table 01532)
|
|
00h WORD signature 444Dh ("DM")
|
|
02h BYTE command code
|
|
46h ('F') flush internal caches
|
|
49h ('I') flush and invalidate internal caches
|
|
03h WORD result code
|
|
(ret) 4F4Bh ("OK") if successful, else unchanged
|
|
05h 5 BYTEs padding
|
|
--------k-214404-----------------------------
|
|
INT 21 - DBLSPACE.BIN v6.2 - IOCTL - GET ??? FOR SPECIFIED DRIVE
|
|
AX = 4404h
|
|
BL = drive number (00h = default, 01h = A:, etc)
|
|
CX = size of DSPACKET structure (ignored in DOS 6.2)
|
|
DS:DX -> DSPACKET structure (see #01533)
|
|
Return: CF clear if IOCTL successful -- check DSPACKET for actual status
|
|
AX = number of bytes actually transferred
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
SeeAlso: AX=4405h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
|
|
|
|
Format of DoubleSpace DSPACKET structure:
|
|
Offset Size Description (Table 01533)
|
|
00h WORD signature 444Dh ("DM")
|
|
02h BYTE command code
|
|
53h ('S') get ??? for specified drive
|
|
03h WORD result code
|
|
(ret) 4F4Bh ("OK") if successful, else unchanged
|
|
05h DWORD (ret) pointer to 96-byte ??? data
|
|
09h DWORD (ret) pointer to ??? data
|
|
0Dh 3 BYTEs reserved
|
|
--------k-214404-----------------------------
|
|
INT 21 U - DoubleTools v1.0 - GET ???
|
|
AX = 4404h
|
|
BL = drive number (00h = default, 01h = A:, etc)
|
|
CX = 0006h
|
|
DS:DX -> DoubleTools structure (see #01534)
|
|
Return: CF clear if IOCTL successful -- check DSPACKET for actual status
|
|
AX = number of bytes actually transferred
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Note: the Transporter device driver has the signature 55h 61h 50h 74h
|
|
("DaPt") twelve bytes after it beginning
|
|
|
|
Format of DoubleTools structure:
|
|
Offset Size Description (Table 01534)
|
|
00h WORD (call) signature 55h AAh
|
|
(ret) signature 78h 70h ("xp")
|
|
02h WORD (call) signature 52h 16h
|
|
(ret) ???
|
|
04h WORD (ret) segment of driver's DS (same as its PSP)
|
|
--------d-214404-----------------------------
|
|
INT 21 U - xDISK v3.31 - CONFIGURE
|
|
AX = 4404h
|
|
BL = drive number (00h = default, 01h = A:, etc)
|
|
CX = 0047h (length of version string)
|
|
DS:DX -> 79-byte buffer for version string and ???
|
|
DS:0081h = commandline containing new switches for driver
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually transferred
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Program: xDISK is a shareware resizeable EMS RAMdisk by FM de Monasterio
|
|
SeeAlso: AX=4405h"xDISK",INT 2F/AH=DDh/BX=7844h"xDISK"
|
|
--------c-214404-----------------------------
|
|
INT 21 - COMBI-disk v1.13 - GET DATA RECORD
|
|
AX = 4404h
|
|
BL = drive number (00h = default, 01h = A:, etc)
|
|
CX = 0032h (length of data packet)
|
|
DS:DX -> buffer for data packet (see #01535)
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually transferred
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Program: COMBI-disk is a shareware combination cache and RAMdisk sharing a
|
|
single pool of memory by Vadim V. Vlasov
|
|
InstallCheck: scan the valid drives for one which returns a correctly-sized
|
|
data packet with the proper signature in the first field
|
|
SeeAlso: AX=4405h"COMBI"
|
|
Index: installation check;COMBI-disk
|
|
|
|
Format of COMBI-disk data packet:
|
|
Offset Size Description (Table 01535)
|
|
00h 6 BYTEs ASCIZ signature "COMBI"
|
|
06h WORD version (high byte = major, low = decimal minor version)
|
|
08h BYTE current options
|
|
09h BYTE sectors per allocation block
|
|
0Ah WORD maximum buffer in KB
|
|
0Ch WORD current buffer in KB (less than max if XMS memory being lent)
|
|
0Eh WORD total number of allocation blocks
|
|
10h WORD current number of allocation blocks
|
|
12h WORD number of blocks being used by RAM disk
|
|
14h WORD number of blocks being used by cache or unused
|
|
16h WORD number of dirty cache blocks
|
|
18h WORD number of blocks which could not be written out due to errors
|
|
1Ah WORD total number of read requests
|
|
1Ch WORD total number of sectors read
|
|
1Eh WORD number of BIOS read requests (cache misses)
|
|
20h WORD number of sectors read via BIOS (cache misses)
|
|
22h WORD total number of write requests
|
|
24h WORD total number of sectors written
|
|
26h WORD number of BIOS write requests
|
|
28h WORD number of sectors written via BIOS
|
|
2Ah WORD number of RAM disk read requests
|
|
2Ch WORD number of sectors read from RAM disk
|
|
2Eh WORD number of RAM disk write requests
|
|
30h WORD number of sectors written to RAM disk
|
|
--------d-214404-----------------------------
|
|
INT 21 - SFS v1.00 - GET CONFIGURATION INFORMATION
|
|
AX = 4404h
|
|
BL = drive number (00h = default, 01h = A:, etc)
|
|
CX = 001Ah (length of data packet)
|
|
DS:DX -> buffer for data packet (see #01536)
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually transferred
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Program: SFS (Secure FileSystem) is a shareware encrypting disk driver by
|
|
Peter C. Gutmann
|
|
SeeAlso: AX=4405h"SFS"
|
|
|
|
Format of SFS data packet:
|
|
Offset Size Description (Table 01536)
|
|
00h 4 BYTEs signature string "SFS1"
|
|
04h WORD SFS unit number (0-based)
|
|
06h WORD drive on which the SFS volume is mounted
|
|
08h DWORD sector offset of logical volume from start of physical volume
|
|
0 if logical volume = physical volume
|
|
0Ch WORD flag: 00h = no disk mounted, 01h = disk mounted
|
|
0Eh WORD flag: 00h read/write, 01h read-only
|
|
10h WORD quick-unmount hotkey
|
|
(high byte = shift state, low = scan code) (see #00006)
|
|
12h WORD auto-unmount time in minutes, or 0000h if already expired, or
|
|
FFFFh if not set
|
|
14h WORD time in minutes remaining before auto-unmount
|
|
16h WORD internal driver check code
|
|
0000h no error
|
|
0001h driver consistency check failed
|
|
0002h unit consistency check failed
|
|
18h WORD disk access mode
|
|
0000h BIOS
|
|
0001h IDE direct access
|
|
0002h SCSI direct access
|
|
--------D-214405-----------------------------
|
|
INT 21 - DOS 2+ - IOCTL - WRITE TO BLOCK DEVICE CONTROL CHANNEL
|
|
AX = 4405h
|
|
BL = drive number (00h = default, 01h = A:, etc)
|
|
CX = number of bytes to write
|
|
DS:DX -> data to write
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually written
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: format of data is driver-specific
|
|
this function was not supported by Digital Research's DOS Plus
|
|
SeeAlso: AX=4403h"DOS",AX=4404h"DOS",INT 2F/AX=122Bh
|
|
--------d-214405-----------------------------
|
|
INT 21 - Brian Antoine Seagate ST-01 SCSI.SYS - IOCTL - EXECUTE COMMANDS
|
|
AX = 4405h
|
|
BX = drive number (00h = default, 01h = A:, etc)
|
|
CX = number of bytes to write
|
|
DS:DX -> SCSIDISK control block (see also #01525 at AX=4403h"ST-01")
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually written
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
SeeAlso: AX=4403h"ST-01"
|
|
--------k-214405-----------------------------
|
|
INT 21 U - DBLSPACE.BIN - IOCTL - FLUSH OR INVALIDATE INTERNAL CACHES
|
|
AX = 4405h
|
|
BL = drive number (00h = default, 01h = A:, etc)
|
|
CX = 000Ah (size of DSPACKET structure)
|
|
DS:DX -> DSPACKET structure (see #01537)
|
|
Return: CF clear if IOCTL successful -- check DSPACKET for actual status
|
|
AX = number of bytes actually transferred
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Note: this call is identical to the documented AX=4404h
|
|
SeeAlso: AX=4404h"DBLSPACE",INT 2F/AX=4A11h/BX=0000h
|
|
|
|
Format of DoubleSpace DSPACKET structure:
|
|
Offset Size Description (Table 01537)
|
|
00h WORD signature 444Dh ("DM")
|
|
02h BYTE command code
|
|
46h ('F') flush internal caches
|
|
49h ('I') flush and invalidate internal caches
|
|
03h WORD result code
|
|
(ret) 4F4Bh ("OK") if successful, else unchanged
|
|
05h 5 BYTEs padding
|
|
--------d-214405-----------------------------
|
|
INT 21 U - xDISK v3.31 - ???
|
|
AX = 4405h
|
|
BL = drive number (00h = default, 01h = A:, etc)
|
|
CX = number of bytes to write
|
|
DS:DX -> buffer containing version string
|
|
???
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually transferred
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Program: xDISK is a shareware resizeable EMS RAMdisk by FM de Monasterio
|
|
SeeAlso: AX=4404h"xDISK",INT 2F/AH=DDh/BX=7844h"xDISK"
|
|
--------d-214405-----------------------------
|
|
INT 21 - COMBI-disk v1.13 - CONTROL COMBI-disk
|
|
AX = 4405h
|
|
BL = drive number (00h = default, 01h = A:, etc) for RAM disk
|
|
CX = number of bytes to write
|
|
DS:DX -> buffer containing command packet (see #01539)
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually transferred
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
SeeAlso: AX=4404h"COMBI"
|
|
|
|
(Table 01538)
|
|
Values for COMBI-disk command code:
|
|
80h flush cache
|
|
81h change options byte
|
|
82h shrink memory
|
|
83h expand memory
|
|
84h get dirty block information
|
|
85h reset write errors
|
|
86h reset counters
|
|
|
|
Format of COMBI-disk command packet:
|
|
Offset Size Description (Table 01539)
|
|
00h WORD version
|
|
02h BYTE command code (see #01538)
|
|
---command code 80h---
|
|
no additional fields
|
|
---command code 81h---
|
|
03h BYTE new options byte (see #01540)
|
|
---command code 82h---
|
|
03h WORD number of KB to release
|
|
---command code 83h---
|
|
03h WORD number of KB to expand
|
|
---command code 84h---
|
|
03h DWORD -> buffer for block info (see #01541)
|
|
---command code 85h---
|
|
03h DWORD block ID
|
|
---command code 86h---
|
|
03h BYTE which counters to reset
|
|
bit 0: hard disk read counts
|
|
bit 1: hard disk write counts
|
|
bit 2: RAM disk read/write counts
|
|
Note: multiple commands may be placed in a single packet by stringing
|
|
together as many command/argument pairs as desired
|
|
|
|
Bitfields for COMBI-disk options byte:
|
|
Bit(s) Description (Table 01540)
|
|
0 cache off
|
|
1 cache frozen
|
|
2 write caching enabled
|
|
3 delayed writing disabled
|
|
5 fix memory allocation (no XMS lending)
|
|
6 no 'sector not found' error
|
|
|
|
Format of COMBI-disk block info:
|
|
Offset Size Description (Table 01541)
|
|
00h DWORD block ID
|
|
04h BYTE bitmask of valid sectors in block
|
|
05h BYTE bitmask of dirty sectors in block
|
|
06h BYTE last error returned by BIOS
|
|
07h BYTE number of errors
|
|
--------d-214405-----------------------------
|
|
INT 21 - SFS v1.00 - DRIVER CONTROL
|
|
AX = 4405h
|
|
BL = drive number (00h = default, 01h = A:, etc)
|
|
CX = number of bytes to write
|
|
DS:DX -> data to write (see #01543)
|
|
Return: CF clear if successful
|
|
AX = number of bytes actually written
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Program: SFS (Secure FileSystem) is a shareware encrypting disk driver by
|
|
Peter C. Gutmann
|
|
SeeAlso: AX=4404h"SFS"
|
|
|
|
(Table 01542)
|
|
Values for SFS control function:
|
|
00h "PACKET_SET_DISKINFO" set disk parameters
|
|
01h "PACKET_SET_KEYINFO" set keying information
|
|
02h "PACKET_SET_READONLY" select read/write or read-only
|
|
03h "PACKET_SET_DRIVENO" set drive number to mount
|
|
04h "PACKET_SET_MOUNTSTATUS" set mount status
|
|
05h "PACKET_SET_UNMOUNT" set/clear quick-unmount hotkey
|
|
06h "PACKET_SET_TIMEOUT" set/clear auto-unmount timeout
|
|
|
|
Format of SFS control data packet:
|
|
Offset Size Description (Table 01543)
|
|
00h WORD signature 4330h ('C0')
|
|
02h WORD function (see #01542)
|
|
---function 00h---
|
|
04h WORD sector size in bytes
|
|
06h BYTE sectors per cluster
|
|
07h WORD number of boot sectors
|
|
09h BYTE number of copies of FAT
|
|
0Ah WORD size of root directory in entries
|
|
0Ch WORD number of sectors on disk, 16-bit
|
|
0Eh BYTE media descriptor byte
|
|
0Fh WORD sectors per FAT
|
|
11h WORD sectors per track
|
|
13h WORD number of heads
|
|
15h DWORD number of hidden sectors
|
|
19h DWORD number of sectors on disk, 32-bit
|
|
---function 01h---
|
|
04h 20 BYTEs master IV for encrypted disk
|
|
18h 64 BYTEs NDC/SHS keying information
|
|
---function 02h---
|
|
04h WORD read-only state: 00h read-only, 01h read/write
|
|
---function 03h---
|
|
04h WORD drive number (see #01544)
|
|
06h DWORD sector offset of logical volume from start of physical volume
|
|
0 if logical volume = physical volume
|
|
---function 04h---
|
|
04h WORD mount status (00h unmounted, 01h mounted)
|
|
---function 05h---
|
|
04h WORD hotkey (high byte = shift state, low byte = scan code or 00h)
|
|
(see #00006)
|
|
0000h to disable hotkey
|
|
---function 06h---
|
|
04h WORD timeout in minutes before automatic unmount
|
|
0000h to disable auto-unmount
|
|
Notes: the data for function 00h corresponds to a DOS BPB (see AH=53h)
|
|
functions 00h, 01h, and 03h automatically unmount the encrypted drive
|
|
unmounting a drive with function 04h also destroys the encryption
|
|
information in the driver and forces all dirty buffers to be flushed
|
|
|
|
Bitfields for SFS drive number:
|
|
Bit(s) Description (Table 01544)
|
|
15-12 drive access mode
|
|
0000 BIOS access
|
|
0001 direct IDE access
|
|
0010 direct SCSI access
|
|
---if BIOS access---
|
|
11-8 unused (0)
|
|
7-0 BIOS drive number
|
|
---if IDE access---
|
|
11-8 unused (0)
|
|
7-0 IDE drive number
|
|
---if SCSI access---
|
|
11-8 SCSI host number
|
|
7-4 SCSI target ID
|
|
3-0 SCSI logical unit number
|
|
----------214405-----------------------------
|
|
INT 21 U - SUPERSTOR - IOCTL - INSTALL CHECK
|
|
AX = 4405h
|
|
BL = drive number (00h = default, 01h = A:, etc)
|
|
(BH = 0???)
|
|
CX = 000Ch (size of SuperStor packet structure)
|
|
DS:DX -> SuperStor packet structure (see #04114)
|
|
Return: CF clear if IOCTL successful -- check SuperStor packet for actual
|
|
status
|
|
AX = number of bytes actually transferred???
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Note: This function is called with CX = 0008h for command 06h by NWCACHE
|
|
although the Request Packet can be larger. WINSWAP.SYS calls it
|
|
with 000Ch - also for command 06h.
|
|
|
|
Format of SuperStor packet:
|
|
Offset Size Description (Table 04114)
|
|
00h WORD (call) product signature AA55h
|
|
(ret) result code, 0000h if successful
|
|
02h BYTE (call) SuperStor product ID (01h)
|
|
03h BYTE (call) SuperStor command parameter:
|
|
06h = get compressed drive structure / drive parameters
|
|
07h = return the compressed length of a file
|
|
08h = return real drive ID for swapped drive
|
|
09h = validate the contents of the cluster
|
|
0Bh = checks whether deleted cluster is free
|
|
0Ch = reallocate previously deleted cluster
|
|
0Dh = read absolute sector from the drive
|
|
0Eh = write absolute sector to the drive
|
|
0Fh = instruct the driver to rebuild tables
|
|
10h = flush any cached Replacement Block Table (RBT) sectors
|
|
to the drive
|
|
---command 06h---
|
|
04h DWORD (ret) pointer to SuperStor CVF's compressed unit structure
|
|
(see #04115)
|
|
08h DWORD (ret) pointer to internal status structure
|
|
---command 07h---
|
|
04h DWORD (ret) size of file in bytes
|
|
08h WORD (ret) first cluster number
|
|
---command 08h---
|
|
04h BYTE (ret) swapped drive (0-based)
|
|
---commands 09h,0Bh,0Ch---
|
|
04h WORD (call) cluster
|
|
---commands 0Dh,0Eh---
|
|
04h DWORD (call) first logical sector to transfer
|
|
08h WORD (call) number of logical sectors to transfer
|
|
0Ah DWORD (call) pointer to buffer
|
|
---command 0Fh---
|
|
04h WORD (call) temporary buffer area
|
|
---command 10h---
|
|
no additional parameters
|
|
|
|
Format of SuperStor CVF compressed unit structure:
|
|
Offset Size Description (Table 04115)
|
|
00h 31 BYTEs BIOS parameter block for compressed drive (see #01663)
|
|
1Fh 5 BYTEs reserved for future expansion of the BPB
|
|
24h 33 BYTEs DOS 4-6 style drive parameter block for compressed drive
|
|
(see #01395)
|
|
45h 2 BYTEs reserved for future expansion of the DPB
|
|
47h WORD first sector of relocation table (RBT)
|
|
49h WORD first sector of file allocation table
|
|
4Bh WORD first sector of the data area
|
|
4Dh BYTE sec2byteshift
|
|
4Eh 2 BYTEs ???
|
|
Note: Reportedly these two bytes did not exist in ADDSTOR's
|
|
specification, so the whole structure would have
|
|
been documented differently.
|
|
50h WORD sectors per cluster
|
|
52h BYTE sector shift
|
|
53h WORD compression ratio
|
|
55h DWORD number of physical sectors in the host file
|
|
59h WORD OS version
|
|
5Bh BYTE SuperStor level
|
|
5Ch BYTE unknown???
|
|
5Dh BYTE flags
|
|
bits 7-1: ???
|
|
bit 0: drive is mounted
|
|
5Eh BYTE unknown???
|
|
5Fh DWORD pointer to CVF's underlaying host DCB
|
|
this should be the physical DPB for this unit
|
|
-> +00h BYTE host unit DOS unit number
|
|
+01h BYTE CVF's driver host subunit number
|
|
Note: As this SuperStor compressed unit structure's structure is located
|
|
within the segment the SuperStor driver has occupied, the segment
|
|
value of its address can be used as an installation check, since it
|
|
contains the signature "ADDSTOR" at offset 20h in the SuperStor
|
|
driver. This is used by Novell DOS 7 WINSWAP.SYS to check for the
|
|
presence of SuperStor.
|
|
SeeAlso: #04114
|
|
Index: installation check;SuperStor
|
|
--------D-214406-----------------------------
|
|
INT 21 - DOS 2+ - IOCTL - GET INPUT STATUS
|
|
AX = 4406h
|
|
BX = file handle
|
|
Return: CF clear if successful
|
|
AL = input status
|
|
00h not ready (device) or at EOF (file)
|
|
FFh ready
|
|
AH may be destroyed (refer to note)
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: files may not register as being at EOF if positioned there by AH=42h
|
|
under DOS 5.0, on a successful return, AH contains either the next
|
|
character which will be read or 1Ah if at EOF; under a Windows95
|
|
DOS box, AH seems to be either unchanged or 00h
|
|
this function was not supported by Digital Research's DOS Plus
|
|
BUG: the CLOCK$ device under DR DOS 3.41 always indicates 'Ready'; this was
|
|
corrected in v5.0
|
|
SeeAlso: AX=4407h,INT 2F/AX=122Bh
|
|
--------D-214407-----------------------------
|
|
INT 21 - DOS 2+ - IOCTL - GET OUTPUT STATUS
|
|
AX = 4407h
|
|
BX = file handle
|
|
Return: CF clear if successful
|
|
AL = input status
|
|
00h not ready
|
|
FFh ready
|
|
CF set on error
|
|
AX = error code (01h,05h,06h,0Dh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: for DOS 2+, files are always ready for output, even if the disk is
|
|
full or no media is in the drive
|
|
this function was not supported by Digital Research's DOS Plus
|
|
SeeAlso: AX=4406h,INT 2F/AX=122Bh
|
|
--------D-214408-----------------------------
|
|
INT 21 - DOS 3.0+ - IOCTL - CHECK IF BLOCK DEVICE REMOVABLE
|
|
AX = 4408h
|
|
BL = drive number (00h = default, 01h = A:, etc)
|
|
Return: CF clear if successful
|
|
AX = media type (0000h removable, 0001h fixed)
|
|
CF set on error
|
|
AX = error code (01h,0Fh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: in addition to the normal operation, if Stacker is installed, this
|
|
call also sets the volume number at offset 58h in the Stacker
|
|
device driver (except under DR DOS 3.41-5.0, which do not pass
|
|
through this call to the driver; use AX=440Eh instead)
|
|
(see AX=4404h"Stacker",AX=440Eh,INT 25/AX=CDCDh)
|
|
this function was not supported by Digital Research's DOS Plus
|
|
SeeAlso: AX=4400h,AX=4404h"Stacker",AX=4409h,INT 2F/AX=122Bh
|
|
--------D-214409-----------------------------
|
|
INT 21 - DOS 3.1+ - IOCTL - CHECK IF BLOCK DEVICE REMOTE
|
|
AX = 4409h
|
|
BL = drive number (00h = default, 01h = A:, etc)
|
|
Return: CF clear if successful
|
|
DX = device attribute word
|
|
bit 15: drive is SUBSTituted
|
|
bit 13: (DR DOS 3.41/5.0 local drives only) always set
|
|
media ID needed
|
|
bit 12: drive is remote
|
|
bit 9: direct I/O not allowed
|
|
CF set on error
|
|
AX = error code (01h,0Fh,15h) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: on local drives, DX bits not listed above are the attribute word from
|
|
the device driver header (see #01646 at AH=52h); for remote drives,
|
|
the other bits appear to be undefined for MS-DOS versions prior to
|
|
5.0 (they are all cleared in DOS 5+)
|
|
checking whether DX=0800h on return appears to be a fairly reliable
|
|
method for detecting Microsoft's RAMDRIVE, though not for other
|
|
ramdisks (there appears to be no simple yet foolproof method for
|
|
detecting ramdisks, although the presence of only a single copy of
|
|
the FAT and only a single head on non-removable devices is a fairly
|
|
good indicator); for Windows95, RAMDRIVE returns DX=4800h
|
|
for non-existent remote drives, this function sometimes returns
|
|
AX=0015h (drive not ready) instead of AX=000Fh (invalid drive) on
|
|
the first call; a subsequent call will return the correct error
|
|
code
|
|
this function was not supported by Digital Research's DOS Plus
|
|
SeeAlso: AX=4400h,AX=4408h,AX=440Ah,INT 2F/AX=122Bh
|
|
--------D-21440A-----------------------------
|
|
INT 21 - DOS 3.1+ - IOCTL - CHECK IF HANDLE IS REMOTE
|
|
AX = 440Ah
|
|
BX = handle
|
|
Return: CF clear if successful
|
|
DX = attribute word (as stored in SFT)
|
|
bit 15: set if remote
|
|
bit 14: date/time not set on close
|
|
CF set on error
|
|
AX = error code (01h,06h) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: if file is remote, Novell Advanced NetWare 2.0 returns the number of
|
|
the file server on which the handle is located in CX
|
|
DR DOS 3.41 and 5.0 clear all bits of DX except bit 15; Novell DOS 7
|
|
fully supports this function
|
|
this function was not supported by Digital Research's DOS Plus
|
|
SeeAlso: AX=4400h,AX=4409h,AH=52h,INT 2F/AX=122Bh
|
|
--------D-21440B-----------------------------
|
|
INT 21 - DOS 3.1+ - IOCTL - SET SHARING RETRY COUNT
|
|
AX = 440Bh
|
|
CX = pause between retries (default 1)
|
|
DX = number of retries (default 3)
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = error code (01h) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: delay is dependent on processor speed (value in CX specifies number of
|
|
64K-iteration empty loops to execute)
|
|
if DX=0000h on entry, the retry count is left unchanged
|
|
this function was not supported by Digital Research's DOS Plus
|
|
SeeAlso: AH=52h,INT 2F/AX=1224h,INT 2F/AX=122Bh
|
|
--------D-21440C-----------------------------
|
|
INT 21 - DOS 3.2+ - IOCTL - GENERIC CHARACTER DEVICE REQUEST
|
|
AX = 440Ch
|
|
BX = device handle
|
|
CH = category code (see #01545)
|
|
CL = function number (see #01546)
|
|
DS:DX -> parameter block (see #01547,#01548,#01549,#01550,#01551,#01552)
|
|
SI = parameter to pass to driver (European MS-DOS 4.0, OS/2 comp box)
|
|
DI = parameter to pass to driver (European MS-DOS 4.0, OS/2 comp box)
|
|
Return: CF set on error
|
|
AX = error code (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if successful
|
|
DS:DX -> iteration count if CL=65h
|
|
SI = returned value (European MS-DOS 4.0, OS/2 comp box)
|
|
DI = returned value (European MS-DOS 4.0, OS/2 comp box)
|
|
Note: DR DOS 3.41 and 5.0 return error code 16h on CL=45h,65h if the device
|
|
does not support a retry counter
|
|
SeeAlso: AX=440Dh"DOS 3.2+",INT 2F/AX=0802h,INT 2F/AX=122Bh,INT 2F/AX=14FFh
|
|
SeeAlso: INT 2F/AX=1A01h
|
|
|
|
(Table 01545)
|
|
Values for IOCTL category code:
|
|
00h unknown (DOS 3.3+)
|
|
01h COMn: (DOS 3.3+)
|
|
02h reserved for terminal control
|
|
03h CON (DOS 3.3+)
|
|
04h reserved for keyboard control
|
|
05h LPTn:
|
|
07h mouse control (European MS-DOS 4.0)
|
|
08h reserved for disk control -- same as for block devices
|
|
(see INT 21/AX=440Dh)
|
|
9Eh Media Access Control driver (STARLITE)
|
|
00h-7Fh reserved for Microsoft
|
|
80h-FFh reserved for OEM/user-defined
|
|
SeeAlso: #01558
|
|
|
|
(Table 01546)
|
|
Values for generic character IOCTL function:
|
|
00h MAC driver Bind (STARLITE) (see #01547)
|
|
40h DOS 3??? only: was reserved for set screen mode (see #04116)
|
|
45h set iteration (retry) count (see #01548)
|
|
4Ah select code page (see #01549)
|
|
4Ch start code-page preparation (see #01550)
|
|
4Dh end code-page preparation (see #01551)
|
|
5Fh set display information (DOS 4.0+) (see #01552)
|
|
60h DOS 3??? only: was reserved for get screen mode (see #04116)
|
|
65h get iteration (retry) count
|
|
6Ah query selected code page (see #01549)
|
|
6Bh query codepage prepare list (DOS 4.0+) (see #01553)
|
|
7Fh get display information (DOS 4.0+) (see #01552)
|
|
Note: bit assignments for function code:
|
|
bit 7: set to ignore if unsupported, clear to return error
|
|
bit 6: set if passed to driver, clear if intercepted by DOS
|
|
bit 5: set if queries data from device, clear if sends command
|
|
(by convention, if a function both queries and sends data,
|
|
bit 5 should be clear)
|
|
bits 4-0: subfunction
|
|
|
|
Format of parameter block for function 00h:
|
|
Offset Size Description (Table 01547)
|
|
00h 8 BYTEs ASCIZ signature "STARMAC"
|
|
08h WORD version
|
|
0Ah WORD flags
|
|
bit 0: media requires connect or listen request before use
|
|
bit 1: network is a LAN (broadcast/multicast supported)
|
|
bit 2: point-to-point network
|
|
0Ch WORD handle for use with MAC driver's private interface (filled in
|
|
by MAC driver)
|
|
0Eh WORD context
|
|
10h WORD approximate speed in KB/sec (filled in by MAC driver)
|
|
12h WORD approximate cost in cents per hour (filled in by MAC driver)
|
|
14h WORD maximum packet size in bytes (filled in by MAC driver)
|
|
16h WORD addressing format (filled in by MAC driver)
|
|
0000h general addressing
|
|
0001h Ethernet addressing
|
|
0002h Token Ring addressing
|
|
0003h Token Bus addressing
|
|
18h DWORD Send entry point (filled in by MAC driver)
|
|
1Ch DWORD RegisterEventHandler entry point (filled in by MAC driver)
|
|
20h DWORD SetPacketFilter entry point (filled in by MAC driver)
|
|
24h DWORD UnBind entry point (filled in by MAC driver)
|
|
|
|
Format of parameter block for DOS 3??? screen mode functions 40h and 60h:
|
|
Offset Size Description (Table 04116)
|
|
00h WORD length of folowing data (0009h)
|
|
02h BYTE mode type
|
|
03h WORD number of colors
|
|
05h WORD width
|
|
07h WORD height
|
|
Note: these functions appear never to have been released to the public
|
|
SeeAlso: #01546
|
|
|
|
Format of parameter block for function 45h:
|
|
Offset Size Description (Table 01548)
|
|
00h WORD number of times output is attempted before driver assumes
|
|
device is busy
|
|
|
|
Format of parameter block for functions 4Ah and 6Ah:
|
|
Offset Size Description (Table 01549)
|
|
00h WORD length of data
|
|
02h WORD code page ID (see #01757 at INT 21/AX=6602h)
|
|
04h 2N BYTEs DCBS (double byte character set) lead byte range
|
|
start/end for each of N ranges (DOS 4.0)
|
|
WORD 0000h end of data (DOS 4.0)
|
|
|
|
Format of parameter block for function 4Ch:
|
|
Offset Size Description (Table 01550)
|
|
00h WORD flags
|
|
DISPLAY.SYS = 0000h
|
|
PRINTER.SYS bit 0 clear to prepare downloaded font, set to
|
|
prepare cartridge selection
|
|
02h WORD length of remainder of parameter block
|
|
04h WORD number of code pages following
|
|
06h N WORDs code page 1,...,N
|
|
|
|
Format of parameter block for function 4Dh:
|
|
Offset Size Description (Table 01551)
|
|
00h WORD length of data
|
|
02h WORD code page ID (see #01757 at INT 21/AX=6602h)
|
|
|
|
Format of parameter block for functions 5Fh and 7Fh:
|
|
Offset Size Description (Table 01552)
|
|
00h BYTE level (0 for DOS 4.x-6.0)
|
|
01h BYTE reserved (0)
|
|
02h WORD length of following data (14)
|
|
04h WORD control flags
|
|
bit 0 set for blink, clear for intensity
|
|
bits 1-15 reserved
|
|
06h BYTE mode type (1=text, 2=graphics)
|
|
07h BYTE reserved (0)
|
|
08h WORD colors
|
|
0000h = monochrome
|
|
else N bits per pixel
|
|
0Ah WORD pixel columns
|
|
0Ch WORD pixel rows
|
|
0Eh WORD character columns
|
|
10h WORD character rows
|
|
|
|
Format of parameter block for function 6Bh:
|
|
Offset Size Description (Table 01553)
|
|
00h WORD length of following data
|
|
02h WORD number of hardware code pages
|
|
04h N WORDs hardware code pages 1,...,N
|
|
WORD number of prepared code pages
|
|
N WORDs prepared code pages 1,...,N
|
|
--------d-21440C-----------------------------
|
|
INT 21 - Greg Shenaut ASPITAPE.SYS - INTERFACE
|
|
AX = 440Ch
|
|
BX = device handle
|
|
CH = category code
|
|
07h tape (ASPITAPE.SYS)
|
|
CL = function
|
|
01h "mtop" - perform tape operation
|
|
02h "mtget" - get tape status
|
|
03h ignore end-of-tape errors
|
|
04h enable end-of-tape errors
|
|
DS:DX -> parameter block (see #01554,#01555)
|
|
Return: CF set on error
|
|
AX = error code (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if successful
|
|
DS:DX -> data block
|
|
Notes: This device driver is a simple DOS interface to the Adaptec Advanced
|
|
SCSI Programming Interface (ASPI). It provides the following device
|
|
names as access to the SCSI tape, 'RMTx' (rewind on close) and
|
|
'NRMTx' (NO rewind on close) where x can go from 0 to 3. There may
|
|
also be the following names 'MTx' and 'NMTx' which default to 1024
|
|
byte blocks. The names may also have a '$' appended to try and make
|
|
them unique from file names of 'RMT0' etc.
|
|
once opend these devices must be put into RAW mode
|
|
SeeAlso: AX=4402h"ASPI"
|
|
|
|
Format of ASPITAPE.SYS mtop parameter block:
|
|
Offset Size Description (Table 01554)
|
|
00h WORD operation code
|
|
00h "MTWEOF" - write an end-of-file record
|
|
01h "MTFSF" - forward space file
|
|
02h "MTBSF" - backward space file
|
|
03h "MTFSR" - forward space record
|
|
04h "MTBSR" - backward space record
|
|
05h "MTREW" - rewind
|
|
06h "MTOFFL" - rewind and unload
|
|
07h "MTNOP" - perform TEST UNIT READY
|
|
02h DWORD repetition count
|
|
|
|
Format of ASPITAPE.SYS mtget parameter block:
|
|
Offset Size Description (Table 01555)
|
|
00h BYTE ASPI host ID
|
|
01h BYTE SCSI target ID
|
|
02h BYTE SCSI logical unit number
|
|
03h BYTE device parameters
|
|
bit 0: drive must use fixed-block read and write
|
|
bit 7: drive is an ASPI device
|
|
04h BYTE current device state (see #01556)
|
|
05h BYTE unit number within driver
|
|
06h WORD fixed block blocksize
|
|
08h BYTE last SCSI status
|
|
09h BYTE last SCSI sense key
|
|
0Ah WORD last SCSI opcode (packed) (see #01557)
|
|
0Ch WORD residual bytes from SCSI opcode
|
|
|
|
Bitfields for ASPITAPE.SYS current device state:
|
|
Bit(s) Description (Table 01556)
|
|
0 device currently opened in buffered mode
|
|
1 drive currently opened in nonbuffered mode
|
|
2 rewind drive on last close
|
|
3 drive has been written on
|
|
4 drive has been read from
|
|
5 next read will return 0 bytes
|
|
6 EOM will resemble EOF
|
|
7 drive may be busy rewinding
|
|
|
|
Bitfields for SCSI opcode:
|
|
Bit(s) Description (Table 01557)
|
|
0-7 SCSI operation (SCSI packet byte 0)
|
|
8-10 SCSI flags (SCSI packet byte 1)
|
|
11-12 ASPI "Direction Bits" (ASPI SRB byte 3)
|
|
--------D-21440D-----------------------------
|
|
INT 21 - DOS 3.2+ - IOCTL - GENERIC BLOCK DEVICE REQUEST
|
|
AX = 440Dh
|
|
BL = drive number (00h=default,01h=A:,etc)
|
|
CH = category code (see #01558)
|
|
CL = minor code (function) (see #01559)
|
|
DS:DX -> (DOS) parameter block (see #01560,#01562,#01563,#01564,#01565)
|
|
SI:DI -> (OS/2 comp box) parameter block (see #01566,#01568,#01569,#01572)
|
|
Return: CF set on error
|
|
AX = error code (01h,02h,etc.) (see #01680 at AH=59h/BX=0000h)
|
|
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+
|
|
the DUBLDISK.SYS v2.6 driver only supports minor codes 60h and 67h
|
|
DR DOS 3.41-6.0 only support minor codes 40h-42h and 60h-62h; all
|
|
other minor codes return error code 16h
|
|
some PCMCIA calls reportedly appear to be dangerous for MS-DOS versions
|
|
prior to 5.0
|
|
minor code 60h normally produces no I/O except with AutoMount=1 for
|
|
DBLSPACE/DRVSPACE
|
|
SeeAlso: AX=440Ch,AX=440Dh/CX=084Ah,AX=440Dh/CX=0871h,AH=69h,INT 2F/AX=0802h
|
|
SeeAlso: INT 2F/AX=122Bh
|
|
|
|
(Table 01558)
|
|
Values for block device IOCTL category code:
|
|
08h disk drive
|
|
48h FAT32 disk drive
|
|
00h-7Fh reserved for Microsoft
|
|
80h-FFh reserved for OEM/user-defined
|
|
|
|
(Table 01559)
|
|
Values for generic block IOCTL minor code:
|
|
00h (OS/2) \ used to lock/unlock a drive
|
|
01h (OS/2) /
|
|
40h set device parameters (see #01560)
|
|
41h write logical device track (see #01562)
|
|
42h format and verify logical device track (see #01563)
|
|
46h (DOS 4.0+) set volume serial number (see #01565,AH=69h)
|
|
47h (DOS 4.0+) set access flag (see #01566)
|
|
48h (Enh. Disk Drive Spec) set media lock state (see #01567,INT 13/AH=45h)
|
|
49h (Enh. Disk Drive Spec) eject media in drive (see INT 13/AH=49h)
|
|
no parameter block required
|
|
4Ah (MS-DOS 7.0) lock logical volume (see AX=440Dh/CX=084Ah)
|
|
4Bh (MS-DOS 7.0) lock physical volume (see AX=440Dh/CX=084Bh)
|
|
50h (PCMCIA) attribute memory write
|
|
51h (PCMCIA) common memory write
|
|
52h (PCMCIA) force media change (DOS 5+ ???) (see #01568)
|
|
53h (PCMCIA) erase drive
|
|
54h (PCMCIA) erase media
|
|
56h (PCMCIA) set erase status callback
|
|
57h (PCMCIA) append Card Information Structure (CIS) tuple
|
|
58h (PCMCIA) erase CIS tuples
|
|
60h get device parameters (see #01560)
|
|
61h read logical device track (see #01562)
|
|
62h verify logical device track (see #01564)
|
|
66h (DOS 4.0+) get volume serial number (see #01565,AH=69h)
|
|
67h (DOS 4.0+) get access flag (see #01566)
|
|
68h (DOS 5.0+) sense media type (see #01569)
|
|
6Ah (MS-DOS 7.0) unlock logical volume (see AX=440Dh/CX=086Ah)
|
|
no parameter block required
|
|
6Bh (MS-DOS 7.0) unlock physical volume (see AX=440Dh/CX=086Bh)
|
|
no parameter block required
|
|
6Ch (MS-DOS 7.0) get lock flag (see AX=440Dh/CX=086Ch)
|
|
no parameter block required
|
|
6Dh (MS-DOS 7.0) enumerate open files (see AX=440Dh/CX=086Dh)
|
|
6Eh (MS-DOS 7.0) find swap file (see AX=440Dh/CX=086Eh)
|
|
6Fh (MS-DOS 7.0) get drive map information (see #01570)
|
|
70h (PCMCIA) attribute memory read
|
|
70h (MS-DOS 7.0) get current lock state (see AX=440Dh/CX=0870h)
|
|
no parameter block required
|
|
71h (MS-DOS 7.0) get first cluster (see AX=440Dh/CX=0871h)
|
|
73h (PCMCIA) get memory media information (DOS 5+ ???) (see #01572)
|
|
76h (PCMCIA) get erase status callback
|
|
77h (PCMCIA) get first Card Information Structure (CIS) tuple
|
|
78h (PCMCIA) get next CIS tuple
|
|
7Fh (PCMCIA) get ??? information (see #01573,#01574)
|
|
|
|
Format of parameter block for functions 40h, 60h:
|
|
Offset Size Description (Table 01560)
|
|
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 (MS-DOS, Novell DOS 7)
|
|
bit 5: skip head settling time (WinDOS 2.11)
|
|
bit 6: format access flag (WinDOS 2.11)
|
|
01h BYTE device type (see #01561)
|
|
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
|
|
F8h for DUBLDISK.SYS v2.6 expanded drives
|
|
always 00h for other drive types
|
|
07h 31 BYTEs device BPB (see #01663 at AH=53h), bytes after BPB offset 1Eh
|
|
omitted; final six bytes only transferred on function 40h
|
|
with BYTE 00h bit 0 set for MS-DOS 5.0
|
|
---function 40h only---
|
|
26h WORD number of sectors per track (start of track layout field)
|
|
(maximum 63)
|
|
28h N word pairs: number,size of each sector in track
|
|
---category code 48h (FAT32), function 40h---
|
|
07h 53 BYTEs extended BPB (see #01664)
|
|
3Ch 32 BYTEs reserved
|
|
5Ch WORD number of track table entries
|
|
5Eh 2N WORDs sector table (word pairs: number/size of each sector in track)
|
|
---category code 48h (FAT32), function 60h---
|
|
07h 53 BYTEs extended BPB (see #01664)
|
|
3Ch 32 BYTEs reserved
|
|
|
|
(Table 01561)
|
|
Values for device type:
|
|
00h 320K/360K 5.25-inch floppy disk
|
|
01h 1.2M 5.25-inch floppy disk
|
|
02h 720K floppy disk
|
|
03h single-density 8-inch disk
|
|
04h double-density 8-inch disk
|
|
05h fixed disk
|
|
06h tape drive
|
|
07h (DOS 3.3+) other type of block device, normally 1.44M floppy
|
|
08h read/write optical disk
|
|
09h (DOS 5+) 2.88M 3.5-inch floppy
|
|
FFh (some DOS 5 betas) 2.88M 3.5-inch floppy
|
|
|
|
Format of parameter block for functions 41h, 61h:
|
|
Offset Size Description (Table 01562)
|
|
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
|
|
Note: under Windows95, a volume must be locked (see AX=440Dh/CX=084Bh) in
|
|
order to perform direct accesses such as track reads and writes
|
|
with this IOCTL function
|
|
|
|
Format of parameter block for function 42h:
|
|
Offset Size Description (Table 01563)
|
|
00h BYTE reserved, must be zero (DOS <3.2)
|
|
bit 0=0: format/verify track
|
|
1: format status call (DOS 3.2+), don't actually format
|
|
bit 1: format multiple tracks, require additional WORD
|
|
(hard disks only)
|
|
bits 2-7 reserved, must be zero
|
|
value on return (DOS 3.3+):
|
|
00h specified tracks, sectors/track supported by BIOS
|
|
01h function not supported by BIOS
|
|
02h specified tracks, sectors/track not allowed for drive
|
|
03h no disk in drive
|
|
01h WORD number of disk head
|
|
03h WORD number of disk cylinder
|
|
---BYTE 00h bit 1 set---
|
|
05h WORD number of tracks to format
|
|
|
|
Format of parameter block for function 62h:
|
|
Offset Size Description (Table 01564)
|
|
00h BYTE reserved, must be zero (DOS <3.2)
|
|
bit 0=0: verify single track
|
|
1: verify multiple tracks
|
|
bits 1-7 reserved, must be zero
|
|
value on return (DOS 3.3+):
|
|
00h specified tracks, sectors/track supported by BIOS
|
|
01h function not supported by BIOS
|
|
02h specified tracks, sectors/track not allowed for drive
|
|
03h no disk in drive
|
|
01h WORD number of disk head
|
|
03h WORD number of disk cylinder
|
|
05h WORD number of tracks to verify (equivalent to 255 or fewer sectors)
|
|
|
|
Format of parameter block for functions 46h, 66h:
|
|
Offset Size Description (Table 01565)
|
|
00h WORD (call) info level (should be 0000h)
|
|
02h DWORD disk serial number (binary)
|
|
06h 11 BYTEs volume label or "NO NAME "
|
|
11h 8 BYTEs filesystem type "FAT12 " or "FAT16 "
|
|
(generally CL=66h only, but MS-DOS 5.0 will write the
|
|
given filesystem type to the disk)
|
|
Note: under MS-DOS 7.0 or a Windows95 DOS box, the volume label field can
|
|
return as all blanks even when a volume label has been set (the Win95
|
|
installation seems to blank the volume label field in the partition
|
|
boot sector; once LABEL has been run, the volume label is reported
|
|
correctly)
|
|
SeeAlso: AH=69h
|
|
|
|
Format of parameter block for functions 47h, 67h:
|
|
Offset Size Description (Table 01566)
|
|
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 48h:
|
|
Offset Size Description (Table 01567)
|
|
00h BYTE (call) locking operation
|
|
00h lock media in drive
|
|
01h unlock media
|
|
02h get locking status
|
|
01h BYTE (ret) drive's lock status (number of pending locks on drive)
|
|
Note: also supported by MS-DOS 7.0+
|
|
|
|
Format of parameter block for function 52h:
|
|
00h BYTE (call) unused??? (Table 01568)
|
|
(ret) 00h if flash/ATA drive but no card inserted
|
|
unchanged otherwise
|
|
Notes: the absense of a flash card should be tested by checking the DOS error
|
|
code rather than the returned byte
|
|
the parameter byte is cleared to 00h erroneously by the Award
|
|
PCDISK.EXE v1.02c PCMCIA/ATA driver if no ATA card is inserted
|
|
(bug corrected in PCDISK.EXE v1.02h and later)
|
|
not supported by the SystemSoft ATADRV.EXE and the Phoenix PCMATA.SYS
|
|
PCMCIA/ATA drivers
|
|
|
|
Format of parameter block for function 68h:
|
|
Offset Size Description (Table 01569)
|
|
00h BYTE 01h for default media type, 00h for any other media type
|
|
(see also INT 13/AH=20h"Compaq")
|
|
01h BYTE 02h for 720K, 07h for 1.44M, 09h for 2.88M
|
|
|
|
Format of parameter block for function 6Fh:
|
|
Offset Size Description (Table 01570)
|
|
00h BYTE (call) length of this buffer (in bytes)
|
|
01h BYTE (ret) number of bytes in parameter block actually used
|
|
02h BYTE (ret) drive flags (see #01571)
|
|
03h BYTE (ret) physical drive number
|
|
00h-7Fh floppy
|
|
80h-FEh hard
|
|
FFh no physical drive
|
|
04h DWORD (ret) bitmap of logical drives associated with physical drive
|
|
bit 0 = drive A:, etc.
|
|
08h QWORD (ret) relative block address of partition start
|
|
|
|
Bitfields for Get Drive Map Information drive flags:
|
|
Bit(s) Description (Table 01571)
|
|
0 protected-mode driver for logical drive
|
|
1 protected-mode driver in use for physical drive corresponding to the
|
|
logical drive
|
|
2 drive available only in protected mode
|
|
3 protected-mode drive supports media ejection
|
|
4 drive issues media insertion and removal notifications
|
|
SeeAlso: #01570
|
|
|
|
Format of parameter block for function 73h:
|
|
Offset Size Description (Table 01572)
|
|
00h BYTE ???
|
|
00h ATA card inserted ???
|
|
80h ATA card not inserted ???
|
|
01h BYTE length of parameter block ???
|
|
apparently always 40h
|
|
02h BYTE ???
|
|
00h ATA card not inserted ???
|
|
0Dh ATA card inserted ???
|
|
03h 2 BYTEs ??? (apparently always 00h)
|
|
05h BYTE drive number (0=first) ???
|
|
06h BYTE total number of drives ???
|
|
07h BYTE ???
|
|
00h ATA card not inserted ???
|
|
01h ATA card inserted ???
|
|
08h 17 BYTEs ???
|
|
19h BYTE ???
|
|
00h ATA card not inserted ???
|
|
01h ATA card inserted ???
|
|
1Ah BYTE ??? (apparently always 01h)
|
|
1Bh BYTE ???
|
|
00h ATA card not inserted ???
|
|
01h ATA card inserted ???
|
|
1Ch 2 BYTEs ??? (apparently always 0015h)
|
|
1Eh 2 BYTEs ???
|
|
20h 2 BYTEs ??? (apparently always 0110h)
|
|
22h 15 BYTEs ???
|
|
31h 2 BYTEs ??? (apparently always 7000h)
|
|
33h 11 BYTEs driver signature
|
|
"AWARD PDISK" for Award PCDISK.EXE PCMCIA/ATA driver
|
|
"MS-BIOS " for HP 200LX generic ATA driver
|
|
3Eh 2 BYTEs ???
|
|
Notes: parameter structure possibly depends on driver
|
|
this function is not supported by the SystemSoft ATADRV.EXE and the
|
|
Phoenix PCMATA.SYS PCMCIA/ATA drivers
|
|
|
|
Format of parameter block for function 7Fh for SystemSoft ATADRV.EXE:
|
|
Offset Size Description (Table 01573)
|
|
00h DWORD -> unknown location within driver
|
|
Note: function supported by the SystemSoft ATADRV.EXE PCMCIA/ATA driver
|
|
but not by the Award PCDISK.EXE PCMCIA/ATA driver
|
|
SeeAlso: #01574
|
|
|
|
Format of parameter block for function 7Fh for Phoenix PCMATA.SYS:
|
|
Offset Size Description (Table 01574)
|
|
00h 8 BYTEs ???
|
|
Note: this function supported by the Phoenix PCMATA.SYS PCMCIA/ATA driver
|
|
but not by the Award PCDISK.EXE PCMCIA/ATA driver
|
|
SeeAlso: #01573
|
|
--------D-21440DCX084A-----------------------
|
|
INT 21 - MS-DOS 7.0+ - GENERIC IOCTL - LOCK LOGICAL VOLUME
|
|
AX = 440Dh
|
|
CX = 084Ah / 484Ah
|
|
(category code 08h for FAT12/16, 48h for FAT32; minor code 4Ah)
|
|
BL = drive number (01h=A:,02h=B:,etc)
|
|
BH = lock level (00h-04h)
|
|
DX = drive permissions (see #01575) for Level 1 lock or second
|
|
Level 0 lock when formatting
|
|
Return: CF set on error
|
|
AX = error code (01h,02h,etc.) (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if successful
|
|
Notes: the logical volume must be locked before direct disk accesses are
|
|
permitted by Windows95/98
|
|
the commandline LOCK issues a level 4 lock
|
|
Windows98 only permits lock levels 0 and 4
|
|
BUG: Windows98 will return an error (invalid function) if the specified
|
|
drive number is zero or more than 32, but only allocated 26 bytes
|
|
for recording locks, so BL=1Bh..20h will trash internal data
|
|
structures
|
|
SeeAlso: AX=440Dh"DOS 3.2+",AX=440Dh/CX=084Bh,AX=440Dh/CX=086Ah
|
|
SeeAlso: AX=440Dh/CX=086Ch
|
|
|
|
Bitfields for drive permissions:
|
|
Bit(s) Description (Table 01575)
|
|
0 allow writes
|
|
1 disallow new file mappings
|
|
2 volume locked for formatting
|
|
--------D-21440DCX084B-----------------------
|
|
INT 21 - MS-DOS 7.0+ - GENERIC IOCTL - LOCK PHYSICAL VOLUME
|
|
AX = 440Dh
|
|
CX = 084Bh / 484Bh
|
|
(category code 08h for FAT12/16, 48h for FAT32; minor code 4Bh)
|
|
BH = logical drive number (00h = default, 01h = A:, etc.)
|
|
BL = lock level (00h-03h)
|
|
DX = drive permissions (see #01575) for Level 1 lock or second
|
|
Level 0 lock when formatting
|
|
Return: CF set on error
|
|
AX = error code (01h,02h,etc.) (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if successful
|
|
Desc: lock all logical volumes on the same physical volume as the indicated
|
|
drive
|
|
Note: the physical volume must be locked before direct disk writes via
|
|
INT 13 are permitted by Windows95
|
|
SeeAlso: AX=440Dh"DOS 3.2+",AX=440Dh/CX=084Ah,AX=440Dh/CX=086Bh
|
|
SeeAlso: AX=440Dh/CX=086Ch
|
|
--------D-21440DCX086A-----------------------
|
|
INT 21 - MS-DOS 7.0+ - GENERIC IOCTL - UNLOCK LOGICAL VOLUME
|
|
AX = 440Dh
|
|
CX = 086Ah / 486Ah
|
|
(category code 08h for FAT12/16, 48h for FAT32; minor code 6Ah)
|
|
BL = drive number (00h=default,01h=A:,etc)
|
|
Return: CF set on error
|
|
AX = error code (01h,02h,etc.) (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if successful
|
|
Note: the logical volume must be locked before direct disk accesses via
|
|
INT 13 are permitted by Windows95
|
|
BUG: Windows98 will return an error (invalid function) if the specified
|
|
drive number is zero or more than 32, but only allocated 26 bytes
|
|
for recording locks, so BL=1Bh..20h will trash internal data
|
|
structures
|
|
SeeAlso: AX=440Dh"DOS 3.2+",AX=440Dh/CX=084Ah,AX=440Dh/CX=086Bh
|
|
--------D-21440DCX086B-----------------------
|
|
INT 21 - MS-DOS 7.0+ - GENERIC IOCTL - UNLOCK PHYSICAL VOLUME
|
|
AX = 440Dh
|
|
CX = 086Bh / 486Bh
|
|
(category code 08h for FAT12/16, 48h for FAT32; minor code 6Bh)
|
|
BH = logical drive number (00h = default, 01h = A:, etc.)
|
|
Return: CF set on error
|
|
AX = error code (01h,02h,etc.) (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if successful
|
|
Desc: lock all logical volumes on the same physical volume as the indicated
|
|
drive
|
|
SeeAlso: AX=440Dh"DOS 3.2+",AX=440Dh/CX=084Bh,AX=440Dh/CX=086Ah
|
|
--------D-21440DCX086C-----------------------
|
|
INT 21 - MS-DOS 7.0+ - GENERIC IOCTL - GET LOCK FLAG STATE
|
|
AX = 440Dh
|
|
CX = 086Ch / 486Ch
|
|
(category code 08h for FAT12/16, 48h for FAT32; minor code 6Ch)
|
|
BL = drive number (00h=default,01h=A:,etc)
|
|
Return: CF set on error
|
|
AX = error code (01h,02h,etc.) (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if successful
|
|
AX = access flag (see #01576)
|
|
SeeAlso: AX=440Dh"DOS 3.2+",AX=440Dh/CX=084Ah,AX=440Dh/CX=084Bh
|
|
SeeAlso: AX=440Dh/CX=0870h
|
|
|
|
(Table 01576)
|
|
Values for drive access flag:
|
|
0000h no writes/file mappings since last call
|
|
0001h write operation has occurred since last call
|
|
0002h file mapping has occurred since last call
|
|
Note: function 6Ch resets the access flag every time it is called
|
|
--------D-21440DCX086D-----------------------
|
|
INT 21 - MS-DOS 7.0+ - GENERIC IOCTL - ENUMERATE OPEN FILES
|
|
AX = 440Dh
|
|
CX = 086Dh / 486Dh
|
|
(category code 08h for FAT12/16, 48h for FAT32; minor code 6Dh)
|
|
BL = drive number (00h=default,01h=A:,etc)
|
|
DS:DX -> buffer for ASCIZ pathname
|
|
SI = file index (0000h to number of open files-1)
|
|
DI = enumeration type (0000h all files, 0001h unmovable files)
|
|
Return: CF set on error
|
|
AX = error code (01h,02h,12h,etc.) (see #01680 at AH=59h/BX=0000h)
|
|
0012h if file index is out of range
|
|
CF clear if successful
|
|
AX = file open mode (BX from AX=6C00h or AX=716Ch)
|
|
CX = file type (see #01577)
|
|
SeeAlso: AX=440Dh"DOS 3.2+",AX=440Dh/CX=084Ah,AX=440Dh/CX=086Ch
|
|
SeeAlso: AX=440Dh/CX=086Eh,AX=6C00h,AX=716Ch
|
|
|
|
(Table 01577)
|
|
Values for file type:
|
|
0000h normal file
|
|
0001h memory-mapped file (unmovable)
|
|
0002h unmovable file
|
|
0004h swap file
|
|
--------D-21440DCX086E-----------------------
|
|
INT 21 - MS-DOS 7.0+ - GENERIC IOCTL - FIND SWAP FILE
|
|
AX = 440Dh
|
|
CX = 086Eh / 486Eh
|
|
(category code 08h for FAT12/16, 48h for FAT32; minor code 6Eh)
|
|
BL = drive number (00h=default,01h=A:,etc)
|
|
DS:DX -> buffer for ASCIZ pathname
|
|
SI = file index
|
|
DI = enumeration type
|
|
Return: CF set on error
|
|
AX = error code (01h,02h,etc.) (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if successful
|
|
AX = pager type
|
|
0001h no pager
|
|
0002h paging through MS-DOS
|
|
0003h protected-mode pager
|
|
CX:BX = swap file size in 4K pages
|
|
SeeAlso: AX=440Dh"DOS 3.2+",AX=440Dh/CX=086Dh
|
|
--------D-21440DCX0870-----------------------
|
|
INT 21 - MS-DOS 7.0+ - GENERIC IOCTL - GET CURRENT LOCK STATE
|
|
AX = 440Dh
|
|
CX = 0870h / 4870h
|
|
(category code 08h for FAT12/16, 48h for FAT32; minor code 70h)
|
|
BL = drive number (00h=default,01h=A:,etc)
|
|
Return: CF set on error
|
|
AX = error code (01h,02h,etc.) (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if successful
|
|
AX = current lock level (0-3) or FFFFh if not locked
|
|
CX = lock permissions if AX<>FFFFh (see #01575)
|
|
SeeAlso: AX=440Dh"DOS 3.2+",AX=440Dh/CX=086Ch
|
|
--------D-21440DCX0871-----------------------
|
|
INT 21 - MS-DOS 7.0+ - GENERIC IOCTL - GET FIRST CLUSTER
|
|
AX = 440Dh
|
|
CX = 0871h / 4871h
|
|
(category code 08h for FAT12/16, 48h for FAT32; minor code 71h)
|
|
BX = filename character set (see #01578)
|
|
DS:DX -> ASCIZ pathname for file or directory
|
|
Return: CF set on error
|
|
AX = error code (01h,02h,etc.) (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if successful
|
|
DX:AX = first cluster number
|
|
Note: this function finds any file or directory regardless of attributes,
|
|
except that it will not find volume labels
|
|
SeeAlso: AX=440Dh"DOS 3.2+",AX=440Dh/CX=086Ch,#01352
|
|
|
|
(Table 01578)
|
|
Values for character set:
|
|
00h Windows ANSI
|
|
01h current OEM character set
|
|
02h Unicode
|
|
--------y-21440DCXEDC1-----------------------
|
|
INT 21 - DR PalmDOS - GENERIC IOCTL - LOGIN SECURITY
|
|
AX = 440Dh
|
|
CX = EDC1h (category code EDh, minor code C1h)
|
|
BL = boot drive number (01h=A:,02h=B:,etc)
|
|
Return: AL = 0 if already logged in
|
|
AL <> 0 if system is still secured (not logged in)
|
|
ES:DI -> ???
|
|
Notes: This function is called by DR PalmDOS IBMBIO.COM after CONFIG.SYS
|
|
processing has finished and it has launched the LOGIN.SYS utility
|
|
(if this is not in the root of the boot drive, the undocumented
|
|
CONFIG.SYS LOGIN directive can be used to change the path and the
|
|
moment when the login prompt will be displayed).
|
|
If security is active and the user has still not logged in,
|
|
IBMBIO.COM will display an error message and halt the system.
|
|
--------D-21440E-----------------------------
|
|
INT 21 - DOS 3.2+ - IOCTL - GET LOGICAL DRIVE MAP
|
|
AX = 440Eh
|
|
BL = drive number (00h=default,01h=A:,etc)
|
|
Return: CF set on error
|
|
AX = error code (01h,0Fh) (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if successful
|
|
AL = 00h block device has only one logical drive assigned
|
|
1..26 the last letter used to reference the drive (1=A:,etc)
|
|
Notes: DR DOS 3.41-5.0 DRIVER.SYS does not support drive mapping and thus
|
|
always returns AL=00h; Windows NT 4.0 also always returns AL=00h
|
|
in addition to the normal operation, if Stacker is installed, this
|
|
call also sets the volume number at offset 58h in the Stacker
|
|
device driver (DR DOS 3.41-5.0 only; use AX=4408h otherwise)
|
|
(see AX=4404h"Stacker",INT 25/AX=CDCDh)
|
|
SeeAlso: AX=4408h,AX=440Fh,INT 2F/AX=122Bh
|
|
--------D-21440F-----------------------------
|
|
INT 21 - DOS 3.2+ - IOCTL - SET LOGICAL DRIVE MAP
|
|
AX = 440Fh
|
|
BL = physical drive number (00h=default,01h=A:,etc))
|
|
Return: CF set on error
|
|
AX = error code (01h,0Fh) (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if successful
|
|
drive now responds to next logical drive number
|
|
Notes: maps logical drives to physical drives, similar to DOS's treatment of
|
|
a single physical floppy drive as both A: and B:
|
|
DR DOS 3.41-5.0 DRIVER.SYS does not support drive mapping and thus
|
|
always returns an error on this function
|
|
SeeAlso: AX=440Eh,INT 2F/AX=122Bh
|
|
--------D-214410-----------------------------
|
|
INT 21 - DOS 5+ - IOCTL - QUERY GENERIC IOCTL CAPABILITY (HANDLE)
|
|
AX = 4410h
|
|
BX = handle for device
|
|
CH = category code (see #01545)
|
|
CL = function code (see #01546)
|
|
Return: CF clear if successful
|
|
AX = 0000h specified IOCTL function is supported
|
|
CF set on error
|
|
AL = 01h IOCTL capability not available
|
|
Note: a program which wishes to use Generic IOCTL calls beyond those in the
|
|
standard DOS 3.2 set may use this call first to see whether a
|
|
particular call is supported
|
|
SeeAlso: AX=440Ch,AX=440Dh"DOS 3.2+",AX=4411h
|
|
--------d-214410BXFFFF-----------------------
|
|
INT 21 U - NewSpace - ENABLE DRIVER
|
|
AX = 4410h
|
|
BX = FFFFh
|
|
Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
|
|
all files as they are written and decompresses them as they are read
|
|
Note: compressed files are not accessible unless the driver is enabled
|
|
SeeAlso: AX=4411h/BX=FFFFh
|
|
--------D-214411-----------------------------
|
|
INT 21 - DOS 5+ - IOCTL - QUERY GENERIC IOCTL CAPABILITY (DRIVE)
|
|
AX = 4411h
|
|
BL = drive number
|
|
CH = category code (see #01558)
|
|
CL = function code (see #01559)
|
|
Return: CF clear if successful
|
|
AX = 0000h specified IOCTL function is supported
|
|
CF set on error
|
|
AL = 01h IOCTL capability not available
|
|
Note: a program which wishes to use Generic IOCTL calls beyond those in the
|
|
standard DOS 3.2 set may use this call first to see whether a
|
|
particular call is supported
|
|
SeeAlso: AX=440Ch,AX=440Dh"DOS 3.2+",AX=4410h
|
|
--------d-214411BXFFFF-----------------------
|
|
INT 21 U - NewSpace - DISABLE DRIVER
|
|
AX = 4411h
|
|
BX = FFFFh
|
|
Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
|
|
all files as they are written and decompresses them as they are read
|
|
Note: compressed files are not accessible unless the driver is enabled
|
|
SeeAlso: AX=4410h/BX=FFFFh
|
|
--------O-214412-----------------------------
|
|
INT 21 O - DR DOS 5.0-6.0 - DETERMINE DOS TYPE
|
|
AX = 4412h
|
|
CF set
|
|
Return: CF set if not DR DOS
|
|
AX = error code (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if DR DOS
|
|
DX = AX = version code (see #01580)
|
|
Note: this obsolete call, which is no longer supported in Novell DOS 7, is
|
|
identical to AX=4452h
|
|
SeeAlso: AX=4452h
|
|
--------d-214412BXFFFF-----------------------
|
|
INT 21 U - NewSpace - INSTALLATION CHECK???
|
|
AX = 4412h
|
|
BX = FFFFh
|
|
Return: AX = PSP segment of NewRes (resident driver for NewSpace)
|
|
BX:DX -> ???
|
|
CX = ???
|
|
SeeAlso: AX=4411h/BX=FFFFh
|
|
--------d-214413BXFFFF-----------------------
|
|
INT 21 U - NewSpace - GET ???
|
|
AX = 4413h
|
|
BX = FFFFh
|
|
Return: AX = code segment of NewRes (resident driver for NewSpace)
|
|
BX = offset of ???
|
|
SeeAlso: AX=4412h/BX=FFFFh
|
|
--------O-214414-----------------------------
|
|
INT 21 OU - DR DOS 5.0-6.0 - SET GLOBAL PASSWORD
|
|
AX = 4414h
|
|
DS:DX -> password string (blank-padded to 8 characters)
|
|
Desc: Specify the master password for accessing files.
|
|
Note: this obsolete call, which is no longer supported in Novell DOS 7, is
|
|
identical to AX=4454h
|
|
SeeAlso: AX=4454h
|
|
--------d-214414BXFFFF-----------------------
|
|
INT 21 U - NewSpace - DEBUGGING DUMP
|
|
AX = 4414h
|
|
BX = FFFFh
|
|
Return: debugging dump written to X:\NEWSPACE.SMP
|
|
SeeAlso: AX=4413h/BX=FFFFh,AX=44FFh/BX=FFFFh
|
|
--------O-214416-----------------------------
|
|
INT 21 OU - DR DOS 5.0-6.0 - HISTORY BUFFER, SHARE, AND HILOAD CONTROL
|
|
AX = 4416h to 4418h
|
|
Note: these obsolete subfunctions (which are no longer supported in Novell
|
|
DOS 7) are identical to AX=4456h through 4458h
|
|
SeeAlso: AX=4456h,AX=4457h,AX=4458h
|
|
--------O-214451-----------------------------
|
|
INT 21 - Concurrent DOS v3.2+ - INSTALLATION CHECK
|
|
AX = 4451h
|
|
Return: CF set if not Concurrent DOS
|
|
AX = error code (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if successful
|
|
AH = single-user/multiuser nature (see #01581)
|
|
10h single-user
|
|
AL = operating system version ID (see #01580)
|
|
14h multiuser
|
|
AL = operating system version ID (see #01579)
|
|
Notes: as of Concurrent DOS/XM 5.0 (possibly earlier), the version is stored
|
|
in the environment variable VER and the OS type in variable OS
|
|
use this function if you are looking for multiuser capabilities,
|
|
AX=4452h for single-user
|
|
this function should never return the single-user values; however, an
|
|
application should be prepared to accept single-user values, i.e. it
|
|
should check the returned AH and AL separately
|
|
CCI Multiuser DOS 7.22 returns AX=DX=1466h.
|
|
DR DOS 3.31+ error returns with AX=0001h
|
|
SeeAlso: AX=4452h,AX=4459h
|
|
|
|
(Table 01579)
|
|
Values for Digital Research operating system version ID:
|
|
32h Concurrent PC DOS 3.2
|
|
41h Concurrent DOS 4.1
|
|
50h Concurrent DOS/XM 5.0 or Concurrent DOS/386 1.1
|
|
60h Concurrent DOS/XM 6.0 or Concurrent DOS/386 2.0
|
|
62h Concurrent DOS/XM 6.2 or Concurrent DOS/386 3.0
|
|
66h DR Multiuser DOS 5.1, CCT Multiuser DOS 7.x
|
|
67h Concurrent DOS 5.1
|
|
SeeAlso: #01581,#04023
|
|
--------O-214452-----------------------------
|
|
INT 21 - DR DOS 3.41+ - DETERMINE DOS TYPE/GET DR DOS VERSION
|
|
AX = 4452h ("DR")
|
|
CF set
|
|
Return: CF set if not DR DOS
|
|
AX = error code (see #01680 at AH=59h/BX=0000h)
|
|
CF clear if DR DOS
|
|
AX = version code
|
|
AH = single-user/multiuser nature (see #01581)
|
|
10h single-user
|
|
AL = operating system version ID (see #01580)
|
|
14h multiuser
|
|
AL = operating system version ID (see #01579)
|
|
DX modified (refer to note below)
|
|
Notes: the DR DOS version is stored in the environment variable VER
|
|
use this function if looking for single-user capabilities, AX=4451h
|
|
if looking for multiuser; this call should never return multiuser
|
|
values
|
|
in DR DOS 3.41-6.0, DX=AX on return; for Novell DOS 7, DH=AH but DL=00h
|
|
(reportedly, DH=00h when booting NWDOS7 from installation disks)
|
|
Novell DOS 7 returns error code 0001h if SETVER x.255 is in effect for
|
|
the calling program, or SETVER /G x.255 is in effect
|
|
although based on DR DOS, CCI Multiuser DOS 7.xx,
|
|
IMS Multiuser DOS 7.x, and IMS REAL/32 7.50+ do not support this call
|
|
With OpenDOS 7.02 BETA 2 and DR-OpenDOS 7.02+, the install check
|
|
in most tools has been changed to run with both, AH=10h and AH=14h
|
|
to support possible future "client side" multiuser releases of
|
|
DR-DOS which may return 14h instead of 10h. Tools should also strip
|
|
off the CP/Net bit before checking the kernel version.
|
|
Often used version checks like >= 1070h are invalid, therefore,
|
|
hence the AH and AL must be checked seperately.
|
|
In DR DOS 3.31-6.0, and DR PalmDOS, DX=AX on return.
|
|
For Novell DOS 7 - DR DOS 7.03 the DX value returned by this function
|
|
is the same as the DX value returned by INT 21/AX=3306h, and
|
|
represents the DOS revision (bits 7-0, currently always DL=00h) and
|
|
the version flags (bits 15-8, with bit 12 = DOS in HMA, bit 11 = DOS
|
|
in ROM) of the "patch_version" field in the PCM_HEADER structure in
|
|
the IBMDOS.COM file. The version flags, however, are updated at
|
|
runtime to reflect the actual system status, resulting, for example,
|
|
in DH=10h for DOS in HMA, and DH=0 when booting Novell DOS 7 from
|
|
installation disks.
|
|
The operating system version ID represents the BDOS (Basic Disk
|
|
Operating System) kernel version (of the DRBDOS.SYS aka IBMDOS.COM
|
|
file), and the two nibbles can actually be read as CP/M version
|
|
and sub-version, that is DR-DOS 7.03 (version code 1073h) is
|
|
actually CP/M-86 version 7.3.
|
|
Due to lost original patch sources from the backups, Caldera OpenDOS
|
|
7.01 merely represented Novell DOS 7 Update 10 with minor changes.
|
|
For Caldera DR-OpenDOS 7.02, all the Novell DOS 7 patches up to
|
|
including Update 15.2 have been re-incorporated into the system
|
|
from other sources, while the missing patches for IBMBIO.COM were
|
|
independently re-implemented by Matthias Paul in 07/1997-10/1997.
|
|
Novell DOS 7 (since 1993-11-08), OpenDOS 7.01 and OpenDOS 7.02 BETA
|
|
IBMDOS.COM return error code 0001h if SETVER x.255 is in effect
|
|
for the calling program, or SETVER /G x.255 is in effect.
|
|
Since Caldera DR-OpenDOS 7.02 the SHARE 2.05+ (1998-01-05) driver
|
|
uses INT 21/AX=65A2h as an *additional* BDOS version check: If the
|
|
"FUCASE char" function is functional on a DR-DOS BDOS kernel 72h+,
|
|
SHARE assumes it is running on an OpenDOS 7.02 BETA 1 (73h) kernel
|
|
(or later) even if the BDOS version returned by INT 21/AX=4452h would
|
|
indicate an earlier issue of the kernel. Some 3rd party drivers
|
|
(like HPFS_DOS.EXE) were hardwired to detect Novell DOS 7 only,
|
|
and so the kernel version had to be patched back on such systems
|
|
to allow such drivers to work properly. The BDOS version and DOS
|
|
revision are stored in PCM_HEADER of the IBMDOS.COM file, see
|
|
table XXXX below.
|
|
However, this is no longer necessary with the introduction of the
|
|
DR-DOS 7.02+ IBMDOS.COM (since 1998-01-10) and SETVER 1.01+
|
|
(since 1998-01-12) because they allow to fake BDOS versions as well
|
|
as faking DOS versions. In /X mode, a set sub-version of y = 100..127
|
|
will be used as BDOS version instead (64h..7Fh), while the DOS
|
|
revision will be used to report the DOS sub-version instead. For
|
|
example, given a DOS revision of 0, SETVER 6.114 would be the proper
|
|
value to fake Novell DOS 7 (114=72h) on a DR-DOS 7.02+ system,
|
|
reporting a DOS version of "IBM" 6.00. Sub-versions 128..255 will
|
|
completely disable this BDOS version check, and report a DOS sub-
|
|
version of 0..127. This is to work around problems with possibly
|
|
hostile programs, that try to detect DR-DOS to not run on this OS.
|
|
Additional version check for 1072h kernels: At API level, there
|
|
is no known way to distinguish Novell DOS 7 from OpenDOS 7.01,
|
|
however, an IBMBIO.COM/IBMDOS.COM file date since 1997 and the
|
|
existance of an environment variable %OS%=OPENDOS usually indicates
|
|
an OpenDOS system (but not the other way around; some OpenDOS
|
|
BETAs still used %OS%=NWDOS!).
|
|
Additional version checks for 1073h kernels: A functional test of
|
|
INT 21/AX=65A2h (see above for SHARE) can be used to distinguish
|
|
OpenDOS 7.02 BETA 1 from the later (OpenDOS 7.02 BETA 2+ and)
|
|
DR-OpenDOS 7.02 and DR-DOS 7.02 releases, which are both the
|
|
same, except for the name change and minor bug fixes. Testing
|
|
for the INT 21/AX=6601h/BX=0000h bug can be used to differentiate the
|
|
original release of DR-DOS 7.02 from later 7.02 updates and
|
|
DR-DOS 7.03.
|
|
The DR DOS version is stored in the environment variable VER.
|
|
SeeAlso: AX=4412h,AX=4451h,AX=4459h
|
|
|
|
(Table 01580)
|
|
Values for Digital Research operating system version ID:
|
|
41h DOS Plus 1.2
|
|
60h DOS Plus 2.0 or 2.1
|
|
63h DR DOS 3.41
|
|
64h DR DOS 3.42
|
|
65h DR DOS 5.0
|
|
67h DR DOS 6.0
|
|
70h PalmDOS
|
|
71h DR DOS 6.0 March 1993 "business update"
|
|
72h Novell DOS 7.0
|
|
73h OpenDOS 7.02
|
|
SeeAlso: #01579,#01581,#04088,#04023
|
|
|
|
(Table 04088)
|
|
Values for Digital Research operating system ID codes (full AX return value):
|
|
??41h - DOS Plus 1.2
|
|
1060h - DOS Plus 2.0 or 2.1 (1988-03-09???)
|
|
(this was basically a Concurrent CP/M-86 with built-in DOS emulation
|
|
developed between 1983-1986)
|
|
1060h - DR DOS 3.31 (OEM) (1988-04-27???, 06/1988)
|
|
- DR DOS 3.32 (OEM) (1988-08-17)
|
|
- DR DOS 3.33 (OEM) (1988-09-01)
|
|
- DR DOS 3.34 (OEM)
|
|
- DR DOS 3.35 (OEM) (1988-10-21)
|
|
for example: at least an issue for "Prism System 232" (10/1988)
|
|
and a French issue existed.
|
|
106?h - DR DOS 3.40 BETA 1 (1988-11-11)
|
|
- DR DOS 3.40
|
|
(This is the first issue for sure known to be ROMmable, although
|
|
DR DOS should have been ROMmable right from the start (1987).)
|
|
1063h - DR DOS 3.41 various OEM and retail releases (06/1989-07/1989)
|
|
- DR DOS 3.41T
|
|
1064h - DR DOS 3.42
|
|
(It is not clear, if this issue was actually released, since Lineo
|
|
recently (fall 1999) released some historical kernels, and one of
|
|
them is sailing under the name DR DOS 5.0 "Leopard" BETA 1 and has
|
|
copyright strings from 1990, while it still identifies itself as
|
|
being DR DOS 3.41... Unfortunately the uploaded archive is broken,
|
|
hence it is not possible to find out easily. Maybe DR DOS 3.42 was
|
|
nothing more than this early "Leopard" BETA???)
|
|
1065h - DR DOS ??? (1990-02-01)
|
|
- DR DOS 5.0 "Leopard" BETA 2 (1990-03-16),
|
|
- DR DOS 5.0 "Leopard" BETA 2B
|
|
(This was the first issue to use the new IBMBIO.COM/IBMDOS.COM
|
|
names instead of DRBIOS.SYS/DRBDOS.SYS.)
|
|
- DR DOS 5.0 "Leopard" BETA 3
|
|
(This issue still uses separate boot sectors for floppies and
|
|
harddisks. The boot sector OEM label is still "DIGITAL".)
|
|
- DR DOS 5.0 release (06/1990, 08/1990)
|
|
(This issue has a combined boot sector for both, floppies and
|
|
harddisks. The boot sector OEM label has changed to "IBM 3.3".
|
|
DR DOS 5.0 was the first DOS to introduce high-load capabilities.)
|
|
1066h - DR DOS ??? (1990-08-09)
|
|
- DR DOS 6.0 "Buxton" ALPHA (02/1991-03/1991)
|
|
1067h - DR DOS ??? (1991-03-15)
|
|
106?h - DR DOS 6.0 "Buxton" BETA 2 (??/1991)
|
|
106?h - DR DOS 6.0 "Buxton" BETA 3 (05/1991, 1991-06-27, 1991-06-28)
|
|
1067h - DR DOS 6.0 release (05/1991, 08/1991)
|
|
- DR DOS 6.0 BDOS patch "PAT304" English (1991-11-29, XDIR /C: 9D8Ch)
|
|
fix for "\\" in cmdline by Quick Basic 4.5/MS PDS 7.1 on Lantastic 4.0
|
|
- DR DOS 6.0 BDOS patch "PAT303" English (1991-12-03, XDIR /C: 66B0h)
|
|
This patch makes INT 21/AH=4Eh (Search First) compatible with MS-DOS
|
|
when the Volume Label attribute is set. Previously under DR DOS the
|
|
volume label was only searched for if bit 3 was the only bit set in
|
|
the attribute whereas MS-DOS searches for the volume label if bit 3
|
|
is set, irrespective of any other bits in the attribute.
|
|
- DR DOS 6.0 BDOS patch "PAT306" English (1991-12-11, XDIR /C: 8DE5h)
|
|
This patch fixes a problem with OPTASM which would give error 8
|
|
if there were not enough handles available. This patch forces the
|
|
system to check for available handles before it opens a file.
|
|
- DR DOS 6.0 BDOS patch "PAT312" English (1992-01-07, XDIR /C: A0C6h)
|
|
This patch fixes a problem with INT 21/AH=26h (create PSP) the
|
|
segment from which the PSP was copied was incorrect so the the PSP
|
|
was not filled correctly and did not contain the command tail.
|
|
- DR DOS 6.0 BDOS patch "PAT314" English (1992-01-10, XDIR /C: C964h)
|
|
This patch modifies INT 21/AX=33xxh, the Ctrl Break handler to
|
|
support undocumented MS-DOS function INT 21/AX=3302h.
|
|
- DR DOS 6.0 BIOS patch "PAT315" English (1992-01-10, XDIR /C: DBAAh)
|
|
This patch fixes a problem where, when booting from a Bernoulli
|
|
drive, any DEVICE= statement in CONFIG.SYS failed if it was placed
|
|
after the device driver RCD.SYS v7.x and DOSOAD.SYS v1.x
|
|
- DR DOS 6.0 BDOS patch "PAT317" English (1992-01-27, XDIR /C: B701h)
|
|
This patch fixes a problem where attempting to close a changed file
|
|
on a write protected disk seems to work after the first retry.
|
|
This was caused because when the retry is attempted the file has been
|
|
marked as not changed, so the attempt to write to disk is not made.
|
|
- DR DOS 6.0 BDOS patch "PAT321" English (1992-02-19, XDIR /C: 947Bh)
|
|
This patch fixes a problem where the error codes returned from
|
|
INT 25h and INT 26h for "drive not ready" and "write protect"
|
|
errors were incorrect.
|
|
- DR DOS 6.0 BDOS patch "PAT323" English (1992-02-20, XDIR /C: E1B0h)
|
|
This patch fixes a problem where, if the first command entered after
|
|
booting the machine is a single character, any use of the command
|
|
line recall keys will only recall the first command.
|
|
- DR DOS 6.0 ??? German (1992-02-21)
|
|
- DR DOS 6.0 update (02/1992)
|
|
- DR DOS 6.0 BDOS patch "PAT326" English (1992-03-05, XDIR /C: 8EF2h)
|
|
This is an optional patch to prevent DRDOS from padding the
|
|
environment of EXEPACKed applications or utilities.
|
|
- DR DOS 6.0 ??? German (1992-03-27)
|
|
- DR DOS 6.0 BDOS patch "PAT334" English (1992-03-27, XDIR /C: 2AFEh)
|
|
This patch fixes a problem where selecting (R)etry after hitting ^P
|
|
while the printer is offline caused the system to hang.
|
|
- DR DOS 6.0 "Windows 3.1 update, April 1992" "dr6win" (03/1992,
|
|
1992-04-07). This public update only includes patches addressing
|
|
full Windows 3.1 compatiblity. There should have been a full
|
|
"business update" for registered users, shipping a little bit later.
|
|
- DR DOS 6.0 ??? English (1992-04-07)
|
|
- DR DOS 6.0 BDOS patch "pat354" English (1992-07-28, XDIR /C: 3398h)
|
|
This patch for Beame and Whiteside Networks: On opening a duplicate
|
|
file handle which describes a device, a device open call is made to
|
|
inform the device driver that a new file handle has been opened.
|
|
This patch is current and up to date as of 1992-11-10.
|
|
- DR DOS 6.0 update (07/1992)
|
|
- DR DOS 6.0 BDOS patch "PAT301" English (1992-10-28, XDIR /C: 959Bh)
|
|
This patch fixes a problem with apps that opens a file, with Share
|
|
loaded, but then cannot delete the file until the file is closed.
|
|
This causes "Money Manager" to fail.
|
|
- DR DOS 6.0 update (11/1992)
|
|
Note: There is no known method to distinguish these different kernels
|
|
at runtime, except for - maybe - checksumming the IBMBIO.COM/
|
|
IBMDOS.COM files.
|
|
The listed patches only address a single problem, while the
|
|
listed updates are full rebuilds, also including all previous
|
|
fixes.
|
|
1070h - multitasking "Vladivar" kernel architecture and introduction of
|
|
DOS-like structures (1991-07-26, 08/1991)
|
|
- DR DOS ??? (1991-09-26)
|
|
- DR PalmDOS "Merlin" BETA 1-2
|
|
- DR PalmDOS "Merlin" BETA 3 (1992-06-23)
|
|
- DR PalmDOS "Merlin" Evaluation Release (1992-08-25)
|
|
- DR PalmDOS Release Candidates 1-2 (1992-08-26)
|
|
- DR PalmDOS/NetWare PalmDOS 1.0 (06/1992-11/1992)
|
|
(DR PalmDOS was the first DR DOS re-incarnation that supported
|
|
a genuine CDS, but still pretended to be DOS 3.31. Much of the
|
|
former CP/M stuff was stripped out to reduce the code size to meet
|
|
early Palmtop PC requirements. It introduced the patented dynamic
|
|
idle detection method (by Roger Gross), a special issue of the
|
|
TASKMAX program switcher (MINIMAX) to support Personal Information
|
|
Modules (PIM) plug-in executables, supported Flash/ROM disk,
|
|
XIP "Execute in Place" applications, and came with PCMCIA Card
|
|
Services and Service Stack (SS) partially written by Ian Cullimore
|
|
(ex-Poquet Computer Corporation founder).
|
|
- DR DOS "Panther" BETA 1 (1992-10-16)
|
|
(This issue already supported DPMS, had the "Vladivar" pre-emptive
|
|
multitasker, DPMS-SuperStor disk compression, Multiuser-security
|
|
(World/Group/Owner), and much improved multi-windowing ViewMAX/3 GUI
|
|
which looked alot more like Windows than GEM. It pretended to be
|
|
PC DOS 5. However, this issue was never released and later partially
|
|
merged into the Novell DOS 7 project (without Multiuser-security and
|
|
ViewMAX/3). In 1999, Caldera Thin Clients released ViewMAX/3 under
|
|
GPL, see http://www.gemworld.com.)
|
|
1070h??? - DR DOS "StarTrek" (STDOS) (07/1992-05/1993)
|
|
(A never released, though reportedly fully functional result of
|
|
a Novell and Apple team-up utilizing the DR DOS "Vladivar" multi-
|
|
tasker to run Apple's Intel-port of MacOS 7.1 on an issue of DR DOS
|
|
"Panther", even emulating HFS and Mac resources on DOS FAT file-
|
|
systems.)
|
|
1071h - DR DOS ??? (1992-11-26)
|
|
- DR DOS 6.0 "business update" "DRDOS493" English for
|
|
Windows for Workgroups 3.1 (1993-03-19)
|
|
- DR DOS 6.0 patch "PATDR6" English (1993-03-19) for NetWare
|
|
- DR DOS 6.0 patch "PAT394" English (1993-09-17)
|
|
- Apparently also some issues of DR DOS "Panther"???
|
|
1072h - Novell DOS 7/PNW "Smirnoff" BETA 1 (??/1993, probably 1993-04-26)
|
|
- Novell DOS 7 "Panther" BETA 2 (08/1993)
|
|
(This "Panther" issue is much different from the early 10/1992
|
|
"Panther" BETA 1.)
|
|
- Novell DOS 7 "Panther/Smirnoff" BETA 2 (08/1993)
|
|
- Novell DOS 7 "Panther/Smirnoff" BETA 3 (09/1993)
|
|
(This issue does not have workarounds for Windows 3.1 "AARD" code)
|
|
- Novell DOS 7 "Panther/Smirnoff" BETA 4 (10/1993)
|
|
- Novell DOS 7 code freeze 1993-12-03???)
|
|
- Novell DOS 7 release (12/1993-04/1994)
|
|
(also known as NWDOS or ND7, sometimes erroneously called NDOS)
|
|
- Novell DOS 7 German release (1994-02-22)
|
|
(This issue is known to have workarounds for Windows 3.1 "AARD" code)
|
|
- Novell DOS 7 updates 1-3 (???/1994)
|
|
- Novell DOS 7 update 4 (1994-05-31)
|
|
- Novell DOS 7 updates 5-9 (???/1994)
|
|
- Novell DOS 7 update 10 (12/1994)
|
|
- Novell DOS 7 update 11 (01/1995)
|
|
- Novell DOS 7 update 12 (04/1995)
|
|
- Novell DOS 7 update 13 (05/1995)
|
|
- Novell DOS 7 update 14 (08-09/1995)
|
|
- Novell DOS 7 update 15 (12/1995)
|
|
- Novell DOS 7 update 15.2 (01/1996)
|
|
Note: The Novell DOS 7 updates 4-15.2 are full rebuilds, not patched
|
|
binaries.
|
|
- Caldera OpenDOS 7.01 BETA (02/1997)
|
|
(basically representing Novell DOS 7 update 10 with minor
|
|
changes here and there)
|
|
- Caldera OpenDOS 7.01 (02-03/1997)
|
|
- Caldera OpenDOS 7.01 M.R.S. (05/1997)
|
|
(release of the kernel source code)
|
|
- Matthias Paul's enhanced OpenDOS 7.02 ALPHA 1-4 kernels (07-11/1997)
|
|
1073h - Caldera OpenDOS 7.02 BETA 1 (09/1997)
|
|
(incorporating most the Novell DOS 7 update 15.2 changes,
|
|
except for IBMBIO.COM changes, plus a few other enhancements)
|
|
- Caldera OpenDOS 7.02 BETA 2 (11/1997)
|
|
(now also incorporating Matthias Paul's ALPHA 4 enhancements,
|
|
the Novell DOS update 15.2 IBMBIO.COM patches have been
|
|
re-implemented)
|
|
- Caldera OpenDOS 7.02 BETA 2A (12/1997)
|
|
(now incorporating all Novell DOS 7 update 15.2 changes)
|
|
- Caldera DR-OpenDOS 7.02 (1997-12-2x)
|
|
(now for the first time the product name is written with a hyphen!!!)
|
|
- Caldera DR-DOS 7.02 internal build (02/1998)
|
|
- Caldera DR-DOS 7.02 release (03/1998)
|
|
- Caldera DR-DOS 7.02A release (06/1998)
|
|
- DR-DOS 7.02 Update 1 (08/1998)
|
|
- DR-DOS 7.02 Update 2 (09/1998)
|
|
- Caldera (Thin Clients) DR-DOS 7.03 BETA (1998-12-03),
|
|
sometimes referred to as "DR-DOS 7.03 BETA 3"
|
|
- Caldera (Thin Clients) DR-DOS 7.03 release (1998-12-24, 1999-01-06)
|
|
- Lineo DR-DOS 7.03 release (1999-06-07, 1999-09-09)
|
|
(this issue has no functional changes compared to the 1999-01-06
|
|
issue of DR-DOS 7.03)
|
|
SeeAlso: #01580,#01579,#01581,#04023
|
|
|
|
Bitfields for CP/M type indicator:
|
|
Bit(s) Description (Table 01581)
|
|
7-4 CPU type
|
|
0000 = 8080
|
|
0001 = 8086
|
|
3-0 OS type
|
|
0000 = CP/M
|
|
0001 = MP/M
|
|
0002 = CP/Net
|
|
0004 = multiuser
|
|
Notes: Usually 10h (single-user) or 14h (multi-user).
|
|
While earlier releases of the system utilities performed a test for
|
|
a version code of (>)= (10)xxh, this was changed with
|
|
DR-OpenDOS 7.02+ (now taking a possible multi-user version into
|
|
account): Most utilities now test for AH being either 10h or 14h,
|
|
and a BDOS version >=xxh to allow them to properly run on possible
|
|
future multi-user releases of DR-DOS. Before doing this test, some
|
|
of them strip off the CP/Net bit.
|
|
SeeAlso: #01580
|
|
--------O-214454-----------------------------
|
|
INT 21 U - DR DOS 3.41+ - SET GLOBAL PASSWORD
|
|
AX = 4454h
|
|
DS:DX -> password string (blank-padded to 8 characters)
|
|
Desc: Specify the master password for accessing files.
|
|
SeeAlso: AX=4303h,AX=4414h
|
|
--------O-214456-----------------------------
|
|
INT 21 U - DR DOS 5.0+ - HISTORY BUFFER CONTROL
|
|
AX = 4456h
|
|
DL = control flags (see #01582)
|
|
Return: AL = previous value of state flags (see #01583)
|
|
Note: DR DOS 6.0 only checks bit 0 and ignores the rest of DL
|
|
SeeAlso: #01584
|
|
|
|
Bitfields for control flags:
|
|
Bit(s) Description (Table 01582)
|
|
0 whose buffer: 0=application, 1=COMMAND.COM
|
|
---Novell DOS 7---
|
|
1 toggle HISTORY usage
|
|
2 toggle INSERT state
|
|
Note: only one bit at a time may be used
|
|
|
|
Bitfields for state flags:
|
|
Bit(s) Description (Table 01583)
|
|
0 HISTORY buffer enabled
|
|
1 INSERT enabled
|
|
2-5 unused
|
|
7 whose buffer: 0=application, 1=COMMAND.COM
|
|
--------O-214457-----------------------------
|
|
INT 21 U - DR DOS 5.0-6.0 - SHARE/HILOAD CONTROL
|
|
AX = 4457h
|
|
DH = subfunction
|
|
00h enable/disable SHARE
|
|
DL = 00h disable
|
|
= 01h enable
|
|
else Return: AX = ???
|
|
01h get HILOAD status
|
|
Return: AX = status
|
|
0000h off
|
|
0001h on
|
|
02h set HILOAD status
|
|
DL = new state (00h off, 01h on)
|
|
Return: AX = ???
|
|
other
|
|
Return: AX = ???
|
|
Note: This was seen called by COMMAND.COM of DR DOS 6.0; it does not seem
|
|
to be supported by Novell DOS 7
|
|
SeeAlso: AX=4457h/DX=FFFFh
|
|
--------O-214457DXFFFF-----------------------
|
|
INT 21 OU - DR DOS 6.0 - GET SHARE STATUS
|
|
AX = 4457h
|
|
DX = FFFFh
|
|
Return: AX = SHARE status
|
|
Note: not supported by Novell DOS 7
|
|
SeeAlso: INT 2F/AX=1000h
|
|
--------O-214458-----------------------------
|
|
INT 21 U - DR DOS 5.0+ internal - GET POINTER TO INTERNAL VARIABLE TABLE
|
|
AX = 4458h
|
|
Return: ES:BX -> internal variable table (see #01584,#01585)
|
|
AX = ??? (0B50h for DR DOS 5.0, 0A56h for DR DOS 6.0, 0FE4h for
|
|
Novell DOS 7)
|
|
SeeAlso: AX=4452h
|
|
|
|
Format of DR DOS 5.0-6.0 internal variable table:
|
|
Offset Size Description (Table 01584)
|
|
00h WORD ???
|
|
02h WORD segment of ???
|
|
04h WORD offset within DOS data segment of history control structure
|
|
for COMMAND.COM history buffer (see #01586)
|
|
06h WORD offset within DOS data segment of history control structure
|
|
for application history buffer (see #01586)
|
|
08h BYTE initial history state flags (see #01583)
|
|
09h 2 BYTEs ???
|
|
0Bh WORD KB of extended memory at startup
|
|
0Dh BYTE number of far jump entry points
|
|
0Eh WORD segment containing far jumps to DR DOS entry points (see #01587)
|
|
10h WORD (only if kernel loaded in HMA) offset in HMA of first free HMA
|
|
memory block (see #01588) or 0000h if none; segment is FFFFh
|
|
12h WORD pointer to segment of environment variables set in CONFIG,
|
|
or 0000h if already used
|
|
---DR DOS 6.0---
|
|
14h WORD (only if kernel loaded in HMA) offset in HMA of first used HMA
|
|
memory block (see #01588) or 0000h if none; segment is FFFFh
|
|
16h 8 BYTEs ???
|
|
1Eh WORD offset in DOS data segment of full COUNTRY.SYS filename
|
|
20h 8 BYTEs ???
|
|
28h WORD offset in DOS data segment of SHARE hook table
|
|
2Ah 2 BYTEs ???
|
|
2Ch WORD offset in DOS data segment of far pointer to INT 2F/AX=1000h
|
|
handler
|
|
Notes: the segment used for the DR DOS 6.0 CONFIG environment variables
|
|
(excluding COMSPEC, VER and OS) is only useful for programs/drivers
|
|
called from CONFIG.SYS. The word is set to zero later when the area
|
|
is copied to the COMMAND.COM environment space. This allows
|
|
CONFIG.SYS to pass information to AUTOEXEC.BAT.
|
|
the Novell DOS 7 KEYB uses offsets 10h,14h, and 2Ch in the same was
|
|
as for DR DOS 6.0, so it is likely that the entire table is the same
|
|
|
|
Format of Novell DOS 7 internal variable table:
|
|
Offset Size Description (Table 01585)
|
|
00h ???
|
|
1Eh WORD offset of COUNTRY.SYS filename
|
|
42h 16 DWORDs pointers to ??? entry points
|
|
???
|
|
|
|
Format of history control structure:
|
|
Offset Size Description (Table 01586)
|
|
00h WORD segment of buffer
|
|
02h WORD size of buffer in bytes
|
|
04h WORD ???
|
|
|
|
Format of kernel entry jump table for DR DOS 5.0-6.0:
|
|
Offset Size Description (Table 01587)
|
|
00h 5 BYTEs far jump to kernel entry point for CP/M CALL 5
|
|
05h 5 BYTEs far jump to kernel entry point for INT 20
|
|
0Ah 5 BYTEs far jump to kernel entry point for INT 21
|
|
0Fh 5 BYTEs far jump to kernel entry point for INT 22 (RETF)
|
|
14h 5 BYTEs far jump to kernel entry point for INT 23 (RETF)
|
|
19h 5 BYTEs far jump to kernel entry point for INT 24
|
|
1Eh 5 BYTEs far jump to kernel entry point for INT 25
|
|
23h 5 BYTEs far jump to kernel entry point for INT 26
|
|
28h 5 BYTEs far jump to kernel entry point for INT 27
|
|
2Dh 5 BYTEs far jump to kernel entry point for INT 28
|
|
32h 5 BYTEs far jump to kernel entry point for INT 2A (IRET)
|
|
37h 5 BYTEs far jump to kernel entry point for INT 2B (IRET)
|
|
3Ch 5 BYTEs far jump to kernel entry point for INT 2C (IRET)
|
|
41h 5 BYTEs far jump to kernel entry point for INT 2D (IRET)
|
|
46h 5 BYTEs far jump to kernel entry point for INT 2E (IRET)
|
|
4Bh 5 BYTEs far jump to kernel entry point for INT 2F
|
|
Notes: all of these entry points are indirected through this jump table
|
|
to allow the kernel to be relocated into high memory while leaving
|
|
the actual entry addresses in low memory for maximum compatibility
|
|
some of these entry points (22h,23h,24h,2Eh,2Fh) are replaced as soon
|
|
as COMMAND.COM is loaded, and return immediately to the caller, some
|
|
returning an error code (the original handler for INT 2F returns
|
|
AL=03h [fail]).
|
|
|
|
Format of HMA Memory Block (DR DOS 6.0 kernel loaded in HMA):
|
|
Offset Size Description (Table 01588)
|
|
00h WORD offset of next HMA Memory Block (0000h if last block)
|
|
02h WORD size of this block in bytes (at least 10h)
|
|
04h BYTE type of HMA Memory Block (interpreted by MEM)
|
|
00h system
|
|
01h KEYB
|
|
02h NLSFUNC
|
|
03h SHARE
|
|
04h TaskMAX
|
|
05h COMMAND
|
|
05h var TSR (or system) code and data. DR DOS TSR's, such as KEYB,
|
|
hooks interrupts using segment FFFEh instead FFFFh.
|
|
--------O-214459-----------------------------
|
|
INT 21 - DR Multiuser DOS 5.0 - API
|
|
AX = 4459h
|
|
CL = function (see #04019 at INT E0"CP/M-86")
|
|
DS,DX = parameters
|
|
Notes: DR DOS 5.0 and Novell DOS 7 return CF set and AX=0001h
|
|
this API is also available on INT E0
|
|
SeeAlso: AX=4452h,INT E0"CP/M-86"
|
|
--------O-21445A-----------------------------
|
|
INT 21 U - Concurrent DOS etc. - USER GROUP SUPPORT
|
|
AX = 445Ah
|
|
CX = operation type
|
|
00h get default file access rights
|
|
01h set default file access rights
|
|
02h get user/group
|
|
03h get security version
|
|
04h set security key (needs key)
|
|
05h set user/group (needs key)
|
|
DX = data for operation if set
|
|
BX = key (if required)
|
|
Return: AX = result
|
|
Note: This function was introduced on 1990/06/04 for CDOS. It has been
|
|
supported by DR PalmDOS and DR DOS "Panther" (BDOS 1070h),
|
|
but it is not supported by Novell DOS 7 - DR-DOS 7.03.
|
|
--------v-2144A0-----------------------------
|
|
INT 21 - VIRUS - "Horns" - INSTALLATION CHECK
|
|
AX = 44A0h
|
|
Return: AH = FFh if installed
|
|
SeeAlso: AX=4243h"VIRUS",AX=4B04h"VIRUS"
|
|
--------N-2144E0-----------------------------
|
|
INT 21 U - Sun PC-NFS - API???
|
|
AX = 44E0h
|
|
DS:DX -> ???
|
|
SS:BP -> stack frame (see #01589)
|
|
Return: ???
|
|
Note: this function is also supported by Beame&Whiteside's BWPCNFS shim; the
|
|
description presented here was derived from that shim
|
|
|
|
Format of PC-NFS stack frame:
|
|
Offset Size Description (Table 01589)
|
|
00h WORD -> previous stack frame
|
|
02h DWORD return address
|
|
--------d-2144FFBXFFFF-----------------------
|
|
INT 21 U - NewSpace - ???
|
|
AX = 44FFh
|
|
BX = FFFFh
|
|
DX = ???
|
|
Program: NewSpace is a TSR by Isogon Corporation which automatically compresses
|
|
all files as they are written and decompresses them as they are read
|
|
SeeAlso: AX=4414h/BX=FFFFh
|
|
--------D-2145-------------------------------
|
|
INT 21 - DOS 2+ - "DUP" - DUPLICATE FILE HANDLE
|
|
AH = 45h
|
|
BX = file handle
|
|
Return: CF clear if successful
|
|
AX = new handle
|
|
CF set on error
|
|
AX = error code (04h,06h) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: moving file pointer for either handle will also move it for the other,
|
|
because both will refer to the same system file table
|
|
for DOS versions prior to 3.3, file writes may be forced to disk by
|
|
duplicating the file handle and closing the duplicate
|
|
SeeAlso: AH=3Dh,AH=46h
|
|
--------D-2146-------------------------------
|
|
INT 21 - DOS 2+ - "DUP2", "FORCEDUP" - FORCE DUPLICATE FILE HANDLE
|
|
AH = 46h
|
|
BX = file handle
|
|
CX = file handle to become duplicate of first handle
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = error code (04h,06h) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: closes file with handle CX if it is still open
|
|
DOS 3.30 hangs if BX=CX on entry
|
|
moving file pointer for either handle will also move it for the other,
|
|
because both will refer to the same system file table
|
|
SeeAlso: AH=3Dh,AH=45h
|
|
--------D-2147-------------------------------
|
|
INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY
|
|
AH = 47h
|
|
DL = drive number (00h = default, 01h = A:, etc)
|
|
DS:SI -> 64-byte buffer for ASCIZ pathname
|
|
Return: CF clear if successful
|
|
AX = 0100h (undocumented)
|
|
CF set on error
|
|
AX = error code (0Fh) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: the returned path does not include a drive or the initial backslash
|
|
many Microsoft products for Windows rely on AX being 0100h on success
|
|
under the FlashTek X-32 DOS extender, the buffer pointer is in DS:ESI
|
|
SeeAlso: AH=19h,AH=3Bh,AH=71h,INT 15/AX=DE25h
|
|
--------D-2148-------------------------------
|
|
INT 21 - DOS 2+ - ALLOCATE MEMORY
|
|
AH = 48h
|
|
BX = number of paragraphs to allocate
|
|
Return: CF clear if successful
|
|
AX = segment of allocated block
|
|
CF set on error
|
|
AX = error code (07h,08h) (see #01680 at AH=59h/BX=0000h)
|
|
BX = size of largest available block
|
|
Notes: DOS 2.1-6.0 coalesces free blocks while scanning for a block to
|
|
allocate
|
|
.COM programs are initially allocated the largest available memory
|
|
block, and should free some memory with AH=49h before attempting any
|
|
allocations
|
|
under the FlashTek X-32 DOS extender, EBX contains a protected-mode
|
|
near pointer to the allocated block on a successful return
|
|
SeeAlso: AH=49h,AH=4Ah,AH=58h,AH=83h
|
|
--------D-2149-------------------------------
|
|
INT 21 - DOS 2+ - FREE MEMORY
|
|
AH = 49h
|
|
ES = segment of block to free
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = error code (07h,09h) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: apparently never returns an error 07h, despite official docs; DOS 2.1+
|
|
code contains only an error 09h exit
|
|
DOS 2.1-6.0 does not coalesce adjacent free blocks when a block is
|
|
freed, only when a block is allocated or resized
|
|
the code for this function is identical in DOS 2.1-6.0 except for
|
|
calls to start/end a critical section in DOS 3.0+
|
|
SeeAlso: AH=48h,AH=4Ah
|
|
--------D-214A-------------------------------
|
|
INT 21 - DOS 2+ - RESIZE MEMORY BLOCK
|
|
AH = 4Ah
|
|
BX = new size in paragraphs
|
|
ES = segment of block to resize
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = error code (07h,08h,09h) (see #01680 at AH=59h/BX=0000h)
|
|
BX = maximum paragraphs available for specified memory block
|
|
Notes: under DOS 2.1-6.0, if there is insufficient memory to expand the block
|
|
as much as requested, the block will be made as large as possible
|
|
DOS 2.1-6.0 coalesces any free blocks immediately following the block
|
|
to be resized
|
|
SeeAlso: AH=48h,AH=49h,AH=83h
|
|
--------v-214A--BX00B6-----------------------
|
|
INT 21 - VIRUS???
|
|
AH = 4Ah
|
|
BX = 00B6h
|
|
ES = CX
|
|
Return: ???
|
|
Note: this call is intercepted by the Search&Destroy SDRes v27.03 bundled
|
|
with Novell DOS 7, and is presumably some virus's installation check
|
|
SeeAlso: AH=0Eh/DL=ADh,AH=4Ah/BX=FFFFh,AH=D2h"VIRUS"
|
|
--------v-214A--BXFFFF-----------------------
|
|
INT 21 - VIRUS???
|
|
AH = 4Ah
|
|
BX = FFFFh
|
|
CX = 0568h
|
|
SI = 0129h
|
|
DI = 0000h
|
|
ES = BP
|
|
Return: ???
|
|
Note: this call is intercepted by the Search&Destroy SDRes v27.03 bundled
|
|
with Novell DOS 7, and is presumably some virus's installation check
|
|
SeeAlso: AH=0Eh/DL=ADh,AH=4Ah/BX=00B6h
|
|
--------D-214B-------------------------------
|
|
INT 21 - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM
|
|
AH = 4Bh
|
|
AL = type of load
|
|
00h load and execute
|
|
01h load but do not execute
|
|
03h load overlay (see #01591)
|
|
04h load and execute in background (European MS-DOS 4.0 only)
|
|
"Exec & Go" (see also AH=80h)
|
|
DS:DX -> ASCIZ program name (must include extension)
|
|
ES:BX -> parameter block (see #01590,#01591,#01592)
|
|
CX = mode (subfunction 04h only)
|
|
0000h child placed in zombie mode after termination
|
|
0001h child's return code discarded on termination
|
|
Return: CF clear if successful
|
|
BX,DX destroyed
|
|
if subfunction 01h, process ID set to new program's PSP; get with
|
|
INT 21/AH=62h
|
|
CF set on error
|
|
AX = error code (01h,02h,05h,08h,0Ah,0Bh) (see #01680 at AH=59h)
|
|
Notes: DOS 2.x destroys all registers, including SS:SP
|
|
under ROM-based DOS, if no disk path characters (colons or slashes)
|
|
are included in the program name, the name is searched for in the
|
|
ROM module headers (see #01595) before searching on disk
|
|
for functions 00h and 01h, the calling process must ensure that there
|
|
is enough unallocated memory available; if necessary, by releasing
|
|
memory with AH=49h or AH=4Ah
|
|
for function 01h, the AX value to be passed to the child program is put
|
|
on top of the child's stack
|
|
for function 03h, DOS assumes that the overlay is being loaded into
|
|
memory allocated by the caller
|
|
function 01h was undocumented prior to the release of DOS 5.0
|
|
some versions (such as DR DOS 6.0) check the parameters and parameter
|
|
block and return an error if an invalid value (such as an offset of
|
|
FFFFh) is found
|
|
background programs under European MS-DOS 4.0 must use the new
|
|
executable format
|
|
this function ignores the filename extension, instead checking the
|
|
first two bytes of the file to determine whether there is a valid
|
|
.EXE header (see #01594); if not, the file is assumed to be in .COM
|
|
format. If present, the file may be in any of several formats which
|
|
are extensions of the original .EXE format (see #01593)
|
|
.COM-format executables begin running with the following register
|
|
values:
|
|
AL = 00h if first FCB has valid drive letter, FFh if not
|
|
AH = 00h if second FCB has valid drive letter, FFh if not
|
|
CS,DS,ES,SS = PSP segment
|
|
SP = offset of last word available in first 64K segment
|
|
(note: AX is always 0000h under DESQview)
|
|
old-format executables begin running with the following register
|
|
values:
|
|
AL = 00h if first FCB has valid drive letter, FFh if not
|
|
AH = 00h if second FCB has valid drive letter, FFh if not
|
|
DS,ES = PSP segment
|
|
SS:SP as defined in .EXE header
|
|
(note: AX is always 0000h under DESQview)
|
|
new executables begin running with the following register values
|
|
AX = environment segment
|
|
BX = offset of command tail in environment segment
|
|
CX = size of automatic data segment (0000h = 64K)
|
|
ES,BP = 0000h
|
|
DS = automatic data segment
|
|
SS:SP = initial stack
|
|
the command tail corresponds to an old executable's PSP:0081h and
|
|
following, except that the 0Dh is turned into a NUL (00h); new
|
|
format executables have no PSP
|
|
under the FlashTek X-32 DOS extender, only function 00h is supported
|
|
and the pointers are passed in DS:EDX and ES:EBX
|
|
DR DOS 6 always loads .EXE-format programs with no fixups and
|
|
.COM-format programs starting with 9Ch 55h (PUSHF/PUSH BP) above the
|
|
64K mark to avoid the EXEPACK bug, by extending the memory block
|
|
containing the program's environment; this code is disabled if the
|
|
name of the parent program as stored in the MCB is 'WIN'.
|
|
DR DOS 3.41 and 5.0 check for a valid filename before testing the
|
|
subfunction number, so the otherwise invalid subfunction 02h will
|
|
only return error code 01h if the given filename actually exists;
|
|
otherwise, errors 02h, 03h, or 05h are returned
|
|
BUGS: DOS 2.00 assumes that DS points at the current program's PSP
|
|
Load Overlay (subfunction 03h) loads up to 512 bytes too many if the
|
|
file contains additional data after the actual overlay
|
|
Load but Do Not Execute (subfunction 01h) is reported to corrupt the
|
|
top word of the caller's stack if the loaded module terminates with
|
|
INT 21/AH=4Ch in some versions of MS-DOS, including v5.00.
|
|
SeeAlso: AX=4B05h,AH=4Ch,AH=4Dh,AH=64h/BX=0025h,AH=8Ah,INT 2E,INT 60/DI=0604h
|
|
|
|
Format of EXEC parameter block for AL=00h,01h,04h:
|
|
Offset Size Description (Table 01590)
|
|
00h WORD segment of environment to copy for child process (copy caller's
|
|
environment if 0000h)
|
|
02h DWORD pointer to command tail to be copied into child's PSP
|
|
06h DWORD pointer to first FCB to be copied into child's PSP
|
|
0Ah DWORD pointer to second FCB to be copied into child's PSP
|
|
0Eh DWORD (AL=01h) will hold subprogram's initial SS:SP on return
|
|
12h DWORD (AL=01h) will hold entry point (CS:IP) on return
|
|
SeeAlso: #01591,#01592
|
|
|
|
Format of EXEC parameter block for AL=03h:
|
|
Offset Size Description (Table 01591)
|
|
00h WORD segment at which to load overlay
|
|
02h WORD relocation factor to apply to overlay if in .EXE format
|
|
SeeAlso: #01590,#01592
|
|
|
|
Format of EXEC parameter block for FlashTek X-32:
|
|
Offset Size Description (Table 01592)
|
|
00h PWORD 48-bit far pointer to environment string
|
|
06h PWORD 48-bit far pointer to command tail string
|
|
SeeAlso: #01590,#01591
|
|
|
|
(Table 01593)
|
|
Values for the executable types understood by various environments:
|
|
MZ old-style DOS executable (see #01594)
|
|
ZM used by some very early DOS linkers, and still supported as an
|
|
alternate to the MZ signature by MS-DOS, PC DOS, PTS-DOS, and S/DOS
|
|
NE Windows or OS/2 1.x segmented ("new") executable (see #01596)
|
|
LE Windows virtual device driver (VxD) linear executable (see #01609)
|
|
LX variant of LE used in OS/2 2.x (see #01609)
|
|
W3 Windows WIN386.EXE file; a collection of LE files
|
|
W4 Windows95 VMM32.VXD file
|
|
PE Win32 (Windows NT and Win32s) portable executable based on Unix COFF
|
|
DL HP 100LX/200LX system manager compliant executable (.EXM)
|
|
MP old PharLap .EXP (see #01619)
|
|
P2 PharLap 286 .EXP (see #01620)
|
|
P3 PharLap 386 .EXP (see #01620)
|
|
|
|
Format of .EXE file header:
|
|
Offset Size Description (Table 01594)
|
|
00h 2 BYTEs .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah)
|
|
(see also #01593)
|
|
02h WORD number of bytes in last 512-byte page of executable
|
|
04h WORD total number of 512-byte pages in executable (includes any
|
|
partial last page)
|
|
06h WORD number of relocation entries
|
|
08h WORD header size in paragraphs
|
|
0Ah WORD minimum paragraphs of memory required to allocate in addition
|
|
to executable's size
|
|
0Ch WORD maximum paragraphs to allocate in addition to executable's size
|
|
0Eh WORD initial SS relative to start of executable
|
|
10h WORD initial SP
|
|
12h WORD checksum (one's complement of sum of all words in executable)
|
|
14h DWORD initial CS:IP relative to start of executable
|
|
18h WORD offset within header of relocation table
|
|
40h or greater for new-format (NE,LE,LX,W3,PE,etc.) executable
|
|
1Ah WORD overlay number (normally 0000h = main program)
|
|
---new executable---
|
|
1Ch 4 BYTEs ???
|
|
20h WORD behavior bits
|
|
22h 26 BYTEs reserved for additional behavior info
|
|
3Ch DWORD offset of new executable (NE,LE,etc) header within disk file,
|
|
or 00000000h if plain MZ executable
|
|
---Borland TLINK---
|
|
1Ch 2 BYTEs ??? (apparently always 01h 00h)
|
|
1Eh BYTE signature FBh
|
|
1Fh BYTE TLINK version (major in high nybble, minor in low nybble)
|
|
20h 2 BYTEs ??? (v2.0 apparently always 72h 6Ah, v3.0+ seems always 6Ah 72h)
|
|
---ARJ self-extracting archive---
|
|
1Ch 4 BYTEs signature "RJSX" (older versions, new signature is "aRJsfX" in
|
|
the first 1000 bytes of the file)
|
|
---LZEXE 0.90 compressed executable---
|
|
1Ch 4 BYTEs signature "LZ09"
|
|
---LZEXE 0.91 compressed executable---
|
|
1Ch 4 BYTEs signature "LZ91"
|
|
---PKLITE compressed executable---
|
|
1Ch BYTE minor version number
|
|
1Dh BYTE bits 0-3: major version
|
|
bit 4: extra compression
|
|
bit 5: huge (multi-segment) file
|
|
1Eh 6 BYTEs signature "PKLITE" (followed by copyright message)
|
|
---LHarc 1.x self-extracting archive---
|
|
1Ch 4 BYTEs unused???
|
|
20h 3 BYTEs jump to start of extraction code
|
|
23h 2 BYTEs ???
|
|
25h 12 BYTEs signature "LHarc's SFX "
|
|
---LHA 2.x self-extracting archive---
|
|
1Ch 8 BYTEs ???
|
|
24h 10 BYTEs signature "LHa's SFX " (v2.10) or "LHA's SFX " (v2.13)
|
|
---TopSpeed C 3.0 CRUNCH compressed file---
|
|
1Ch DWORD 018A0001h
|
|
20h WORD 1565h
|
|
---PKARCK 3.5 self-extracting archive---
|
|
1Ch DWORD 00020001h
|
|
20h WORD 0700h
|
|
---BSA (Soviet archiver) self-extracting archive---
|
|
1Ch WORD 000Fh
|
|
1Eh BYTE A7h
|
|
---LARC self-extracting archive---
|
|
1Ch 4 BYTEs ???
|
|
20h 11 BYTEs "SFX by LARC "
|
|
---LH self-extracting archive---
|
|
1Ch 8 BYTEs ???
|
|
24h 8 BYTEs "LH's SFX "
|
|
---RAR self-extracting archive---
|
|
1Ch 4 BYTEs signature "RSFX"
|
|
---other linkers---
|
|
1Ch var optional information
|
|
---
|
|
N N DWORDs relocation items
|
|
each is the segment:offset from start of load image at which
|
|
to add the actual load segment to the indicated WORD
|
|
Notes: if the word at offset 02h is 4, it should be treated as 00h, since
|
|
pre-1.10 versions of the MS linker set it that way
|
|
if both minimum and maximum allocation (offset 0Ah/0Ch) are zero, the
|
|
program is loaded as high in memory as possible (DOS only checks
|
|
the maximum allocation, however)
|
|
the maximum allocation is set to FFFFh by default
|
|
additional data may be contained in the file beyond the end of the
|
|
load image described by the .EXE header; this data may be overlays,
|
|
the actual executable for newer-format executables, or debugging
|
|
information (see #01600,#01624)
|
|
relocations entries need not be in any particular order, although they
|
|
are typically stored in order from beginning to end of the load
|
|
image
|
|
SeeAlso: #01596
|
|
|
|
Format of ROM Module Header:
|
|
Offset Size Description (Table 01595)
|
|
00h 2 BYTEs ROM signature 55h, AAh
|
|
02h BYTE size of ROM in 512-byte blocks
|
|
03h 3 BYTEs POST initialization entry point (near JMP instruction)
|
|
06h ROM Program Name List [array]
|
|
Offset Size Description
|
|
00h BYTE length of ROM program's name (00h if end of name list)
|
|
01h N BYTEs program name
|
|
N+1 3 BYTEs program entry point (near JMP instruction)
|
|
|
|
Format of new executable header:
|
|
Offset Size Description (Table 01596)
|
|
00h 2 BYTEs "NE" (4Eh 45h) signature
|
|
02h 2 BYTEs linker version (major, then minor)
|
|
04h WORD offset from start of this header to entry table (see #01603)
|
|
06h WORD length of entry table in bytes
|
|
08h DWORD file load CRC (0 in Borland's TPW)
|
|
0Ch BYTE program flags (see #01597)
|
|
0Dh BYTE application flags (see #01598)
|
|
0Eh WORD auto data segment index
|
|
10h WORD initial local heap size
|
|
12h WORD initial stack size (added to data seg, 0000h if SS <> DS)
|
|
14h DWORD program entry point (CS:IP), "CS" is index into segment table
|
|
18h DWORD initial stack pointer (SS:SP), "SS" is segment index
|
|
if SS=automatic data segment and SP=0000h, the stack pointer is
|
|
set to the top of the automatic data segment, just below the
|
|
local heap
|
|
1Ch WORD segment count
|
|
1Eh WORD module reference count
|
|
20h WORD length of nonresident names table in bytes
|
|
22h WORD offset from start of this header to segment table (see #01601)
|
|
24h WORD offset from start of this header to resource table
|
|
26h WORD offset from start of this header to resident names table
|
|
28h WORD offset from start of this header to module reference table
|
|
2Ah WORD offset from start of this header to imported names table
|
|
(array of counted strings, terminated with a string of length
|
|
00h)
|
|
2Ch DWORD offset from start of file to nonresident names table
|
|
30h WORD count of moveable entry point listed in entry table
|
|
32h WORD file alignment size shift count
|
|
0 is equivalent to 9 (default 512-byte pages)
|
|
34h WORD number of resource table entries
|
|
36h BYTE target operating system
|
|
00h unknown
|
|
01h OS/2
|
|
02h Windows
|
|
03h European MS-DOS 4.x
|
|
04h Windows 386
|
|
05h BOSS (Borland Operating System Services)
|
|
81h PharLap 286|DOS-Extender, OS/2
|
|
82h PharLap 286|DOS-Extender, Windows
|
|
37h BYTE other EXE flags (see #01599)
|
|
38h WORD offset to return thunks or start of gangload area
|
|
3Ah WORD offset to segment reference thunks or length of gangload area
|
|
3Ch WORD minimum code swap area size
|
|
3Eh 2 BYTEs expected Windows version (minor version first)
|
|
Note: this header is documented in detail in the Windows 3.1 SDK Programmer's
|
|
Reference, Vol 4.
|
|
SeeAlso: #01594
|
|
|
|
Bitfields for new executable program flags:
|
|
Bit(s) Description (Table 01597)
|
|
0-1 DGROUP type
|
|
0 = none
|
|
1 = single shared
|
|
2 = multiple (unshared)
|
|
3 = (null)
|
|
2 global initialization
|
|
3 protected mode only
|
|
4 8086 instructions
|
|
5 80286 instructions
|
|
6 80386 instructions
|
|
7 80x87 instructions
|
|
|
|
Bitfields for new executable application flags:
|
|
Bit(s) Description (Table 01598)
|
|
0-2 application type
|
|
001 full screen (not aware of Windows/P.M. API)
|
|
010 compatible with Windows/P.M. API
|
|
011 uses Windows/P.M. API
|
|
3 is a Family Application (OS/2)
|
|
5 0=executable, 1=errors in image
|
|
6 non-conforming program (valid stack is not maintained)
|
|
7 DLL or driver rather than application
|
|
(SS:SP info invalid, CS:IP points at FAR init routine called with
|
|
AX=module handle which returns AX=0000h on failure, AX nonzero on
|
|
successful initialization)
|
|
|
|
Bitfields for other new .EXE flags:
|
|
Bit(s) Description (Table 01599)
|
|
0 supports long filenames
|
|
1 2.X protected mode
|
|
2 2.X proportional font
|
|
3 gangload area
|
|
|
|
Format of Codeview trailer (at end of executable):
|
|
Offset Size Description (Table 01600)
|
|
00h WORD signature 4E42h ('NB')
|
|
02h WORD Microsoft debug info version number
|
|
04h DWORD Codeview header offset
|
|
SeeAlso: #01624
|
|
|
|
Format of new executable segment table record:
|
|
Offset Size Description (Table 01601)
|
|
00h WORD offset in file (shift left by alignment shift to get byte offs)
|
|
02h WORD length of image in file (0000h = 64K)
|
|
04h WORD segment attributes (see #01602)
|
|
06h WORD number of bytes to allocate for segment (0000h = 64K)
|
|
Note: the first segment table entry is entry number 1
|
|
SeeAlso: #01604
|
|
|
|
Bitfields for segment attributes:
|
|
Bit(s) Description (Table 01602)
|
|
0 data segment rather than code segment
|
|
1 unused???
|
|
2 real mode
|
|
3 iterated
|
|
4 movable
|
|
5 sharable
|
|
6 preloaded rather than demand-loaded
|
|
7 execute-only (code) or read-only (data)
|
|
8 relocations (directly following code for this segment)
|
|
9 debug info present
|
|
10,11 80286 DPL bits
|
|
12 discardable
|
|
13-15 discard priority
|
|
|
|
Format of new executable entry table item (list):
|
|
Offset Size Description (Table 01603)
|
|
00h BYTE number of entry points (00h if end of entry table list)
|
|
01h BYTE segment number (00h if end of entry table list)
|
|
02h 3N BYTEs entry records
|
|
Offset Size Description
|
|
00h BYTE flags
|
|
bit 0: exported
|
|
bit 1: single data
|
|
bits 2-7: unused???
|
|
01h WORD offset within segment
|
|
|
|
Format of new executable relocation data (immediately follows segment image):
|
|
Offset Size Description (Table 01604)
|
|
00h WORD number of relocation items
|
|
02h 8N BYTEs relocation items
|
|
Offset Size Description
|
|
00h BYTE relocation type
|
|
00h LOBYTE
|
|
02h BASE
|
|
03h PTR
|
|
05h OFFS
|
|
0Bh PTR48
|
|
0Dh OFFS32
|
|
01h BYTE flags
|
|
bit 2: additive
|
|
02h WORD offset within segment
|
|
04h WORD target address segment
|
|
06h WORD target address offset
|
|
SeeAlso: #01601,#01605
|
|
|
|
Format of new executable resource data:
|
|
Offset Size Description (Table 01605)
|
|
00h WORD alignment shift count for resource data
|
|
02h N RECORDs resources
|
|
Format of resource record:
|
|
Offset Size Description
|
|
00h WORD type ID
|
|
0000h if end of resource records
|
|
>= 8000h if integer type
|
|
else offset from start of resource table to type string
|
|
02h WORD number of resources of this type
|
|
04h DWORD reserved for runtime use
|
|
08h N Resources (see #01606)
|
|
Note: resource type and name strings are stored immediately following the
|
|
resource table, and are not null-terminated
|
|
SeeAlso: #01606
|
|
|
|
Format of new executable resource entry:
|
|
Offset Size Description (Table 01606)
|
|
00h WORD offset in alignment units from start of file to contents of
|
|
the resource data
|
|
02h WORD length of resource image in bytes
|
|
04h WORD flags
|
|
bit 4: moveable
|
|
bit 5: shareable
|
|
bit 6: preloaded
|
|
06h WORD resource ID
|
|
>= 8000h if integer resource
|
|
else offset from start of resource table to resource string
|
|
08h DWORD reserved for runtime use
|
|
Notes: resource type and name strings are stored immediately following the
|
|
resource table, and are not null-terminated
|
|
strings are counted strings, with a string of length 0 indicating the
|
|
end of the resource table
|
|
SeeAlso: #01605,#01607
|
|
|
|
Format of new executable module reference table [one bundle of entries]:
|
|
Offset Size Description (Table 01607)
|
|
00h BYTE number of records in this bundle (00h if end of table)
|
|
01h BYTE segment indicator
|
|
00h unused
|
|
FFh movable segment, segment number is in entry
|
|
else segment number of fixed segment
|
|
02h N RECORDs
|
|
Format of segment record
|
|
Offset Size Description
|
|
00h BYTE flags
|
|
bit 0: entry is exported
|
|
bit 1: entry uses global (shared) data
|
|
bits 7-3: number of parameter words
|
|
---fixed segment---
|
|
01h WORD offset
|
|
---moveable segment---
|
|
01h 2 BYTEs INT 3F instruction (CDh 3Fh)
|
|
03h BYTE segment number
|
|
05h WORD offset
|
|
Note: table entries are numbered starting from 1
|
|
SeeAlso: #01608
|
|
|
|
Format of new executable resident/nonresident name table entry:
|
|
Offset Size Description (Table 01608)
|
|
00h BYTE length of string (00h if end of table)
|
|
01h N BYTEs ASCII text of string
|
|
N+1 WORD ordinal number (index into entry table)
|
|
Notes: the first string in the resident name table is the module name; the
|
|
first entry in the nonresident name table is the module description
|
|
the strings are case-sensitive; if the executable was linked with
|
|
/IGNORECASE, all strings are in uppercase
|
|
SeeAlso: #01607
|
|
|
|
Format of Linear Executable (enhanced mode executable) header:
|
|
Offset Size Description (Table 01609)
|
|
00h 2 BYTEs "LE" (4Ch 45h) signature (Windows)
|
|
"LX" (4Ch 58h) signature (OS/2)
|
|
02h BYTE byte order (00h = little-endian, nonzero = big-endian)
|
|
03h BYTE word order (00h = little-endian, nonzero = big-endian)
|
|
04h DWORD executable format level
|
|
08h WORD CPU type (see also INT 15/AH=C9h)
|
|
01h Intel 80286 or upwardly compatible
|
|
02h Intel 80386 or upwardly compatible
|
|
03h Intel 80486 or upwardly compatible
|
|
04h Intel Pentium (80586) or upwardly compatible
|
|
20h Intel i860 (N10) or compatible
|
|
21h Intel "N11" or compatible
|
|
40h MIPS Mark I (R2000, R3000) or compatible
|
|
41h MIPS Mark II (R6000) or compatible
|
|
42h MIPS Mark III (R4000) or compatible
|
|
0Ah WORD target operating system
|
|
01h OS/2
|
|
02h Windows
|
|
03h European DOS 4.0
|
|
04h Windows 386
|
|
0Ch DWORD module version
|
|
10h DWORD module type (see #01610)
|
|
14h DWORD number of memory pages
|
|
18h Initial CS:EIP
|
|
DWORD object number
|
|
DWORD offset
|
|
20h Initial SS:ESP
|
|
DWORD object number
|
|
DWORD offset
|
|
28h DWORD memory page size
|
|
2Ch DWORD (Windows LE) bytes on last page
|
|
(OS/2 LX) page offset shift count
|
|
30h DWORD fixup section size
|
|
34h DWORD fixup section checksum
|
|
38h DWORD loader section size
|
|
3Ch DWORD loader section checksum
|
|
40h DWORD offset of object table (see #01611)
|
|
44h DWORD object table entries
|
|
48h DWORD object page map table offset (see #01613)
|
|
4Ch DWORD object iterate data map offset
|
|
50h DWORD resource table offset
|
|
54h DWORD resource table entries
|
|
58h DWORD resident names table offset (see #01614)
|
|
5Ch DWORD entry table offset (see #01615,#01616)
|
|
60h DWORD module directives table offset
|
|
64h DWORD Module Directives entries
|
|
68h DWORD Fixup page table offset
|
|
6Ch DWORD Fixup record table offset (see #01618)
|
|
70h DWORD imported modules name table offset
|
|
74h DWORD imported modules count
|
|
78h DWORD imported procedures name table offset
|
|
7Ch DWORD per-page checksum table offset
|
|
80h DWORD data pages offset
|
|
84h DWORD preload page count
|
|
88h DWORD non-resident names table offset
|
|
8Ch DWORD non-resident names table length
|
|
90h DWORD non-resident names checksum
|
|
94h DWORD automatic data object
|
|
98h DWORD debug information offset
|
|
9Ch DWORD debug information length
|
|
A0h DWORD preload instance pages number
|
|
A4h DWORD demand instance pages number
|
|
A8h DWORD extra heap allocation
|
|
ACh 12 BYTEs reserved
|
|
B8h DWORD offset of VERSIONINFO resource (MS-Windows VxD only)
|
|
BCh DWORD pointer to ??? (dynamically-loadable VxDs only???)
|
|
C0h WORD device ID (MS-Windows VxD only)
|
|
C2h WORD DDK version (MS-Windows VxD only)
|
|
Note: used by EMM386.EXE, QEMM, and Windows 3.0 Enhanced Mode drivers
|
|
|
|
Bitfields for Linear Executable module type:
|
|
Bit(s) Description (Table 01610)
|
|
2 initialization (only for DLLs) 0 = global, 1 = per-process
|
|
4 no internal fixups in executable image
|
|
5 no external fixups in executable image
|
|
8-10 API compatibility
|
|
0 = unknown
|
|
1 = incompatible with PM windowing \
|
|
2 = compatible with PM windowing > (only for
|
|
3 = uses PM windowing API / programs)
|
|
13 module not loadable (only for programs)
|
|
15-17 module type
|
|
000 program
|
|
001 library (DLL)
|
|
011 protected memory library module
|
|
100 physical device driver
|
|
110 virtual device driver
|
|
30 per-process library termination
|
|
(requires valid CS:EIP, can't be set for .EXE)
|
|
|
|
Format of object table entry:
|
|
Offset Size Description (Table 01611)
|
|
00h DWORD virtual size in bytes
|
|
04h DWORD relocation base address
|
|
08h DWORD object flags (see #01612)
|
|
0Ch DWORD page map index
|
|
10h DWORD page map entries (see #01613)
|
|
14h 4 BYTEs reserved??? (apparently always zeros)
|
|
|
|
Bitfields for object flags:
|
|
Bit(s) Description (Table 01612)
|
|
0 readable
|
|
1 writable
|
|
2 executable
|
|
3 resource
|
|
4 discardable
|
|
5 shared
|
|
6 preloaded
|
|
7 invalid
|
|
8-9 type
|
|
00 normal
|
|
01 zero-filled
|
|
10 resident
|
|
11 resident and contiguous
|
|
10 resident and long-lockable
|
|
11 reserved
|
|
12 16:16 alias required
|
|
13 "BIG" (Huge: 32-bit)
|
|
14 conforming
|
|
15 "OBJECT_I/O_PRIVILEGE_LEVEL"
|
|
16-31 reserved
|
|
|
|
Format of object page map table entry:
|
|
Offset Size Description (Table 01613)
|
|
00h BYTE ??? (usually 00h)
|
|
01h WORD (big-endian) index to fixup table
|
|
0000h if no relocation info
|
|
03h BYTE type (00h hard copy in file, 03h some relocation needed)
|
|
|
|
Format of resident names table entry:
|
|
Offset Size Description (Table 01614)
|
|
00h BYTE length of name
|
|
01h N BYTEs name
|
|
N+1 3 BYTEs ???
|
|
|
|
Format of LE linear executable entry table:
|
|
Offset Size Description (Table 01615)
|
|
00h BYTE number of entries in table
|
|
01h 10 BYTEs per entry
|
|
Offset Size Description
|
|
00h BYTE bit flags
|
|
bit 0: non-empty bundle
|
|
bit 1: 32-bit entry
|
|
01h WORD object number
|
|
03h BYTE entry type flags
|
|
bit 0: exported
|
|
bit 1: uses single data rather than instance
|
|
bit 2: reserved
|
|
bits 3-7: number of stack parameters
|
|
04h DWORD offset of entry point
|
|
08h 2 BYTEs ???
|
|
Note: empty bundles (bit flags at 00h = 00h) are used to skip unused indices,
|
|
and do not contain the remaining nine bytes
|
|
|
|
Format of LX linear executable entry table [array]:
|
|
Offset Size Description (Table 01616)
|
|
00h BYTE number of bundles following (00h = end of entry table)
|
|
01h BYTE bundle type
|
|
00h empty
|
|
01h 16-bit entry
|
|
02h 286 callgate entry
|
|
03h 32-bit entry
|
|
04h forwarder entry
|
|
bit 7 set if additional parameter typing information is present
|
|
---bundle type 00h---
|
|
no additional fields
|
|
---bundle type 01h---
|
|
02h WORD object number
|
|
04h BYTE entry flags
|
|
bit 0: exported
|
|
bits 7-3: number of stack parameters
|
|
05h WORD offset of entry point in object (shifted by page size shift)
|
|
---bundle type 02h---
|
|
02h WORD object number
|
|
04h BYTE entry flags
|
|
bit 0: exported
|
|
bits 7-3: number of stack parameters
|
|
05h WORD offset of entry point in object
|
|
07h WORD reserved for callgate selector (used by loader)
|
|
---bundle type 03h---
|
|
02h WORD object number
|
|
04h BYTE entry flags
|
|
bit 0: exported
|
|
bits 7-3: number of stack parameters
|
|
05h DWORD offset of entry point in object
|
|
---bundle type 04h---
|
|
02h WORD reserved
|
|
04h BYTE forwarder flags
|
|
bit 0: import by ordinal
|
|
bits 7-1 reserved
|
|
05h WORD module ordinal
|
|
(forwarder's index into Import Module Name table)
|
|
07h DWORD procedure name offset or import ordinal number
|
|
Note: all fields after the first two bytes are repeated N times
|
|
|
|
Bitfields for linear executable fixup type:
|
|
Bit(s) Description (Table 01617)
|
|
7 ordinal is BYTE rather than WORD
|
|
6 16-rather than 8-object number/module ordinal
|
|
5 addition with DWORD rather than WORD
|
|
4 relocation info has size with new two bytes at end
|
|
3 reserved (0)
|
|
2 set if add to destination, clear to replace destination
|
|
1-0 type
|
|
00 internal fixup
|
|
01 external fixup, imported by ordinal
|
|
10 external fixup, imported by name
|
|
11 internal fixup via entry table
|
|
|
|
Format of linear executable fixup record:
|
|
Offset Size Description (Table 01618)
|
|
00h BYTE type
|
|
bits 7-4: modifier (0001 single, 0011 multiple)
|
|
bits 3-0: type
|
|
0000 byte offset
|
|
0010 word segment
|
|
0011 16-bit far pointer (DWORD)
|
|
0101 16-bit offset
|
|
0110 32-bit far pointer (PWORD)
|
|
0111 32-bit offset
|
|
1000 near call or jump, WORD/DWORD based on seg attrib
|
|
01h BYTE linear executable fixup type (see #01617)
|
|
---if single type---
|
|
02h WORD offset within page
|
|
04h relocation information
|
|
---internal fixup---
|
|
BYTE object number
|
|
---external,ordinal---
|
|
BYTE one-based module number in Import Module table
|
|
BYTE/WORD ordinal number
|
|
WORD/DWORD value to add (only present if modifier bit 4 set)
|
|
---external,name---
|
|
BYTE one-based module number in Import Module table
|
|
WORD offset in Import Procedure names
|
|
WORD/DWORD value to add (only present if modifier bit 4 set)
|
|
---if multiple type---
|
|
02h BYTE number of items
|
|
03h var relocation info as for "single" type (above)
|
|
N WORDs offsets of items to relocate
|
|
|
|
Format of old Phar Lap .EXP file header:
|
|
Offset Size Description (Table 01619)
|
|
00h 2 BYTEs "MP" (4Dh 50h) signature
|
|
02h WORD remainder of image size / page size (page size = 512h)
|
|
04h WORD size of image in pages
|
|
06h WORD number of relocation items
|
|
08h WORD header size in paragraphs
|
|
0Ah WORD minimum number of extra 4K pages to be allocated at the end
|
|
of program, when it is loaded
|
|
0Ch WORD maximum number of extra 4K pages to be allocated at the end
|
|
of program, when it is loaded
|
|
0Eh DWORD initial ESP
|
|
12h WORD word checksum of file
|
|
14h DWORD initial EIP
|
|
18h WORD offset of first relocation item
|
|
1Ah WORD overlay number
|
|
1Ch WORD ??? (wants to be 1)
|
|
SeeAlso: #01620
|
|
|
|
Format of new Phar Lap .EXP file header:
|
|
Offset Size Description (Table 01620)
|
|
00h 2 BYTEs signature ("P2" for 286 .EXP executable, "P3" for 386 .EXP)
|
|
02h WORD level (01h flat-model file, 02h multisegmented file)
|
|
04h WORD header size
|
|
06h DWORD file size in bytes
|
|
0Ah WORD checksum
|
|
0Ch DWORD offset of run-time parameters within file (see #01622)
|
|
10h DWORD size of run-time parameters in bytes
|
|
14h DWORD offset of relocation table within file
|
|
18h DWORD size of relocation table in bytes
|
|
1Ch DWORD offset of segment information table within file (see #01621)
|
|
20h DWORD size of segment information table in bytes
|
|
24h WORD size of segment information table entry in bytes
|
|
26h DWORD offset of load image within file
|
|
2Ah DWORD size of load image on disk
|
|
2Eh DWORD offset of symbol table within file or 00000000h
|
|
32h DWORD size of symbol table in bytes
|
|
36h DWORD offset of GDT within load image
|
|
3Ah DWORD size of GDT in bytes
|
|
3Eh DWORD offset of LDT within load image
|
|
42h DWORD size of LDT in bytes
|
|
46h DWORD offset of IDT within load image
|
|
4Ah DWORD size of IDT in bytes
|
|
4Eh DWORD offset of TSS within load image
|
|
52h DWORD size of TSS in bytes
|
|
56h DWORD minimum number of extra bytes to be allocated at end of program
|
|
(level 1 executables only)
|
|
5Ah DWORD maximum number of extra bytes to be allocated at end of program
|
|
(level 1 executables only)
|
|
5Eh DWORD base load offset (level 1 executables only)
|
|
62h DWORD initial ESP
|
|
66h WORD initial SS
|
|
68h DWORD initial EIP
|
|
6Ch WORD initial CS
|
|
6Eh WORD initial LDT
|
|
70h WORD initial TSS
|
|
72h WORD flags
|
|
bit 0: load image is packed
|
|
bit 1: 32-bit checksum is present
|
|
bits 4-2: type of relocation table
|
|
74h DWORD memory requirements for load image
|
|
78h DWORD 32-bit checksum (optional)
|
|
7Ch DWORD size of stack segment in bytes
|
|
80h 256 BYTEs reserved (0)
|
|
SeeAlso: #01619,#01623
|
|
|
|
Format of Phar Lap segment information table entry:
|
|
Offset Size Description (Table 01621)
|
|
00h WORD selector number
|
|
02h WORD flags
|
|
04h DWORD base offset of selector
|
|
08h DWORD minimum number of extra bytes to be allocated to the segment
|
|
|
|
Format of 386|DOS-Extender run-time parameters:
|
|
Offset Size Description (Table 01622)
|
|
00h 2 BYTEs signature "DX" (44h 58h)
|
|
02h WORD minimum number of real-mode params to leave free at run time
|
|
04h WORD maximum number of real-mode params to leave free at run time
|
|
06h WORD minimum interrupt buffer size in KB
|
|
08h WORD maximum interrupt buffer size in KB
|
|
0Ah WORD number of interrupt stacks
|
|
0Ch WORD size in KB of each interrupt stack
|
|
0Eh DWORD offset of byte past end of real-mode code and data
|
|
12h WORD size in KB of call buffers
|
|
14h WORD flags
|
|
bit 0: file is virtual memory manager
|
|
bit 1: file is a debugger
|
|
16h WORD unprivileged flag (if nonzero, executes at ring 1, 2, or 3)
|
|
18h 104 BYTEs reserved (0)
|
|
|
|
Format of Phar Lap repeat block header:
|
|
Offset Size Description (Table 01623)
|
|
00h WORD byte count
|
|
02h BYTE repeat string length
|
|
|
|
Format of Borland debugging information header (following load image):
|
|
Offset Size Description (Table 01624)
|
|
00h WORD signature 52FBh
|
|
02h WORD version ID
|
|
04h DWORD size of name pool in bytes
|
|
08h WORD number of names in name pool
|
|
0Ah WORD number of type entries
|
|
0Ch WORD number of structure members
|
|
0Eh WORD number of symbols
|
|
10h WORD number of global symbols
|
|
12h WORD number of modules
|
|
14h WORD number of locals (optional)
|
|
16h WORD number of scopes in table
|
|
18h WORD number of line-number entries
|
|
1Ah WORD number of include files
|
|
1Ch WORD number of segment records
|
|
1Eh WORD number of segment/file correlations
|
|
20h DWORD size of load image after removing uninitialized data and debug
|
|
information
|
|
24h DWORD debugger hook; pointer into debugged program whose meaning
|
|
depends on program flags
|
|
28h BYTE program flags
|
|
bit 0: case-sensitive link
|
|
bit 1: pascal overlay program
|
|
29h WORD no longer used
|
|
2Bh WORD size of data pool in bytes
|
|
2Dh BYTE padding
|
|
2Eh WORD size of following header extension (currently 00h, 10h, or 20h)
|
|
30h WORD number of classes
|
|
32h WORD number of parents
|
|
34h WORD number of global classes (currently unused)
|
|
36h WORD number of overloads (currently unused)
|
|
38h WORD number of scope classes
|
|
3Ah WORD number of module classes
|
|
3Ch WORD number of coverage offsets
|
|
3Eh DWORD offset relative to symbol base of name pool
|
|
42h WORD number of browser information records
|
|
44h WORD number of optimized symbol records
|
|
46h WORD debugging flags
|
|
48h 8 BYTEs padding
|
|
Note: additional information on the Borland debugging info may be found in
|
|
Borland's Open Architecture Handbook
|
|
SeeAlso: #01600
|
|
--------U-214B-------------------------------
|
|
INT 21 - ELRES v1.0 only - INSTALLATION CHECK
|
|
AH = 4Bh
|
|
DS:DX = 0000h:0000h
|
|
Return: ES:BX -> ELRES history structure (see #01381 at AH=2Bh/CX=454Ch)
|
|
DX = DABEh (signature, DAve BEnnett)
|
|
Program: ELRES is an MS-DOS return code (errorlevel) recorder by David H.
|
|
Bennett
|
|
SeeAlso: AH=2Bh/CX=454Ch
|
|
--------v-214B04-----------------------------
|
|
INT 21 - VIRUS - "MG", "699"/"Thirteen Minutes" - INSTALLATION CHECK
|
|
AX = 4B04h
|
|
Return: CF clear if "MG" resident
|
|
AX = 044Bh if "699"/"Thirteen Minutes" resident
|
|
SeeAlso: AX=4243h,AH=4Ah/BX=FFFFh,AX=4B21h
|
|
--------D-214B05-----------------------------
|
|
INT 21 - DOS 5+ - SET EXECUTION STATE
|
|
AX = 4B05h
|
|
DS:DX -> execution state structure (see #01625)
|
|
Return: CF clear if successful
|
|
AX = 0000h
|
|
CF set on error
|
|
AX = error code (see #01680 at AH=59h/BX=0000h)
|
|
Note: used by programs which intercept AX=4B00h to prepare new programs for
|
|
execution (including setting the DOS version number). No DOS, BIOS
|
|
or other software interrupt may be called after return from this call
|
|
before commencement of the child process. If DOS is running in the
|
|
HMA, A20 is turned off on return from this call.
|
|
SeeAlso: AH=4Bh
|
|
|
|
Format of execution state structure:
|
|
Offset Size Description (Table 01625)
|
|
00h WORD reserved (00h)
|
|
02h WORD type flags
|
|
bit 0: program is an .EXE
|
|
bit 1: program is an overlay
|
|
04h DWORD pointer to ASCIZ name of program file
|
|
08h WORD PSP segment of new program
|
|
0Ah DWORD starting CS:IP of new program
|
|
0Eh DWORD program size including PSP
|
|
----------214B18DX0010-----------------------
|
|
INT 21 U - FBOOT v2.13 - PERFORM FAST BOOTSTRAP
|
|
AX = 4B18h
|
|
DX = 0010h
|
|
BX = disk selector
|
|
0000h boot from floppy
|
|
0080h boot from hard disk
|
|
Return: never if FastBoot installed
|
|
Program: CyberWare FastBoot allows fast warm boots by skipping CMOS
|
|
checking, ROM scan, RAM & peripheral components test
|
|
InstallCheck: search for a character device driver called "FBOOT$$$"
|
|
--------v-214B20-----------------------------
|
|
INT 21 - VIRUS - "Holocaust"/"Telefonica" - ???
|
|
AX = 4B20h
|
|
SeeAlso: AX=4B04h,AX=4B21h
|
|
--------v-214B21-----------------------------
|
|
INT 21 C - VIRUS - "Holocaust"/"Telefonica" - ???
|
|
AX = 4B21h
|
|
Note: called at completion of virus installation
|
|
SeeAlso: AX=4B04h,AX=4B20h,AX=4B25h
|
|
--------v-214B25-----------------------------
|
|
INT 21 - VIRUS - "1063"/"Mono" - INSTALLATION CHECK
|
|
AX = 4B25h
|
|
Return: DI = 1234h if resident
|
|
SeeAlso: AX=4B21h,AX=4B40h
|
|
--------v-214B40-----------------------------
|
|
INT 21 - VIRUS - "Plastique"/"AntiCad" - INSTALLATION CHECK
|
|
AX = 4B40h
|
|
Return: AX = 5678h if resident
|
|
SeeAlso: AX=4B25h,AX=4B41h,AX=4B4Ah
|
|
--------v-214B41-----------------------------
|
|
INT 21 - VIRUS - "Plastique"/"AntiCad" - ???
|
|
AX = 4B41h
|
|
???
|
|
Return: ???
|
|
SeeAlso: AX=4B40h
|
|
--------v-214B4A-----------------------------
|
|
INT 21 - VIRUS - "Jabberwocky" - INSTALLATION CHECK
|
|
AX = 4B4Ah
|
|
Return: AL = 57h if resident
|
|
SeeAlso: AX=4B40h,AX=4B4Bh
|
|
--------v-214B4B-----------------------------
|
|
INT 21 - VIRUS - "Horse-2" - INSTALLATION CHECK
|
|
AX = 4B4Bh
|
|
Return: CF clear if resident
|
|
SeeAlso: AX=4B4Ah,AX=4B4Dh
|
|
--------v-214B4D-----------------------------
|
|
INT 21 - VIRUS - "Murphy-2", "Patricia"/"Smack" - INSTALLATION CHECK
|
|
AX = 4B4Dh
|
|
Return: CF clear if resident
|
|
SeeAlso: AX=4B4Ah,AX=4B50h
|
|
--------v-214B50-----------------------------
|
|
INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - INSTALLATION CHECK
|
|
AX = 4B50h
|
|
Return: AX = 1234h if resident
|
|
SeeAlso: AX=4B4Dh,AX=4B53h,AX=4B60h
|
|
--------v-214B53-----------------------------
|
|
INT 21 - VIRUS - "Horse" - INSTALLATION CHECK
|
|
AX = 4B53h
|
|
Return: CF clear if resident
|
|
SeeAlso: AX=4B50h,AX=4B53h/BX=2121h,AX=4B55h
|
|
--------v-214B53BX2121-----------------------
|
|
INT 21 - VIRUS - "One Half" - INSTALLATION CHECK
|
|
AX = 4B53h
|
|
BX = 2121h
|
|
CX = 1212h
|
|
DX = 0236h
|
|
Return: AX = 454Bh if installed
|
|
SeeAlso: AX=4B50h,AX=4B53h,AX=4B55h
|
|
--------v-214B55-----------------------------
|
|
INT 21 - VIRUS - "Sparse" - INSTALLATION CHECK
|
|
AX = 4B55h
|
|
Return: AX = 1231h if resident
|
|
SeeAlso: AX=4B53h,AX=4B59h
|
|
--------v-214B59-----------------------------
|
|
INT 21 - VIRUS - "Murphy-1", "Murphy-4" - INSTALLATION CHECK
|
|
AX = 4B59h
|
|
Return: CF clear if resident
|
|
SeeAlso: AX=4B50h,AX=4B5Eh
|
|
--------v-214B5E-----------------------------
|
|
INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
|
|
AX = 4B5Eh
|
|
Return: CF clear if resident
|
|
SeeAlso: AX=4B59h,AX=4B87h
|
|
--------v-214B60-----------------------------
|
|
INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - ???
|
|
AX = 4B60h
|
|
???
|
|
Return: ???
|
|
SeeAlso: AX=4B50h
|
|
--------O-214B80-----------------------------
|
|
INT 21 - DR DOS v3.31+ - RUN ALREADY-LOADED KERNEL FILE
|
|
AX = 4B80h
|
|
DS:DX -> ASCIZ name of program to EXEC
|
|
ES = segment of PSP for kernel file
|
|
Return: only if call failed
|
|
Note: DR DOS uses this call after an AX=4B01h to load the kernel file into
|
|
memory and patch the program's parent-PSP field to point at itself
|
|
SeeAlso: AH=4Bh"EXEC"
|
|
--------v-214B87-----------------------------
|
|
INT 21 - VIRUS - "Shirley" - INSTALLATION CHECK
|
|
AX = 4B87h
|
|
Return: AX = 6663h if resident
|
|
SeeAlso: AX=4B5Eh,AX=4B95h
|
|
--------v-214B95-----------------------------
|
|
INT 21 - VIRUS - "Zherkov-1882" - INSTALLATION CHECK
|
|
AX = 4B95h
|
|
Return: AX = 1973h if resident
|
|
SeeAlso: AX=4B87h,AX=4BA7h
|
|
--------v-214BA7-----------------------------
|
|
INT 21 - VIRUS - "1876"/"Dash-em" - INSTALLATION CHECK
|
|
AX = 4BA7h
|
|
Return: AX = B459h if resident
|
|
SeeAlso: AX=4B95h,AX=4BAAh
|
|
--------v-214BAA-----------------------------
|
|
INT 21 - VIRUS - "Nomenklatura" - INSTALLATION CHECK
|
|
AX = 4BAAh
|
|
Return: CF clear if resident
|
|
SeeAlso: AX=4BA7h,AX=4BAFh
|
|
--------v-214BAF-----------------------------
|
|
INT 21 - VIRUS - "948"/"Screenplus1", "Magnitogorsk" - INSTALLATION CHECK
|
|
AX = 4BAFh
|
|
Return: AL = AFh if "Magnitogorsk" resident
|
|
AL = FAh if "948"/"Screenplus1" resident
|
|
SeeAlso: AX=4BAAh,AX=4BB1h"VIRUS"
|
|
--------v-214BB1-----------------------------
|
|
INT 21 - VIRUS - "UZZY" -INSTALLATION CHECK
|
|
AX = 4BB1h
|
|
Return: CL = 04h if resident
|
|
SeeAlso: AX=4BAFh"VIRUS",AX=4BDDh"VIRUS"
|
|
--------v-214BDD-----------------------------
|
|
INT 21 - VIRUS - "Lozinsky"/"Zherkov" - INSTALLATION CHECK
|
|
AX = 4BDDh
|
|
Return: AX = 1234h
|
|
SeeAlso: AX=4BB1h"VIRUS",AX=4BFEh
|
|
--------v-214BEE-----------------------------
|
|
INT 21 - F-DRIVER.SYS v1.14+ - GRAB INT 21
|
|
AX = 4BEEh
|
|
Return: AX = status
|
|
1234h grab was successful
|
|
2345h failed (INT 21 grabbed previously)
|
|
Program: F-DRIVER.SYS is part of the shareware F-PROT virus/trojan protection
|
|
package by Fridrik Skulason
|
|
Note: when called the first time, this function moves the INT 21 monitoring
|
|
code from its original location in the INT 21 chain to be the first
|
|
thing called by INT 21. This is the mechanism used by F-NET.
|
|
SeeAlso: INT 2F/AX=4653h/CX=0002h,INT 2F/AX=4653h/CX=0007h
|
|
--------k-214BF0-----------------------------
|
|
INT 21 - DIET v1.10+ (Overlay Mode) - INSTALLATION CHECK
|
|
AX = 4BF0h
|
|
Return: CF clear if installed
|
|
AX = 899Dh
|
|
Program: DIET is an executable-compression program by Teddy Matsumoto
|
|
SeeAlso: AX=37D0h,AX=4BF1h
|
|
--------k-214BF1-----------------------------
|
|
INT 21 - DIET v1.10+ (Overlay Mode) - EXPAND PROGRAM???
|
|
AX = 4BF1h
|
|
Return: ???
|
|
SeeAlso: AX=37D0h,AX=4BF0h
|
|
--------v-214BF1-----------------------------
|
|
INT 21 - VIRUS - "Jerusalem 2" - INSTALLATION CHECK
|
|
AX = 4BF1h
|
|
Return: AX = 1FB4h if resident
|
|
SeeAlso: AH=3Fh/BX=FEB0h"VIRUS",AX=4BDDh"VIRUS",AX=4BFEh"VIRUS"
|
|
--------v-214BFE-----------------------------
|
|
INT 21 - VIRUS - "Hitchcock", "Dark Avenger-1028", "1193" - INSTALLATION CHECK
|
|
AX = 4BFEh
|
|
Return: AX = 1234h if "Hitchcock" or "Storm" resident
|
|
AX = ABCDh if "1193"/"Copyright" resident
|
|
DI = 55BBh if "Dark Avenger-1028" resident
|
|
SeeAlso: AX=4BDDh,AX=4BF1h"VIRUS",AX=4BFFh"Justice"
|
|
--------v-214BFF-----------------------------
|
|
INT 21 - VIRUS - "USSR-707", "Justice", "Europe 92" - INSTALLATION CHECK
|
|
AX = 4BFFh
|
|
Return: BL = FFh if "USSR-707" resident
|
|
DI = 55AAh if "Justice" resident
|
|
AX = 1234h if "Hitchcock.1238" resident
|
|
CF clear if "Europe 92" resident
|
|
SeeAlso: AX=4BFEh,AX=4BFFh"Cascade",AX=5252h
|
|
--------v-214BFFSI0000-----------------------
|
|
INT 21 - VIRUS - "Cascade" - INSTALLATION CHECK
|
|
AX = 4BFFh
|
|
SI = 0000h
|
|
DI = 0000h
|
|
Return: DI = 55AAh if installed
|
|
SeeAlso: AX=4BFFh"Justice",AX=5252h
|
|
--------D-214C-------------------------------
|
|
INT 21 - DOS 2+ - "EXIT" - TERMINATE WITH RETURN CODE
|
|
AH = 4Ch
|
|
AL = return code
|
|
Return: never returns
|
|
Notes: unless the process is its own parent
|
|
(see #01378 [offset 16h] at AH=26h), all open files are closed and
|
|
all memory belonging to the process is freed
|
|
all network file locks should be removed before calling this function
|
|
SeeAlso: AH=00h,AH=26h,AH=4Bh,AH=4Dh,INT 15/AH=12h/BH=02h,INT 20,INT 22
|
|
SeeAlso: INT 60/DI=0601h
|
|
--------m-214C57-----------------------------
|
|
INT 21 - Headroom - ???
|
|
AX = 4C57h
|
|
DS:DX -> target address
|
|
Note: jumps to target address instead of terminating program
|
|
SeeAlso: AX=5758h
|
|
--------D-214D-------------------------------
|
|
INT 21 - DOS 2+ - GET RETURN CODE (ERRORLEVEL)
|
|
AH = 4Dh
|
|
Return: AH = termination type
|
|
00h normal (INT 20,INT 21/AH=00h, or INT 21/AH=4Ch)
|
|
01h control-C abort
|
|
02h critical error abort
|
|
03h terminate and stay resident (INT 21/AH=31h or INT 27)
|
|
AL = return code
|
|
CF clear
|
|
Notes: the word in which DOS stores the return code is cleared after being
|
|
read by this function, so the return code can only be retrieved once
|
|
COMMAND.COM stores the return code of the last external command it
|
|
executed as ERRORLEVEL
|
|
this call should not be used if the child was started with AX=4B04h;
|
|
use AH=8Ah instead
|
|
the following sequence will close a Virtual DOS Machine under OS/2 2.0
|
|
through OS/2 Merlin (but may change in the future):
|
|
MOV AH,4Dh
|
|
INT 21h
|
|
HLT
|
|
DB 02h,0FDh
|
|
This sequence is the only way to close a specific VDM which was
|
|
booted from floppy or a disk image.
|
|
SeeAlso: AH=4Bh,AH=4Ch,AH=8Ah
|
|
--------D-214E-------------------------------
|
|
INT 21 - DOS 2+ - "FINDFIRST" - FIND FIRST MATCHING FILE
|
|
AH = 4Eh
|
|
AL = special flag for use by APPEND (refer to note below)
|
|
CX = file attribute mask (see #01420 at AX=4301h) (bits 0 and 5 ignored)
|
|
0088h (Novell DOS 7) find first deleted file
|
|
DS:DX -> ASCIZ file specification (may include path and wildcards)
|
|
Return: CF clear if successful
|
|
Disk Transfer Area filled with FindFirst data block (see #01626)
|
|
CF set on error
|
|
AX = error code (02h,03h,12h) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: for search attributes other than 08h, all files with at MOST the
|
|
specified combination of hidden, system, and directory attributes
|
|
will be returned. Under DOS 2.x, searching for attribute 08h
|
|
(volume label) will also return normal files, while under DOS 3.0+
|
|
only the volume label (if any) will be returned.
|
|
this call also returns successfully if given the name of a character
|
|
device without wildcards. DOS 2.x returns attribute 00h, size 0,
|
|
and the current date and time. DOS 3.0+ returns attribute 40h and
|
|
the current date and time.
|
|
immediately after an INT 2F/AX=B711h (APPEND return found name), the
|
|
name at DS:DX will be overwritten; if AL=00h on entry, the actual
|
|
found pathname will be stored, otherwise, the actual found path
|
|
will be prepended to the original filespec without a path.
|
|
under LANtastic, this call may be used to obtain a list of a server's
|
|
shared resources by searching for "\\SERVER\*.*"; a list of printer
|
|
resources may be obtained by searching for "\\SERVER\@*.*"
|
|
under the FlashTek X-32 DOS extender, the filespec pointer is in DS:EDX
|
|
BUGS: under DOS 3.x and 4.x, the second and subsequent calls to this function
|
|
with a character device name (no wildcards) and search attributes
|
|
which include the volume-label bit (08h) will fail unless there is
|
|
an intervening DOS call which implicitly or explicity performs a
|
|
directory search without the volume-label bit. Such implicit
|
|
searches are performed by CREATE (AH=3Ch), OPEN (AH=3Dh), UNLINK
|
|
(AH=41h), and RENAME (AH=56h)
|
|
DR DOS 3.41 and 5.0 return the Directory attribute for the volume label
|
|
SeeAlso: AH=11h,AH=4Fh,AX=4301h,AX=714Eh,AX=71A1h,AX=F257h/SF=02h
|
|
SeeAlso: INT 2F/AX=111Bh,INT 2F/AX=B711h
|
|
|
|
Format of FindFirst data block:
|
|
Offset Size Description (Table 01626)
|
|
---PC-DOS 3.10, PC-DOS 4.01, MS-DOS 3.2/3.3/5.0---
|
|
00h BYTE drive letter (bits 0-6), remote if bit 7 set
|
|
01h 11 BYTEs search template
|
|
0Ch BYTE search attributes
|
|
---DOS 2.x (and some DOS 3.x???)---
|
|
00h BYTE search attributes
|
|
01h BYTE drive letter
|
|
02h 11 BYTEs search template
|
|
---WILDUNIX.COM---
|
|
00h 12 BYTEs 15-character wildcard search pattern and drive letter (packed)
|
|
0Ch BYTE search attributes
|
|
---DOS 2.x and most 3.x---
|
|
0Dh WORD entry count within directory
|
|
0Fh DWORD pointer to DTA???
|
|
13h WORD cluster number of start of parent directory
|
|
---PC-DOS 4.01, MS-DOS 3.2/3.3/5.0---
|
|
0Dh WORD entry count within directory
|
|
0Fh WORD cluster number of start of parent directory
|
|
11h 4 BYTEs reserved
|
|
---OS/2 MVDM---
|
|
00h WORD "OS2_BMP_handle"
|
|
02h WORD "OS2_LastEnt"
|
|
04h DWORD "OS2_Checksum"
|
|
08h BYTE "OS2_usi_flag"
|
|
09h DWORD used by DOS emulator for second pass for volume-label searches
|
|
0Dh WORD (ret) "DOS_LastEnt" entry count within directory
|
|
0Fh BYTE OS/2 Processed-FindFirst flag
|
|
00h FindFirst processed by DOS
|
|
42h FindFirst processed by OS/2
|
|
10h 5 BYTEs reserved for future use
|
|
---all versions, documented fields---
|
|
15h BYTE attribute of file found
|
|
16h WORD file time (see #01665 at AX=5700h)
|
|
18h WORD file date (see #01666 at AX=5700h)
|
|
1Ah DWORD file size
|
|
1Eh 13 BYTEs ASCIZ filename+extension
|
|
--------f-214E-------------------------------
|
|
INT 21 - WILDUNIX.COM internal - INSTALLATION CHECK
|
|
AH = 4Eh
|
|
DS:DX = 0000h:0000h
|
|
Return: AH = 99h if installed
|
|
Program: WILDUNIX.COM is a resident Unix-style wildcard expander by Steve
|
|
Hosgood and Terry Barnaby
|
|
--------D-214F-------------------------------
|
|
INT 21 - DOS 2+ - "FINDNEXT" - FIND NEXT MATCHING FILE
|
|
AH = 4Fh
|
|
Disk Transfer Area contains data block from previous FindFirst or
|
|
FindNext call
|
|
Return: CF clear if successful
|
|
Disk Transfer Area updated
|
|
CF set on error
|
|
AX = error code (12h) (see #01680 at AH=59h/BX=0000h)
|
|
Notes: under Novell DOS 7, if the FindFirst call (AH=4Eh) had CX=0088h, then
|
|
the next matching deleted file will be returned
|
|
since the entire state of a FindFirst/FindNext sequence is contained
|
|
in the data block in the DTA, other disk operations such as renaming,
|
|
moving, deleting, or creating files can cause inaccurate directory
|
|
searches, such as finding the same file twice
|
|
BUG: DR DOS 3.41 and 5.0 return the Directory attribute for the volume label
|
|
SeeAlso: AH=12h,AH=4Eh,AX=714Fh,AX=71A1h
|
|
--------D-2150-------------------------------
|
|
INT 21 - DOS 2+ internal - SET CURRENT PROCESS ID (SET PSP ADDRESS)
|
|
AH = 50h
|
|
BX = segment of PSP for new process
|
|
Notes: DOS uses the current PSP address to determine which processes own files
|
|
and memory; it corresponds to process identifiers used by other OSs
|
|
under DOS 2.x, this function cannot be invoked inside an INT 28h
|
|
handler without setting the Critical Error flag
|
|
under MS-DOS 3.0+ and DR DOS 3.41+, this function does not use any of
|
|
the DOS-internal stacks and may thus be called at any time, even
|
|
during another INT 21h call
|
|
some Microsoft applications such as Quick C 2.51 use segments of 0000h
|
|
and FFFFh and direct access to the SDA (see #01687 at AX=5D06h) to
|
|
test whether they are running under MS-DOS rather than a compatible
|
|
OS; although one should only call this function with valid PSP
|
|
addresses, any program hooking it should be prepared to handle
|
|
invalid addresses
|
|
this function is supported by the OS/2 compatibility box
|
|
this call was undocumented prior to the release of DOS 5.0
|
|
SeeAlso: AH=26h,AH=51h,AH=62h
|
|
--------v-2150FD-----------------------------
|
|
INT 21 - VIRUS - "Predator 2" - INSTALLATION CHECK
|
|
AX = 50FDh
|
|
Return: AX = FD50h if resident
|
|
SeeAlso: AX=4BFFh"VIRUS",AX=5454h"VIRUS"
|
|
--------D-2151-------------------------------
|
|
INT 21 - DOS 2+ internal - GET CURRENT PROCESS ID (GET PSP ADDRESS)
|
|
AH = 51h
|
|
Return: BX = segment of PSP for current process
|
|
Notes: DOS uses the current PSP address to determine which processes own files
|
|
and memory; it corresponds to process identifiers used by other OSs
|
|
under DOS 2.x, this function cannot be invoked inside an INT 28h
|
|
handler without setting the Critical Error flag
|
|
under DOS 3.0+, this function does not use any of the DOS-internal
|
|
stacks and may thus be called at any time, even during another
|
|
INT 21h call
|
|
supported by OS/2 compatibility box
|
|
identical to the documented AH=62h
|
|
this call was undocumented prior to the release of DOS 5.0
|
|
SeeAlso: AH=26h,AH=50h,AH=62h
|
|
--------D-2152-------------------------------
|
|
INT 21 U - DOS 2+ internal - "SYSVARS" - GET LIST OF LISTS
|
|
AH = 52h
|
|
Return: ES:BX -> DOS list of lists (see #01627)
|
|
Notes: partially supported by OS/2 v1.1 compatibility box (however, most
|
|
pointers are FFFFh:FFFFh, LASTDRIVE is FFh, and the NUL header "next"
|
|
pointer is FFFFh:FFFFh).
|
|
partially supported by the Windows NT DOS box; contains only a
|
|
rudimentary Current Directory Structure (see #01645)
|
|
on return, ES points at the DOS data segment (see also INT 2F/AX=1203h)
|
|
Quarterdeck's suggested check for the use of its DOSDATA.SYS or
|
|
DOS-UP.SYS is to test whether the list-of-lists segment is greater
|
|
than the segment of the first memory block; a better check for
|
|
DOS-UP.SYS is INT 21/AX=2B01h/CX=444Dh
|
|
because not all DOS workalikes support all fields in the List of Lists,
|
|
applications should ensure that pointers are neither 0000h:0000h
|
|
nor FFFFh:FFFFh before using them
|
|
Windows for Workgroups 3.11 network and Windows95 set the path to
|
|
the local drive and directory even for network drives; in that
|
|
case the UNC form \\SERVER\SHARE can be obtained with
|
|
INT 21/AX=5F02h or INT 21/AX=5F46h. LapLink RemoteAccess does the
|
|
same even for INT 21/AX=5F02h
|
|
Windows95 GUI no longer returns the true path for a SUBSTed drive,
|
|
but MS-DOS 7.00 does; use INT 21/AH=60h to obtain the true name
|
|
SeeAlso: INT 2F/AX=1203h
|
|
|
|
Format of List of Lists:
|
|
Offset Size Description (Table 01627)
|
|
-24 WORD (DOS 3.1+) contents of CX from INT 21/AX=5E01h
|
|
-22 WORD (DOS ???+) LRU counter for FCB caching
|
|
-20 WORD (DOS ???+) LRU counter for FCB opens
|
|
-18 DWORD (DOS ???+) address of OEM function handler (see INT 21/AH=F8h)
|
|
FFFFh:FFFFh if not installed or not available
|
|
-14 WORD (DOS ???+) offset in DOS CS of code to return from INT 21 call
|
|
-12 WORD (DOS 3.1+) sharing retry count (see AX=440Bh)
|
|
-10 WORD (DOS 3.1+) sharing retry delay (see AX=440Bh)
|
|
-8 DWORD (DOS 3.0+) pointer to current disk buffer
|
|
-4 WORD (DOS 3.0+) pointer in DOS data segment of unread CON input
|
|
when CON is read via a handle, DOS reads an entire line,
|
|
and returns the requested portion, buffering the rest
|
|
for the next read. 0000h indicates no unread input
|
|
-2 WORD segment of first memory control block (see #01628)
|
|
00h DWORD pointer to first Drive Parameter Block (see #01395 at AH=32h)
|
|
04h DWORD -> first System File Table (see #01639,#01640,#01641,#01642)
|
|
08h DWORD pointer to active CLOCK$ device's header (most recently loaded
|
|
driver with CLOCK bit set)
|
|
0Ch DWORD pointer to active CON device's header (most recently loaded
|
|
driver with STDIN bit set)
|
|
---DOS 2.x---
|
|
10h BYTE number of logical drives in system
|
|
11h WORD maximum bytes/block of any block device
|
|
13h DWORD pointer to first disk buffer (see #01649,#01650)
|
|
17h 18 BYTEs actual NUL device driver header (not a pointer!)
|
|
NUL is always the first device on DOS's linked list of device
|
|
drivers. (see #01646)
|
|
---DOS 3.0---
|
|
10h BYTE number of block devices
|
|
11h WORD maximum bytes/block of any block device
|
|
13h DWORD pointer to first disk buffer (see #01650,#01652)
|
|
17h DWORD pointer to array of current directory structures (see #01643)
|
|
1Bh BYTE value of LASTDRIVE command in CONFIG.SYS (default 5)
|
|
1Ch DWORD pointer to STRING= workspace area
|
|
20h WORD size of STRING area (the x in STRING=x from CONFIG.SYS)
|
|
22h DWORD pointer to FCB table
|
|
26h WORD the y in FCBS=x,y from CONFIG.SYS
|
|
28h 18 BYTEs actual NUL device driver header (not a pointer!)
|
|
NUL is always the first device on DOS's linked list of device
|
|
drivers. (see #01646)
|
|
---DOS 3.1-3.3---
|
|
10h WORD maximum bytes per sector of any block device
|
|
12h DWORD pointer to first disk buffer in buffer chain (see #01650)
|
|
16h DWORD pointer to array of current directory structures (see #01643)
|
|
1Ah DWORD pointer to system FCB tables (see #01640,#01641,#01642)
|
|
1Eh WORD number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
|
|
20h BYTE number of block devices installed
|
|
21h BYTE number of available drive letters (largest of 5, installed
|
|
block devices, and CONFIG.SYS LASTDRIVE=). Also size of
|
|
current directory structure array.
|
|
22h 18 BYTEs actual NUL device driver header (not a pointer!)
|
|
NUL is always the first device on DOS's linked list of device
|
|
drivers. (see #01646)
|
|
34h BYTE number of JOIN'ed drives
|
|
---DOS 4.x---
|
|
10h WORD maximum bytes per sector of any block device
|
|
12h DWORD pointer to disk buffer info record (see #01652,#01653)
|
|
Note: although the initialization code in IO.SYS uses this
|
|
pointer, MSDOS.SYS does not, instead using the hardcoded
|
|
address of the info record
|
|
16h DWORD pointer to array of current directory structures
|
|
(see #01643,#01644)
|
|
1Ah DWORD pointer to system FCB tables (see #01640,#01641,#01642)
|
|
1Eh WORD number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
|
|
(always 00h for DOS 5.0)
|
|
20h BYTE number of block devices installed
|
|
21h BYTE number of available drive letters; also size of current
|
|
directory structure array.
|
|
For DOS 4.0-6.0: largest of 5, installed block devices,
|
|
and CONFIG.SYS LASTDRIVE=
|
|
For DOS 7.x (Windows9X), set to 32 if no LASTDRIVE= or
|
|
LASTDRIVEHIGH=, else set to larger of installed block
|
|
devices and LASTDRIVE(HIGH)=
|
|
22h 18 BYTEs actual NUL device driver header (not a pointer!)
|
|
NUL is always the first device on DOS's linked list of device
|
|
drivers. (see #01646)
|
|
34h BYTE number of JOIN'ed drives
|
|
35h WORD pointer within IBMDOS code segment to list of special program
|
|
names (see #01662)
|
|
(always 0000h for DOS 5.0)
|
|
37h DWORD pointer to FAR routine for resident IFS utility functions
|
|
(see #01658)
|
|
may be called by any IFS driver which does not wish to
|
|
service functions 20h or 24h-28h itself
|
|
3Bh DWORD pointer to chain of IFS (installable file system) drivers
|
|
3Fh WORD the x in BUFFERS x,y (rounded up to multiple of 30 if in EMS)
|
|
41h WORD number of lookahead buffers (the y in BUFFERS x,y)
|
|
43h BYTE boot drive (1=A:)
|
|
44h BYTE flag: 01h to use DWORD moves (80386+), 00h otherwise
|
|
45h WORD extended memory size in KB
|
|
---DOS 5.0-6.0---
|
|
10h 39 BYTEs as for DOS 4.x (above)
|
|
37h DWORD pointer to SETVER program list or 0000h:0000h
|
|
3Bh WORD (DOS=HIGH) offset in DOS CS of function to fix A20 control
|
|
when executing special .COM format
|
|
3Dh WORD PSP of most-recently EXECed program if DOS in HMA, 0000h if low
|
|
used for maintaining count of INT 21 calls which disable A20
|
|
on return
|
|
3Fh 8 BYTEs as for DOS 4.x (above)
|
|
---Windows NT DOS Box---
|
|
10h 6 BYTEs ???
|
|
16h DWORD pointer to array of current directory structures (see #01645)
|
|
1Ah 6 BYTEs ???
|
|
20h BYTE number of block devices installed
|
|
21h BYTE number of local drive letters (= installed block devices)
|
|
Also size of current directory structure array.
|
|
22h 18 BYTEs actual NUL device driver header (not a pointer!)
|
|
NUL is always the first device on DOS's linked list of device
|
|
drivers. (see #01646)
|
|
---DOS 7.x---
|
|
10h 55 BYTEs as for DOS 5.0-6.0 (above)
|
|
47h 25 BYTEs ???
|
|
60h BYTE "DOS_FLAG" (see also INT 26)
|
|
|
|
Format of DOS memory control block:
|
|
Offset Size Description (Table 01628)
|
|
00h BYTE block type: 5Ah if last block in chain, otherwise 4Dh
|
|
01h WORD PSP segment of owner or special flag value (see #01629)
|
|
03h WORD size of memory block in paragraphs
|
|
05h 3 BYTEs unused by MS-DOS
|
|
(386MAX) if locked-out block, region start/prev region end
|
|
---DOS 2.x,3.x---
|
|
08h 8 BYTEs unused
|
|
---DOS 4.0+ ---
|
|
08h 8 BYTEs ASCII program name if PSP memory block or DR DOS UMB,
|
|
else garbage
|
|
null-terminated if less than 8 characters
|
|
Notes: the next MCB is at segment (current + size + 1)
|
|
under DOS 3.1+, the first memory block is the DOS data segment,
|
|
containing installable drivers, buffers, etc. Under DOS 4.0+ it is
|
|
divided into subsegments, each with its own memory control block
|
|
(see #01633), the first of which is at offset 0000h.
|
|
for DOS 5+, blocks owned by DOS may have either "SC" or "SD" in bytes
|
|
08h and 09h. "SC" is system code or locked-out inter-UMB memory,
|
|
"SD" is system data, device drivers, etc.
|
|
Some versions of DR DOS use only seven characters of the program name,
|
|
placing a NUL in the eighth byte.
|
|
SeeAlso: #01630,#01632,#01633
|
|
|
|
(Table 01629)
|
|
Values for special flag PSP segments:
|
|
0000h free
|
|
0006h DR DOS XMS UMB
|
|
0007h DR DOS excluded upper memory ("hole")
|
|
0008h belongs to DOS
|
|
FFF7h 386MAX v6.01+ ???
|
|
FFFAh 386MAX UMB control block (see #01477 at AX=4402h"386MAX")
|
|
FFFDh 386MAX locked-out memory
|
|
FFFEh 386MAX UMB (normally immediately follows its control block)
|
|
FFFFh 386MAX v6.01+ device driver
|
|
|
|
Format of MS-DOS 5+ UMB control block:
|
|
Offset Size Description (Table 01630)
|
|
00h BYTE type: 5Ah if last block in chain, 4Dh otherwise
|
|
01h WORD first available paragraph in UMB if control block at start
|
|
of UMB, 000Ah if control block at end of UMB
|
|
03h WORD length in paragraphs of following UMB or locked-out region
|
|
05h 3 BYTEs unused
|
|
08h 8 BYTEs block type name: "UMB" if start block, "SM" if end block in UMB
|
|
SeeAlso: #01628,#01631
|
|
|
|
Format of MS-DOS 7.0 HMA memory control block:
|
|
Offset Size Description (Table 01631)
|
|
00h WORD signature "MS" (4Dh 53h)
|
|
02h WORD usage flag???
|
|
0000h free
|
|
else ???
|
|
04h WORD size of memory block in bytes (not counting MCB)
|
|
06h WORD offset of next memory block in HMA or 0000h
|
|
08h 8 BYTEs unused (0)
|
|
SeeAlso: #01628,#01630,#01632
|
|
|
|
Format of STARLITE (General Software's Embedded DOS) memory control block:
|
|
Offset Size Description (Table 01632)
|
|
00h BYTE block type: 5Ah if last block in chain, otherwise 4Dh
|
|
01h WORD PSP segment of owner, 0000h if free, 0008h if belongs to DOS
|
|
03h WORD size of memory block in paragraphs
|
|
05h BYTE unused
|
|
06h WORD segment address of next memory control block (0000h if last)
|
|
08h WORD segment address of previous memory control block or 0000h
|
|
0Ah 6 BYTEs reserved
|
|
|
|
Format of DOS 4.0+ data segment subsegment control blocks:
|
|
Offset Size Description (Table 01633)
|
|
00h BYTE subsegment type (blocks typically appear in this order)
|
|
"D" device driver
|
|
"E" device driver appendage
|
|
"I" IFS (Installable File System) driver
|
|
(MS-DOS 7) high-loaded drive data table array (see #02603)
|
|
"F" FILES= control block storage area (for FILES>5)
|
|
"X" FCBS= control block storage area, if present
|
|
"C" BUFFERS EMS workspace area (if BUFFERS /X option used)
|
|
"B" BUFFERS= storage area
|
|
"L" LASTDRIVE= current directory structure array storage area
|
|
"S" STACKS= code and data area, if present (see #01634,#01635)
|
|
"T" INSTALL= transient code
|
|
01h WORD paragraph of subsegment start (usually the next paragraph)
|
|
03h WORD size of subsegment in paragraphs
|
|
05h 3 BYTEs unused
|
|
08h 8 BYTEs for types "D" and "I", base name of file from which the driver
|
|
was loaded (unused for other types)
|
|
|
|
Format of data at start of STACKS code segment (if present):
|
|
Offset Size Description (Table 01634)
|
|
00h WORD ???
|
|
02h WORD number of stacks (the x in STACKS=x,y)
|
|
04h WORD size of stack control block array (should be 8*x)
|
|
06h WORD size of each stack (the y in STACKS=x,y)
|
|
08h DWORD pointer to STACKS data segment
|
|
0Ch WORD offset in STACKS data segment of stack control block array
|
|
0Eh WORD offset in STACKS data segment of last element of that array
|
|
10h WORD offset in STACKS data segment of the entry in that array for
|
|
the next stack to be allocated (initially same as value in
|
|
0Eh and works its way down in steps of 8 to the value in
|
|
0Ch as hardware interrupts pre-empt each other)
|
|
Note: the STACKS code segment data may, if present, be located as follows:
|
|
DOS 3.2: The code segment data is at a paragraph boundary fairly early
|
|
in the IBMBIO segment (seen at 0070:0190h)
|
|
DOS 3.3: The code segment is at a paragraph boundary in the DOS data
|
|
segment, which may be determined by inspecting the segment
|
|
pointers of the vectors for those of interrupts 02h, 08h-0Eh,
|
|
70h, 72-77h which have not been redirected by device drivers
|
|
or TSRs.
|
|
DOS 4.0+ Identified by sub-segment control block type "S" within the DOS
|
|
data segment.
|
|
SeeAlso: #01636,INT B4"STACKMAN"
|
|
|
|
Format of array elements in STACKS data segment:
|
|
Offset Size Description (Table 01635)
|
|
00h BYTE status: 00h=free, 01h=in use, 03h=corrupted by overflow of
|
|
higher stack.
|
|
01h BYTE not used
|
|
02h WORD previous SP
|
|
04h WORD previous SS
|
|
06h WORD ptr to word at top of stack (new value for SP). The word at the
|
|
top of the stack is preset to point back to this control
|
|
block.
|
|
|
|
Format of SHARE.EXE hooks (DOS 3.1-6.00):
|
|
Offset Size Description (Table 01636)
|
|
(offsets from first system file table--pointed at by ListOfLists+04h)
|
|
-3Ch DWORD pointer to FAR routine for ???
|
|
Note: not called by MS-DOS 3.3, set to 0000h:0000h by
|
|
SHARE 3.3+
|
|
-38h DWORD pointer to FAR routine called on opening file
|
|
on call, internal DOS location points at filename
|
|
(see #01687 at AX=5D06h)
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = DOS error code (24h)
|
|
(see #01680 at AH=59h/BX=0000h)
|
|
Note: SHARE directly accesses DOS-internal data to get name of
|
|
file just opened
|
|
-34h DWORD pointer to FAR routine called on closing file
|
|
ES:DI -> system file table
|
|
Note: does something to every Record Lock Record for file
|
|
-30h DWORD pointer to FAR routine to close all files for given computer
|
|
(called by AX=5D03h)
|
|
-2Ch DWORD pointer to FAR routine to close all files for given process
|
|
(called by AX=5D04h)
|
|
-28h DWORD pointer to FAR routine to close file by name
|
|
(called by AX=5D02h)
|
|
DS:SI -> DOS parameter list (see #01686 at AX=5D00h)
|
|
DPL's DS:DX -> name of file to close
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = DOS error code (03h)
|
|
(see #01680 at AH=59h/BX=0000h)
|
|
-24h DWORD pointer to FAR routine to lock region of file
|
|
call with BX = file handle
|
|
---DOS 3.x---
|
|
CX:DX = starting offset
|
|
SI:AX = size
|
|
---DOS 4.0+ ---
|
|
DS:DX -> lock range
|
|
DWORD start offset
|
|
DWORD size in bytes
|
|
Return: CF set on error
|
|
AL = DOS error code (21h) (see #01680 at AH=59h)
|
|
Note: not called if file is marked as remote
|
|
-20h DWORD pointer to FAR routine to unlock region of file
|
|
call with BX = file handle
|
|
---DOS 3.x---
|
|
CX:DX = starting offset
|
|
SI:AX = size
|
|
---DOS 4.0+ ---
|
|
DS:DX -> lock range
|
|
DWORD start offset
|
|
DWORD size in bytes
|
|
Return: CF set on error
|
|
AL = DOS error code (21h) (see #01680 at AH=59h)
|
|
Note: not called if file is marked as remote
|
|
-1Ch DWORD pointer to FAR routine to check if file region is locked
|
|
call with ES:DI -> system file table entry for file
|
|
CX = length of region from current position in file
|
|
Return: CF set if any portion of region locked
|
|
AX = 0021h
|
|
-18h DWORD pointer to FAR routine to get open file list entry
|
|
(called by AX=5D05h)
|
|
call with DS:SI -> DOS parameter list (see #01686 at AX=5D00h)
|
|
DPL's BX = index of sharing record
|
|
DPL's CX = index of SFT in SFT chain of sharing rec
|
|
Return: CF set on error or not loaded
|
|
AX = DOS error code (12h) (see #01680 at AH=59h)
|
|
CF clear if successful
|
|
ES:DI -> filename
|
|
CX = number of locks owned by specified SFT
|
|
BX = network machine number
|
|
DX destroyed
|
|
-14h DWORD pointer to FAR routine for updating FCB from SFT???
|
|
call with DS:SI -> unopened FCB
|
|
ES:DI -> system file table entry
|
|
Return: BL = C0h???
|
|
Note: copies following fields from SFT to FCB:
|
|
starting cluster of file 0Bh 1Ah
|
|
sharing record offset 33h 1Ch
|
|
file attribute 04h 1Eh
|
|
-10h DWORD pointer to FAR routine to get first cluster of FCB file ???
|
|
call with ES:DI -> system file table entry
|
|
DS:SI -> FCB
|
|
Return: CF set if SFT closed or sharing record offsets
|
|
mismatched
|
|
CF clear if successful
|
|
BX = starting cluster number from FCB
|
|
-0Ch DWORD pointer to FAR routine to close file if duplicate for process
|
|
DS:SI -> system file table
|
|
Return: AX = number of handle in JFT which already uses SFT
|
|
Note: called during open/create of a file
|
|
Note: if SFT was opened with inheritance enabled and sharing
|
|
mode 111, does something to all other SFTs owned by
|
|
same process which have the same file open mode and
|
|
sharing record
|
|
-08h DWORD pointer to FAR routine for closing file
|
|
Note: closes various handles referring to file most-recently
|
|
opened
|
|
-04h DWORD pointer to FAR routine to update directory info in related SFT
|
|
entries
|
|
call with ES:DI -> system file table entry for file (see #01641)
|
|
AX = subfunction (apply to each related SFT)
|
|
00h: update time stamp (offset 0Dh) and date
|
|
stamp (offset 0Fh)
|
|
01h: update file size (offset 11h) and starting
|
|
cluster (offset 0Bh). Sets last-accessed
|
|
cluster fields to start of file if file
|
|
never accessed
|
|
02h: as function 01h, but last-accessed fields
|
|
always changed
|
|
03h: do both functions 00h and 02h
|
|
Note: follows ptr at offset 2Bh in system file table entries
|
|
Note: NOP if opened with no-inherit or via FCB
|
|
Notes: most of the above hooks (except -04h, -14h, -18h, and -3Ch) assume
|
|
either that SS=DOS DS or SS=DS=DOS DS and directly access
|
|
DOS-internal data
|
|
sharing hooks are not supported by DR DOS 5-6; they appear to be
|
|
supported by Novell DOS 7, with a segment of 0000h indicating the
|
|
DOS data segment
|
|
SeeAlso: #01637,#01638
|
|
|
|
Format of sharing record:
|
|
Offset Size Description (Table 01637)
|
|
00h BYTE flag
|
|
00h free block
|
|
01h allocated block
|
|
FFh end marker
|
|
01h WORD size of block
|
|
03h BYTE checksum of pathname (including NUL)
|
|
if sum of ASCII values is N, checksum is (N/256 + N%256)
|
|
04h WORD offset in SHARE's DS of first Record Lock Record (see #01638)
|
|
06h DWORD pointer to start of system file table chain for file
|
|
0Ah WORD unique sequence number
|
|
0Ch var ASCIZ full pathname
|
|
Note: not supported by DR DOS SHARE 1.1 and 2.0; will reportedly be
|
|
supported by Novell DOS 7
|
|
SeeAlso: #01636,#01638
|
|
|
|
Format of SHARE.EXE Record Lock Record:
|
|
Offset Size Description (Table 01638)
|
|
00h WORD offset in SHARE's DS of next lock table in list or 0000h
|
|
02h DWORD offset in file of start of locked region
|
|
06h DWORD offset in file of end of locked region
|
|
0Ah DWORD pointer to System File Table entry for this file
|
|
0Eh WORD PSP segment of lock's owner
|
|
---DOS 5+ ---
|
|
10h WORD lock type: (00h lock all, 01h lock writes only)
|
|
SeeAlso: #01636,#01637,#01639,#01642
|
|
|
|
Format of DOS 2.x system file tables:
|
|
Offset Size Description (Table 01639)
|
|
00h DWORD pointer to next file table (offset FFFFh if last)
|
|
04h WORD number of files in this table
|
|
06h 28h bytes per file
|
|
Offset Size Description
|
|
00h BYTE number of file handles referring to this file
|
|
01h BYTE file open mode (see #01402 at AH=3Dh)
|
|
02h BYTE file attribute
|
|
03h BYTE drive (0 = character device, 1 = A, 2 = B, etc)
|
|
04h 11 BYTEs filename in FCB format (no path,no period,blank-padded)
|
|
0Fh WORD ???
|
|
11h WORD ???
|
|
13h DWORD file size???
|
|
17h WORD file date in packed format (see #01666 at AX=5700h)
|
|
19h WORD file time in packed format (see #01665 at AX=5700h)
|
|
1Bh BYTE device attribute (see #01423 at AX=4400h)
|
|
---character device---
|
|
1Ch DWORD pointer to device driver
|
|
---block device---
|
|
1Ch WORD starting cluster of file
|
|
1Eh WORD relative cluster in file of last cluster accessed
|
|
------
|
|
20h WORD absolute cluster number of current cluster
|
|
22h WORD ???
|
|
24h DWORD current file position???
|
|
SeeAlso: #01640,#01641,#01642
|
|
|
|
Format of DOS 3.0 system file tables and FCB tables:
|
|
Offset Size Description (Table 01640)
|
|
00h DWORD pointer to next file table (offset FFFFh if last)
|
|
04h WORD number of files in this table
|
|
06h 38h bytes per file
|
|
Offset Size Description
|
|
00h-1Eh as for DOS 3.1+ (see #01641)
|
|
1Fh WORD byte offset of directory entry within sector
|
|
21h 11 BYTEs filename in FCB format (no path/period, blank-padded)
|
|
2Ch DWORD (SHARE.EXE) pointer to previous SFT sharing same file
|
|
30h WORD (SHARE.EXE) network machine number which opened file
|
|
(Windows Enhanced mode DOSMGR uses the virtual machine
|
|
ID as the machine number; see INT 2F/AX=1683h)
|
|
32h WORD PSP segment of file's owner (first three entries for
|
|
AUX/CON/PRN contain segment of IO.SYS startup code)
|
|
34h WORD (SHARE.EXE) offset in SHARE code seg of share record
|
|
36h WORD ??? apparently always 0000h
|
|
SeeAlso: #01639,#01641,#01642
|
|
|
|
Format of DOS 3.1-3.3x, DR DOS 5.0-6.0 system file tables and FCB tables:
|
|
Offset Size Description (Table 01641)
|
|
00h DWORD pointer to next file table (offset FFFFh if last)
|
|
04h WORD number of files in this table
|
|
06h 35h bytes per file
|
|
Offset Size Description
|
|
00h WORD number of file handles referring to this file
|
|
02h WORD file open mode (see AX=6C00h, #01402 at AH=3Dh)
|
|
bit 15 set if this file opened via FCB
|
|
04h BYTE file attribute (see #01420 at AX=4301h)
|
|
05h WORD device info word (see #01423 at AX=4400h)
|
|
bit 15 set if remote file
|
|
bit 14 set means do not set file date/time on closing
|
|
bit 12 set means don't inherit on EXEC
|
|
bits 5-0 drive number for disk files
|
|
07h DWORD pointer to device driver header if character device
|
|
else pointer to DOS Drive Parameter Block
|
|
(see #01395 at AH=32h)
|
|
0Bh WORD starting cluster of file
|
|
0Dh WORD file time in packed format (see #01665 at AX=5700h)
|
|
not used for character devices in DR DOS
|
|
0Fh WORD file date in packed format (see #01666 at AX=5700h)
|
|
not used for character devices in DR DOS
|
|
11h DWORD file size
|
|
---system file table---
|
|
15h DWORD current offset in file (may be larger than size of
|
|
file; INT 21/AH=42h does not check new position)
|
|
---FCB table---
|
|
15h WORD counter for last I/O to FCB
|
|
17h WORD counter for last open of FCB
|
|
(these are separate to determine the times of the
|
|
latest I/O and open)
|
|
---
|
|
19h WORD relative cluster within file of last cluster accessed
|
|
1Bh WORD absolute cluster number of last cluster accessed
|
|
0000h if file never read or written???
|
|
1Dh WORD number of sector containing directory entry
|
|
(see #01352)
|
|
1Fh BYTE number of dir entry within sector (byte offset/32)
|
|
20h 11 BYTEs filename in FCB format (no path/period, blank-padded)
|
|
2Bh DWORD (SHARE.EXE) pointer to previous SFT sharing same file
|
|
2Fh WORD (SHARE.EXE) network machine number which opened file
|
|
(Windows Enhanced mode DOSMGR uses the virtual machine
|
|
ID as the machine number; see INT 2F/AX=1683h)
|
|
31h WORD PSP segment of file's owner (see #01378 at AH=26h)
|
|
(first three entries for AUX/CON/PRN contain segment
|
|
of IO.SYS startup code)
|
|
33h WORD offset within SHARE.EXE code segment of
|
|
sharing record (see #01637) 0000h = none
|
|
SeeAlso: #01639,#01640,#01642
|
|
|
|
Format of DOS 4.0-6.0 system file tables and FCB tables:
|
|
Offset Size Description (Table 01642)
|
|
00h DWORD pointer to next file table (offset FFFFh if last)
|
|
04h WORD number of files in this table
|
|
06h 3Bh bytes per file
|
|
Offset Size Description
|
|
00h WORD number of file handles referring to this file
|
|
FFFFh if in use but not referenced
|
|
02h WORD file open mode (see AX=6C00h,#01402 at AH=3Dh)
|
|
bit 15 set if this file opened via FCB
|
|
04h BYTE file attribute (see #01420 at AX=4301h)
|
|
05h WORD device info word (see also #01423 at AX=4400h)
|
|
bit 15 set if remote file
|
|
bit 14 set means do not set file date/time on closing
|
|
bit 13 set if named pipe
|
|
bit 12 set if no inherit
|
|
bit 11 set if network spooler
|
|
bit 7 set if device, clear if file (only if local)
|
|
bits 6-0 as for AX=4400h
|
|
07h DWORD pointer to device driver header if character device
|
|
else pointer to DOS Drive Parameter Block
|
|
(see #01395 at AH=32h) or REDIR data
|
|
0Bh WORD starting cluster of file (local files only)
|
|
not set for FAT32-capable versions of Windows95
|
|
(since they allow 32-bit cluster numbers)
|
|
0Dh WORD file time in packed format (see #01665)
|
|
0Fh WORD file date in packed format (see #01666)
|
|
11h DWORD file size
|
|
15h DWORD current offset in file (SFT)
|
|
LRU counters (FCB table, two WORDs)
|
|
---local file---
|
|
19h WORD relative cluster within file of last cluster accessed
|
|
1Bh DWORD number of sector containing directory entry
|
|
1Fh BYTE number of dir entry within sector (byte offset/32)
|
|
---network redirector---
|
|
19h DWORD pointer to REDIRIFS record
|
|
1Dh 3 BYTEs ???
|
|
------
|
|
20h 11 BYTEs filename in FCB format (no path/period, blank-padded)
|
|
2Bh DWORD (SHARE.EXE) pointer to previous SFT sharing same file
|
|
2Fh WORD (SHARE.EXE) network machine number which opened file
|
|
(Windows Enhanced mode DOSMGR uses the virtual machine
|
|
ID as the machine number; see INT 2F/AX=1683h)
|
|
31h WORD PSP segment of file's owner (see #01378 at AH=26h)
|
|
(first three entries for AUX/CON/PRN contain segment
|
|
of IO.SYS startup code)
|
|
33h WORD offset within SHARE.EXE code segment of
|
|
sharing record (see #01595) 0000h = none
|
|
35h WORD (local) absolute cluster number of last clustr accessed
|
|
(redirector) ???
|
|
37h DWORD pointer to IFS driver for file, 0000000h if native DOS
|
|
Note: the OS/2 2.0 DOS Boot Session does not properly fill in the filename
|
|
field due to incomplete support for SFTs; the OS/2 2.0 DOS Window
|
|
does not appear to support SFTs at all
|
|
SeeAlso: #01639,#01640,#01641
|
|
|
|
Format of current directory structure (CDS) (array, LASTDRIVE entries):
|
|
Offset Size Description (Table 01643)
|
|
00h 67 BYTEs ASCIZ path in form X:\PATH (local) or UNC form
|
|
\\SERVER\PATH (network, see notes below)
|
|
43h WORD drive attributes (also see note below) (see also AX=5F07h)
|
|
bit 15: uses network redirector \ invalid if 00, installable
|
|
bit 14: physical drive / file system if 11
|
|
bit 13: JOIN'ed \ path above is true path that would be
|
|
bit 12: SUBST'ed / needed if not under SUBST or JOIN
|
|
bit 11: removable media (WinNT4.0)
|
|
bit 10: hard disk??? (WinNT4.0)
|
|
bit 7: remote drive hidden from redirector's assign-list and
|
|
exempt from network connection make/break commands;
|
|
set for CD-ROM drives by MSCDEX (not supported by
|
|
CORELCDX)
|
|
45h DWORD pointer to Drive Parameter Block for drive
|
|
(see #01395 at AH=32h)
|
|
---local drives---
|
|
49h WORD starting cluster of current directory
|
|
0000h = root, FFFFh = never accessed
|
|
4Bh WORD ??? seems to be FFFFh always
|
|
4Dh WORD ??? seems to be FFFFh always
|
|
---network drives---
|
|
49h DWORD pointer to redirector or REDIRIFS record, or FFFFh:FFFFh
|
|
(DOS 4 only) available for use by IFS driver
|
|
4Dh WORD stored user data from INT 21/AX=5F03h
|
|
------
|
|
4Fh WORD offset in current directory path of backslash corresponding to
|
|
root directory for drive
|
|
this value specifies how many characters to hide from the
|
|
"CHDIR" and "GETDIR" calls; normally set to 2 to hide the
|
|
drive letter and colon, SUBST, JOIN, and networks change it
|
|
so that only the appropriate portion of the true path is
|
|
visible to the user
|
|
---DOS 4.0+ ---
|
|
51h BYTE (DOS 4 only, remote drives) device type
|
|
04h network drive
|
|
52h DWORD pointer to IFS driver (DOS 4) or redirector block (DOS 5+) for
|
|
this drive, 00000000h if native DOS
|
|
56h WORD available for use by IFS driver
|
|
Notes: the path for invalid drives is normally set to X:\, but may be empty
|
|
after JOIN x: /D in DR DOS 5.0 or NET USE x: /D in older LAN versions
|
|
normally, only one of bits 13&12 may be set together with bit 14, but
|
|
DR DOS 5.0 uses other combinations for bits 15-12: 0111 JOIN,
|
|
0001 SUBST, 0101 ASSIGN (see #01644)
|
|
Windows for Workgroups 3.11 network sets the path to the local
|
|
drive and directory even for network drives; in that case the
|
|
UNC form \\SERVER\SHARE can be obtained with INT 21/AX=5F02h
|
|
or INT 21/AX=5F46h. LapLink RemoteAccess does the same even for
|
|
INT 21/AX=5F02h
|
|
Window NT 4.0 always uses X:\PATH, even for substituted drives (i.e.
|
|
the CDS will *not* contain the original path prior to SUBST)
|
|
SoftWindows on the Macintosh PowerPC sets \\E for the host drive
|
|
SeeAlso: #01644,INT 21/AX=71AAh/BL=00h
|
|
|
|
Format of DR DOS 5.0-6.0 current directory structure entry (array):
|
|
Offset Size Description (Table 01644)
|
|
00h 67 BYTEs ASCIZ pathname of actual root directory for this logical drive
|
|
43h WORD drive attributes
|
|
1000h SUBSTed drive
|
|
3000h??? JOINed drive
|
|
4000h physical drive
|
|
5000h ASSIGNed drive
|
|
7000h JOINed drive
|
|
8000h network drive
|
|
45h BYTE physical drive number (0=A:) if this logical drive is valid
|
|
46h BYTE ??? apparently flags for JOIN and ASSIGN
|
|
47h WORD cluster number of start of parent directory (0000h = root)
|
|
49h WORD entry number of current directory in parent directory
|
|
4Bh WORD cluster number of start of current directory
|
|
4Dh WORD used for media change detection (details not available)
|
|
4Fh WORD cluster number of SUBST/JOIN "root" directory
|
|
0000h if physical root directory
|
|
SeeAlso: #01643
|
|
|
|
Format of Windows NT Current Directory Structure (CDS) (array):
|
|
Offset Size Description (Table 01645)
|
|
00h 67 BYTEs ASCIZ path in form X:\ (does not show either current directory
|
|
or network path)
|
|
43h 4 BYTEs ???
|
|
Note: the WinNT CDS contains only as many entries as there are local drives,
|
|
not LASTDRIVE entries.
|
|
|
|
Format of DOS device driver header:
|
|
Offset Size Description (Table 01646)
|
|
00h DWORD pointer to next driver, offset=FFFFh if last driver
|
|
04h WORD device attributes (see #01647,#01648)
|
|
06h WORD device strategy entry point
|
|
call with ES:BX -> request header
|
|
(see #02597 at INT 2F/AX=0802h)
|
|
08h WORD device interrupt entry point
|
|
---character device---
|
|
0Ah 8 BYTEs blank-padded character device name
|
|
---block device---
|
|
0Ah BYTE number of subunits (drives) supported by driver
|
|
0Bh 7 BYTEs normally unused; sometimes contains signature to indicate
|
|
specific drivers:
|
|
"$PCMATA" PCMCIA driver PCMATA.SYS (see AX=440Dh"DOS 3.2+")
|
|
"AHADDVR" Adaptec SCSI disk driver ASPIDISK.SYS
|
|
"DBLSPAC" MS DoubleSpace or DriveSpace
|
|
"DSKREET" NortonUtils v5+ Diskreet (see INT 2F/AX=FE00h)
|
|
"GFS " LapLink III device driver DD.BIN
|
|
"SIDExxx" PCMCIA driver ATADRV.EXE (see AX=440Dh"DOS 3.2+")
|
|
"STAC-CD" Stacker/Stacker Anywhere (see AX=4404h"Stacker")
|
|
---DoubleSpace/DriveSpace---
|
|
12h 2 BYTEs signature ",." (2Ch 2Eh)
|
|
14h var preloading API entry point
|
|
---CD-ROM---
|
|
12h WORD reserved, must be 0000h
|
|
appears to be another device chain
|
|
14h BYTE drive letter, 01h=A:, etc. (must initially be 00h; this byte
|
|
is set by MSCDEX when it loads)
|
|
15h BYTE number of units
|
|
16h 6 BYTEs signature 'MSCDnn' where 'nn' is version (currently '00')
|
|
(this field does not exist in most drivers)
|
|
SeeAlso: #02550 at INT 25/AX=CDCDh,#02845 at INT 2F/AX=5600h
|
|
|
|
Bitfields for device attributes (character device):
|
|
Bit(s) Description (Table 01647)
|
|
15 set (indicates character device)
|
|
14 IOCTL supported (see AH=44h)
|
|
13 (DOS 3.0+) output until busy supported
|
|
12 reserved
|
|
11 (DOS 3.0+) OPEN/CLOSE/RemMedia calls supported
|
|
10-8 reserved
|
|
7 (DOS 5.0+) Generic IOCTL check call supported (driver command 19h)
|
|
(see AX=4410h,AX=4411h)
|
|
6 (DOS 3.2+) Generic IOCTL call supported (driver command 13h)
|
|
(see AX=440Ch,AX=440Dh"DOS 3.2+")
|
|
5 reserved
|
|
4 device is special (use INT 29 "fast console output")
|
|
3 device is CLOCK$ (all reads/writes use transfer record described
|
|
below)
|
|
2 device is NUL
|
|
1 device is standard output
|
|
0 device is standard input
|
|
Note: for European MS-DOS 4.0, bit 11 also indicates that bits 8-6 contain a
|
|
version code (000 = DOS 3.0,3.1; 001 = DOS 3.2;
|
|
010 = European DOS 4.0)
|
|
SeeAlso: #01648,#01646
|
|
|
|
Bitfields for device attributes (block device):
|
|
Bit(s) Description (Table 01648)
|
|
15 clear (indicates block device)
|
|
14 IOCTL supported
|
|
13 non-IBM format
|
|
12 network device (device is remote)
|
|
11 (DOS 3.0+) OPEN/CLOSE/RemMedia calls supported
|
|
10 reserved
|
|
9 direct I/O not allowed??? (set by DOS 3.3 DRIVER.SYS for "new" drives)
|
|
8 ??? set by DOS 3.3 DRIVER.SYS for "new" drives
|
|
7 (DOS 5.0+) Generic IOCTL check call supported (driver command 19h)
|
|
(see AX=4410h,AX=4411h)
|
|
6 (DOS 3.2+) Generic IOCTL call supported (driver command 13h)
|
|
implies support for commands 17h and 18h
|
|
(see AX=440Ch,AX=440Dh"DOS 3.2+",AX=440Eh,AX=440Fh)
|
|
5-2 reserved
|
|
1 driver supports 32-bit sector addressing (DOS 3.31+)
|
|
0 reserved
|
|
Note: for European MS-DOS 4.0, bit 11 also indicates that bits 8-6 contain a
|
|
version code (000 = DOS 3.0,3.1; 001 = DOS 3.2;
|
|
010 = European DOS 4.0)
|
|
SeeAlso: #01647,#01646
|
|
|
|
Format of DOS 2.x disk buffer:
|
|
Offset Size Description (Table 01649)
|
|
00h DWORD pointer to next disk buffer, offset = FFFFh if last
|
|
least-recently used buffer is first in chain
|
|
04h BYTE drive (0=A, 1=B, etc), FFh if not in use
|
|
05h 3 BYTEs unused??? (seems always to be 00h 00h 01h)
|
|
08h WORD logical sector number
|
|
0Ah BYTE number of copies to write (1 for non-FAT sectors)
|
|
0Bh BYTE sector offset between copies if multiple copies to be written
|
|
0Ch DWORD pointer to DOS Drive Parameter Block (see #01395 at AH=32h)
|
|
10h buffered data
|
|
SeeAlso: #01650,#01652,#01653,#01655
|
|
|
|
Format of DOS 3.x disk buffer:
|
|
Offset Size Description (Table 01650)
|
|
00h DWORD pointer to next disk buffer, offset = FFFFh if last
|
|
least-recently used buffer is first in chain
|
|
04h BYTE drive (0=A,1=B, etc), FFh if not in use
|
|
05h BYTE buffer flags (see #01651)
|
|
06h WORD logical sector number
|
|
08h BYTE number of copies to write (1 for non-FAT sectors)
|
|
09h BYTE sector offset between copies if multiple copies to be written
|
|
0Ah DWORD pointer to DOS Drive Parameter Block (see #01395 at AH=32h)
|
|
0Eh WORD unused??? (almost always 0)
|
|
10h buffered data
|
|
SeeAlso: #01649,#01652,#01653,#01655
|
|
|
|
Bitfields for DOS 3.x disk buffer flags:
|
|
Bit(s) Description (Table 01651)
|
|
7 ???
|
|
6 buffer dirty
|
|
5 buffer has been referenced
|
|
4 ???
|
|
3 sector in data area
|
|
2 sector in a directory, either root or subdirectory
|
|
1 sector in FAT
|
|
0 boot sector??? (guess)
|
|
SeeAlso: #01656
|
|
|
|
Format of DOS 4.00 (pre UR 25066) disk buffer info:
|
|
Offset Size Description (Table 01652)
|
|
00h DWORD pointer to array of disk buffer hash chain heads (see #01654)
|
|
04h WORD number of disk buffer hash chains (referred to as NDBCH below)
|
|
06h DWORD pointer to lookahead buffer, zero if not present
|
|
0Ah WORD number of lookahead sectors, else zero (the y in BUFFERS=x,y)
|
|
0Ch BYTE 00h if buffers in EMS (/X), FFh if not
|
|
0Dh WORD EMS handle for buffers, zero if not in EMS
|
|
0Fh WORD EMS physical page number used for buffers (usually 255)
|
|
11h WORD ??? seems always to be 0001h
|
|
13h WORD segment of EMS physical page frame
|
|
15h WORD ??? seems always to be zero
|
|
17h 4 WORDs EMS partial page mapping information???
|
|
SeeAlso: #01649,#01650,#01653,#01657
|
|
|
|
Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info:
|
|
Offset Size Description (Table 01653)
|
|
00h DWORD pointer to array of disk buffer hash chain heads (see #01654)
|
|
04h WORD number of disk buffer hash chains (referred to as NDBCH below)
|
|
06h DWORD pointer to lookahead buffer, zero if not present
|
|
0Ah WORD number of lookahead sectors, else zero (the y in BUFFERS=x,y)
|
|
0Ch BYTE 01h, possibly to distinguish from pre-UR 25066 format
|
|
0Dh WORD ??? EMS segment for BUFFERS (only with /XD)
|
|
0Fh WORD ??? EMS physical page number of EMS seg above (only with /XD)
|
|
11h WORD ??? EMS segment for ??? (only with /XD)
|
|
13h WORD ??? EMS physical page number of above (only with /XD)
|
|
15h BYTE ??? number of EMS page frames present (only with /XD)
|
|
16h WORD segment of one-sector workspace buffer allocated in main memory
|
|
if BUFFERS/XS or /XD options in effect, possibly to avoid DMA
|
|
into EMS
|
|
18h WORD EMS handle for buffers, zero if not in EMS
|
|
1Ah WORD EMS physical page number used for buffers (usually 255)
|
|
1Ch WORD ??? appears always to be 0001h
|
|
1Eh WORD segment of EMS physical page frame
|
|
20h WORD ??? appears always to be zero
|
|
22h BYTE 00h if /XS, 01h if /XD, FFh if BUFFERS not in EMS
|
|
SeeAlso: #01649,#01650,#01652,#01657
|
|
|
|
Format of DOS 4.x disk buffer hash chain head (array, one entry per chain):
|
|
Offset Size Description (Table 01654)
|
|
00h WORD EMS logical page number in which chain is resident, -1 if not
|
|
in EMS
|
|
02h DWORD pointer to least recently used buffer header. All buffers on
|
|
this chain are in the same segment.
|
|
06h BYTE number of dirty buffers on this chain
|
|
07h BYTE reserved (00h)
|
|
Notes: buffered disk sectors are assigned to chain N where N is the sector's
|
|
address modulo NDBCH, 0 <= N <= NDBCH-1
|
|
each chain resides completely within one EMS page
|
|
this structure is in main memory even if buffers are in EMS
|
|
|
|
Format of DOS 4.0-6.0 disk buffer:
|
|
Offset Size Description (Table 01655)
|
|
00h WORD forward ptr, offset only, to next least recently used buffer
|
|
02h WORD backward pointer, offset only
|
|
04h BYTE drive (0=A,1=B, etc) if bit 7 clear
|
|
SFT index if bit 7 set
|
|
FFh if not in use
|
|
05h BYTE buffer flags (see #01656)
|
|
06h DWORD logical sector number (local buffers only)
|
|
0Ah BYTE number of copies to write
|
|
for FAT sectors, same as number of FATs
|
|
for data and directory sectors, usually 1
|
|
0Bh WORD offset in sectors between copies to write for FAT sectors
|
|
0Dh DWORD pointer to DOS Drive Parameter Block (see #01395 at AH=32h)
|
|
11h WORD size of data in buffer if remote buffer (see also #01656)
|
|
13h BYTE reserved (padding)
|
|
14h buffered data
|
|
Note: for DOS 4.x, all buffered sectors which have the same hash value
|
|
(computed as the sum of high and low words of the logical sector
|
|
number divided by the number of disk buffer chains) are on the same
|
|
doubly-linked circular chain; for DOS 5+, only a single circular
|
|
chain exists.
|
|
the links consist of offset addresses only, the segment being the same
|
|
for all buffers in the chain.
|
|
SeeAlso: #01649,#01650,#01652
|
|
|
|
Bitfields for DOS 4.0-6.0 disk buffer flags:
|
|
Bit(s) Description (Table 01656)
|
|
7 remote buffer
|
|
6 buffer dirty
|
|
5 buffer has been referenced (reserved in DOS 5+)
|
|
4 search data buffer (only valid if remote buffer)
|
|
3 sector in data area
|
|
2 sector in a directory, either root or subdirectory
|
|
1 sector in FAT
|
|
0 reserved
|
|
SeeAlso: #01651
|
|
|
|
Format of DOS 5.0-6.0 disk buffer info:
|
|
Offset Size Description (Table 01657)
|
|
00h DWORD pointer to least-recently-used buffer header (may be in HMA)
|
|
(see #01655)
|
|
04h WORD number of dirty disk buffers
|
|
06h DWORD pointer to lookahead buffer, zero if not present
|
|
0Ah WORD number of lookahead sectors, else zero (the y in BUFFERS=x,y)
|
|
0Ch BYTE buffer location
|
|
00h base memory, no workspace buffer
|
|
01h HMA, workspace buffer in base memory
|
|
0Dh DWORD pointer to one-segment workspace buffer in base memory
|
|
11h 3 BYTEs unused
|
|
14h WORD ???
|
|
16h BYTE flag: INT 24 fail while making an I/O status call
|
|
17h BYTE temp storage for user memory allocation strategy during EXEC
|
|
18h BYTE counter: number of INT 21 calls for which A20 is off
|
|
19h BYTE bit flags
|
|
bit 0: ???
|
|
bit 1: SWITCHES=/W specified in CONFIG.SYS (don't load
|
|
WINA20.SYS when MS Windows 3.0 starts)
|
|
bit 2: in EXEC state (INT 21/AX=4B05h)
|
|
1Ah WORD offset of unpack code start (used only during INT 21/AX=4B05h)
|
|
1Ch BYTE bit 0 set iff UMB MCB chain linked to normal MCB chain
|
|
1Dh WORD minimum paragraphs of memory required by program being EXECed
|
|
1Fh WORD segment of first MCB in upper memory blocks or FFFFh if DOS
|
|
memory chain in base 640K only (first UMB MCB usually at
|
|
9FFFh, locking out video memory with a DOS-owned memory
|
|
block)
|
|
the MCB this word points at contains a valid link into high
|
|
memory even if it is marked with a 'Z' indicating the last
|
|
memory block
|
|
21h WORD paragraph from which to start scanning during memory allocation
|
|
SeeAlso: #01652,#01653
|
|
|
|
(Table 01658)
|
|
Call IFS utility function entry point with:
|
|
AH = 20h miscellaneous functions
|
|
AL = 00h get date
|
|
Return: CX = year
|
|
DH = month
|
|
DL = day
|
|
AL = 01h get process ID and computer ID
|
|
Return: BX = current PSP segment
|
|
DX = active network machine number
|
|
AL = 05h get file system info
|
|
ES:DI -> 16-byte info buffer
|
|
Return: buffer filled
|
|
Offset Size Description
|
|
00h 2 BYTEs unused
|
|
02h WORD number of SFTs (actually counts only
|
|
the first two file table arrays)
|
|
04h WORD number of FCB table entries
|
|
06h WORD number of proctected FCBs
|
|
08h 6 BYTEs unused
|
|
0Eh WORD largest sector size supported
|
|
AL = 06h get machine name
|
|
ES:DI -> 18-byte buffer for name
|
|
Return: buffer filled with name starting at offset 02h
|
|
AL = 08h get sharing retry count
|
|
Return: BX = sharing retry count
|
|
AL = other
|
|
Return: CF set
|
|
AH = 21h get redirection state
|
|
BH = type (03h disk, 04h printer)
|
|
Return: BH = state (00h off, 01h on)
|
|
AH = 22h ??? some sort of time calculation
|
|
AL = 00h ???
|
|
nonzero ???
|
|
AH = 23h ??? some sort of time calculation
|
|
AH = 24h compare filenames
|
|
DS:SI -> first ASCIZ filename
|
|
ES:DI -> second ASCIZ filename
|
|
Return: ZF set if files are same ignoring case and / vs \
|
|
AH = 25h normalize filename
|
|
DS:SI -> ASCIZ filename
|
|
ES:DI -> buffer for result
|
|
Return: filename uppercased, forward slashes changed to backslashes
|
|
AH = 26h get DOS stack
|
|
Return: DS:SI -> top of stack
|
|
CX = size of stack in bytes
|
|
AH = 27h increment InDOS flag
|
|
AH = 28h decrement InDOS flag
|
|
Note: IFS drivers which do not wish to implement functions 20h or 24h-28h may
|
|
pass them on to the default handler pointed at by [LoL+37h]
|
|
SeeAlso: #01659,#01660
|
|
|
|
Format of IFS driver list:
|
|
Offset Size Description (Table 01659)
|
|
00h DWORD pointer to next driver header
|
|
04h 8 BYTEs IFS driver name (blank padded), as used by FILESYS command
|
|
0Ch 4 BYTEs ???
|
|
10h DWORD pointer to IFS utility function entry point (see #01658)
|
|
call with ES:BX -> IFS request (see #01660)
|
|
14h WORD offset in header's segment of driver entry point
|
|
???
|
|
SeeAlso: #01658,#01660
|
|
|
|
Format of IFS request block:
|
|
Offset Size Description (Table 01660)
|
|
00h WORD total size in bytes of request
|
|
02h BYTE class of request
|
|
02h ???
|
|
03h redirection
|
|
04h ???
|
|
05h file access
|
|
06h convert error code to string
|
|
07h ???
|
|
03h WORD returned DOS error code
|
|
05h BYTE IFS driver exit status
|
|
00h success
|
|
01h ???
|
|
02h ???
|
|
03h ???
|
|
04h ???
|
|
FFh internal failure
|
|
06h 16 BYTEs ???
|
|
---request class 02h---
|
|
16h BYTE function code
|
|
04h ???
|
|
17h BYTE unused???
|
|
18h DWORD pointer to ???
|
|
1Ch DWORD pointer to ???
|
|
20h 2 BYTEs ???
|
|
---request class 03h---
|
|
16h BYTE function code
|
|
17h BYTE ???
|
|
18h DWORD pointer to ???
|
|
1Ch DWORD pointer to ???
|
|
22h WORD returned ???
|
|
24h WORD returned ???
|
|
26h WORD returned ???
|
|
28h BYTE returned ???
|
|
29h BYTE unused???
|
|
---request class 04h---
|
|
16h DWORD pointer to ???
|
|
1Ah DWORD pointer to ???
|
|
---request class 05h---
|
|
16h BYTE function code
|
|
01h flush disk buffers
|
|
02h get disk space
|
|
03h MKDIR
|
|
04h RMDIR
|
|
05h CHDIR
|
|
06h delete file
|
|
07h rename file
|
|
08h search directory
|
|
09h file open/create
|
|
0Ah LSEEK
|
|
0Bh read from file
|
|
0Ch write to file
|
|
0Dh lock region of file
|
|
0Eh commit/close file
|
|
0Fh get/set file attributes
|
|
10h printer control
|
|
11h ???
|
|
12h process termination
|
|
13h ???
|
|
---class 05h function 01h---
|
|
17h 7 BYTEs ???
|
|
1Eh DWORD pointer to ???
|
|
22h 4 BYTEs ???
|
|
26h BYTE ???
|
|
27h BYTE ???
|
|
---class 05h function 02h---
|
|
17h 7 BYTEs ???
|
|
1Eh DWORD pointer to ???
|
|
22h 4 BYTEs ???
|
|
26h WORD returned total clusters
|
|
28h WORD returned sectors per cluster
|
|
2Ah WORD returned bytes per sector
|
|
2Ch WORD returned available clusters
|
|
2Eh BYTE returned ???
|
|
2Fh BYTE ???
|
|
---class 05h functions 03h,04h,05h---
|
|
17h 7 BYTEs ???
|
|
1Eh DWORD pointer to ???
|
|
22h 4 BYTEs ???
|
|
26h DWORD pointer to directory name
|
|
---class 05h function 06h---
|
|
17h 7 BYTEs ???
|
|
1Eh DWORD pointer to ???
|
|
22h 4 BYTEs ???
|
|
26h WORD attribute mask
|
|
28h DWORD pointer to filename
|
|
---class 05h function 07h---
|
|
17h 7 BYTEs ???
|
|
1Eh DWORD pointer to ???
|
|
22h 4 BYTEs ???
|
|
26h WORD attribute mask
|
|
28h DWORD pointer to source filespec
|
|
2Ch DWORD pointer to destination filespec
|
|
---class 05h function 08h---
|
|
17h 7 BYTEs ???
|
|
1Eh DWORD pointer to ???
|
|
22h 4 BYTEs ???
|
|
26h BYTE 00h FINDFIRST
|
|
01h FINDNEXT
|
|
28h DWORD pointer to FindFirst search data + 01h if FINDNEXT
|
|
2Ch WORD search attribute if FINDFIRST
|
|
2Eh DWORD pointer to filespec if FINDFIRST
|
|
---class 05h function 09h---
|
|
17h 7 BYTEs ???
|
|
1Eh DWORD pointer to ???
|
|
22h DWORD pointer to IFS open file structure (see #01661)
|
|
26h WORD ??? \ together, specify open vs. create, whether or
|
|
28h WORD ??? / not to truncate
|
|
2Ah 4 BYTEs ???
|
|
2Eh DWORD pointer to filename
|
|
32h 4 BYTEs ???
|
|
36h WORD file attributes on call
|
|
returned ???
|
|
38h WORD returned ???
|
|
---class 05h function 0Ah---
|
|
17h 7 BYTEs ???
|
|
1Eh DWORD pointer to ???
|
|
22h DWORD pointer to IFS open file structure (see #01661)
|
|
26h BYTE seek type (02h = from end)
|
|
28h DWORD offset on call
|
|
returned new absolute position
|
|
---class 05h functions 0Bh,0Ch---
|
|
17h 7 BYTEs ???
|
|
1Eh DWORD pointer to ???
|
|
22h DWORD pointer to IFS open file structure (see #01661)
|
|
28h WORD number of bytes to transfer
|
|
returned bytes actually transferred
|
|
2Ah DWORD transfer address
|
|
---class 05h function 0Dh---
|
|
17h 7 BYTEs ???
|
|
1Eh DWORD pointer to ???
|
|
22h DWORD pointer to IFS open file structure (see #01661)
|
|
26h BYTE file handle???
|
|
27h BYTE unused???
|
|
28h WORD ???
|
|
2Ah WORD ???
|
|
2Ch WORD ???
|
|
2Eh WORD ???
|
|
---class 05h function 0Eh---
|
|
17h 7 BYTEs ???
|
|
1Eh DWORD pointer to ???
|
|
22h DWORD pointer to IFS open file structure (see #01661)
|
|
26h BYTE 00h commit file
|
|
01h close file
|
|
27h BYTE unused???
|
|
---class 05h function 0Fh---
|
|
17h 7 BYTEs ???
|
|
1Eh DWORD pointer to ???
|
|
22h 4 BYTEs ???
|
|
26h BYTE 02h GET attributes
|
|
03h PUT attributes
|
|
27h BYTE unused???
|
|
28h 12 BYTEs ???
|
|
34h WORD search attributes???
|
|
36h DWORD pointer to filename
|
|
3Ah WORD (GET) returned ???
|
|
3Ch WORD (GET) returned ???
|
|
3Eh WORD (GET) returned ???
|
|
40h WORD (GET) returned ???
|
|
42h WORD (PUT) new attributes
|
|
(GET) returned attributes
|
|
---class 05h function 10h---
|
|
17h 7 BYTEs ???
|
|
1Eh DWORD pointer to ???
|
|
22h DWORD pointer to IFS open file structure (see #01661)
|
|
26h WORD ???
|
|
28h DWORD pointer to ???
|
|
2Ch WORD ???
|
|
2Eh BYTE ???
|
|
2Fh BYTE subfunction
|
|
01h get printer setup
|
|
03h ???
|
|
04h ???
|
|
05h ???
|
|
06h ???
|
|
07h ???
|
|
21h set printer setup
|
|
---class 05h function 11h---
|
|
17h 7 BYTEs ???
|
|
1Eh DWORD pointer to ???
|
|
22h DWORD pointer to IFS open file structure (see #01661)
|
|
26h BYTE subfunction
|
|
27h BYTE unused???
|
|
28h WORD ???
|
|
2Ah WORD ???
|
|
2Ch WORD ???
|
|
2Eh BYTE ???
|
|
2Fh BYTE ???
|
|
---class 05h function 12h---
|
|
17h 15 BYTEs unused???
|
|
26h WORD PSP segment
|
|
28h BYTE type of process termination
|
|
29h BYTE unused???
|
|
---class 05h function 13h---
|
|
17h 15 BYTEs unused???
|
|
26h WORD PSP segment
|
|
---request class 06h---
|
|
16h DWORD returned pointer to string corresponding to error code at 03h
|
|
1Ah BYTE returned ???
|
|
1Bh BYTE unused
|
|
---request class 07h---
|
|
16h DWORD pointer to IFS open file structure (see #01661)
|
|
1Ah BYTE ???
|
|
1Bh BYTE unused???
|
|
SeeAlso: #01659,#01658,#01661
|
|
|
|
Format of IFS open file structure:
|
|
Offset Size Description (Table 01661)
|
|
00h WORD ???
|
|
02h WORD device info word
|
|
04h WORD file open mode
|
|
06h WORD ???
|
|
08h WORD file attributes
|
|
0Ah WORD owner's network machine number
|
|
0Ch WORD owner's PSP segment
|
|
0Eh DWORD file size
|
|
12h DWORD current offset in file
|
|
16h WORD file time
|
|
18h WORD file date
|
|
1Ah 11 BYTEs filename in FCB format
|
|
25h WORD ???
|
|
27h WORD hash value of SFT address
|
|
(low word of linear address + segment&F000h)
|
|
29h 3 WORDs network info from SFT
|
|
2Fh WORD ???
|
|
|
|
Format of one item in DOS 4.0+ list of special program names:
|
|
Offset Size Description (Table 01662)
|
|
00h BYTE length of name (00h = end of list)
|
|
01h N BYTEs name in format name.ext
|
|
N 2 BYTEs DOS version to return for program (major,minor)
|
|
(see AH=30h,INT 2F/AX=122Fh)
|
|
---DOS 4 only---
|
|
N+2 BYTE number of times to return fake version number (FFh = always)
|
|
Note: if the name of the executable for the program making the DOS "get
|
|
version" call matches one of the names in this list, DOS returns the
|
|
specified version rather than the true version number
|
|
--------v-215252-----------------------------
|
|
INT 21 - VIRUS - "516"/"Leapfrog" - INSTALLATION CHECK
|
|
AX = 5252h
|
|
Return: BX = FFEEh if resident
|
|
SeeAlso: AX=4BFFh"Cascade",AX=58CCh
|
|
--------D-2153-------------------------------
|
|
INT 21 - DOS 2+ internal - TRANSLATE BIOS PARAMETER BLOCK TO DRIVE PARAM BLOCK
|
|
AH = 53h
|
|
DS:SI -> BIOS Parameter Block (see #01663)
|
|
ES:BP -> buffer for Drive Parameter Block (see #01395 at AH=32h)
|
|
DBP drive byte must be set to valid drive (Windows95-OSR2)
|
|
---Windows95---
|
|
CX = signature 4558h ('EX') for FAT32 extended BPB/DPB (see #01664)
|
|
DX = signature 4152h ('AR') for FAT32 extended BPB/DPB
|
|
Return: ES:BP buffer filled
|
|
Notes: for DOS 3.0+, the cluster at which to start searching is set to 0000h
|
|
and the number of free clusters is set to FFFFh (unknown)
|
|
if the number of sectors per cluster is set to zero, MS-DOS will hang
|
|
at startup because it computes the internally-used shift count by
|
|
shifting this value right until the carry flag is set; since this
|
|
will never happen when the field is zero, MS-DOS hangs
|
|
not supported by Windows NT 3.1
|
|
|
|
Format of BIOS Parameter Block:
|
|
Offset Size Description (Table 01663)
|
|
00h WORD number of bytes per sector
|
|
02h BYTE number of sectors per cluster
|
|
03h WORD number of reserved sectors at start of disk
|
|
05h BYTE number of FATs
|
|
06h WORD number of entries in root directory
|
|
08h WORD total number of sectors
|
|
for DOS 4.0+, set to zero if partition >32M, then set DWORD at
|
|
15h to actual number of sectors
|
|
0Ah BYTE media ID byte (see #01356)
|
|
0Bh WORD number of sectors per FAT
|
|
---DOS 2.13---
|
|
0Dh WORD number of sectors per track
|
|
0Fh WORD number of heads
|
|
11h WORD number of hidden sectors
|
|
---DOS 3.0+ ---
|
|
0Dh WORD number of sectors per track
|
|
0Fh WORD number of heads
|
|
11h DWORD number of hidden sectors
|
|
15h 11 BYTEs reserved
|
|
---DOS 4.0+ ---
|
|
15h DWORD total number of sectors if word at 08h contains zero
|
|
19h 6 BYTEs ???
|
|
1Fh WORD number of cylinders
|
|
21h BYTE device type
|
|
22h WORD device attributes (removable or not, etc)
|
|
---DR DOS 5+ ---
|
|
15h DWORD total number of sectors if word at 08h contains zero
|
|
19h 6 BYTEs reserved
|
|
---European MS-DOS 4.00---
|
|
15h DWORD total number of sectors if word at 08h contains zero
|
|
(however, this DOS does not actually implement >32M partitions)
|
|
SeeAlso: #01395,#01664
|
|
|
|
Format of Extended BIOS Parameter Block:
|
|
Offset Size Description (Table 01664)
|
|
00h 25 BYTEs same as standard DOS 4-6 BPB (see #01663)
|
|
19h DWORD sectors per FAT if WORD at 0Bh is 0000h
|
|
1Dh WORD extended flags
|
|
bit 7: do not mirror active FAT to inactive FATs
|
|
bits 6-4: reserved (0)
|
|
bits 3-0: the 0-based FAT number of the active FAT
|
|
(if mirroring disabled)
|
|
1Fh WORD file system version (high byte=major, low byte=minor)
|
|
0000h = Win95-OSR2
|
|
21h DWORD starting cluster number of root directory
|
|
25h WORD file system information sector number (see also #01788)
|
|
FFFFh if none
|
|
27h WORD sector number of backup boot sector (FFFFh if none)
|
|
29h 6 WORDs reserved
|
|
SeeAlso: #01560,#01787
|
|
--------D-2154-------------------------------
|
|
INT 21 - DOS 2+ - GET VERIFY FLAG
|
|
AH = 54h
|
|
Return: AL = verify flag
|
|
00h off
|
|
01h on (all disk writes verified after writing)
|
|
SeeAlso: AH=2Eh
|
|
--------v-2154--BX4475-----------------------
|
|
INT 21 - VIRUS - "Dual_GtM"/"Ganeu" - INSTALLATION CHECK
|
|
AH = 54h
|
|
BX = 4475h ("Du")
|
|
CX = 616Ch ("al")
|
|
Return: BX = 4774h ("Gt") and CX = 4D21h ("M!") if resident
|
|
SeeAlso: AX=50FDh"VIRUS",AX=5454h"VIRUS"
|
|
--------v-215454-----------------------------
|
|
INT 21 - VIRUS - "Dudley" - INSTALLATION CHECK
|
|
AX = 5454h
|
|
Return: AX = 0000h if resident
|
|
SeeAlso: AX=50FDh"VIRUS",AH=54h/BX=4475h"VIRUS",AX=7BCEh"VIRUS"
|
|
--------D-2155-------------------------------
|
|
INT 21 - DOS 2+ internal - CREATE CHILD PSP
|
|
AH = 55h
|
|
DX = segment at which to create new PSP
|
|
SI = (DOS 3.0+) value to place in memory size field at DX:[0002h]
|
|
Return: AL destroyed
|
|
Notes: creates a "child" PSP rather than making an exact copy of the current
|
|
PSP; the new PSP's parent pointer is set to the current PSP and the
|
|
reference count for each inherited file is incremented
|
|
(DOS 2.0+) sets current PSP to DX
|
|
(DOS 3.0+) marks "no inherit" file handles as closed in child PSP
|
|
this function is implemented using the same code as AH=26h, so unlike
|
|
other DOS 2+ functions, it does not return status in CF, instead
|
|
returning status in AL as DOS 1.x functions do (but it never puts an
|
|
explicit return value in AL)
|
|
SeeAlso: AH=26h,AH=50h
|
|
--------D-2156-------------------------------
|
|
INT 21 - DOS 2+ - "RENAME" - RENAME FILE
|
|
AH = 56h
|
|
DS:DX -> ASCIZ filename of existing file (no wildcards, but see below)
|
|
ES:DI -> ASCIZ new filename (no wildcards)
|
|
CL = attribute mask (server call only, see below)
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = error code (02h,03h,05h,11h) (see #01680)
|
|
Notes: allows move between directories on same logical volume
|
|
this function does not set the archive attribute
|
|
(see #01420 at AX=4301h), which results in incremental backups not
|
|
backing up the file under its new name
|
|
open files should not be renamed
|
|
(DOS 2.x only) this function renames file by creating a new directory
|
|
entry with the new name, then marking the old entry deleted
|
|
(DOS 3.0+) allows renaming of directories
|
|
(DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
|
|
error 12h (no more files) is returned on success, and both source and
|
|
destination specs must be canonical (as returned by AH=60h).
|
|
Wildcards in the destination are replaced by the corresponding char
|
|
of each source file being renamed. Under DOS 3.x, the call will fail
|
|
if the destination wildcard is *.* or equivalent; under DR DOS 5.0,
|
|
the call will fail with error code 03h if any wildcards are used.
|
|
When invoked via AX=5D00h, only those files matching the attribute
|
|
mask in CL are renamed.
|
|
under the FlashTek X-32 DOS extender, the old-name pointer is in DS:EDX
|
|
and the new-name pointer is in ES:EDI (DS must equal ES)
|
|
BUG: (DR DOS 3.41) when invoked via AX=5D00h, this function will generate
|
|
a new directory entry with the new name (including any wildcards)
|
|
which can only be removed with a sector editor
|
|
SeeAlso: AH=17h,AX=4301h,AX=43FFh/BP=5053h,AX=5D00h,AH=60h,AX=7156h
|
|
SeeAlso: AX=F257h/SF=04h
|
|
--------v-215643------------------------
|
|
INT 21 - VIRUS - "PS-MPC.Gold" - INSTALLATION CHECK
|
|
AX = 5643h ('VC')
|
|
Return: AX = 5053h ('PS') if resident
|
|
SeeAlso: AX=33E0h"VIRUS",AX=5741h"VIRUS",AX=6303h"VIRUS"
|
|
--------D-215700-----------------------------
|
|
INT 21 - DOS 2+ - GET FILE'S LAST-WRITTEN DATE AND TIME
|
|
AX = 5700h
|
|
BX = file handle
|
|
Return: CF clear if successful
|
|
CX = file's time (see #01665)
|
|
DX = file's date (see #01666)
|
|
CF set on error
|
|
AX = error code (01h,06h) (see #01680)
|
|
Note: under DR DOS 3.41 and 5.0, this function returns 0 (no date/time) for
|
|
character devices; MS-DOS returns date and time of opening
|
|
SeeAlso: AX=5701h,AX=5704h"Windows95"
|
|
|
|
Bitfields for file time:
|
|
Bit(s) Description (Table 01665)
|
|
15-11 hours (0-23)
|
|
10-5 minutes
|
|
4-0 seconds/2
|
|
|
|
Bitfields for file date:
|
|
Bit(s) Description (Table 01666)
|
|
15-9 year - 1980
|
|
8-5 month
|
|
4-0 day
|
|
--------D-215701-----------------------------
|
|
INT 21 - DOS 2+ - SET FILE'S LAST-WRITTEN DATE AND TIME
|
|
AX = 5701h
|
|
BX = file handle
|
|
CX = new time (see #01665)
|
|
DX = new date (see #01666)
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = error code (01h,06h) (see #01680)
|
|
SeeAlso: AX=5700h,AX=5705h"Windows95",AX=5707h"Windows95"
|
|
--------D-215702-----------------------------
|
|
INT 21 - DOS 4.x only - GET EXTENDED ATTRIBUTES FOR FILE
|
|
AX = 5702h
|
|
BX = file handle
|
|
CX = size of result buffer or 0000h
|
|
DS:SI -> EAP list (see #01667)
|
|
ES:DI -> buffer for returned EAV list (see #01670)
|
|
Return: CF clear if successful
|
|
CX = size of returned data
|
|
CF set on error
|
|
AX = error code (see #01680)
|
|
Desc: get the current value of one or more extended attributes
|
|
Notes: if CX=0000h on entry, ES:DI is ignored and no data is actually
|
|
returned, only the amount of data which is available
|
|
the default DOS 4 behavior is to return a single word of 0000h (no
|
|
structures) in the result buffer if CX>=0002h on entry; this
|
|
functionality was apparently never released to the public
|
|
SeeAlso: AX=5703h,AX=5704h,AH=6Eh,INT 2F/AX=112Dh
|
|
|
|
Format of EAP (extended attribute properties) list:
|
|
Offset Size Description (Table 01667)
|
|
00h WORD number of EAP structures following
|
|
02h var array of EAP structures (see #01668)
|
|
SeeAlso: #01670
|
|
|
|
Format of EAP (extended attribute property) structure:
|
|
Offset Size Description (Table 01668)
|
|
00h BYTE attribute type
|
|
01h boolean (either 00h or 01h)
|
|
02h number (BYTE, WORD, or DWORD)
|
|
03h string
|
|
04h date stamp
|
|
05h time stamp
|
|
01h WORD EAP flags (see #01669)
|
|
03h BYTE size of reference string (name)
|
|
04h N BYTEs reference string
|
|
|
|
Bitfields for EAP flags:
|
|
Bit(s) Description (Table 01669)
|
|
12 unchangeable
|
|
13 ignore
|
|
14 unchangeable
|
|
15 used by COMMAND.COM for code page, but not understood by ATTRIB
|
|
|
|
Format of EAV (extended attribute value) list:
|
|
Offset Size Description (Table 01670)
|
|
00h WORD number of EAV structures following
|
|
02h var array of Extended Attribute Value structures (see #01671)
|
|
SeeAlso: #01667
|
|
|
|
Format of Extended Attribute Value structures:
|
|
Offset Size Description (Table 01671)
|
|
00h 4 BYTEs ???
|
|
04h BYTE size of reference string
|
|
05h WORD size of value
|
|
07h var reference string
|
|
var value
|
|
--------O-215702-----------------------------
|
|
INT 21 - OS/2 v1.1+ Family API - DosQFileInfo
|
|
AX = 5702h
|
|
BX = file handle
|
|
CX = size of buffer for information
|
|
DX = level of information
|
|
0001h standard file information (see #01672)
|
|
0002h Query EA Size (see #01672)
|
|
0003h Query EAs from List (see #01673)
|
|
0004h Query All EAs (see #01673)
|
|
ES:DI -> buffer for information (see #01672,#01673)
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = error code
|
|
SeeAlso: AX=5702h/BX=FFFFh,AX=5703h"OS/2",AH=6Dh"OS/2"
|
|
|
|
Format of OS/2 DosQFileInfo:
|
|
Offset Size Description (Table 01672)
|
|
00h WORD creation date
|
|
02h WORD creation time
|
|
04h WORD last access date
|
|
06h WORD last access time
|
|
08h WORD last write date
|
|
0Ah WORD last write time
|
|
0Ch DWORD file size in bytes
|
|
10h DWORD allocated space in bytes
|
|
14h WORD file attributes
|
|
---level 2 only---
|
|
16h DWORD size of Extended Attributes in byte
|
|
SeeAlso: #01673,#01676
|
|
|
|
Format of OS/2 DosQFileInfo, EAOP structure:
|
|
Offset Size Description (Table 01673)
|
|
00h DWORD pointer to general EA list (see #01674)
|
|
04h DWORD pointer to buffer for full EA list, with length field set
|
|
08h DWORD (ret) error
|
|
Note: for info level 3, the first pointer must contain the address of a
|
|
list of the Extended Attributes to be retrieved; for info level 4,
|
|
it should be 0000h:0000h
|
|
SeeAlso: #01672,#01676
|
|
|
|
Format of OS/2 DosQFileInfo, General EA List:
|
|
Offset Size Description (Table 01674)
|
|
00h DWORD (call) total size of list in bytes (including this field)
|
|
(ret) number of bytes actually used (including this field)
|
|
04h var Extended Attribute entries (see #01675) [packed arrray]
|
|
|
|
Format of OS/2 DosQFileInfo, General EA entry:
|
|
Offset Size Description (Table 01675)
|
|
00h BYTE length of Extended Attribute name (excluding terminating NUL)
|
|
01h N BYTEs EA name
|
|
BYTE 00h
|
|
SeeAlso: #01674
|
|
|
|
Format of OS/2 DosQFileInfo, Full EA List:
|
|
Offset Size Description (Table 01676)
|
|
00h DWORD (call) total size of list in bytes (including this field)
|
|
(ret) number of bytes actually used (including this field)
|
|
04h var Extended Attribute data (see #01677) [packed array]
|
|
SeeAlso: #01672,#01673
|
|
|
|
Format of OS/2 Extended Attribute data (struct FEA):
|
|
Offset Size Description (Table 01677)
|
|
00h BYTE flags
|
|
bit 7: critical EA
|
|
01h BYTE length of Extended Attribute name (excluding terminating NUL)
|
|
02h WORD length of Extended Attribute value
|
|
04h N BYTEs EA name
|
|
BYTE 00h
|
|
M BYTEs EA value
|
|
--------O-215702BXFFFF-----------------------
|
|
INT 21 - OS/2 v1.1+ Compatibility Box Family API - DosQPathInfo
|
|
AX = 5702h
|
|
BX = FFFFh
|
|
CX = size of buffer for information
|
|
DX = level of information (0002h)
|
|
DS:SI -> filename
|
|
ES:DI -> buffer for FAPI path information (see #01678)
|
|
Return: CF clear if successful
|
|
AL = 00h
|
|
CF set on error
|
|
AX = error code
|
|
SeeAlso: AX=5702h"OS/2",AX=5703h/BX=FFFFh
|
|
|
|
Format of FAPI path information:
|
|
Offset Size Description (Table 01678)
|
|
00h 22 BYTEs ???
|
|
16h DWORD extended attribute size (none present if less than 5)
|
|
--------D-215703-----------------------------
|
|
INT 21 - DOS 4.x only - GET EXTENDED ATTRIBUTE PROPERTIES
|
|
AX = 5703h
|
|
BX = file handle
|
|
CX = size of result buffer or 0000h
|
|
ES:DI -> result buffer
|
|
Return: CF clear if successful
|
|
CX = size of returned data
|
|
CF set on error
|
|
AX = error code (see #01680)
|
|
ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
|
|
Desc: get a list of the extended attributes which are defined for the
|
|
specified file
|
|
Notes: if CX=0000h on entry, ES:DI is ignored and no data is actually
|
|
returned, only the amount of data which is available
|
|
the default DOS 4 behavior is to return a trivial EAP list consisting
|
|
of the single word 0000h (no EAP structures) if CX>=0002h on entry;
|
|
this functionality was apparently never released to the public
|
|
SeeAlso: AX=5702h,AX=5704h,AH=6Eh,INT 2F/AX=112Dh
|
|
--------O-215703-----------------------------
|
|
INT 21 - OS/2 v1.1+ Family API - DosSetFileInfo
|
|
AX = 5703h
|
|
BX = file handle
|
|
CX = size of information buffer
|
|
DX = level of information
|
|
ES:DI -> information buffer
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = error code
|
|
SeeAlso: AX=5702h"OS/2",AX=5703h/BX=FFFFh
|
|
--------O-215703BXFFFF-----------------------
|
|
INT 21 - OS/2 v1.1+ Family API - DosSetPathInfo
|
|
AX = 5703h
|
|
BX = FFFFh
|
|
CX = size of information buffer
|
|
DX = level of information
|
|
DS:SI -> filename
|
|
ES:DI -> information buffer
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = error code
|
|
SeeAlso: AX=5702h/BX=FFFFh,AX=5703h"OS/2"
|
|
--------D-215704-----------------------------
|
|
INT 21 - DOS 4.x only - SET EXTENDED ATTRIBUTES
|
|
AX = 5704h
|
|
BX = file handle
|
|
ES:DI -> EAV list (see #01670)
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = error code (see #01680)
|
|
Note: the default DOS 4 behavior is to do nothing and return successfully;
|
|
this functionality was apparently never released to the public
|
|
SeeAlso: AX=5702h,AX=5703h,INT 2F/AX=112Dh
|
|
--------D-215704-----------------------------
|
|
INT 21 - MS-DOS 7/Windows95 - GET LAST ACCESS DATE AND TIME
|
|
AX = 5704h
|
|
BX = file handle
|
|
Return: CF clear if successful
|
|
DX = last access date (see #01666)
|
|
CX = last access time (currently always 0000h)
|
|
CF set on error
|
|
AX = error code
|
|
SeeAlso: AX=5701h,AX=5705h,AX=5706h
|
|
--------D-215705-----------------------------
|
|
INT 21 - MS-DOS 7/Windows95 - SET LAST ACCESS DATE AND TIME
|
|
AX = 5705h
|
|
BX = file handle
|
|
CX = new last-access time (currently not supported, must be 0000h)
|
|
DX = new last-access date (see #01666)
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = error code
|
|
SeeAlso: AX=5700h,AX=5704h"Windows95",AX=5707h
|
|
--------D-215706-----------------------------
|
|
INT 21 - MS-DOS 7/Windows95 - GET CREATION DATE AND TIME
|
|
AX = 5706h
|
|
BX = file handle
|
|
Return: CF clear if successful
|
|
CX = creation time (see #01665)
|
|
DX = creation date (see #01666)
|
|
SI = number of 10-millisecond units past time in CX (0-199)
|
|
CF set on error
|
|
AX = error code
|
|
SeeAlso: AX=5701h,AX=5704h"Windows95",AX=5707h
|
|
--------D-215707-----------------------------
|
|
INT 21 - MS-DOS 7/Windows95 - SET CREATION DATE AND TIME
|
|
AX = 5707h
|
|
BX = file handle
|
|
CX = new creation time (see #01665)
|
|
DX = new creation date (see #01666)
|
|
SI = new creation time: 10-millisecond units past time in CX (0-199)
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = error code
|
|
SeeAlso: AX=5700h,AX=5705h,AX=5706h
|
|
--------v-215741-----------------------------
|
|
INT 21 - VIRUS - "WARP" -INSTALLATION CHECK
|
|
AX = 5741h
|
|
Return: AX = 5250h if resident
|
|
SeeAlso: AX=5643h"VIRUS",AX=58CCh"VIRUS"
|
|
--------U-215757BX5757-----------------------
|
|
INT 21 U - IBM Genie - Resident Manager - INSTALLATION CHECK
|
|
AX = 5757h
|
|
BX = 5757h
|
|
Return: AX = 0000h if installed
|
|
BX = ???
|
|
DX = ???
|
|
DS:SI -> list of 27 DWORD entry point addresses
|
|
Program: IBM Genie is a set of utility TSRs by Helix Software
|
|
Note: other functions possible if BX <> 5757h, but details not yet available
|
|
----------215758-----------------------------
|
|
INT 21 U - Headroom - API
|
|
AX = 5758h
|
|
BL = function
|
|
00h ???
|
|
01h get Headroom location
|
|
Return: CF clear if installed
|
|
AX = PSP segment of Headroom TSR
|
|
BX = paragraphs of memory used by Headroom
|
|
CF set if not (normal DOS return)
|
|
Note: this function is also used as an installation check
|
|
02h get INT 21 handler
|
|
Return: CF clear
|
|
ES:BX -> Headroom's INT 21 handler
|
|
Note: also sets unknown flag
|
|
03h launch application???
|
|
DS:SI -> 233-byte application record
|
|
Return: ???
|
|
04h ???
|
|
???
|
|
Return: CF clear
|
|
05h get swap directory
|
|
Return: CF clear
|
|
DX:AX -> ASCIZ swap directory name
|
|
06h ???
|
|
DX = ???
|
|
Return: CF clear
|
|
07h ???
|
|
08h ???
|
|
09h get current application
|
|
Return: BX = application number
|
|
0Ah ???
|
|
DX = application number
|
|
DS:SI = ???
|
|
Return: ???
|
|
0Bh ???
|
|
0Ch ???
|
|
DX = application number
|
|
???
|
|
Return: ???
|
|
0Dh ???
|
|
DX = application number
|
|
???
|
|
Return: ???
|
|
0Eh get ???
|
|
Return: CF clear
|
|
AX = ???
|
|
0Fh set ??? flag
|
|
10h clear ??? flag
|
|
11h find application by name
|
|
DS:SI -> ASCIZ application name
|
|
Return: CF clear
|
|
AX = application number or FFFFh if not loaded
|
|
12h ???
|
|
DX = application number
|
|
Return: CF clear
|
|
???
|
|
13h ???
|
|
Return: CF clear
|
|
14h ???
|
|
same as function 13h
|
|
15h set ???
|
|
DX = ???
|
|
16h get ???
|
|
Return: AX = ??? set by function 15h
|
|
17h get ???
|
|
Return: BX = ???
|
|
CX = ??? (may be pointer in BX:CX)
|
|
18h BUG: branches incorrectly due to fencepost error
|
|
Program: Headroom is a TSR/task switcher by Helix Software
|
|
SeeAlso: AX=4C57h,AX=5757h,INT 2F/AX=5758h
|
|
--------D-2158-------------------------------
|
|
INT 21 - DOS 2.11+ - GET OR SET MEMORY ALLOCATION STRATEGY
|
|
AH = 58h
|
|
AL = subfunction
|
|
00h get allocation strategy
|
|
Return: AX = current strategy (see #01679)
|
|
01h set allocation strategy
|
|
BL = new allocation strategy (see #01679)
|
|
BH = 00h (DOS 5+)
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = error code (01h) (see #01680)
|
|
Notes: the Set subfunction accepts any value in BL for DOS 3.x and 4.x;
|
|
2 or greater means last fit
|
|
the Get subfunction returns the last value set
|
|
setting an allocation strategy involving high memory does not
|
|
automatically link in the UMB memory chain; this must be done
|
|
explicitly with AX=5803h in order to actually allocate high memory
|
|
a program which changes the allocation strategy should restore it
|
|
before terminating
|
|
Toshiba MS-DOS v2.11 supports subfunctions 00h and 01h, as does the
|
|
TI Professional MS-DOS v2.13
|
|
DR DOS 3.41 reportedly reverses subfunctions 00h and 01h
|
|
SeeAlso: AH=48h,AH=49h,AH=4Ah,INT 2F/AX=4310h"XMS",INT 67/AH=3Fh
|
|
|
|
(Table 01679)
|
|
Values for DOS memory allocation strategy:
|
|
00h low memory first fit
|
|
01h low memory best fit
|
|
02h low memory last fit
|
|
---DOS 5+ ---
|
|
40h high memory first fit
|
|
41h high memory best fit
|
|
42h high memory last fit
|
|
80h first fit, try high then low memory
|
|
81h best fit, try high then low memory
|
|
82h last fit, try high then low memory
|
|
--------D-2158-------------------------------
|
|
INT 21 - DOS 5+ - GET OR SET UMB LINK STATE
|
|
AH = 58h
|
|
AL = subfunction
|
|
02h get UMB link state
|
|
Return: AL = current link state
|
|
00h UMBs not part of DOS memory chain
|
|
01h UMBs in DOS memory chain
|
|
03h set UMB link state
|
|
BX = new link state
|
|
0000h remove UMBs from DOS memory chain
|
|
0001h add UMBs to DOS memory chain
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = error code (01h) (see #01680)
|
|
Notes: a program which changes the UMB link state should restore it before
|
|
terminating
|
|
UMBs will only be available if CONFIG.SYS contains the line DOS=UMB,
|
|
the UMBs have been linked into the memory chain with AX=5803h, and
|
|
the allocation strategy has been set to include high memory with
|
|
AX=5801h
|
|
SeeAlso: #01687,#02766 at INT 2F/AX=4310h
|
|
--------v-2158CC-----------------------------
|
|
INT 21 - VIRUS - "1067"/"Headcrash" - INSTALLATION CHECK
|
|
AX = 58CCh
|
|
Return: CF clear if resident
|
|
SeeAlso: AX=5741h"VIRUS",AX=5643h,AX=5252h,AX=58DDh,AX=6303h"VIRUS",AX=6969h
|
|
--------v-2158DD-----------------------------
|
|
INT 21 - VIRUS - "1067"/"Headcrash" - GET ORIGINAL INT 21h VECTOR
|
|
AX = 58DDh
|
|
Return: CX = code segment of virus
|
|
ES:BX = old INT 21h vector
|
|
SeeAlso: AX=5252h,AX=58CCh,AX=6969h
|
|
--------D-2159--BX0000-----------------------
|
|
INT 21 - DOS 3.0+ - GET EXTENDED ERROR INFORMATION
|
|
AH = 59h
|
|
BX = 0000h
|
|
Return: AX = extended error code (see #01680)
|
|
BH = error class (see #01682)
|
|
BL = recommended action (see #01683)
|
|
CH = error locus (see #01684)
|
|
ES:DI may be pointer (see #01681, #01680)
|
|
CL, DX, SI, BP, and DS destroyed
|
|
Notes: functions available under DOS 2.x map the true DOS 3.0+ error code into
|
|
one supported under DOS 2.x
|
|
you should call this function to retrieve the true error code when an
|
|
FCB or DOS 2.x call returns an error
|
|
under DR DOS 5.0, this function does not use any of the DOS-internal
|
|
stacks and may thus be called at any time
|
|
SeeAlso: AH=59h/BX=0001h,AX=5D0Ah,INT 2F/AX=122Dh,INT 24
|
|
|
|
(Table 01680)
|
|
Values for DOS extended error code:
|
|
---DOS 2.0+ ---
|
|
00h (0) no error
|
|
01h (1) function number invalid
|
|
02h (2) file not found
|
|
03h (3) path not found
|
|
04h (4) too many open files (no handles available)
|
|
05h (5) access denied
|
|
06h (6) invalid handle
|
|
07h (7) memory control block destroyed
|
|
08h (8) insufficient memory
|
|
09h (9) memory block address invalid
|
|
0Ah (10) environment invalid (usually >32K in length)
|
|
0Bh (11) format invalid
|
|
0Ch (12) access code invalid
|
|
0Dh (13) data invalid
|
|
0Eh (14) reserved
|
|
0Eh (14) (PTS-DOS 6.51+, S/DOS 1.0+) fixup overflow
|
|
0Fh (15) invalid drive
|
|
10h (16) attempted to remove current directory
|
|
11h (17) not same device
|
|
12h (18) no more files
|
|
---DOS 3.0+ (INT 24 errors)---
|
|
13h (19) disk write-protected
|
|
14h (20) unknown unit
|
|
15h (21) drive not ready
|
|
16h (22) unknown command
|
|
17h (23) data error (CRC)
|
|
18h (24) bad request structure length
|
|
19h (25) seek error
|
|
1Ah (26) unknown media type (non-DOS disk)
|
|
1Bh (27) sector not found
|
|
1Ch (28) printer out of paper
|
|
1Dh (29) write fault
|
|
1Eh (30) read fault
|
|
1Fh (31) general failure
|
|
20h (32) sharing violation
|
|
21h (33) lock violation
|
|
22h (34) disk change invalid (ES:DI -> media ID structure)(see #01681)
|
|
23h (35) FCB unavailable
|
|
23h (35) (PTS-DOS 6.51+, S/DOS 1.0+) bad FAT
|
|
24h (36) sharing buffer overflow
|
|
25h (37) (DOS 4.0+) code page mismatch
|
|
26h (38) (DOS 4.0+) cannot complete file operation (EOF / out of input)
|
|
27h (39) (DOS 4.0+) insufficient disk space
|
|
28h-31h reserved
|
|
---OEM network errors (INT 24)---
|
|
32h (50) network request not supported
|
|
33h (51) remote computer not listening
|
|
34h (52) duplicate name on network
|
|
35h (53) network name not found
|
|
36h (54) network busy
|
|
37h (55) network device no longer exists
|
|
38h (56) network BIOS command limit exceeded
|
|
39h (57) network adapter hardware error
|
|
3Ah (58) incorrect response from network
|
|
3Bh (59) unexpected network error
|
|
3Ch (60) incompatible remote adapter
|
|
3Dh (61) print queue full
|
|
3Eh (62) queue not full
|
|
3Fh (63) not enough space to print file
|
|
40h (64) network name was deleted
|
|
41h (65) network: Access denied
|
|
(DOS 3.0+ [maybe 3.3+???]) codepage switching not possible
|
|
(see also INT 21/AX=6602h,INT 2F/AX=AD42h)
|
|
42h (66) network device type incorrect
|
|
43h (67) network name not found
|
|
44h (68) network name limit exceeded
|
|
45h (69) network BIOS session limit exceeded
|
|
46h (70) temporarily paused
|
|
47h (71) network request not accepted
|
|
48h (72) network print/disk redirection paused
|
|
49h (73) network software not installed
|
|
(LANtastic) invalid network version
|
|
4Ah (74) unexpected adapter close
|
|
(LANtastic) account expired
|
|
4Bh (75) (LANtastic) password expired
|
|
4Ch (76) (LANtastic) login attempt invalid at this time
|
|
4Dh (77) (LANtastic v3+) disk limit exceeded on network node
|
|
4Eh (78) (LANtastic v3+) not logged in to network node
|
|
4Fh (79) reserved
|
|
---end of errors reportable via INT 24---
|
|
50h (80) file exists
|
|
51h (81) (undoc) duplicated FCB
|
|
52h (82) cannot make directory
|
|
53h (83) fail on INT 24h
|
|
---network-related errors (non-INT 24)---
|
|
54h (84) (DOS 3.3+) too many redirections / out of structures
|
|
55h (85) (DOS 3.3+) duplicate redirection / already assigned
|
|
56h (86) (DOS 3.3+) invalid password
|
|
57h (87) (DOS 3.3+) invalid parameter
|
|
58h (88) (DOS 3.3+) network write fault
|
|
59h (89) (DOS 4.0+) function not supported on network / no process slots
|
|
available
|
|
5Ah (90) (DOS 4.0+) required system component not installed / not frozen
|
|
5Bh (91) (DOS 4.0+,NetWare4) timer server table overflowed
|
|
5Ch (92) (DOS 4.0+,NetWare4) duplicate in timer service table
|
|
5Dh (93) (DOS 4.0+,NetWare4) no items to work on
|
|
5Fh (95) (DOS 4.0+,NetWare4) interrupted / invalid system call
|
|
64h (100) (MSCDEX) unknown error
|
|
64h (100) (DOS 4.0+,NetWare4) open semaphore limit exceeded
|
|
65h (101) (MSCDEX) not ready
|
|
65h (101) (DOS 4.0+,NetWare4) exclusive semaphore is already owned
|
|
66h (102) (MSCDEX) EMS memory no longer valid
|
|
66h (102) (DOS 4.0+,NetWare4) semaphore was set when close attempted
|
|
67h (103) (MSCDEX) not High Sierra or ISO-9660 format
|
|
67h (103) (DOS 4.0+,NetWare4) too many exclusive semaphore requests
|
|
68h (104) (MSCDEX) door open
|
|
68h (104) (DOS 4.0+,NetWare4) operation invalid from interrupt handler
|
|
69h (105) (DOS 4.0+,NetWare4) semaphore owner died
|
|
6Ah (106) (DOS 4.0+,NetWare4) semaphore limit exceeded
|
|
6Bh (107) (DOS 4.0+,NetWare4) insert drive B: disk into A: / disk changed
|
|
6Ch (108) (DOS 4.0+,NetWare4) drive locked by another process
|
|
6Dh (109) (DOS 4.0+,NetWare4) broken pipe
|
|
6Eh (110) (DOS 5.0+,NetWare4) pipe open/create failed
|
|
6Fh (111) (DOS 5.0+,NetWare4) pipe buffer overflowed
|
|
70h (112) (DOS 5.0+,NetWare4) disk full
|
|
71h (113) (DOS 5.0+,NetWare4) no more search handles
|
|
72h (114) (DOS 5.0+,NetWare4) invalid target handle for dup2
|
|
73h (115) (DOS 5.0+,NetWare4) bad user virtual address / protection violation
|
|
74h (116) (DOS 5.0+) VIOKBD request
|
|
74h (116) (NetWare4) error on console I/O
|
|
75h (117) (DOS 5.0+,NetWare4) unknown category code for IOCTL
|
|
76h (118) (DOS 5.0+,NetWare4) invalid value for verify flag
|
|
77h (119) (DOS 5.0+,NetWare4) level four driver not found by DOS IOCTL
|
|
78h (120) (DOS 5.0+,NetWare4) invalid / unimplemented function number
|
|
79h (121) (DOS 5.0+,NetWare4) semaphore timeout
|
|
7Ah (122) (DOS 5.0+,NetWare4) buffer too small to hold return data
|
|
7Bh (123) (DOS 5.0+,NetWare4) invalid character or bad file-system name
|
|
7Ch (124) (DOS 5.0+,NetWare4) unimplemented information level
|
|
7Dh (125) (DOS 5.0+,NetWare4) no volume label found
|
|
7Eh (126) (DOS 5.0+,NetWare4) module handle not found
|
|
7Fh (127) (DOS 5.0+,NetWare4) procedure address not found
|
|
80h (128) (DOS 5.0+,NetWare4) CWait found no children
|
|
81h (129) (DOS 5.0+,NetWare4) CWait children still running
|
|
82h (130) (DOS 5.0+,NetWare4) invalid operation for direct disk-access handle
|
|
83h (131) (DOS 5.0+,NetWare4) attempted seek to negative offset
|
|
84h (132) (DOS 5.0+,NetWare4) attempted to seek on device or pipe
|
|
---JOIN/SUBST errors---
|
|
85h (133) (DOS 5.0+,NetWare4) drive already has JOINed drives
|
|
86h (134) (DOS 5.0+,NetWare4) drive is already JOINed
|
|
87h (135) (DOS 5.0+,NetWare4) drive is already SUBSTed
|
|
88h (136) (DOS 5.0+,NetWare4) can not delete drive which is not JOINed
|
|
89h (137) (DOS 5.0+,NetWare4) can not delete drive which is not SUBSTed
|
|
8Ah (138) (DOS 5.0+,NetWare4) can not JOIN to a JOINed drive
|
|
8Bh (139) (DOS 5.0+,NetWare4) can not SUBST to a SUBSTed drive
|
|
8Ch (140) (DOS 5.0+,NetWare4) can not JOIN to a SUBSTed drive
|
|
8Dh (141) (DOS 5.0+,NetWare4) can not SUBST to a JOINed drive
|
|
8Eh (142) (DOS 5.0+,NetWare4) drive is busy
|
|
8Fh (143) (DOS 5.0+,NetWare4) can not JOIN/SUBST to same drive
|
|
90h (144) (DOS 5.0+,NetWare4) directory must not be root directory
|
|
91h (145) (DOS 5.0+,NetWare4) can only JOIN to empty directory
|
|
92h (146) (DOS 5.0+,NetWare4) path is already in use for SUBST
|
|
93h (147) (DOS 5.0+,NetWare4) path is already in use for JOIN
|
|
94h (148) (DOS 5.0+,NetWare4) path is in use by another process
|
|
95h (149) (DOS 5.0+,NetWare4) directory previously SUBSTituted
|
|
96h (150) (DOS 5.0+,NetWare4) system trace error
|
|
97h (151) (DOS 5.0+,NetWare4) invalid event count for DosMuxSemWait
|
|
98h (152) (DOS 5.0+,NetWare4) too many waiting on mutex
|
|
99h (153) (DOS 5.0+,NetWare4) invalid list format
|
|
9Ah (154) (DOS 5.0+,NetWare4) volume label too large
|
|
9Bh (155) (DOS 5.0+,NetWare4) unable to create another TCB
|
|
9Ch (156) (DOS 5.0+,NetWare4) signal refused
|
|
9Dh (157) (DOS 5.0+,NetWare4) segment discarded
|
|
9Eh (158) (DOS 5.0+,NetWare4) segment not locked
|
|
9Fh (159) (DOS 5.0+,NetWare4) invalid thread-ID address
|
|
-----
|
|
A0h (160) (DOS 5.0+) bad arguments
|
|
A0h (160) (NetWare4) bad environment pointer
|
|
A1h (161) (DOS 5.0+,NetWare4) invalid pathname passed to EXEC
|
|
A2h (162) (DOS 5.0+,NetWare4) signal already pending
|
|
A3h (163) (DOS 5.0+) uncertain media
|
|
A3h (163) (NetWare4) ERROR_124 mapping
|
|
A4h (164) (DOS 5.0+) maximum number of threads reached
|
|
A4h (164) (NetWare4) no more process slots
|
|
A5h (165) (NetWare4) ERROR_124 mapping
|
|
B0h (176) (MS-DOS 7.0) volume is not locked
|
|
B1h (177) (MS-DOS 7.0) volume is locked in drive
|
|
B2h (178) (MS-DOS 7.0) volume is not removable
|
|
B4h (180) (MS-DOS 7.0) lock count has been exceeded
|
|
B4h (180) (NetWare4) invalid segment number
|
|
B5h (181) (MS-DOS 7.0) a valid eject request failed
|
|
B5h (181) (DOS 5.0-6.0,NetWare4) invalid call gate
|
|
B6h (182) (DOS 5.0+,NetWare4) invalid ordinal
|
|
B7h (183) (DOS 5.0+,NetWare4) shared segment already exists
|
|
B8h (184) (DOS 5.0+,NetWare4) no child process to wait for
|
|
B9h (185) (DOS 5.0+,NetWare4) NoWait specified and child still running
|
|
BAh (186) (DOS 5.0+,NetWare4) invalid flag number
|
|
BBh (187) (DOS 5.0+,NetWare4) semaphore does not exist
|
|
BCh (188) (DOS 5.0+,NetWare4) invalid starting code segment
|
|
BDh (189) (DOS 5.0+,NetWare4) invalid stack segment
|
|
BEh (190) (DOS 5.0+,NetWare4) invalid module type (DLL can not be used as
|
|
application)
|
|
BFh (191) (DOS 5.0+,NetWare4) invalid EXE signature
|
|
C0h (192) (DOS 5.0+,NetWare4) EXE marked invalid
|
|
C1h (193) (DOS 5.0+,NetWare4) bad EXE format (e.g. DOS-mode program)
|
|
C2h (194) (DOS 5.0+,NetWare4) iterated data exceeds 64K
|
|
C3h (195) (DOS 5.0+,NetWare4) invalid minimum allocation size
|
|
C4h (196) (DOS 5.0+,NetWare4) dynamic link from invalid Ring
|
|
C5h (197) (DOS 5.0+,NetWare4) IOPL not enabled
|
|
C6h (198) (DOS 5.0+,NetWare4) invalid segment descriptor privilege level
|
|
C7h (199) (DOS 5.0+,NetWare4) automatic data segment exceeds 64K
|
|
C8h (200) (DOS 5.0+,NetWare4) Ring2 segment must be moveable
|
|
C9h (201) (DOS 5.0+,NetWare4) relocation chain exceeds segment limit
|
|
CAh (202) (DOS 5.0+,NetWare4) infinite loop in relocation chain
|
|
CBh (203) (NetWare4) environment variable not found
|
|
CCh (204) (NetWare4) not current country
|
|
CDh (205) (NetWare4) no signal sent
|
|
CEh (206) (NetWare4) file name not 8.3
|
|
CFh (207) (NetWare4) Ring2 stack in use
|
|
D0h (208) (NetWare4) meta expansion is too long
|
|
D1h (209) (NetWare4) invalid signal number
|
|
D2h (210) (NetWare4) inactive thread
|
|
D3h (211) (NetWare4) file system information not available
|
|
D4h (212) (NetWare4) locked error
|
|
D5h (213) (NetWare4) attempted to execute non-family API call in DOS mode
|
|
D6h (214) (NetWare4) too many modules
|
|
D7h (215) (NetWare4) nesting not allowed
|
|
E6h (230) (NetWare4) non-existent pipe, or bad operation
|
|
E7h (231) (NetWare4) pipe is busy
|
|
E8h (232) (NetWare4) no data available for nonblocking read
|
|
E9h (233) (NetWare4) pipe disconnected by server
|
|
EAh (234) (NetWare4) more data available
|
|
FFh (255) (NetWare4) invalid drive
|
|
Note: there is a report that some Microsoft documentation shifts all DOS
|
|
error codes in the range BCh (188) through CAh (202) up by one
|
|
compared to what is listed here; that is probably a documentation
|
|
error
|
|
SeeAlso: #01682,#01683,#01684,#01961
|
|
|
|
Format of media ID structure:
|
|
Offset Size Description (Table 01681)
|
|
00h 12 BYTEs ASCIZ volume label of required disk
|
|
0Ch DWORD serial number (DOS 4.0+)
|
|
SeeAlso: #01680
|
|
|
|
(Table 01682)
|
|
Values for DOS Error Class:
|
|
01h (1) out of resource (storage space or I/O channels)
|
|
02h (2) temporary situation (file or record lock)
|
|
03h (3) authorization / permission problem (denied access)
|
|
04h (4) internal system error (system software bug)
|
|
05h (5) hardware failure
|
|
06h (6) system failure (configuration file missing or incorrect)
|
|
07h (7) application program error
|
|
08h (8) not found
|
|
09h (9) bad format
|
|
0Ah (10) locked
|
|
0Bh (11) media error
|
|
0Ch (12) already exists / collision with existing item
|
|
0Dh (13) unknown / other
|
|
0Eh (14) (undoc) cannot
|
|
0Fh (15) (undoc) time
|
|
SeeAlso: #01680,#01683,#01684
|
|
|
|
(Table 01683)
|
|
Values for DOS Suggested Action:
|
|
01h retry
|
|
02h delayed retry (after pause)
|
|
03h prompt user to reenter input
|
|
04h abort after cleanup
|
|
05h immediate abort ("panic")
|
|
06h ignore
|
|
07h retry after user intervention
|
|
SeeAlso: #01680,#01682,#01684
|
|
|
|
(Table 01684)
|
|
Values for DOS Error Locus:
|
|
01h unknown or not appropriate
|
|
02h block device (disk error)
|
|
03h network related
|
|
04h serial device (timeout)
|
|
04h (PTS-DOS 6.51+ & S/DOS 1.0+) character device
|
|
05h memory related
|
|
SeeAlso: #01680,#01682,#01683
|
|
--------D-2159--BX0001-----------------------
|
|
INT 21 - European MS-DOS 4.0 - GET HARD ERROR INFORMATION
|
|
AH = 59h
|
|
BX = 0001h
|
|
Return: ES:DI -> hard error information packet (see #01685) for most recent
|
|
hard (critical) error
|
|
SeeAlso: AH=59h/BX=0000h,AH=95h,INT 24
|
|
|
|
Format of European MS-DOS 4.0 hard error information packet:
|
|
Offset Size Description (Table 01685)
|
|
00h WORD contents of AX at system entry
|
|
02h WORD Process ID which encountered error
|
|
04h WORD contents of AX at time of error
|
|
06h BYTE error type
|
|
00h physical I/O error
|
|
01h disk change request
|
|
02h file sharing violation
|
|
03h FCB problem
|
|
04h file locking violation
|
|
05h bad FAT
|
|
06h network detected error
|
|
07h BYTE INT 24 error code
|
|
08h WORD extended error code (see #01680)
|
|
0Ah DWORD pointer to associated device
|
|
--------D-215A-------------------------------
|
|
INT 21 - DOS 3.0+ - CREATE TEMPORARY FILE
|
|
AH = 5Ah
|
|
CX = file attribute (see #01420 at AX=4301h)
|
|
DS:DX -> ASCIZ path ending with a '\' + 13 zero bytes to receive the
|
|
generated filename
|
|
Return: CF clear if successful
|
|
AX = file handle opened for read/write in compatibility mode
|
|
DS:DX pathname extended with generated name for temporary file
|
|
CF set on error
|
|
AX = error code (03h,04h,05h) (see #01680)
|
|
Desc: creates a file with a unique name which must be explicitly deleted
|
|
Notes: under the FlashTek X-32 DOS extender, the path pointer is in DS:EDX
|
|
MS-DOS 3.0-4.0 and DR DOS 3.4-5.0 generate the filename as a sequence
|
|
of hex digits based on the current date and time; MS-DOS 6+,
|
|
DR DOS 6, and Novell DOS 7 use letters A-P in place of hex digits
|
|
MS-DOS 5.0 and DR DOS 3.41/5.0 will insert a missing trailing backslash
|
|
before appending the generated filename, but due to this, an empty
|
|
string results in a file in the root directory
|
|
BUGS: COMPAQ DOS 3.31 hangs if the pathname is at XXXXh:0000h; it apparently
|
|
wraps around to the end of the segment
|
|
MS-DOS 5.00 revisions A and B and PC-DOS 5.00 revision A reportedly
|
|
hang the system if the specified path is the root directory and the
|
|
root directory is full (no free directory entries)
|
|
Mark Incley <mincley@krisalis.demon.co.uk> reports that this function
|
|
hangs in MS-DOS 6.2x if the name includes two consecutive path
|
|
separators (e.g. C:\\ )
|
|
SeeAlso: AH=3Ch,AH=5Bh
|
|
--------D-215B-------------------------------
|
|
INT 21 - DOS 3.0+ - CREATE NEW FILE
|
|
AH = 5Bh
|
|
CX = file attribute (see #01420 at AX=4301h)
|
|
DS:DX -> ASCIZ filename
|
|
Return: CF clear if successful
|
|
AX = file handle opened for read/write in compatibility mode
|
|
CF set on error
|
|
AX = error code (03h,04h,05h,50h) (see #01680)
|
|
Notes: unlike AH=3Ch, this function will fail if the specified file exists
|
|
rather than truncating it; this permits its use in creating semaphore
|
|
files because it is an atomic "test and set" operation
|
|
under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
|
|
SeeAlso: AH=3Ch,AH=5Ah
|
|
--------D-215C-------------------------------
|
|
INT 21 - DOS 3.0+ - "FLOCK" - RECORD LOCKING
|
|
AH = 5Ch
|
|
AL = subfunction
|
|
00h lock region of file
|
|
01h unlock region of file
|
|
BX = file handle
|
|
CX:DX = start offset of region within file
|
|
SI:DI = length of region in bytes
|
|
Return: CF clear if successful
|
|
CF set on error
|
|
AX = error code (01h,06h,21h,24h) (see #01680)
|
|
Notes: error returned unless SHARE or network installed
|
|
an unlock call must specify the same region as some prior lock call
|
|
locked regions become entirely inaccessible to other processes
|
|
duplicate handles created with AH=45h or AH=46h inherit locks, but
|
|
handles inherited by child processes (see AH=4Bh) do not
|
|
under DR DOS 3.41 and 5.0, if a process opens a file without the no-
|
|
inherit flag and then starts a child, any locks set by the parent
|
|
are ignored, and the child will only get an error if it tries to
|
|
lock an area previously locked by the parent process. Under Novell
|
|
DOS 7, this function is fully supported as in MS-DOS.
|
|
SeeAlso: AX=440Bh,AH=BCh,AH=BEh,INT 2F/AX=110Ah,INT 2F/AX=110Bh
|
|
--------D-215D00-----------------------------
|
|
INT 21 U - DOS 3.1+ internal - SERVER FUNCTION CALL
|
|
AX = 5D00h
|
|
DS:DX -> DOS parameter list (see #01686)
|
|
DPL contains all register values for a call to INT 21h
|
|
Return: as appropriate for function being called
|
|
Notes: does not check AH. Out of range values will crash the system
|
|
executes using specified computer ID and process ID
|
|
sharing delay loops skipped
|
|
a special sharing mode is enabled to handle FCBs opened across network
|
|
wildcards are enabled for DELETE (AH=41h) and RENAME (AH=56h) under
|
|
MS-DOS; under DR DOS 3.41, wildcards corrupt the filesystem; and
|
|
under DR DOS 5.0-6.0, the call returns error code 03h due to improper
|
|
support for the server function call (refer to BUGS: section below)
|
|
an extra file attribute parameter is enabled for OPEN (AH=3Dh),
|
|
DELETE (AH=41h), and RENAME (AH=56h)
|
|
functions which take filenames require canonical names (as returned
|
|
by AH=60h); this is apparently to prevent multi-hop file forwarding
|
|
BUGS: the OS/2 2.0 DOS Boot Session incorrectly maps DOS drive letters,
|
|
seemingly ignoring HPFS drives
|
|
DR DOS 5.0-6.0 merely recursively call INT 21 after loading the
|
|
registers from the DPL, leading to problems for peer-to-peer
|
|
networks
|
|
SeeAlso: AH=3Dh,AH=41h,AH=56h,AH=60h
|
|
|
|
Format of DOS parameter list:
|
|
Offset Size Description (Table 01686)
|
|
00h WORD AX
|
|
02h WORD BX
|
|
04h WORD CX
|
|
06h WORD DX
|
|
08h WORD SI
|
|
0Ah WORD DI
|
|
0Ch WORD DS
|
|
0Eh WORD ES
|
|
10h WORD reserved (0)
|
|
12h WORD computer ID (0 = current system)
|
|
14h WORD process ID (PSP segment on specified computer)
|
|
Note: under Windows Enhanced mode, the computer ID is normally the virtual
|
|
machine ID (see INT 2F/AX=1683h), though this can reportedly be
|
|
changed by setting UniqueDOSPSP= in SYSTEM.INI
|
|
--------D-215D01-----------------------------
|
|
INT 21 U - DOS 3.1+ internal - COMMIT ALL FILES FOR SPECIFIED COMPUTER/PROCESS
|
|
AX = 5D01h
|
|
DS:DX -> DOS parameter list (see #01686), only computer ID and
|
|
process ID fields used
|
|
Return: CF set on error
|
|
AX = error code (see #01680)
|
|
CF clear if successful
|
|
Notes: flushes buffers and updates directory entries for each file which has
|
|
been written to; if remote file, calls INT 2F/AX=1107h
|
|
the computer ID and process ID are stored but ignored under DOS 3.3
|
|
not supported by DR DOS 3.41 and 5.0; returns error code 01h. Fully
|
|
supported by Novell DOS 7
|
|
SeeAlso: AH=0Dh,AH=68h,INT 2F/AX=1107h
|
|
--------D-215D02-----------------------------
|
|
INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE FILE BY NAME
|
|
AX = 5D02h
|
|
DS:DX -> DOS parameter list (see #01686), only fields DX, DS,
|
|
computer ID, and process ID used
|
|
DPL's DS:DX -> ASCIZ name of file to close
|
|
Return: CF set on error
|
|
AX = error code (see #01680)
|
|
CF clear if successful
|
|
Notes: error unless SHARE is loaded (calls [SysFileTable-28h])
|
|
(see #01636 at AH=52h)
|
|
name must be canonical fully-qualified, such as returned by AH=60h
|
|
not supported by DR DOS 3.41 and 5.0; returns error code 01h
|
|
not supported by Novell DOS 7, although in Update 15 it is reported
|
|
to no longer return an error code
|
|
SeeAlso: AX=5D03h,AX=5D04h,AH=3Eh,AH=60h
|
|
--------D-215D03-----------------------------
|
|
INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN COMPUTER
|
|
AX = 5D03h
|
|
DS:DX -> DOS parameter list (see #01686), only computer ID used
|
|
Return: CF set on error
|
|
AX = error code (see #01680)
|
|
CF clear if successful
|
|
Notes: error unless SHARE is loaded (calls [SysFileTable-30h])
|
|
(see #01636 at AH=52h)
|
|
not supported by DR DOS 3.41 and 5.0; returns error code 01h
|
|
not supported by Novell DOS 7 (at least through Update 4; may be
|
|
supported in Update 15)
|
|
SeeAlso: AX=5D02h,AX=5D04h
|
|
--------D-215D04-----------------------------
|
|
INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN PROCESS
|
|
AX = 5D04h
|
|
DS:DX -> DOS parameter list (see #01686), only computer ID and
|
|
process ID fields used
|
|
Return: CF set on error
|
|
AX = error code (see #01680)
|
|
CF clear if successful
|
|
Notes: error unless SHARE is loaded (calls [SysFileTable-2Ch])
|
|
(see #01636 at AH=52h)
|
|
not supported by DR DOS 3.41 and 5.0; returns error code 01h
|
|
not supported by Novell DOS 7
|
|
SeeAlso: AX=5D02h,AX=5D03h,INT 2F/AX=111Dh
|
|
--------D-215D05-----------------------------
|
|
INT 21 U - DOS 3.1+ internal - SHARE.EXE - GET OPEN FILE LIST ENTRY
|
|
AX = 5D05h
|
|
DS:DX -> DOS parameter list (see #01686)
|
|
DPL's BX = index of sharing record (see #01637 at AH=52h)
|
|
DPL's CX = index of SFT in sharing record's SFT list
|
|
Return: CF clear if successful
|
|
ES:DI -> ASCIZ filename
|
|
BX = network machine number of SFT's owner
|
|
CX = number of locks held by SFT's owner
|
|
CF set if either index out of range
|
|
AX = 0012h (no more files)
|
|
Notes: error unless SHARE is loaded (calls [SysFileTable-18h])
|
|
(see #01636 at AH=52h)
|
|
names are always canonical fully-qualified, such as returned by AH=60h
|
|
not supported by DR DOS 3.41 and 5.0 and Novell DOS 7, but does not
|
|
return an error, instead destroying AX
|
|
SeeAlso: AH=5Ch,AH=60h
|
|
--------D-215D06-----------------------------
|
|
INT 21 U - DOS 3.0+ internal - GET ADDRESS OF DOS SWAPPABLE DATA AREA
|
|
AX = 5D06h
|
|
Return: CF set on error
|
|
AX = error code (see #01680)
|
|
CF clear if successful
|
|
DS:SI -> nonreentrant data area (includes all three DOS stacks)
|
|
(critical error flag is first byte) (see #01687)
|
|
CX = size in bytes of area which must be swapped while in DOS
|
|
DX = size in bytes of area which must always be swapped
|
|
Notes: the Critical Error flag is used in conjunction with the InDOS flag
|
|
(see AH=34h) to determine when it is safe to enter DOS from a TSR
|
|
setting CritErr flag allows use of functions 50h/51h from INT 28h under
|
|
DOS 2.x by forcing use of correct stack
|
|
swapping the data area allows reentering DOS unless DOS is in a
|
|
critical section delimited by INT 2A/AH=80h and INT 2A/AH=81h,82h
|
|
under DOS 4.0, AX=5D0Bh should be used instead of this function
|
|
SHARE and other DOS utilities consult the byte at offset 04h in the
|
|
DOS data segment (see INT 2F/AX=1203h) to determine the SDA format
|
|
in use: 00h = DOS 3.x, 01h = DOS 4.0-6.0, other = error.
|
|
DR DOS 3.41+ supports this function, but the SDA format beyond the
|
|
first 18h bytes is completely different from MS-DOS
|
|
BUG: calling this function with certain values in DX crashes Novell DOS 7.0
|
|
prior to Update 14
|
|
SeeAlso: AX=5D0Bh,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h
|
|
|
|
Format of DOS 3.10-3.30 Swappable Data Area:
|
|
Offset Size Description (Table 01687)
|
|
-34 BYTE (DOS 3.10+) printer echo flag (00h off, FFh active)
|
|
-31 BYTE (DOS 3.30) current switch character
|
|
-30 BYTE current memory allocation strategy (see AH=58h)
|
|
-28 BYTE (DOS 3.30) incremented on each INT 21/AX=5E01h call
|
|
-27 16 BYTEs (DOS 3.30) machine name set by INT 21/AX=5E01h
|
|
-11 5 WORDs zero-terminated list of offsets which need to be patched to
|
|
enable critical-section calls (see INT 2A/AH=80h)
|
|
-1 BYTE unused padding
|
|
---start of actual SDA---
|
|
00h BYTE critical error flag ("ErrorMode")
|
|
01h BYTE InDOS flag (count of active INT 21 calls)
|
|
02h BYTE drive on which current critical error occurred, or FFh
|
|
(DR DOS sets to drive number during INT 24, 00h otherwise)
|
|
03h BYTE locus of last error
|
|
04h WORD extended error code of last error
|
|
06h BYTE suggested action for last error
|
|
07h BYTE class of last error
|
|
08h DWORD ES:DI pointer for last error
|
|
0Ch DWORD current DTA (Disk Transfer Address)
|
|
note: may point into SDA during the DOS EXEC function
|
|
(see AH=4Bh), so programs which swap the SDA must be
|
|
prepared to move the DTA to a private buffer if they
|
|
might be invoked during an EXEC
|
|
10h WORD current PSP
|
|
12h WORD stores SP across an INT 23
|
|
14h WORD return code from last process termination (zerod after reading
|
|
with AH=4Dh)
|
|
16h BYTE current drive
|
|
17h BYTE extended break flag
|
|
---remainder need only be swapped if in DOS---
|
|
18h WORD value of AX on call to INT 21
|
|
1Ah WORD PSP segment for sharing/network
|
|
1Ch WORD network machine number for sharing/network (0000h = us)
|
|
1Eh WORD first usable memory block found when allocating memory
|
|
20h WORD best usable memory block found when allocating memory
|
|
22h WORD last usable memory block found when allocating memory
|
|
24h WORD memory size in paragraphs (used only during initialization)
|
|
26h WORD last entry checked during directory search
|
|
28h BYTE flag: INT 24 returned Fail
|
|
29h BYTE flags: allowable INT 24 actions (passed to INT 24 in AH)
|
|
2Ah BYTE directory flag (00h directory, 01h file)
|
|
2Bh BYTE flag: FFh if Ctrl-Break termination, 00h otherwise
|
|
2Ch BYTE flag: allow embedded blanks in FCB
|
|
2Dh BYTE padding (unused)
|
|
2Eh BYTE day of month
|
|
2Fh BYTE month
|
|
30h WORD year - 1980
|
|
32h WORD number of days since 01jan1980
|
|
34h BYTE day of week (0 = Sunday)
|
|
35h BYTE flag: console swapped during read from device
|
|
36h BYTE flag: safe to call INT 28 if nonzero
|
|
37h BYTE flag: if nonzero, INT 24 Abort turned into INT 24 Fail
|
|
(set only during process termination)
|
|
38h 26 BYTEs device driver request header (see #02597 at INT 2F/AX=0802h)
|
|
52h DWORD pointer to device driver entry point (used in calling driver)
|
|
56h 22 BYTEs device driver request header for I/O calls
|
|
6Ch 14 BYTEs device driver request header for disk status check
|
|
7Ah DWORD pointer to device I/O buffer???
|
|
7Eh WORD ???
|
|
80h WORD ???
|
|
82h BYTE type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
|
|
83h BYTE padding (unused)
|
|
84h 3 BYTEs 24-bit user number (see AH=30h)
|
|
87h BYTE OEM number (see #01394 at AH=30h)
|
|
88h WORD offset to error code conversion table for INT 25/INT 26
|
|
8Ah 6 BYTEs CLOCK$ transfer record (see #01688)
|
|
90h BYTE device I/O buffer for single-byte I/O functions
|
|
91h BYTE padding??? (unused)
|
|
92h 128 BYTEs buffer for filename
|
|
112h 128 BYTEs buffer for filename
|
|
192h 21 BYTEs findfirst/findnext search data block (see #01626 at AH=4Eh)
|
|
1A7h 32 BYTEs directory entry for found file (see #01352 at AH=11h)
|
|
1C7h 81 BYTEs copy of current directory structure for drive being accessed
|
|
218h 11 BYTEs FCB-format filename for device name comparison
|
|
223h BYTE terminating NUL for above filename
|
|
224h 11 BYTEs wildcard destination specification for rename (FCB format)
|
|
22Fh BYTE terminating NUL for above spec
|
|
230h BYTE ???
|
|
231h WORD destination file/directory starting sector
|
|
233h 5 BYTEs ???
|
|
238h BYTE extended FCB file attribute
|
|
239h BYTE type of FCB (00h regular, FFh extended)
|
|
23Ah BYTE directory search attributes
|
|
23Bh BYTE file open/access mode
|
|
23Ch BYTE file found/delete flag
|
|
bit 0: file found
|
|
bit 4: file deleted
|
|
23Dh BYTE flag: device name found on rename, or file not found
|
|
23Eh BYTE splice flag (file name and directory name together)
|
|
23Fh BYTE flag indicating how DOS function was invoked
|
|
(00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
|
|
240h BYTE sector position within cluster
|
|
241h BYTE flag: translate sector/cluster (00h no, 01h yes)
|
|
242h BYTE flag: 00h if read, 01h if write
|
|
243h BYTE current working drive number
|
|
244h BYTE cluster factor
|
|
245h BYTE flag: cluster split mode
|
|
246h BYTE line edit (AH=0Ah) insert mode flag (nonzero = on)
|
|
247h BYTE canonicalized filename referred to existing file/dir if FFh
|
|
248h BYTE volume ID flag
|
|
249h BYTE type of process termination (00h-03h) (see AH=4Dh)
|
|
24Ah BYTE file create flag (00h = no, search only)
|
|
24Bh BYTE value with which to replace first byte of deleted file's name
|
|
(normally E5h, but 00h as described under INT 21/AH=13h)
|
|
24Ch DWORD pointer to Drive Parameter Block for critical error invocation
|
|
temp: used during process termination
|
|
250h DWORD pointer to stack frame containing user registers on INT 21
|
|
254h WORD stores SP across INT 24
|
|
256h DWORD pointer to DOS Drive Parameter Block for ???
|
|
25Ah WORD saving partial cluster number
|
|
25Ch WORD temp: sector of work current cluster
|
|
25Eh WORD high part of cluster number (only low byte referenced)
|
|
260h WORD ??? temp
|
|
262h BYTE Media ID byte returned by AH=1Bh,1Ch
|
|
263h BYTE padding (unused)
|
|
264h DWORD pointer to device header when filename is character device
|
|
268h DWORD pointer to current SFT
|
|
26Ch DWORD pointer to current directory structure for drive being accessed
|
|
270h DWORD pointer to caller's FCB
|
|
274h WORD number of SFT to which file being opened will refer
|
|
276h WORD temporary storage for file handle
|
|
278h DWORD pointer to a JFT entry in process handle table
|
|
(see #01378 at AH=26h)
|
|
27Ch WORD offset in DOS DS of first filename argument
|
|
27Eh WORD offset in DOS DS of second filename argument
|
|
280h WORD offset of last component in pathname or FFFFh
|
|
282h WORD offset of transfer address to add
|
|
284h WORD last relative cluster within file being accessed
|
|
286h WORD temp: absolute cluster number being accessed
|
|
288h WORD directory sector number
|
|
28Ah WORD ??? current cluster number
|
|
28Ch WORD current relative sector number within file
|
|
28Eh WORD current sector number
|
|
290h WORD current byte offset within sector
|
|
292h DWORD current offset in file
|
|
296h DWORD temp: file byte count
|
|
29Ah WORD temp: file byte count
|
|
29Ch WORD free file cluster entry
|
|
29Eh WORD last file cluster entry
|
|
2A0h WORD next file cluster number
|
|
2A2h DWORD number of bytes appended to file
|
|
2A6h DWORD pointer to current work disk buffer
|
|
2AAh DWORD pointer to working SFT
|
|
2AEh WORD used by INT 21 dispatcher to store caller's BX
|
|
2B0h WORD used by INT 21 dispatcher to store caller's DS
|
|
2B2h WORD temporary storage while saving/restoring caller's registers
|
|
2B4h DWORD pointer to prev call frame (offset 250h) if INT 21 reentered
|
|
also switched to for duration of INT 24
|
|
2B8h 21 BYTEs FindFirst search data for source file(s) of a rename operation
|
|
(see #01626 at AH=4Eh)
|
|
2CDh 32 BYTEs directory entry for file being renamed (see #01352 at AH=11h)
|
|
2EDh 331 BYTEs critical error stack
|
|
403h 35 BYTEs scratch SFT
|
|
438h 384 BYTEs disk stack (functions greater than 0Ch, INT 25,INT 26)
|
|
5B8h 384 BYTEs character I/O stack (functions 01h through 0Ch)
|
|
---DOS 3.2,3.3x only---
|
|
738h BYTE device driver lookahead flag (usually printer)
|
|
(see AH=64h"DOS 3.2+")
|
|
739h BYTE volume change flag
|
|
73Ah BYTE flag: virtual open
|
|
73Bh BYTE ???
|
|
Note: the only fields which remain valid BETWEEN calls to INT 21h are those
|
|
in the initial "swap-always" portion of the SDA
|
|
SeeAlso: #01690
|
|
|
|
Format of CLOCK$ transfer record:
|
|
Offset Size Description (Table 01688)
|
|
00h WORD number of days since 1-Jan-1980
|
|
02h BYTE minutes
|
|
03h BYTE hours
|
|
04h BYTE hundredths of second
|
|
05h BYTE seconds
|
|
--------D-215D07-----------------------------
|
|
INT 21 U - DOS 3.1+ network - GET REDIRECTED PRINTER MODE
|
|
AX = 5D07h
|
|
Return: DL = mode
|
|
00h redirected output is combined
|
|
01h redirected output in separate print jobs
|
|
Note: MS-DOS and DR DOS 3.41/5.0 simply push AX on the stack and call
|
|
INT 2F/AX=1125h
|
|
SeeAlso: AX=5D08h,AX=5D09h,INT 2F/AX=1125h
|
|
--------D-215D08-----------------------------
|
|
INT 21 U - DOS 3.1+ network - SET REDIRECTED PRINTER MODE
|
|
AX = 5D08h
|
|
DL = mode
|
|
00h redirected output is combined
|
|
01h redirected output placed in separate jobs, start new print job
|
|
now
|
|
Return: nothing
|
|
Note: MS-DOS and DR DOS 3.41/5.0 simply push AX on the stack and call
|
|
INT 2F/AX=1125h
|
|
SeeAlso: AX=5D07h,AX=5D09h,INT 2F/AX=1125h
|
|
--------D-215D09-----------------------------
|
|
INT 21 U - DOS 3.1+ network - FLUSH REDIRECTED PRINTER OUTPUT
|
|
AX = 5D09h
|
|
Return: nothing
|
|
Desc: forces redirected printer output to be printed, and starts a new print
|
|
job
|
|
Notes: MS-DOS and DR DOS 3.41/5.0 simply push AX on the stack and call
|
|
INT 2F/AX=1125h
|
|
this function is also supported by 10Net, which calls it Terminate All
|
|
Spool Jobs, and does not flush if in "combine" mode
|
|
SeeAlso: AX=5D07h,AX=5D08h,INT 2F/AX=1125h
|
|
--------D-215D0A-----------------------------
|
|
INT 21 - DOS 3.1+ - SET EXTENDED ERROR INFORMATION
|
|
AX = 5D0Ah
|
|
DS:DX -> 11-word DOS parameter list (see #01686)
|
|
Return: nothing. next call to AH=59h will return values from fields AX,BX,CX,
|
|
DX,DI, and ES in corresponding registers
|
|
Notes: documented for DOS 5+, but undocumented in earlier versions
|
|
the MS-DOS Programmer's Reference incorrectly states that this call was
|
|
introduced in DOS 4, and fails to mention that the ERROR structure
|
|
passed to this function is a DOS parameter list.
|
|
BUGS: DR DOS 3.41 and 5.0 read the value for ES from the DS field of the
|
|
DPL; fortunately, MS-DOS ignores the DS field, allowing a generic
|
|
routine which sets both DS and ES fields to the same value
|
|
Novell DOS 7 (through at least Update 4) does not save the pointer,
|
|
which is always reported as 0000h:0000h by AH=59h; Update 15 fully
|
|
supports this function
|
|
SeeAlso: AH=59h/BX=0000h
|
|
--------D-215D0B-----------------------------
|
|
INT 21 OU - DOS 4.x only - internal - GET DOS SWAPPABLE DATA AREAS
|
|
AX = 5D0Bh
|
|
Return: CF set on error
|
|
AX = error code (see #01680)
|
|
CF clear if successful
|
|
DS:SI -> swappable data area list (see #01689)
|
|
Notes: copying and restoring the swappable data areas allows DOS to be
|
|
reentered unless it is in a critical section delimited by calls to
|
|
INT 2A/AH=80h and INT 2A/AH=81h,82h
|
|
SHARE and other DOS utilities consult the byte at offset 04h in the
|
|
DOS data segment (see INT 2F/AX=1203h) to determine the SDA format
|
|
in use: 00h = DOS 3.x, 01h = DOS 4.0-6.0, other = error.
|
|
DOS 5+ use the SDA format listed below, but revert back to the DOS 3.x
|
|
call for finding the SDA (see #01687); Novell DOS 7 does not support
|
|
this function, either.
|
|
SeeAlso: AX=5D06h,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h,INT 2F/AX=1203h
|
|
|
|
Format of DOS 4.x swappable data area list:
|
|
Offset Size Description (Table 01689)
|
|
00h WORD count of data areas
|
|
02h N BYTEs "count" copies of data area record
|
|
Offset Size Description
|
|
00h DWORD address
|
|
04h WORD length and type
|
|
bit 15 set if swap always, clear if swap in DOS
|
|
bits 14-0: length in bytes
|
|
SeeAlso: #01690
|
|
|
|
Format of DOS 4.0-6.0 swappable data area:
|
|
Offset Size Description (Table 01690)
|
|
-34 BYTE printer echo flag (00h off, FFh active)
|
|
-31 BYTE current switch character (ignored by DOS 5+)
|
|
-30 BYTE current memory allocation strategy (see AH=58h)
|
|
-28 BYTE incremented on each INT 21/AX=5E01h call
|
|
-27 16 BYTEs machine name set by INT 21/AX=5E01h
|
|
-11 5 WORDs zero-terminated list of offsets which need to be patched to
|
|
enable critical-section calls (see INT 2A/AH=80h)
|
|
(all offsets are 0D0Ch, but this list is still present for
|
|
DOS 3.x compatibility)
|
|
-1 BYTE unused padding
|
|
Note: the above data is not actually part of the SDA, and is much more likely
|
|
to change between DOS versions/OEMs than data in the SDA itself
|
|
---start of actual SDA---
|
|
00h BYTE critical error flag ("ErrorMode")
|
|
01h BYTE InDOS flag (count of active INT 21 calls)
|
|
02h BYTE drive on which current critical error occurred or FFh
|
|
(DR DOS 3.41/5.0 set this to 00h when no critical error)
|
|
03h BYTE locus of last error
|
|
04h WORD extended error code of last error
|
|
06h BYTE suggested action for last error
|
|
07h BYTE class of last error
|
|
08h DWORD ES:DI pointer for last error
|
|
0Ch DWORD current DTA (Disk Transfer Address)
|
|
note: may point into SDA during the DOS EXEC function
|
|
(see AH=4Bh), so programs which swap the SDA must be
|
|
prepared to move the DTA to a private buffer if they
|
|
might be invoked during an EXEC
|
|
10h WORD current PSP
|
|
12h WORD stores SP across an INT 23
|
|
14h WORD return code from last process termination (zerod after reading
|
|
with AH=4Dh)
|
|
16h BYTE current drive
|
|
17h BYTE extended break flag
|
|
18h BYTE flag: code page switching
|
|
19h BYTE flag: copy of previous byte in case of INT 24 Abort
|
|
---remainder need only be swapped if in DOS---
|
|
1Ah WORD value of AX on call to INT 21
|
|
Note: does not contain correct value on functions 00h-0Ch,
|
|
50h, 51h, 59h, or 62h
|
|
1Ch WORD PSP segment for sharing/network (0000h = local)
|
|
1Eh WORD network machine number for sharing/network (0000h = local)
|
|
20h WORD first usable memory block found when allocating memory
|
|
22h WORD best usable memory block found when allocating memory
|
|
24h WORD last usable memory block found when allocating memory
|
|
26h WORD memory size in paragraphs (used only during initialization)
|
|
28h WORD last entry checked during directory search
|
|
2Ah BYTE flag: nonzero if INT 24 Fail
|
|
2Bh BYTE flags: allowable INT 24 responses (passed to INT 24 in AH)
|
|
2Ch BYTE flag: do not set directory if nonzero
|
|
2Dh BYTE flag: program aborted by ^C
|
|
2Eh BYTE flag: allow embedded blanks in FCB
|
|
may also allow use of "*" wildcard in FCBs
|
|
2Fh BYTE padding (unused)
|
|
30h BYTE day of month
|
|
31h BYTE month
|
|
32h WORD year - 1980
|
|
34h WORD number of days since 01jan1980
|
|
36h BYTE day of week (0 = Sunday)
|
|
37h BYTE flag: console swapped during read from device
|
|
38h BYTE flag: safe to call INT 28 if nonzero
|
|
39h BYTE flag: abort currently in progress, turn INT 24 Abort into Fail
|
|
3Ah 30 BYTEs device driver request header (see #02597 at INT 2F/AX=0802h) for
|
|
device calls
|
|
58h DWORD pointer to device driver entry point (used in calling driver)
|
|
5Ch 22 BYTEs device driver request header for I/O calls
|
|
72h 14 BYTEs device driver request header for disk status check (also
|
|
includes following eight bytes for some calls)
|
|
80h DWORD pointer to device I/O buffer
|
|
84h WORD part of request header at 72h
|
|
86h WORD part of request header at 72h (0)
|
|
88h BYTE type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
|
|
89h DWORD start offset of file region to lock/unlock
|
|
8Dh DWORD length of file region to lock/unlock
|
|
91h BYTE padding (unused)
|
|
92h 3 BYTEs 24-bit user number (see AH=30h)
|
|
95h BYTE OEM number (see #01394 at AH=30h)
|
|
96h 6 BYTEs CLOCK$ transfer record (see #01688 at AX=5D06h)
|
|
9Ch BYTE device I/O buffer for single-byte I/O functions
|
|
9Dh BYTE padding
|
|
9Eh 128 BYTEs buffer for filename
|
|
11Eh 128 BYTEs buffer for filename (rename destination name)
|
|
19Eh 21 BYTEs findfirst/findnext search data block (see #01626 at AH=4Eh)
|
|
1B3h 32 BYTEs directory entry for found file (see #01394 at AH=11h)
|
|
1D3h 88 BYTEs copy of current directory structure for drive being accessed
|
|
22Bh 11 BYTEs FCB-format filename for device name comparison
|
|
236h BYTE terminating NUL for above filename
|
|
237h 11 BYTEs wildcard destination specification for rename (FCB format)
|
|
242h BYTE terminating NUL for above filespec
|
|
243h BYTE padding???
|
|
244h WORD destination starting sector (cluster???)
|
|
246h 5 BYTEs extra space to allow a directory entry to be stored starting
|
|
at offset 22Bh
|
|
24Bh BYTE extended FCB file attributes
|
|
24Ch BYTE type of FCB (00h regular, FFh extended)
|
|
24Dh BYTE directory search attributes
|
|
24Eh BYTE file open/access mode
|
|
24Fh BYTE flag: nonzero if file was deleted
|
|
250h BYTE flag: device name found on rename, or file not found
|
|
251h BYTE flag: splice file name and directory name together
|
|
252h BYTE flag indicating how DOS function was invoked
|
|
(00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
|
|
253h BYTE sector position within cluster
|
|
254h BYTE flag: translating sector/cluster
|
|
255h BYTE flag: 00h if read, 01h if write
|
|
256h BYTE current working drive number
|
|
257h BYTE cluster factor
|
|
258h BYTE "sda_CLUSSPLIT" flag: cluster split between two FAT sectors
|
|
259h BYTE line edit (AH=0Ah) insert mode flag (nonzero = on)
|
|
25Ah BYTE canonicalized filename referred to existing file/dir if FFh
|
|
25Bh BYTE volume ID flag
|
|
25Ch BYTE type of process termination (00h-03h) (see AH=4Dh)
|
|
25Dh BYTE unused (padding for alignment)
|
|
25Eh BYTE file create flag (00h = no, search only)
|
|
25Fh BYTE value for deleted file's first byte: 00h to delete all, else E5
|
|
260h DWORD pointer to Drive Parameter Block for critical error invocation
|
|
264h DWORD pointer to stack frame containing user registers on INT 21
|
|
268h WORD stores SP across INT 24
|
|
26Ah DWORD pointer to DOS Drive Parameter Block for ???
|
|
26Eh WORD segment of disk buffer
|
|
270h DWORD saving partial cluster number
|
|
274h WORD "sda_PREREAD" 00h if preread, 01h if optional
|
|
276h WORD temporary used in allocating disk space
|
|
278h BYTE Media ID byte returned by AH=1Bh,1Ch
|
|
279h BYTE unused
|
|
27Ah DWORD pointer to device header if filename is character device
|
|
27Eh DWORD pointer to current SFT
|
|
282h DWORD pointer to current directory structure for drive being accessed
|
|
286h DWORD pointer to caller's FCB
|
|
28Ah WORD SFT index to which file being opened will refer
|
|
28Ch WORD temporary storage for file handle
|
|
28Eh DWORD pointer to JFT entry (for file being opened) in process handle
|
|
table (see #01378 at AH=26h)
|
|
292h WORD "sda_WFP_START" offset in DOS DS of first filename argument
|
|
294h WORD "sda_REN_WFP" offset in DOS DS of second filename argument
|
|
296h WORD offset of last component in pathname or FFFFh
|
|
298h WORD offset of transfer address to add
|
|
29Ah WORD last relative cluster within file being accessed
|
|
29Ch WORD temp: absolute cluster number being accessed
|
|
29Eh DWORD directory sector number
|
|
2A2h WORD directory cluster number
|
|
2A4h DWORD current relative sector number within file
|
|
2A8h DWORD current sector number (number of previously written sectors)
|
|
2ACh WORD current byte offset within sector
|
|
2AEh DWORD current offset in file
|
|
2B2h WORD number of bytes in first sector
|
|
2B4h WORD bytes in partial last sector
|
|
2B6h WORD number of whole sectors
|
|
2B8h WORD free file cluster entry
|
|
2BAh WORD last file cluster entry
|
|
2BCh WORD next file cluster number
|
|
2BEh DWORD number of bytes appended to file
|
|
2C2h DWORD pointer to current work disk buffer
|
|
2C6h DWORD pointer to working SFT
|
|
2CAh WORD used by INT 21 dispatcher to store caller's BX
|
|
2CCh WORD used by INT 21 dispatcher to store caller's DS
|
|
2CEh WORD temporary storage while saving/restoring caller's registers
|
|
2D0h DWORD pointer to prev call frame (offset 264h) if INT 21 reentered
|
|
also switched to for duration of INT 24
|
|
2D4h WORD open mode/action for INT 21/AX=6C00h
|
|
2D6h BYTE extended open conditional flag
|
|
set to 00h by INT 21h dispatcher, 02h when a read is
|
|
performed, and 01h or 03h by INT 21/AX=6C00h
|
|
2D7h WORD extended open I/O mode
|
|
2D9h DWORD stored ES:DI for AX=6C00h
|
|
2DDh WORD extended file open action code (see #01770 at AX=6C00h)
|
|
2DFh WORD extended file open attributes (see #01769 at AX=6C00h)
|
|
2E1h WORD extended file open file mode (see AX=6C00h)
|
|
2E3h DWORD pointer to filename to open (see AX=6C00h)
|
|
2E7h WORD high word of 32-bit sector number, or temp data buffer size
|
|
from disk buffer
|
|
2E9h WORD "sda_OffsetMagicPatch"
|
|
2EBh BYTE disk full on >32M partition when set to 01h
|
|
2ECh WORD stores DS during call to [List-of-Lists + 37h]
|
|
2EEh WORD temporary storage (various uses)
|
|
2F0h BYTE storage for drive error
|
|
2F1h WORD DOS 3.4 (European MS-DOS 4.00) bit flags
|
|
2F3h DWORD pointer to user-supplied filename
|
|
2F7h DWORD pointer to user-supplied rename destination filename
|
|
2FBh WORD stores SS during call to [List-of-Lists + 37h] and INT 25,26
|
|
2FDh WORD stores SP during call to [List-of-Lists + 37h] and INT 25,26
|
|
2FFh BYTE flag, nonzero if stack switched in calling [List-of-Lists+37h]
|
|
300h 21 BYTEs FindFirst search data for source file(s) of a rename operation
|
|
(see #01626 at AH=4Eh)
|
|
315h 32 BYTEs directory entry for file being renamed (see #01352 at AH=11h)
|
|
335h 331 BYTEs critical error stack
|
|
480h 384 BYTEs disk stack (functions greater than 0Ch, INT 25,INT 26)
|
|
600h 384 BYTEs character I/O stack (functions 01h through 0Ch)
|
|
780h BYTE device driver lookahead flag (usually printer)
|
|
(see AH=64h"DOS 3.2+")
|
|
781h BYTE volume change flag
|
|
782h BYTE flag: virtual file open
|
|
783h BYTE fastseek drive
|
|
784h WORD fastseek first cluster number
|
|
786h WORD fastseek logical cluster number
|
|
788h WORD fastseek returned logical cluster number
|
|
78Ah WORD temporary location of DOS@SYSINIT
|
|
---MSDOS 7.1+ (FAT32)---
|
|
78Ch 47 BYTEs ???
|
|
7BBh BYTE flag: absolute disk read/write type
|
|
00h = INT 25/INT 26
|
|
01h = INT 21/AX=7305h
|
|
7BCh WORD high word of directory cluster number at offset 2A2h
|
|
7BEh WORD high word of cluster number at offset 29Ch
|
|
7C0h WORD high word of next file cluster number at offset 2BCh
|
|
7C2h WORD high word of last relative cluster number at offset 29Ah
|
|
7C4h WORD high word of temp at offset 276h
|
|
7C6h WORD high word of offset 244h
|
|
7C8h WORD high word of EBX
|
|
7CAh WORD high word of EDX used by "PACK"
|
|
7CCh WORD high word of EDI used by "UNPACK"
|
|
7CEh WORD high word of EBX used by "SETDIRSRCH"
|
|
7D0h WORD high word of ECX used by "FREECLUSTER"
|
|
7D2h WORD high word of EDI used by "GETEOF"
|
|
7D4h 3 WORDs ???
|
|
Note: the only fields which remain valid BETWEEN calls to INT 21h are those
|
|
in the initial "swap-always" portion of the SDA
|
|
SeeAlso: #01687,#01689
|
|
--------!---Section--------------------------
|